Code Monkey home page Code Monkey logo

figma-low-code's Introduction

Figma-Low-Code

Figma-Low-Code is an OpenSource project, that allows to use Figma designs directly in VUE.js applications. The low code approach reduces drastically the hand-off time between designers and developers, reduces front-end code and ensures that the Figma design stays the single source of truth. Figma-Low-Code uses the Luisa framework.

Short introduction into FigmaLowCode

You can find the documentation here:

Luisa.cloud.

The plugin can be downloaded here:

Figma-Low-Code plugin

I have created to short tutorials in YouTube:

Video - Quick Tutorial

Video - Step by step guide

Example project scan be found here:

Figma Low Code ToDo Example

Figma File

Figma-Low-Code Design System Example

When to use

Figma-Low-Code is a great fit when you want to:

  1. Turn a Figma design into a VUE application.
  2. Extend a Figma prototype with business logic.
  3. Build and MVP and the design changes often.
  4. Ship fast and do not want to focus on HTML and CSS.

Idea

The core idea of the project is to render the visual design automatically and allow the development team to focus on business logic, without restricting the developers' freedom. Figma-Low-Code enables:

  1. Zero Code rendering of app designs, prototypes and design systems.
  2. Design changes do not require code changes
  3. Clear separation of UI and business logic
  4. Developers can focus on code
  5. Developers can use the tools and frameworks of their choice.
  6. Designers stick with their favorite tool
  7. Easy extension with custom callback functions
  8. Full support of VUE data binding.
  9. Extension with custom components
  10. Extension with custom CSS
  11. Rich library of stylable components.

Documentation (Old)

You can find the latest documentation at Luisa.cloud.

Two ways of using Figma-Low-Code

Figma-Low-Code provides two modes of operation.

  1. The first mode is the 'Full' low code mode. The Figma design is entirely rendered and wired to the business logic. The front-end developers will usually do little UI customization and focus on backend connectivity and business logic.
  2. The second mode is the so called 'Design System' mode, which turns a design system into Vue components. The developers can simply use these as any other VUE component within their projects.

Vue-Low-Code architecture

The full mode will result in a faster development experience, however developers have less control over the front end. The 'Design System' mode gives more control for the developers, while still easing the transition from design to code. Please note, that both approaches will maintain the design as the single source of truth. Design channges will be immediately visible in the application.

Plugin:

To use the advanced features such as data, method binding or input widgets, you must install the Figma-Low-Code plugin. The plugin has two main tab. The 'Low Code' tab allows you to set the basics, such as the element type, or the input and output data binding.

The Figma-Low-Code plugin

The 'Style' tab allows you to define, if the element should be fixed width or height. By default Figma Low Code will assume hat the widget is responsive. Also, you can define hover styles for the fill, stroke and text color. For input elements focus styles can also be defined.

The Figma-Low-Code plugin

You can find the plugin here

Development Guide

Table of contents

  1. Installation
  2. Full Mode
  3. Design System Mode
  4. Deployment
  5. Responsive Rendering
  6. Low Code Workflow
  7. Contact & Support

How to install Figma-Low-Code

The easiest way to use Figma-Low-Code is to clone this repository and install Node.js version 12 or higher.

git clone https://github.com/KlausSchaefers/figma-low-code.git

Navigate to the cloned repository

cd figma-low-code

Afterwards, load all dependecies with the following command

npm install

Finally start the server

npm run serve

Full Mode

In the full mode the component is used to render the entire front end. The first step is top register these components in Vue. The following section will use Quant-UX design as an example. Open the 'src/views/Home.vue' and enter your figma file id and the access code. You can get the access code in your Figma settings (Details). The file id is the second last url parameter

https://www.figma.com/file/<FigmaFileId>/...

Once you have entered the values, the Home.vue should look like:

<template>
  <div class="home">
    <Luisa :design="figmaConfig" v-model="viewModel"/>
  </div>
</template>

<script>
import Vue from "vue";
import Luisa from 'luisa-vue'
Vue.use(Luisa);

export default {
  name: 'Home',
  data: function () {
    return {
      figmaConfig: {
        figmaFile: '<The figme file id here>',
        figmaAccessKey: '<Your Figma access key ONLY for development>',
      },
      viewModel: {
      }
    }
  },
  components: {
  },
  methods: {
  }
}
</script>

Attention For large design the Figma API might give an error or be slow. It can help to limit the component to a certain page.

<template>
  <div class="home">
    <Luisa :design="figmaConfig" v-model="viewModel" page="Page 1"/>
  </div>
</template>

Input Elements

By default Figma-Low-Code renders all elements of the design as div, span and label elements. Often this is not enough, and you would like to allow the user to enter to. You can override the default rendering by specifying the desired element type, for instance text fields or password fields. To do so, you need to launch the Figma-Low-Code plugin and select an element. Once an element is selected, you can select from a list of widgets the desired element type.

Data Binding

Figma-Low-Code supports VUE data binding. You have to pass a v-model to the Figma component.

<Luisa :design="figmaFile" v-model="viewModel"/>

You can specify the databinding with the help of the Figma-Low-Code plugin:

  1. Launch the plugin
  2. Select the desired element.
  3. Select the 'Low Code Tab'
  4. Specify the name of the varibale, for instance 'user.name'.

During runtime, the low-code component will update the viewModel and add the values entered by the user, e.g.

    viewModel: {
        user: {
          name: "Klaus"
        }
    }

Method Binding

In the Figma-Low-Code plugin you can define javascript callbacks for the elements. You can specify the databinding with the help of the Figma-Low-Code plugin:

  1. Launch the plugin
  2. Select the desired element.
  3. Select the 'Low Code Tab'.
  4. Enter the name of the method taht should be called on the event (click or change are supported for now)

During run time, the figma component will look for a method with the given name in the parent component (in the example Home.vue). If the method exists, it will be called. The method will have the following signature:

myMethod (value, element, e) {
 ...
 return 'Screen2'
}

If a method return a String matching a screen name, the page will be loaded. In the example the screen with the name 'Screen2'.

Responsive Rendering

You can configure Figma-Low-Code to use different Figma pages for different screen resolutions. You can for instance define that the page 'A' is used of mobiles and 'B' is used for desktop and tablets. You can pass the mapping between pages and devices as part of the config object.

Check out this example

<template>
  <div class="home">
    <Luisa :design="figmaConfig" v-model="viewModel" :config="config"/>
  </div>
</template>

<script>
import Vue from "vue";
import Figma from "vue-low-code";
Vue.use(Figma);

export default {
  name: "Home",
  data: function () {
    return {
      figmaConfig: {
        figmaFile: "",
        figmaAccessKey: "",
      },
      viewModel: {
        /**
         * Add your view model here
         */
      },
      config: {
        /**
         * Configure the reponsive behavior here. The 'page'
         * property is the name of the Figma page.
         **/
        responsive: [
          { page: "A", types: ["desktop"] },
          { page: "B", types: ["tablet", "mobile"] },
        ],
        components: {
          /**
           * Register costum components here
           */
        },
      },
    };
  },
  components: {},
  methods: {
    /**
     * Place your methods here
     */
  },
};
</script>

Custom components

If the provided input elements are not enough, you can also hook in your own VUE components. To do so:

  1. Launch the plugin
  2. Select the desired element.
  3. Select the 'Element Type' tab
  4. Select Custom
  5. Enter the name of the component

Furthermore you will need to register the component with the Figma component.

<template>
  <div class="home">
    <Luisa :design="figmaConfig" v-model="viewModel" :config="config"/>
  </div>
</template>

<script>
import Vue from "vue";
import Luisa from 'luisa-vue'
import MyComponent from './MyComponent.vue';
Vue.use(Luisa);

export default {
  name: 'Home',
  data: function () {
    return {
      figmaConfig: {
        figmaFile: '<The figme file id here>',
        figmaAccessKey: '<Your Figma access key ONLY for development>',
      },
      viewModel: {
      },
      config: {
        components: {
          'MyComponent': MyComponent
        }
      }
    }
  },
  components: {
  },
  methods: {
  }
}
</script>

Hover and Focus effects

Often you want certain elements to have a hover effect. For instance, a button should change the background color if the mouse is hovering it. Also, it is useful to indicate if an input is focused by the user. To create these kind of effects, perform the following steps:

  1. Launch the plugin
  2. Select the desired element.
  3. Select the 'Style' tab
  4. Select a fill (stroke or text) color.

Please note that the colors must be defined upfront in the Figma file, for instance as a style.

Custom components and rendering

Sometimes you want to render a certain part of the UI by your self, or replace existing widgets with custom implementations. You can do this by passing a components array to the configuration. These components will be used at the specified screen location instead of the default Figma component. This approach allows you to fully manage certain parts of the UI. Data is passed as a value property and follows default VUE practices.

<Figma :app="app" :config="config"/>
...

<script>
import MyWidget from 'src/myWidget'

...

config = {
  components: [
    {
      cssSelector: ".ArtBoard .ElementName",
      type: "MyWidget",
      component: MyWidget
    }
  ]
}
</script>

You specify the widget to be replaced by the custom widget by a css selector. For instance if you want to replace the widget with the name "Custom" on the "StartScreen" artboard, use the ".StartScreen .Custom" selector.

Design System Mode

The Figma-Low-Code Design System process

The Design System mode allows to turn your design system into Vue components that can be used as normal components. The first step is to globally register the design system before any template is parsed. The easiest way is to register the design system in the main.jsfile:

import Vue from 'vue'
import App from './App.vue'
import './registerServiceWorker'
import router from './router'
import * as Luisa from 'luisa-vue'
import figmaDesign from './views/figma-design-system.json'

Vue.config.productionTip = false

/*
 * Make sure the design is registered before the App is mounted
 */
async function init () {
  // for live debuging use Luisa.createQUXDesignSystem(<quxSharekey>)
  await Luisa.createQUXDesignSystem(quxDesign)

  new Vue({
    router,
    render: h => h(App)
  }).$mount('#app')
}

init()

The Vue-Low-Code package provides a method for Figma (createFigmaDesignSystem). For Figma design systems, you use your API token and fileID, or you can download the Figma design using the download.js script

npm run download

Using the Figma-Low-Code Design System

Once the design system is registered, they can be used within any template in the application. Suppose there is primary button defined in the design system. This can be invoked be simple using a tag with the corresponding name. Please make sure that the design system names do not clash with standard HTML elements, or other components in your code base.

<PrimaryButton/>

For simple elements like boxes, rectangles or labels one can use the wrapped notion to replace the inner elements. An alternative is to use the label property

<PrimaryButton>Hello World</PrimaryButton>
<PrimaryButton label="Hello World"/>

For input elements, also the v-model element works. In addtion a placeholder and options element is supported

<PrimaryField v-model="user.name" placeholder="Enter a name"/>
<PrimaryDropDown v-model="user.job" :options="job" />
...
jobs = [
  {label: 'Developer', value:'deverloper'},
  {label: 'Designer', value:'designer'},
]

Data and Method Binding

Low Code Design Systems are not limited to simple components like buttons or text, but can also be compplex components like forms, dialogs and so on. Usually one has to use data and method binding (Details) in this situations to populate the elements with data. The relevant (child) elements have to be wired to the right data and the right actions have to be defined. For instance in a login dialog, the email field needs to be wired to the email variable and the password field to the password variable. The button needs to get a method binding for the login method. When the user clicks in the button, and 'login' event will be fired, which can be used using the standard '@' notation. Please note, that when a component consist out of more than one shapes, it is not possible infer where the label text should be shown. One has to specify a magic data binding ($label). The wiring of the login dialog would look like

A complex component with data and method binding

The code would be

<LoginDialog v-model="loginData" label="Enter your credentials" @login="myLoginMethod">

...
loginData = {
  email: '',
  password: ''
}

....

myLoginMethod () {
  // your code
}

Deployment

Working with the file and access key is great for testing and development, because changes in Figma are visible after a reload. However, for production you should NEVER use the access token, as it gives access to all your projects. You can download all files into the project by calling the download script.

node download.js <access_token> <figma_file_id>

The script will download the figma file and all images. You have to point the Figma Component now to the file, instead of the config object. Use an import statement to simply load the JSON.

...
<Figma :figma="figmaFile" v-model="viewModel"/>
...

<script>
import FigmaFile from './app.json'

export default {
  name: 'Home',
  data: function () {
    return {
      figmaFile: FigmaFile
      ...
    }
  },
...
</script>

Configure figma-low-code

You can configure certain parameters, e.g. the routing rules. To do so, pass a config object to the Figma component.

<Figma :figma="figmaFile":config="config"/>

The config object can have the following properties and hsould be defined in the data section of the home component.

    config: {
        loadFonts: false,
        css: {
          grid: true, // Use CSS grid to align objects. False will use CSS-Flex.
          justifyContentInWrapper: true // In justifz or left align content in wrapped elements
        },
        router: {
          key: 'id', // alternative routing parameter
          prefix: 'figma' // path prefix that will be used when rendering links
        }
    }

Youmight also want to import the fonts in you index.html. Figma-Low-Code will load them by default dynamically. If you want to prevent this, set the 'loadFonts' property to false

Workflow

Figma-Low-Code enables the following workflow to facilitate painless collaboration between designers and developers:

The Figma low code workflow

  1. The designer creates an initial design in Figma
  2. The developer adds data binding and method callbacks in Figma using the UX Figma-Low-Code plugin.
  3. The developer sets up a new project (Vue.js for now) and includes the Figma component
  4. The developer links to the Figma design and creates the required methods and fills them with business logic.
  5. The Figma component renders the design and invokes the callbacks in clicks.
  6. Changes in the design are transparent to the developer, he just reloads the design from Figma.
  7. For deployment the developer downlaods the figma file to freeze the design

The handoff problem

Designers and developers use different tools to build user interfaces. Once a designer has completed the interface design, he hands-off the design to the developer, usually in the form of an image and some specs. The developer has now to rebuild the entire design using the programming language of his choice. Although this process is proven, it is rather slow and not very efficient. In particular later changes in the design makes it hard to automize this work through code generation tools.

Contact-and-Support

If you want to reach out please use the Contact page or Discord

Credits

Figma-Low-Code is based on Luisa-Framework developed by Quant-UX.

figma-low-code's People

Contributors

atharvapatil avatar chriscalo avatar dependabot[bot] avatar klausschaefers avatar klausschaefersatwork avatar peteruithoven avatar skyeredwood avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

figma-low-code's Issues

TypeError: Cannot read properties of undefined (reading 'min')

Hello,

Ive created a simple figma file to test the responsivness from figma-low-code: https://www.figma.com/file/owrluppOzpQweDmLkkml8M/Responsive-Test

  1. created a page called: Desktop, as in your example video: https://www.youtube.com/watch?v=VIJiMAXUB-g
  2. added my access and file id to the Home.vue
  3. setup your plugin and checked Desktop and entered 1000 as minWidth
  4. downloaded the figma stuff
  5. open up local host and get the error in my console:

`vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in render: "TypeError: Cannot read properties of undefined (reading 'min')"

found in

---> Luisa`

What did I miss here?

Thanks!

Hope support Tailwind CSS

First ,really thank you build this tool, it's really fit my workflow.
More focusing design first , when I'm coding, coding faster.

And Hope support Tailwind CSS.

I've seen support custom css, but I don't know how to add tailwind css into "figma-low-code".

Thanks.

Add documentation how to setup for running vue project

Hey there!
I am super excited to use this plugin. However I am struggling a bit how to install the vue-low-code library right now. In the tutorial video you show us how to use it in a single vue component file. The problem is that I don't wanna do a Vue.use(Figma) in every component, right?

So can you describe how I can make the Figma object available throughout the whole Vue project the same as plugins like Vuetify work? I kinda expected to see the guide how to add it in the main.ts/js file of my Vue project but could not find any documentation explaining that.

If this is actually a trivial question please excuse me. I am using Vue.js for a couple of month now and still not have the full grasp of the ecosystem and configuration yet.

Text elements containing only numbers are always rendered top left

When I create a text element and have only numbers in it, it will be rendered in the top left corner. As soon as there is a character in the text it is rendered as expected.

String/Character

Figma
image
Vue.js Rendering
image

Number Only

Figma
image
Vue.js Rendering
image

Code:

<template>
  <Figma :figma="figmaConfig"></Figma>
</template>

<script>
export default {
  name: 'FigmaLowCodeTest',
  data: function () {
    return {
      figmaConfig: {
        figmaFile: '<fileId>',
        figmaAccessKey: '<key>'
      }
    }
  }
}
</script>

Custom component registration

Hi,
I'm trying to use a custom component inside my design called "imagecustom", which will render a img tag with dynamic src.
I followed all the steps to accomplish this task:
image
image
image

However, I must be missing something, as the plugin is not able to register and render the component. I'm getting this error:
image

Finally the component itself:

image

Can you give me any advice to fix this?

Kind regards,
Javier.

Absolute positioning is not working accordingly expectation

Hi there, I was testing the components that we need in our project!
But elements are not displaying properly.
All of the elements whose position is absolute in Figma are not able to show up properly in localhost

From Figma
Screenshot from 2022-11-29 14-18-50

/* Auto layout */

display: flex;
flex-direction: row;
align-items: flex-start;
padding: 0px 4px;
gap: 10px;

position: absolute;
width: 58px;
height: 12px;
left: 44px;
top: 638px;

/* Light/Background/Paper

Reflects the background.paper variable from the theme object
*/
background: #FFFFFF;

/* Inside auto layout */

flex: none;
order: 8;
flex-grow: 0;
z-index: 8;

From Localhost
localhost_8080_

api.figma -> rate limit exceeded

Hi there,

after following the install steps and running the server I get a blank screen in the browser. In the network traffic i see a lot of requests to api.figma.com with the result status=429 err="rate limit exceeded".

Is there something wrong with my installation?

Thanks and best Nils

Screen has fixed width

Hi Klaus,

I'm trying out the plugin which seems to be the most awesome thing ever.
Input fields and buttons work as expected, but the Scene is fixed size and shows up as fixed width / height and doesn't stretch the full browser viewport.
Is there any special setting in figma for this or anything i can do to make a screen show up as full width/height in browser and not the fixed scene size as set in figma ?
Are there any limitation of the plugin that we have to be aware of so that we can build the design accordingly ?

Thank you

Fix size of elements with auto-layout

When an element is styled with auto-layout in Figma, it’s width and height is not displayed correctly. That’s because the padding of the element will be added to the outer box.

To fix this, simply define the box-model correctly in the boilerplate’s app template /src/App.vue:

*, *::after, *::before {
    box-sizing: border-box;
}

Some issues reported

Hello! I am currently using the Figma Low Code plugin but I have encountered some blocking issues. I have read all the documentation and examples, but I can't find any work around.

  • Select or dropdown elements cannot be built, dropdown options are not saved, once I click outside the plugin box, each one of the options fields are reset (even the options field in Data Binding section)

  • Is there any chance to show content due to a conditional statement? For example: I want to show a table if there is content but if not, I must not show it. The smart container (toggle children) does not fit in this case, because it should not work as a clickable element.

  • Is it possible to associate pages to the Luisa component? The page property is not working

  • Borders cannot be specified, even if in Figma we put a border-right, the border will always be represented on all 4 sides

  • Is there a way to assign classes to an element, for example a selected element class?

  • For popups it is necessary to use the Figma Prototype, however it does not allow any action other than Navigate to. It would be nice if it allowed the open or close overlay action

  • Where do the colors that can be selected for the hover effect come from? Is there any way to change them?

Figma plugin does not work with certain Figma projects

I created a fresh new figma project with a fresh user. I installed Figma plugin and it worked like a charm.

However when installing the low code plugin on a already existing Figma project (just a month old) the plugin does not work.
I clicked on every element I could find to see if it only works for certain types. Unfortunately the popup never opened. I clicked Plugins > Figma-Low-Code. Nothing happens.

Any idea why this is happening?

How to setup Figma low code in a running vue project

Hey there!
I am super excited to use this plugin. However I am struggling a bit how to install the vue-low-code library right now. In the tutorial video you show us how to use it in a single vue component file. The problem is that I don't wanna do a Vue.use(Figma) in every component, right?

So can you describe how I can make the Figma object available throughout the whole Vue project the same as plugins like Vuetify work? I kinda expected to see the guide how to add it in the main.ts/js file of my Vue project but could not find any documentation explaining that.

If this is actually a trivial question please excuse me. I am using Vue.js for a couple of month now and still not have the full grasp of the ecosystem and configuration yet.

[Feature] Refer to component by ID instead whole file by ID

It should become possible to refer to a Figma component with the <Figma></Figma> Vue.js component.
For instance we have these three Figma components:

image

On each I should be able to use the component name (or a custom id via the figma-low-code plugin). I should then be able to refere to this component like this for example:

Example:

    <Figma :figma="figmaConfig" component="Btn-Single-Sign-On-Google"></Figma>

At the moment I can only refer to the WHOLE file. That is not sufficient since I want to reuse single components. One could now say that Figma components already handles the "reusability" and there is no need to bring this into Vue.js component.

However the idea is to work with that like this: Creating a component only refering to the Figma component not the whole Figma file...

ui/buttons/single-sign-on.vue

<template>
  <div>
    <Figma :figma="figmaConfig" component="Btn-Single-Sign-On-Google" v-model="viewModel"></Figma>
  </div>
</template>

<script>
export default {
  name: 'SingleSignOn',
  data: function () {
    return {
      figmaConfig: {
        figmaFile: '<file-id>',
        figmaAccessKey: '<access-key>'
      },
      viewModel: {
      }
    }
  }
}
</script>

... and the using the Custom component feature of the figma-low-code plugin to refer to this inside another component.

image

And this Button 1 Figma component I can then refer again in a Vue.js component like this:

ui/groups/login.vue

<template>
  <div>
    <Figma :figma="figmaConfig" component="Group-1" v-model="viewModel"></Figma>
  </div>
</template>

<script>
export default {
  name: 'Login',
  data: function () {
    return {
      figmaConfig: {
         figmaFile: '<file-id>',
         figmaAccessKey: '<access-key>'
      },
      viewModel: {
      }
    }
  }
}
</script>

Not supported widget type: Custom

when i use custom Element type in Figma desian use custom Element type in Figma desian,the brower give me a warning, Not supported widget type: Custom

Only component instances seem to be generated properly. Master Component is brought in as "background-image"

It looks like the master component is not generated as real html element but as a screenshot.

image

Component Instance HTML

<div class="qux-label qux-element qux-valign-top Ingumon_son_of_Albin_of_the_Boar_Warriors"><span class="qux-common-label">
    Ingumon son of Albin of the Boar Warriors 
  </span></div>

Master Component HTML

<div class="qux-vector qux-element settler-component"></div>

Master Component CSS

.Desktop_-_1 .settler-component {
    grid-column-start: 12;
    grid-column-end: 15;
    grid-row-start: 9;
    grid-row-end: 12;
    z-index: 19;
    height: 53px;
    width: 520px;
    background-image: url(https://s3-us-west-2.amazonaws.com/figma-alpha-api/img/dde2/eb04/ff998c0…);
}

Is there way how to deal with interactive things?

Hi! :)
I really interesting about figma low code. and I read this article (https://uxdesign.cc/figma-low-code-a-new-way-to-tackle-design-hand-offs-a72cb109a455?gi=e452f9c367d8). I was very agree that code generation fail in agile project if code generation couldn't keep the business code written before auto generated to solve this problem you guys proposed data-biding, method-binding in your figma-low-code plugin. so You said that this solution keep the pre-written business logic before generating.
But in this point, I feel little bit confused how to deal with interactive things. for example, lets have suppose we got the generated code from some button in figma. If I edit the button to react such an interactive animation when I push the button and again re-generates the button's code, could I still keep my interactive animation code?
I already saw the youtube 'Figma Low Code - Step by Step Tutorial' (https://www.youtube.com/watch?v=n8YvL_YvXRA). But I couldn't find how to deal with interactive animation stuff in this video.
thanks!

Vue-router 'history' mode not working

Hello, thanks for a great tool.
I am trying to use history mode of vue-router, but figma-low-code doesn't update accordingly, it still uses hash mode routing despite the change I made.

I was wondering if history mode is supported in figma-low-code? If so, how can I use it?

If not, this could be a possible feature request.

Thanks a lot.

open plugins error

------- Clearing and silencing console.log from Figma -------
figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:489 TypeError: cannot read property 'a' of undefined
at colorToString (PLUGIN_13_SOURCE:282)
at (PLUGIN_13_SOURCE:256)
at forEach (native)
at getColorFromNode (PLUGIN_13_SOURCE:257)
at getColorFromNode (PLUGIN_13_SOURCE:273)
at getColorFromNode (PLUGIN_13_SOURCE:273)
at getColorFromNode (PLUGIN_13_SOURCE:273)
at getColorFromNode (PLUGIN_13_SOURCE:273)
at getColorFromNode (PLUGIN_13_SOURCE:273)
at getAllColors (PLUGIN_13_SOURCE:239)
at getStyles (PLUGIN_13_SOURCE:226)
at ./src/code.ts (PLUGIN_13_SOURCE:160)
at call (native)
at webpack_require (PLUGIN_13_SOURCE:20)
at (PLUGIN_13_SOURCE:84)
at (PLUGIN_13_SOURCE:304)
at call (native)
at (PLUGIN_13_SOURCE:307)

evalCodeInternal @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:489
evalTopLevelCode @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:489
(anonymous) @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1021
setTimeout (async)
runResult @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1021
n.runPluginCodeInRuntime @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1021
async function (async)
n.runPluginCodeInRuntime @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1021
runPluginCodeInternal @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1022
(anonymous) @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1022
async function (async)
(anonymous) @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1022
runPluginCode @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1022
runInstalledPlugin @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1022
async function (async)
runInstalledPlugin @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1022
runPlugin @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1022
E @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1032
(anonymous) @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1032
B.onSelectItem @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:4239
(anonymous) @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:577
(anonymous) @ figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:574
(anonymous) @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
w @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
(anonymous) @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
T @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
P @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
S @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
N @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
Un @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
Dn @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
n.unstable_runWithPriority @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:29
sl @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
Do @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
(anonymous) @ vendor.8b173c656b125e1a481e433adeccb433.min.js.br:40
figma_app.5354c0d9ddbd1e2c47e72e6f99a2619f.min.js.br:1022 ------- Restoring console.log functionality in Figma --------

[Feature] Respect letter case text style

Currently the letter case text style setting has no effect in the Full Mode app. See following image where it is located:
image

The downloaded JSON does not contain anything similar as well.

"s10000": { "id": "s10000", "figmaId": "1:2", "pageName": "Page 1", "name": "H2 Text", "type": "Screen", "x": -264, "y": -228, "w": 37, "h": 14, "props": {}, "children": [], "style": { "fontFamily": "Roboto", "borderBottomWidth": 0, "borderTopWidth": 0, "borderLeftWidth": 0, "borderRightWidth": 0, "backgroundColor": "rgba(0, 0, 0, 1)", "fontSize": 12, "fontWeight": 400, "lineHeight": 1, "letterSpacing": 0, "textAlign": "left", "verticalAlign": "top" } }

Would it be possible to support these settings?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.