Skip to content

Commit a0f055f

Browse files
add preact support
1 parent b05f12e commit a0f055f

File tree

6 files changed

+157
-1
lines changed

6 files changed

+157
-1
lines changed

editor/components/codeui-code-options-control/code-options-control.tsx

+10
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ export function CodeOptionsControl(props: CodeOptionsControlProps) {
9292
value: "flutter_default",
9393
description: "flutter",
9494
},
95+
{
96+
name: "Preact",
97+
value: "preact_default",
98+
description: "preact",
99+
},
95100
{
96101
name: "Vanilla",
97102
value: "vanilla_default",
@@ -171,6 +176,11 @@ export function CodeOptionsControl(props: CodeOptionsControlProps) {
171176

172177
const fields_config = {
173178
react: [platform_field_config, lang_field_config, react_style_field_config],
179+
preact: [
180+
platform_field_config,
181+
lang_field_config,
182+
react_style_field_config,
183+
],
174184
"react-native": [platform_field_config, lang_field_config],
175185
"solid-js": [platform_field_config, lang_field_config],
176186
flutter: [platform_field_config, lang_field_config],

editor/components/codeui-code-options-control/framework-options.ts

+50-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ export type SolidStylingStrategy =
2424
| "styled-components"
2525
| "inline-css";
2626

27+
export type PreactStylingStrategy = ReactStylingStrategy;
28+
2729
export interface FlutterOption {
2830
framework: Framework.flutter;
2931
language: Language.dart;
@@ -47,6 +49,12 @@ export interface SolidOption {
4749
styling: SolidStylingStrategy;
4850
}
4951

52+
export interface PreactOption {
53+
framework: Framework.preact;
54+
language: Language.jsx | Language.tsx;
55+
styling: PreactStylingStrategy;
56+
}
57+
5058
export interface VanillaOption {
5159
framework: Framework.vanilla;
5260
language: Language.html;
@@ -55,8 +63,9 @@ export interface VanillaOption {
5563
export type FrameworkOption =
5664
| ReactOption
5765
| ReactNativeOption
58-
| FlutterOption
66+
| PreactOption
5967
| SolidOption
68+
| FlutterOption
6069
| VanillaOption;
6170

6271
export const react_presets = {
@@ -130,6 +139,34 @@ export const solid_presets = {
130139
},
131140
};
132141

142+
export const preact_presets = {
143+
default: <PreactOption>{
144+
framework: Framework.preact,
145+
language: Language.tsx,
146+
styling: "styled-components",
147+
},
148+
with_styled_components: <PreactOption>{
149+
framework: Framework.preact,
150+
language: Language.tsx,
151+
styling: "styled-components",
152+
},
153+
with_inline_css: <PreactOption>{
154+
framework: Framework.preact,
155+
language: Language.tsx,
156+
styling: "inline-css",
157+
},
158+
with_css_module: <PreactOption>{
159+
framework: Framework.preact,
160+
language: Language.tsx,
161+
styling: "css-module",
162+
},
163+
with_css: <PreactOption>{
164+
framework: Framework.preact,
165+
language: Language.tsx,
166+
styling: "css",
167+
},
168+
};
169+
133170
export const vanilla_presets = {
134171
vanilla_default: <VanillaOption>{
135172
framework: Framework.vanilla,
@@ -166,6 +203,11 @@ export const all_preset_options_map__prod = {
166203
react_with_styled_components: react_presets.react_with_styled_components,
167204
react_with_inline_css: react_presets.react_with_inline_css,
168205
react_with_css_module: react_presets.react_with_css_module,
206+
preact: preact_presets.default,
207+
preact_default: preact_presets.default,
208+
preact_with_styled_components: preact_presets.with_styled_components,
209+
preact_with_inline_css: preact_presets.with_inline_css,
210+
preact_with_css_module: preact_presets.with_css_module,
169211
"react-native": reactnative_presets.reactnative_default,
170212
reactnative: reactnative_presets.reactnative_default,
171213
reactnative_default: reactnative_presets.reactnative_default,
@@ -186,6 +228,7 @@ export const lang_by_framework = {
186228
flutter: [Language.dart],
187229
react: [Language.jsx, Language.tsx],
188230
"react-native": [Language.jsx, Language.tsx],
231+
preact: [Language.jsx, Language.tsx],
189232
"solid-js": [Language.jsx, Language.tsx],
190233
vanilla: [Language.html],
191234
};
@@ -197,6 +240,8 @@ export const react_styles: ReactStylingStrategy[] = [
197240
"css",
198241
];
199242

243+
export const preact_styles: PreactStylingStrategy[] = react_styles;
244+
200245
export const getpreset = (preset_name: string): FrameworkOption => {
201246
const _p = all_preset_options_map__prod[preset_name];
202247
if (_p) {
@@ -213,6 +258,10 @@ export const getDefaultPresetNameByFramework = (frameowrk: Framework) => {
213258
return "react_default";
214259
case Framework.reactnative:
215260
return "reactnative_default";
261+
case Framework.solid:
262+
return "solid_default";
263+
case Framework.preact:
264+
return "default";
216265
case Framework.vanilla:
217266
return "vanilla_default";
218267
}

editor/query/to-code-options-from-query.ts

+23
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
reactnative_presets,
44
flutter_presets,
55
vanilla_presets,
6+
preact_presets,
67
solid_presets,
78
} from "@grida/builder-config-preset";
89
import { ParsedUrlQuery } from "querystring";
@@ -26,6 +27,7 @@ export function get_framework_config_from_query(query: ParsedUrlQuery) {
2627

2728
export function get_framework_config(framework: string) {
2829
switch (framework) {
30+
// react
2931
case "react":
3032
case "react_default":
3133
case "react-default":
@@ -42,6 +44,7 @@ export function get_framework_config(framework: string) {
4244
case "react_with_css_module":
4345
case "react-with-css-module":
4446
return react_presets.react_with_css_module;
47+
// react-native
4548
case "react-native":
4649
return reactnative_presets.reactnative_default;
4750
case "react-native-with-style-sheet":
@@ -50,16 +53,36 @@ export function get_framework_config(framework: string) {
5053
return reactnative_presets.reactnative_with_styled_components;
5154
case "react-native-with-inline-style":
5255
return reactnative_presets.reactnative_with_inline_style;
56+
// preact
57+
case "preact":
58+
case "preact_default":
59+
case "preact-default":
60+
case "preact.default":
61+
return preact_presets.default;
62+
case "preact-with-styled-components":
63+
case "preact_with_styled_components":
64+
return preact_presets.with_styled_components;
65+
case "preact-with-emotion-styled":
66+
return preact_presets.with_emotion_styled;
67+
case "preact_with_inline_css":
68+
case "preact-with-inline-css":
69+
return preact_presets.with_inline_css;
70+
case "preact_with_css_module":
71+
case "preact-with-css-module":
72+
return preact_presets.with_css_module;
73+
// solid-js
5374
case "solid_with_styled_components":
5475
case "solid-with-styled-components":
5576
return solid_presets.solid_with_styled_components;
5677
case "solid_with_inline_css":
5778
case "solid-with-inline-css":
5879
return solid_presets.solid_with_inline_css;
80+
// flutter
5981
case "flutter_default":
6082
case "flutter-default":
6183
case "flutter.default":
6284
return flutter_presets.flutter_default;
85+
// vanilla
6386
case "vanilla":
6487
case "vanilla-default":
6588
case "vanilla.default":

editor/scaffolds/code/index.tsx

+17
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,23 @@ export function CodeSegment() {
174174
}
175175
break;
176176
}
177+
case "preact": {
178+
switch (o.styling) {
179+
case "styled-components":
180+
c = get_framework_config("preact-with-styled-components");
181+
break;
182+
case "inline-css":
183+
c = get_framework_config("preact-with-inline-css");
184+
break;
185+
case "css-module":
186+
c = get_framework_config("preact-with-css-module");
187+
break;
188+
case "css":
189+
// TODO:
190+
break;
191+
}
192+
break;
193+
}
177194
case "solid-js": {
178195
switch (o.styling) {
179196
case "styled-components":

packages/builder-config-preset/index.ts

+56
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,61 @@ export const reactnative_presets = {
111111
},
112112
};
113113

114+
export const preact_presets = {
115+
default: <config.PreactFrameworkConfig>{
116+
framework: Framework.preact,
117+
language: Language.tsx,
118+
styling: {
119+
type: "styled-components",
120+
module: "@emotion/styled",
121+
},
122+
component_declaration_style: _jsx_component_declaration_style,
123+
},
124+
with_styled_components: <config.PreactFrameworkConfig>{
125+
framework: Framework.preact,
126+
language: Language.tsx,
127+
styling: {
128+
type: "styled-components",
129+
module: "styled-components",
130+
},
131+
component_declaration_style: _jsx_component_declaration_style,
132+
},
133+
with_emotion_styled: <config.PreactFrameworkConfig>{
134+
framework: Framework.preact,
135+
language: Language.tsx,
136+
styling: {
137+
type: "styled-components",
138+
module: "@emotion/styled",
139+
},
140+
component_declaration_style: _jsx_component_declaration_style,
141+
},
142+
with_inline_css: <config.PreactFrameworkConfig>{
143+
framework: Framework.preact,
144+
language: Language.tsx,
145+
styling: {
146+
type: "inline-css",
147+
},
148+
component_declaration_style: _jsx_component_declaration_style,
149+
},
150+
with_css_module: <config.PreactFrameworkConfig>{
151+
framework: Framework.preact,
152+
language: Language.tsx,
153+
styling: {
154+
type: "css-module",
155+
lang: "css",
156+
importDefault: "styles",
157+
loader: "css-loader",
158+
},
159+
component_declaration_style: _jsx_component_declaration_style,
160+
},
161+
with_css: <config.PreactFrameworkConfig>{
162+
framework: Framework.preact,
163+
language: Language.tsx,
164+
styling: { type: "css" },
165+
},
166+
component_declaration_style: _jsx_component_declaration_style,
167+
};
168+
114169
export const solid_presets = {
115170
solid_with_styled_components: <config.SolidFrameworkConfig>{
116171
framework: Framework.solid,
@@ -177,6 +232,7 @@ export const all_preset_options__prod = [
177232
flutter_presets.flutter_default,
178233
react_presets.react_default,
179234
react_presets.react_with_styled_components,
235+
preact_presets.default,
180236
vanilla_presets.vanilla_default,
181237
// react_with_css_in_jsx // NOT ON PRODUCTION
182238
// react_with_css // NOT ON PRODUCTION

packages/builder-platform-types/ui-frameworks/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export enum Framework {
22
react = "react",
33
reactnative = "react-native",
4+
preact = "preact",
45
flutter = "flutter",
56
vanilla = "vanilla",
67
solid = "solid-js",

0 commit comments

Comments
 (0)