Skip to content

Commit 72345fb

Browse files
authored
refactor: merge radix props with component metas (#5213)
Related #5211 We moved html attributes away from props metas and have very little actual props left in meta. It is safe to merge with component meta to simplify access in both builder and CLI. CLI size increase is not very significant ```diff - 241.92kB + 256.64kB ```
1 parent d372aa3 commit 72345fb

File tree

21 files changed

+135
-395
lines changed

21 files changed

+135
-395
lines changed

apps/builder/app/builder/features/settings-panel/props-section/props-section.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
import {
2020
isAttributeNameSafe,
2121
reactPropsToStandardAttributes,
22+
showAttribute,
2223
standardAttributesToReactProps,
2324
} from "@webstudio-is/react-sdk";
2425
import {
@@ -115,6 +116,9 @@ const $availableProps = computed(
115116
(instance, props, propsMetas, initialPropNames) => {
116117
const availableProps = new Map<Item["name"], Item>();
117118
for (const [name, { label, description }] of propsMetas) {
119+
if (name === showAttribute) {
120+
continue;
121+
}
118122
availableProps.set(name, { name, label, description });
119123
}
120124
if (instance === undefined) {

apps/builder/app/canvas/canvas.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import * as animationTemplates from "@webstudio-is/sdk-components-animation/temp
1818
import { hooks as animationComponentHooks } from "@webstudio-is/sdk-components-animation/hooks";
1919
import * as radixComponents from "@webstudio-is/sdk-components-react-radix";
2020
import * as radixComponentMetas from "@webstudio-is/sdk-components-react-radix/metas";
21-
import * as radixComponentPropsMetas from "@webstudio-is/sdk-components-react-radix/props";
2221
import * as radixTemplates from "@webstudio-is/sdk-components-react-radix/templates";
2322
import { hooks as radixComponentHooks } from "@webstudio-is/sdk-components-react-radix/hooks";
2423
import { ErrorMessage } from "~/shared/error";
@@ -267,7 +266,7 @@ export const Canvas = () => {
267266
namespace: "@webstudio-is/sdk-components-react-radix",
268267
components: radixComponents,
269268
metas: radixComponentMetas,
270-
propsMetas: radixComponentPropsMetas,
269+
propsMetas: {},
271270
hooks: radixComponentHooks,
272271
templates: radixTemplates,
273272
});

apps/builder/app/shared/nano-states/components.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,10 +206,22 @@ export const registerComponentLibrary = ({
206206
}
207207
$registeredComponents.set(nextComponents);
208208

209+
const prevPropsMetas = $registeredComponentPropsMetas.get();
210+
const nextPropsMetas = new Map(prevPropsMetas);
211+
for (const [componentName, propsMeta] of Object.entries(propsMetas)) {
212+
nextPropsMetas.set(`${prefix}${componentName}`, propsMeta);
213+
}
214+
209215
const prevMetas = $registeredComponentMetas.get();
210216
const nextMetas = new Map(prevMetas);
211217
for (const [componentName, meta] of Object.entries(metas)) {
212218
nextMetas.set(`${prefix}${componentName}`, meta);
219+
if (meta.initialProps || meta.props) {
220+
nextPropsMetas.set(`${prefix}${componentName}`, {
221+
initialProps: meta.initialProps,
222+
props: meta.props ?? {},
223+
});
224+
}
213225
}
214226
$registeredComponentMetas.set(nextMetas);
215227

@@ -230,10 +242,5 @@ export const registerComponentLibrary = ({
230242
$registeredComponentHooks.set(nextHooks);
231243
}
232244

233-
const prevPropsMetas = $registeredComponentPropsMetas.get();
234-
const nextPropsMetas = new Map(prevPropsMetas);
235-
for (const [componentName, propsMeta] of Object.entries(propsMetas)) {
236-
nextPropsMetas.set(`${prefix}${componentName}`, propsMeta);
237-
}
238245
$registeredComponentPropsMetas.set(nextPropsMetas);
239246
};

packages/sdk-components-react-radix/package.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@
2323
"types": "./lib/types/metas.d.ts",
2424
"import": "./lib/metas.js"
2525
},
26-
"./props": {
27-
"webstudio": "./src/props.ts",
28-
"types": "./lib/types/props.d.ts",
29-
"import": "./lib/props.js"
30-
},
3126
"./hooks": {
3227
"webstudio": "./src/hooks.ts",
3328
"types": "./lib/types/hooks.d.ts",

packages/sdk-components-react-radix/src/accordion.ws.ts

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@ import {
55
TriggerIcon,
66
ContentIcon,
77
} from "@webstudio-is/icons/svg";
8-
import {
9-
defaultStates,
10-
type WsComponentMeta,
11-
type WsComponentPropsMeta,
12-
} from "@webstudio-is/sdk";
8+
import { defaultStates, type WsComponentMeta } from "@webstudio-is/sdk";
139
import { div, h3, button } from "@webstudio-is/sdk/normalize.css";
1410
import { radix } from "./shared/meta";
1511
import { buttonReset } from "./shared/preset-styles";
@@ -28,9 +24,9 @@ export const metaAccordion: WsComponentMeta = {
2824
children: ["instance"],
2925
descendants: [radix.AccordionItem],
3026
},
31-
presetStyle: {
32-
div,
33-
},
27+
presetStyle: { div },
28+
initialProps: ["value", "collapsible"],
29+
props: propsAccordion,
3430
};
3531

3632
export const metaAccordionItem: WsComponentMeta = {
@@ -42,9 +38,9 @@ export const metaAccordionItem: WsComponentMeta = {
4238
children: ["instance"],
4339
descendants: [radix.AccordionHeader, radix.AccordionContent],
4440
},
45-
presetStyle: {
46-
div,
47-
},
41+
presetStyle: { div },
42+
initialProps: ["value"],
43+
props: propsAccordionItem,
4844
};
4945

5046
export const metaAccordionHeader: WsComponentMeta = {
@@ -68,6 +64,7 @@ export const metaAccordionHeader: WsComponentMeta = {
6864
},
6965
],
7066
},
67+
props: propsAccordionHeader,
7168
};
7269

7370
export const metaAccordionTrigger: WsComponentMeta = {
@@ -88,6 +85,7 @@ export const metaAccordionTrigger: WsComponentMeta = {
8885
presetStyle: {
8986
button: [button, buttonReset].flat(),
9087
},
88+
props: propsAccordionTrigger,
9189
};
9290

9391
export const metaAccordionContent: WsComponentMeta = {
@@ -100,26 +98,5 @@ export const metaAccordionContent: WsComponentMeta = {
10098
presetStyle: {
10199
div,
102100
},
103-
};
104-
105-
export const propsMetaAccordion: WsComponentPropsMeta = {
106-
props: propsAccordion,
107-
initialProps: ["value", "collapsible"],
108-
};
109-
110-
export const propsMetaAccordionItem: WsComponentPropsMeta = {
111-
props: propsAccordionItem,
112-
initialProps: ["value"],
113-
};
114-
115-
export const propsMetaAccordionHeader: WsComponentPropsMeta = {
116-
props: propsAccordionHeader,
117-
};
118-
119-
export const propsMetaAccordionTrigger: WsComponentPropsMeta = {
120-
props: propsAccordionTrigger,
121-
};
122-
123-
export const propsMetaAccordionContent: WsComponentPropsMeta = {
124101
props: propsAccordionContent,
125102
};

packages/sdk-components-react-radix/src/checkbox.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
type ComponentProps,
66
} from "react";
77
import { Root, Indicator } from "@radix-ui/react-checkbox";
8+
import { useControllableState } from "@radix-ui/react-use-controllable-state";
89

910
export const Checkbox = forwardRef<
1011
HTMLButtonElement,
@@ -14,9 +15,18 @@ export const Checkbox = forwardRef<
1415
checked?: boolean;
1516
defaultChecked?: boolean;
1617
}
17-
>(({ checked, defaultChecked, ...props }, ref) => {
18+
>(({ defaultChecked, ...props }, ref) => {
19+
const [checked, onCheckedChange] = useControllableState({
20+
prop: props.checked ?? defaultChecked ?? false,
21+
defaultProp: false,
22+
});
1823
return (
19-
<Root {...props} ref={ref} defaultChecked={checked ?? defaultChecked} />
24+
<Root
25+
{...props}
26+
ref={ref}
27+
checked={checked}
28+
onCheckedChange={(open) => onCheckedChange(open === true)}
29+
/>
2030
);
2131
});
2232

packages/sdk-components-react-radix/src/checkbox.ws.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import { CheckboxCheckedIcon, TriggerIcon } from "@webstudio-is/icons/svg";
2-
import {
3-
defaultStates,
4-
type WsComponentMeta,
5-
type WsComponentPropsMeta,
6-
} from "@webstudio-is/sdk";
2+
import { defaultStates, type WsComponentMeta } from "@webstudio-is/sdk";
73
import { button, span } from "@webstudio-is/sdk/normalize.css";
84
import { radix } from "./shared/meta";
95
import { buttonReset } from "./shared/preset-styles";
@@ -35,6 +31,8 @@ export const metaCheckbox: WsComponentMeta = {
3531
presetStyle: {
3632
button: [button, buttonReset].flat(),
3733
},
34+
initialProps: ["id", "class", "name", "value", "required", "checked"],
35+
props: propsCheckbox,
3836
};
3937

4038
export const metaCheckboxIndicator: WsComponentMeta = {
@@ -47,13 +45,5 @@ export const metaCheckboxIndicator: WsComponentMeta = {
4745
presetStyle: {
4846
span,
4947
},
50-
};
51-
52-
export const propsMetaCheckbox: WsComponentPropsMeta = {
53-
props: propsCheckbox,
54-
initialProps: ["id", "className", "name", "value", "required", "checked"],
55-
};
56-
57-
export const propsMetaCheckboxIndicator: WsComponentPropsMeta = {
5848
props: propsCheckboxIndicator,
5949
};

packages/sdk-components-react-radix/src/collapsible.ws.ts

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
TriggerIcon,
44
ContentIcon,
55
} from "@webstudio-is/icons/svg";
6-
import type { WsComponentMeta, WsComponentPropsMeta } from "@webstudio-is/sdk";
6+
import type { WsComponentMeta } from "@webstudio-is/sdk";
77
import { div } from "@webstudio-is/sdk/normalize.css";
88
import { radix } from "./shared/meta";
99
import {
@@ -22,6 +22,8 @@ export const metaCollapsible: WsComponentMeta = {
2222
presetStyle: {
2323
div,
2424
},
25+
initialProps: ["open"],
26+
props: propsCollapsible,
2527
};
2628

2729
export const metaCollapsibleTrigger: WsComponentMeta = {
@@ -30,6 +32,7 @@ export const metaCollapsibleTrigger: WsComponentMeta = {
3032
category: "none",
3133
children: ["instance", "rich-text"],
3234
},
35+
props: propsCollapsibleTrigger,
3336
};
3437

3538
export const metaCollapsibleContent: WsComponentMeta = {
@@ -41,24 +44,5 @@ export const metaCollapsibleContent: WsComponentMeta = {
4144
presetStyle: {
4245
div,
4346
},
44-
};
45-
46-
export const propsMetaCollapsible: WsComponentPropsMeta = {
47-
props: {
48-
...propsCollapsible,
49-
onOpenChange: {
50-
type: "action",
51-
control: "action",
52-
required: false,
53-
},
54-
},
55-
initialProps: ["open", "onOpenChange"],
56-
};
57-
58-
export const propsMetaCollapsibleTrigger: WsComponentPropsMeta = {
59-
props: propsCollapsibleTrigger,
60-
};
61-
62-
export const propsMetaCollapsibleContent: WsComponentPropsMeta = {
6347
props: propsCollapsibleContent,
6448
};

packages/sdk-components-react-radix/src/dialog.ws.ts

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,7 @@ import {
77
TextIcon,
88
ButtonElementIcon,
99
} from "@webstudio-is/icons/svg";
10-
import {
11-
defaultStates,
12-
type WsComponentMeta,
13-
type WsComponentPropsMeta,
14-
} from "@webstudio-is/sdk";
10+
import { defaultStates, type WsComponentMeta } from "@webstudio-is/sdk";
1511
import { div, button, h2, p } from "@webstudio-is/sdk/normalize.css";
1612
import { radix } from "./shared/meta";
1713
import {
@@ -32,6 +28,7 @@ export const metaDialogTrigger: WsComponentMeta = {
3228
category: "none",
3329
children: ["instance"],
3430
},
31+
props: propsDialogTrigger,
3532
};
3633

3734
export const metaDialogOverlay: WsComponentMeta = {
@@ -41,9 +38,8 @@ export const metaDialogOverlay: WsComponentMeta = {
4138
children: ["instance"],
4239
descendants: [radix.DialogContent],
4340
},
44-
presetStyle: {
45-
div,
46-
},
41+
presetStyle: { div },
42+
props: propsDialogOverlay,
4743
};
4844

4945
export const metaDialogContent: WsComponentMeta = {
@@ -57,9 +53,8 @@ export const metaDialogContent: WsComponentMeta = {
5753
radix.DialogClose,
5854
],
5955
},
60-
presetStyle: {
61-
div,
62-
},
56+
presetStyle: { div },
57+
props: propsDialogContent,
6358
};
6459

6560
export const metaDialogTitle: WsComponentMeta = {
@@ -68,9 +63,8 @@ export const metaDialogTitle: WsComponentMeta = {
6863
category: "none",
6964
children: ["instance", "rich-text"],
7065
},
71-
presetStyle: {
72-
h2,
73-
},
66+
presetStyle: { h2 },
67+
props: propsDialogTitle,
7468
};
7569

7670
export const metaDialogDescription: WsComponentMeta = {
@@ -79,9 +73,8 @@ export const metaDialogDescription: WsComponentMeta = {
7973
category: "none",
8074
children: ["instance", "rich-text"],
8175
},
82-
presetStyle: {
83-
p,
84-
},
76+
presetStyle: { p },
77+
props: propsDialogDescription,
8578
};
8679

8780
export const metaDialogClose: WsComponentMeta = {
@@ -95,6 +88,7 @@ export const metaDialogClose: WsComponentMeta = {
9588
presetStyle: {
9689
button: [buttonReset, button].flat(),
9790
},
91+
props: propsDialogClose,
9892
};
9993

10094
export const metaDialog: WsComponentMeta = {
@@ -104,38 +98,5 @@ export const metaDialog: WsComponentMeta = {
10498
children: ["instance"],
10599
descendants: [radix.DialogTrigger, radix.DialogOverlay],
106100
},
107-
};
108-
109-
export const propsMetaDialog: WsComponentPropsMeta = {
110101
props: propsDialog,
111-
initialProps: [],
112-
};
113-
114-
export const propsMetaDialogTrigger: WsComponentPropsMeta = {
115-
props: propsDialogTrigger,
116-
};
117-
118-
export const propsMetaDialogContent: WsComponentPropsMeta = {
119-
props: propsDialogContent,
120-
initialProps: [],
121-
};
122-
123-
export const propsMetaDialogOverlay: WsComponentPropsMeta = {
124-
props: propsDialogOverlay,
125-
initialProps: [],
126-
};
127-
128-
export const propsMetaDialogClose: WsComponentPropsMeta = {
129-
props: propsDialogClose,
130-
initialProps: [],
131-
};
132-
133-
export const propsMetaDialogTitle: WsComponentPropsMeta = {
134-
props: propsDialogTitle,
135-
initialProps: [],
136-
};
137-
138-
export const propsMetaDialogDescription: WsComponentPropsMeta = {
139-
props: propsDialogDescription,
140-
initialProps: [],
141102
};

0 commit comments

Comments
 (0)