atri-labs / atrilabs-engine Goto Github PK
View Code? Open in Web Editor NEW๐งโโ๏ธ Open-source no-code & code web app builder
Home Page: https://atrilabs.com
License: GNU General Public License v3.0
๐งโโ๏ธ Open-source no-code & code web app builder
Home Page: https://atrilabs.com
License: GNU General Public License v3.0
Explanation
If a container A
is already open, and then we open container B
followed by A
again, then A
doesn't appear. This happens because if a container is added again to the list of containers, it is not re-positioned in the array.
Fix:
Re-position a container at the top of the array if a container is opened again.
Explanation:
The Usual/Normal user behavior
A user sets the hue and then plays around with the saturation to find a color that fits. A user would like to play around with the saturation more than once before making a final decision.
The problem in current user experience
Fixes:
<ColorPicker>
inside a <div>
. Whenever the user clicks outside the color picker, close the color picker. For this, we will have to add an onClick
listener to the wrapper div and window. Create a state chart that has states such as idle, color-palette-open, invalid input, valid input etc.Explanation:
Component Navigator can be used as an escape hatch for many of the shortcomings in the UX of the canvas.
Setting width & height has no effect currenlty. The Toggle size should change on setting width and height.
Explanation:
On setting hue, the color doesn't get updated sometime. It gets set to #000000
.
Explanation:
Currently atri cli can only be run from root directory of the app. If it's run from one of child of root directory, then it will assume that a new app has to be created.
Fix:
Create a marker file that indicates that a directory is an app's root directory.
Explanation:
Hints like missing dependencies in useCallback
, useMemo
isn't working in @atrilabs/react-component-manifests
. This can lead to undesirable behavior in the app produced.
Explanation:
The python app server doesn't reloads <route>.atri
modules during development time. Hence, when a user drops a new component in the UI and presses Publish, the callbacks from deployed app to the python server start failing as the newly dropped components are missing.
Fix:
During development, reload the <route>.atri.py
module on each request.
Explanation:
When we select a component that has two tabs in the properties tab and then we select a component with one property in the properties tab, it might happen that no tab is automatically selected.
Fix:
Select the first tab if the next component does not have the previously selected tab.
Explanation:
This problem is more profound in Mac OS because it checks the signature when an executable is run for the first time, hence, more delay in starting the file server.
Fix:
Before opening http://localhost:4002
in browser, check if file server has started running.
The id of each component can be of the form <page_name>_<alias>
. Implement a CSSGenerator that goes through all the CSSTree
. It looks for state.breakpoints
field in the CSSTreeNode
.
Explanation:
Imagine a scenario. I have selected red as the border color for a button. Let's say later I decide to just adjust the saturation a bit, but when I click on border color again, I see black as initially set. Now I have to move the color pointer to the initial position and then try from there. This is going to be a painful experience for a very common scenario.
Fix:
When a color palette opens, the initial color should be from props.styles.borderColor
and similarly for other color styles.
Add Delete button
Explanation:
On clicking Select Template
, the visual order of Insert Component
and Select Template
may swap.
Add font <link>
in the <head>
tag.
Explanation:
Traceback (most recent call last):
File "C:\Users\adity\anaconda3\envs\AtriTest\lib\pathlib.py", line 1288, in exists
self.stat()
File "C:\Users\adity\anaconda3\envs\AtriTest\lib\pathlib.py", line 1095, in stat
return self._accessor.stat(self, follow_symlinks=follow_symlinks)
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'D:\atri.app.json'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\adity\anaconda3\envs\AtriTest\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Users\adity\anaconda3\envs\AtriTest\lib\runpy.py", line 86, in run_code
exec(code, run_globals)
File "C:\Users\adity\anaconda3\envs\AtriTest\Scripts\atri.exe_main.py", line 4, in
File "C:\Users\adity\anaconda3\envs\AtriTest\lib\site-packages\atri\cli.py", line 23, in
find_and_set_app_directory()
File "C:\Users\adity\anaconda3\envs\AtriTest\lib\site-packages\atri\find_app_root.py", line 28, in find_and_set_app_directory
dir = find_atri_root_dir()
File "C:\Users\adity\anaconda3\envs\AtriTest\lib\site-packages\atri\find_app_root.py", line 14, in find_atri_root_dir
if attempt.exists():
File "C:\Users\adity\anaconda3\envs\AtriTest\lib\pathlib.py", line 1288, in exists
self.stat()
Explanation:
When publish button is clicked, show the status of publish in a dropdown maybe.
Explanation:
If you are on page A and you drag and drop a component, then you immediately navigate to page B, then the events from page B will not show up on the canvas.
Clues:
Check clearCanvas
function that's called when the page is switched.
Explanation:
Allow setting custom.src
field of <Image/>
component.
Solution:
Pass a second parameter to handle_event
& init_state
function a route's main.py
file. This second parameter will have an object Response
that can be used to manipulate the response being sent to the client from python server.
Explanation:
The file server running at http://localhost:4002
doesn't have the app-assets/
directory set as public directory, hence, the editor running at 4002
in production doesn't show images.
Fix:
Add app-assets
to public directory for file server.
Explanation:
This is a manual step and might confuse some of beginner user.
Fix:
From python atri cli after successful deploy, ping http://localhost:4005
(generated app's server) until we get a successful pong. Then we can open http://localhost:5000
in browser. Try to not open duplicate tab for http://localhost:4005
. Open it once per atri cli session.
Explanation:
The generated app's dev server sends request at http://localhost:4007 to get updated state. This generated app's dev server is running inside the container and the python server is running outside the docker container, hence, they cannot communicate over localhost.
Fix:
Use host.docker.internal. But this only works in Docker desktop and not docker server. Find another solution if possible.
Explanation:
The generated code for a page doesn't contain props from useIoStore
, hence, when the ioStore
is updated, the page doesn't reload.
Explanation:
Allow for callback handlers to have the Navigate To <route>
step. Auto-populate all the possible routes.
The client bundles such as manifest client that are requested once the editor loads talks to servers at ports like 4003. This causes a problem because now the bundled client contains this port number inside the code like fetch("http://localhost:4003")
.
Instead of sending requests to different ports, send requests to the host server at different URLs, for ex, instead of making requests to the manifest server by doing fetch("http://localhost:4003")
, use fetch("/manifest-server")
. We need to proxy these requests through webpackDevServer
to the respective server (for ex, the manifest server). Similarly, we need to proxy requests from the file server to the respective servers as well.
Recommendation:
Take inspiration from template layer.
Explanation:
Currently, typography comes on top and flex, flex child comes at the bottom.
Fix:
Change the order in @atrilabs/component-style-layer
package.
Explanation:
The generated app has definitions of deleted components. These definitions are not used in the JSX part of the generated app hence, the generated app isn't throwing errors.
Fix:
The generateApp
function should also use getAppInfo
function in a similar way as used in buildReactApp
.
Implement a rough version of the component selector that stores the alias of a component as a value to some custom props.
Explanation:
The overlays that show the location of a component don't take border and margin into account, hence, when the user applies some margin to the component, the overlay size mismatches. The location of the overlay is correct, only the size mismatches.
Fix:
Use getCoordsBM
function to get width
& height
of component with border and margin included.
Explanation:
When we drag an Image component from one flexbox to another, an image appears below the cursor with some reduced opacity. This causes problems in re-position and sometimes the re-position doesn't work. This may be because mouse events are not reaching the parent components over which the image is being dragged.
Fix:
Figure out a way to disable this behavior of image drag.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.