Skip to content

Commit 0c996b0

Browse files
manifest project infos & dirs
1 parent 3d43364 commit 0c996b0

17 files changed

Lines changed: 83 additions & 36 deletions

File tree

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
# design-to-code
2+
23
Design to code engine. A design ✌️ code standard.
34

45
> Bridged's Design to code core library.
56
6-
7-
87
## Demo
98

109
for the demo, please visit [assistant](https://github.com/bridgedxyz/assistant)
1110

12-
13-
1411
## What does it mean?
1512

1613
### By "design". What does it mean?
@@ -27,3 +24,6 @@ The term `code` here stands for some language or syntax tree that is adoptable f
2724

2825
Taking more deeper look, Reflect Core DSL represents the layout, component, data, styling as a single tree.
2926

27+
### How does it work?
28+
29+
Read [how-it-all-works.md](./how-it-all-works.md)

editor/next.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const withTM = require("next-transpile-modules")([
22
"@designto/code",
33
"@designto/token",
44
"@designto/flutter",
5+
"@designto/web",
56
"@designto/react",
67
"@bridged.xyz/flutter-builder",
78
"@bridged.xyz/design-sdk",

how-it-all-works.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# How it all works
2+
3+
## Input: Design, Output: Code
4+
5+
[Figma, Sketch, Bridged, XD] to [Flutter, React, Svelte, Android, iOS, ReactNative, Vue]
6+
7+
## The process
8+
9+
- convert design to universal design representative (a.k.a Reflect CGR Nodes)
10+
- do some linting
11+
- do some detection
12+
- convert ReflectNode to ReflectWidget
13+
- ReflectWidget to each platform's interpreter
14+
- platform interpreter to each platform builder (e.g. flutter-builder, react-builder)
15+
- this is done by universal computer language builder developed by Bridged - [CoLI](https://coli.codes) - A Computer language interface
16+
- each platform builder generates the final executable code, wrapped with app scaffold.
17+
- this code uploads and compiled by [BASE](https://github.com/bridgedxyz/base) - Bridged App SErvices
18+
- you're design is now a running application.
19+
20+
> Some small steps are missing, this document will be updated continuously.

packages/designto-code/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
"main": "lib/index.js",
55
"homepage": "https://designto.codes",
66
"dependencies": {
7+
"@designto/token": "0.0.0",
78
"@designto/flutter": "0.0.1",
89
"@designto/react": "0.0.0",
9-
"@designto/token": "0.0.0",
10+
"@designto/web": "0.0.0",
1011
"@bridged.xyz/design-sdk": "^0.1.0",
1112
"@reflect-ui/detection": "0.1.1",
1213
"@bridged.xyz/flutter-builder": "^1.23.0-7.0.pre.42"

packages/designto-flutter/index.ts

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
import { nodes } from "@bridged.xyz/design-sdk";
22
import { TextBuilder, WidgetBuilder } from "./builders";
3-
import {
4-
SizedBox,
5-
Widget,
6-
Stack,
7-
Size,
8-
MediaQuery,
9-
} from "@bridged.xyz/flutter-builder";
3+
import * as flutter from "@bridged.xyz/flutter-builder";
104
import { makeSafelyAsStackList } from "./utils/make-as-safe-list";
115
import { makeDivider } from "./make/divider.make";
126
import { detectIf } from "@reflect-ui/detection";
@@ -23,7 +17,7 @@ let parentId = "";
2317
export let currentBuildingNodeId: string;
2418

2519
interface AppBuildResult {
26-
widget: Widget;
20+
widget: flutter.Widget;
2721
scrollable: boolean;
2822
}
2923

@@ -46,15 +40,13 @@ export function buildApp(sceneNode: nodes.ReflectSceneNode): AppBuildResult {
4640
function generateWidget(
4741
sceneNode: nodes.ReflectSceneNode,
4842
parentIdSrc: string = ""
49-
): Widget {
50-
console.log(`parentId = parentIdSrc;`);
43+
): flutter.Widget {
5144
parentId = parentIdSrc;
52-
console.log(`setCurrentNode(sceneNode);`);
5345
setCurrentNode(sceneNode);
54-
console.log(`let result = flutterWidgetGenerator(sceneNode);`);
5546
let result = flutterWidgetGenerator(sceneNode);
5647

5748
if (Array.isArray(result)) {
49+
// this won't happen
5850
throw "result cannot be in array form.";
5951
}
6052

@@ -63,7 +55,7 @@ function generateWidget(
6355

6456
function flutterWidgetGenerator(
6557
sceneNode: ReadonlyArray<nodes.ReflectSceneNode> | nodes.ReflectSceneNode
66-
): Array<Widget> | Widget {
58+
): Array<flutter.Widget> | flutter.Widget {
6759
console.log(`flutterWidgetGenerator handling scene node -`, sceneNode);
6860
if (Array.isArray(sceneNode) && sceneNode.length > 0) {
6961
// explicit type casting
@@ -73,7 +65,7 @@ function flutterWidgetGenerator(
7365
const sceneLen = sceneNode.length;
7466

7567
// initialize output widgets array
76-
let widgets: Array<Widget> = [];
68+
let widgets: Array<flutter.Widget> = [];
7769

7870
console.log(
7971
`widget generator::
@@ -109,7 +101,7 @@ function flutterWidgetGenerator(
109101
return handleNode(sceneNode);
110102
}
111103

112-
function handleNode(node: nodes.ReflectSceneNode): Widget {
104+
function handleNode(node: nodes.ReflectSceneNode): flutter.Widget {
113105
setCurrentNode(node);
114106
console.log(
115107
`starting handling node ${node.toString()} type of ${node.type}`
@@ -177,7 +169,7 @@ function setCurrentNode(node: { id: string }) {
177169
currentBuildingNodeId = node.id;
178170
}
179171

180-
function flutterGroupHandler(node: nodes.ReflectGroupNode): Widget {
172+
function flutterGroupHandler(node: nodes.ReflectGroupNode): flutter.Widget {
181173
console.log(
182174
`group handler :: making ${node} as a stack with its children count of ${node.childrenCount}`
183175
);
@@ -193,14 +185,17 @@ function flutterContainer(
193185
| nodes.ReflectGroupNode
194186
| nodes.ReflectRectangleNode
195187
| nodes.ReflectEllipseNode,
196-
child?: Widget
197-
): Widget {
188+
child?: flutter.Widget
189+
): flutter.Widget {
198190
const builder = new WidgetBuilder({ child: child, node: node });
199191

200192
const isBuildRoot = targetId === node.id;
201193
const sizeOptions = isBuildRoot
202194
? {
203-
size: new Size(MediaQuery.of().size.width, undefined).addComment(
195+
size: new flutter.Size(
196+
flutter.MediaQuery.of().size.width,
197+
undefined
198+
).addComment(
204199
'container building for target root node. making the width with "MediaQuery.of().size.width"'
205200
),
206201
}
@@ -213,7 +208,7 @@ function flutterContainer(
213208
return builder.child;
214209
}
215210

216-
function flutterText(node: nodes.ReflectTextNode): Widget {
211+
function flutterText(node: nodes.ReflectTextNode): flutter.Widget {
217212
const builder = new TextBuilder({
218213
child: undefined,
219214
node: node,
@@ -224,15 +219,15 @@ function flutterText(node: nodes.ReflectTextNode): Widget {
224219
return builder.child;
225220
}
226221

227-
function flutterFrame(node: nodes.ReflectFrameNode): Widget {
222+
function flutterFrame(node: nodes.ReflectFrameNode): flutter.Widget {
228223
console.log(`start handling frame node ${node.toString()} and its children`);
229224
const children = flutterWidgetGenerator(node.children);
230225

231226
if (node.children.length === 1) {
232227
// if there is only one child, there is no need for Container or Row. Padding works indepdently of them.
233-
return flutterContainer(node, children as Widget);
228+
return flutterContainer(node, children as flutter.Widget);
234229
} else if (node.layoutMode !== undefined) {
235-
const rowColumn = makeRowColumn(node, children as Array<Widget>);
230+
const rowColumn = makeRowColumn(node, children as Array<flutter.Widget>);
236231
return flutterContainer(node, rowColumn);
237232
} else {
238233
// node.layoutMode === "NONE" && node.children.length > 1
@@ -247,7 +242,7 @@ function flutterFrame(node: nodes.ReflectFrameNode): Widget {
247242

248243
return flutterContainer(
249244
node,
250-
new Stack({
245+
new flutter.Stack({
251246
children: makeSafelyAsStackList(children),
252247
})
253248
);
@@ -258,7 +253,7 @@ function addSpacingIfNeeded(
258253
node: nodes.ReflectSceneNode,
259254
index: number,
260255
length: number
261-
): Widget | undefined {
256+
): flutter.Widget | undefined {
262257
if (
263258
node.parent instanceof nodes.ReflectFrameNode &&
264259
node.parent.layoutMode !== undefined
@@ -267,12 +262,12 @@ function addSpacingIfNeeded(
267262
// Don't add the SizedBox at last value. In Figma, itemSpacing CAN be negative; here it can't.
268263
if (node.parent.itemSpacing > 0 && index < length - 1) {
269264
if (node.parent.layoutMode === ReflectAxis.horizontal) {
270-
return new SizedBox({
265+
return new flutter.SizedBox({
271266
width: roundNumber(node.parent.itemSpacing),
272267
});
273268
} else {
274269
// node.parent.layoutMode === "VERTICAL"
275-
return new SizedBox({
270+
return new flutter.SizedBox({
276271
height: roundNumber(node.parent.itemSpacing),
277272
});
278273
}

packages/designto-token/container/index.ts

Whitespace-only changes.
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# Layout engine
1+
# Layout engine
2+
3+
The layout is to present multichild widget. Input node can be either Grup or Frame, and can be converted to one of [Stack, Column, Row, Wrap, Grid] Widget
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { nodes } from "@bridged.xyz/design-sdk";
2+
import * as core from "@reflect-ui/core";
3+
4+
function fromFrame(frame: nodes.ReflectFrameNode): core.LayoutRepresntatives {
5+
return undefined;
6+
}
7+
8+
function fromGroup(group: nodes.ReflectGroupNode): core.LayoutRepresntatives {
9+
return undefined;
10+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Convert to container if child is single.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export function shouldBeContainer(): boolean {
2+
console.error('"shouldBeContainer" not implemented');
3+
return false;
4+
}

0 commit comments

Comments
 (0)