@webstudio-is/react-sdk 0.75.0 → 0.77.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/context.js +5 -1
- package/lib/cjs/css/normalize.js +51 -23
- package/lib/cjs/css/presets.js +111 -1
- package/lib/cjs/embed-template.js +68 -3
- package/lib/cjs/expression.js +213 -0
- package/lib/cjs/index.js +8 -1
- package/lib/cjs/props.js +28 -10
- package/lib/cjs/tree/create-elements-tree.js +14 -1
- package/lib/cjs/tree/root.js +38 -0
- package/lib/cjs/tree/webstudio-component.js +9 -2
- package/lib/context.js +5 -1
- package/lib/css/normalize.js +41 -23
- package/lib/css/presets.js +111 -1
- package/lib/embed-template.js +68 -3
- package/lib/expression.js +183 -0
- package/lib/index.js +15 -1
- package/lib/props.js +28 -10
- package/lib/tree/create-elements-tree.js +14 -1
- package/lib/tree/root.js +42 -1
- package/lib/tree/webstudio-component.js +9 -2
- package/lib/types/components/component-meta.d.ts +112 -0
- package/lib/types/context.d.ts +3 -0
- package/lib/types/css/normalize.d.ts +1836 -0
- package/lib/types/css/presets.d.ts +282 -0
- package/lib/types/embed-template.d.ts +512 -0
- package/lib/types/expression.d.ts +11 -0
- package/lib/types/expression.test.d.ts +1 -0
- package/lib/types/index.d.ts +2 -1
- package/lib/types/props.d.ts +8 -7
- package/lib/types/tree/create-elements-tree.d.ts +4 -2
- package/lib/types/tree/root.d.ts +6 -4
- package/lib/types/tree/webstudio-component.d.ts +1 -0
- package/package.json +10 -10
- package/src/context.tsx +11 -0
- package/src/css/normalize.ts +40 -23
- package/src/css/presets.ts +110 -0
- package/src/embed-template.test.ts +177 -1
- package/src/embed-template.ts +73 -2
- package/src/expression.test.ts +147 -0
- package/src/expression.ts +217 -0
- package/src/index.ts +8 -0
- package/src/props.ts +29 -10
- package/src/tree/create-elements-tree.tsx +20 -1
- package/src/tree/root.ts +61 -4
- package/src/tree/webstudio-component.tsx +7 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import jsep from "jsep";
|
|
2
|
+
const generateCode = (node, failOnForbidden, transformIdentifier) => {
|
|
3
|
+
if (node.type === "Identifier") {
|
|
4
|
+
return transformIdentifier(node.name);
|
|
5
|
+
}
|
|
6
|
+
if (node.type === "MemberExpression") {
|
|
7
|
+
if (failOnForbidden) {
|
|
8
|
+
const object2 = generateCode(
|
|
9
|
+
node.object,
|
|
10
|
+
false,
|
|
11
|
+
transformIdentifier
|
|
12
|
+
);
|
|
13
|
+
const property2 = generateCode(
|
|
14
|
+
node.property,
|
|
15
|
+
false,
|
|
16
|
+
transformIdentifier
|
|
17
|
+
);
|
|
18
|
+
throw Error(`Cannot access "${property2}" of "${object2}"`);
|
|
19
|
+
}
|
|
20
|
+
const object = generateCode(
|
|
21
|
+
node.object,
|
|
22
|
+
failOnForbidden,
|
|
23
|
+
transformIdentifier
|
|
24
|
+
);
|
|
25
|
+
const property = generateCode(
|
|
26
|
+
node.property,
|
|
27
|
+
failOnForbidden,
|
|
28
|
+
transformIdentifier
|
|
29
|
+
);
|
|
30
|
+
return `${object}.${property}`;
|
|
31
|
+
}
|
|
32
|
+
if (node.type === "Literal") {
|
|
33
|
+
return node.raw;
|
|
34
|
+
}
|
|
35
|
+
if (node.type === "UnaryExpression") {
|
|
36
|
+
const arg = generateCode(
|
|
37
|
+
node.argument,
|
|
38
|
+
failOnForbidden,
|
|
39
|
+
transformIdentifier
|
|
40
|
+
);
|
|
41
|
+
return `${node.operator}${arg}`;
|
|
42
|
+
}
|
|
43
|
+
if (node.type === "BinaryExpression") {
|
|
44
|
+
const left = generateCode(
|
|
45
|
+
node.left,
|
|
46
|
+
failOnForbidden,
|
|
47
|
+
transformIdentifier
|
|
48
|
+
);
|
|
49
|
+
const right = generateCode(
|
|
50
|
+
node.right,
|
|
51
|
+
failOnForbidden,
|
|
52
|
+
transformIdentifier
|
|
53
|
+
);
|
|
54
|
+
return `${left} ${node.operator} ${right}`;
|
|
55
|
+
}
|
|
56
|
+
if (node.type === "ArrayExpression") {
|
|
57
|
+
const elements = node.elements.map(
|
|
58
|
+
(element) => generateCode(element, failOnForbidden, transformIdentifier)
|
|
59
|
+
);
|
|
60
|
+
return `[${elements.join(", ")}]`;
|
|
61
|
+
}
|
|
62
|
+
if (node.type === "CallExpression") {
|
|
63
|
+
if (failOnForbidden) {
|
|
64
|
+
const callee2 = generateCode(
|
|
65
|
+
node.callee,
|
|
66
|
+
false,
|
|
67
|
+
transformIdentifier
|
|
68
|
+
);
|
|
69
|
+
throw Error(`Cannot call "${callee2}"`);
|
|
70
|
+
}
|
|
71
|
+
const callee = generateCode(
|
|
72
|
+
node.callee,
|
|
73
|
+
failOnForbidden,
|
|
74
|
+
transformIdentifier
|
|
75
|
+
);
|
|
76
|
+
const args = node.arguments.map(
|
|
77
|
+
(arg) => generateCode(arg, failOnForbidden, transformIdentifier)
|
|
78
|
+
);
|
|
79
|
+
return `${callee}(${args.join(", ")})`;
|
|
80
|
+
}
|
|
81
|
+
if (node.type === "ThisExpression") {
|
|
82
|
+
if (failOnForbidden) {
|
|
83
|
+
throw Error(`"this" is not supported`);
|
|
84
|
+
}
|
|
85
|
+
return "this";
|
|
86
|
+
}
|
|
87
|
+
if (node.type === "ConditionalExpression") {
|
|
88
|
+
throw Error("Ternary operator is not supported");
|
|
89
|
+
}
|
|
90
|
+
if (node.type === "Compound") {
|
|
91
|
+
throw Error("Cannot use multiple expressions");
|
|
92
|
+
}
|
|
93
|
+
node;
|
|
94
|
+
return "";
|
|
95
|
+
};
|
|
96
|
+
const validateExpression = (code, transformIdentifier = (id) => id) => {
|
|
97
|
+
const expression = jsep(code);
|
|
98
|
+
return generateCode(expression, true, transformIdentifier);
|
|
99
|
+
};
|
|
100
|
+
const sortTopologically = (list, depsById, explored = /* @__PURE__ */ new Set(), sorted = []) => {
|
|
101
|
+
for (const id of list) {
|
|
102
|
+
if (explored.has(id)) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
explored.add(id);
|
|
106
|
+
const deps = depsById.get(id);
|
|
107
|
+
if (deps) {
|
|
108
|
+
sortTopologically(deps, depsById, explored, sorted);
|
|
109
|
+
}
|
|
110
|
+
sorted.push(id);
|
|
111
|
+
}
|
|
112
|
+
return sorted;
|
|
113
|
+
};
|
|
114
|
+
const generateExpressionsComputation = (variables, expressions) => {
|
|
115
|
+
const depsById = /* @__PURE__ */ new Map();
|
|
116
|
+
for (const [id, code] of expressions) {
|
|
117
|
+
const deps = /* @__PURE__ */ new Set();
|
|
118
|
+
validateExpression(code, (identifier) => {
|
|
119
|
+
if (variables.has(identifier)) {
|
|
120
|
+
return identifier;
|
|
121
|
+
}
|
|
122
|
+
if (expressions.has(identifier)) {
|
|
123
|
+
deps.add(identifier);
|
|
124
|
+
return identifier;
|
|
125
|
+
}
|
|
126
|
+
throw Error(`Unknown dependency "${identifier}"`);
|
|
127
|
+
});
|
|
128
|
+
depsById.set(id, deps);
|
|
129
|
+
}
|
|
130
|
+
const sortedExpressions = sortTopologically(
|
|
131
|
+
new Set(expressions.keys()),
|
|
132
|
+
depsById
|
|
133
|
+
);
|
|
134
|
+
let generatedCode = "";
|
|
135
|
+
for (const id of variables) {
|
|
136
|
+
generatedCode += `const ${id} = _variables.get('${id}');
|
|
137
|
+
`;
|
|
138
|
+
}
|
|
139
|
+
for (const id of sortedExpressions) {
|
|
140
|
+
const code = expressions.get(id);
|
|
141
|
+
if (code === void 0) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
generatedCode += `const ${id} = (${code});
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
147
|
+
generatedCode += `return new Map([
|
|
148
|
+
`;
|
|
149
|
+
for (const id of sortedExpressions) {
|
|
150
|
+
generatedCode += ` ['${id}', ${id}],
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
generatedCode += `]);`;
|
|
154
|
+
return generatedCode;
|
|
155
|
+
};
|
|
156
|
+
const executeExpressions = (variables, expressions) => {
|
|
157
|
+
const generatedCode = generateExpressionsComputation(
|
|
158
|
+
new Set(variables.keys()),
|
|
159
|
+
expressions
|
|
160
|
+
);
|
|
161
|
+
const executeFn = new Function("_variables", generatedCode);
|
|
162
|
+
const values = executeFn(variables);
|
|
163
|
+
return values;
|
|
164
|
+
};
|
|
165
|
+
const dataSourceVariablePrefix = "$ws$dataSource$";
|
|
166
|
+
const encodeDataSourceVariable = (id) => {
|
|
167
|
+
const encoded = id.replaceAll("-", "__DASH__");
|
|
168
|
+
return `${dataSourceVariablePrefix}${encoded}`;
|
|
169
|
+
};
|
|
170
|
+
const decodeDataSourceVariable = (name) => {
|
|
171
|
+
if (name.startsWith(dataSourceVariablePrefix)) {
|
|
172
|
+
const encoded = name.slice(dataSourceVariablePrefix.length);
|
|
173
|
+
return encoded.replaceAll("__DASH__", "-");
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
};
|
|
177
|
+
export {
|
|
178
|
+
decodeDataSourceVariable,
|
|
179
|
+
encodeDataSourceVariable,
|
|
180
|
+
executeExpressions,
|
|
181
|
+
generateExpressionsComputation,
|
|
182
|
+
validateExpression
|
|
183
|
+
};
|
package/lib/index.js
CHANGED
|
@@ -10,17 +10,31 @@ import {
|
|
|
10
10
|
} from "./components/component-meta";
|
|
11
11
|
export * from "./embed-template";
|
|
12
12
|
import {
|
|
13
|
+
useInstanceProps,
|
|
13
14
|
usePropUrl,
|
|
14
15
|
usePropAsset,
|
|
15
16
|
getInstanceIdFromComponentProps
|
|
16
17
|
} from "./props";
|
|
17
18
|
import { ReactSdkContext } from "./context";
|
|
19
|
+
import {
|
|
20
|
+
validateExpression,
|
|
21
|
+
generateExpressionsComputation,
|
|
22
|
+
executeExpressions,
|
|
23
|
+
encodeDataSourceVariable,
|
|
24
|
+
decodeDataSourceVariable
|
|
25
|
+
} from "./expression";
|
|
18
26
|
export {
|
|
19
27
|
ReactSdkContext,
|
|
20
28
|
componentCategories,
|
|
29
|
+
decodeDataSourceVariable,
|
|
21
30
|
defaultStates,
|
|
31
|
+
encodeDataSourceVariable,
|
|
32
|
+
executeExpressions,
|
|
33
|
+
generateExpressionsComputation,
|
|
22
34
|
getInstanceIdFromComponentProps,
|
|
23
35
|
stateCategories,
|
|
36
|
+
useInstanceProps,
|
|
24
37
|
usePropAsset,
|
|
25
|
-
usePropUrl
|
|
38
|
+
usePropUrl,
|
|
39
|
+
validateExpression
|
|
26
40
|
};
|
package/lib/props.js
CHANGED
|
@@ -16,17 +16,35 @@ const getPropsByInstanceId = (props) => {
|
|
|
16
16
|
return propsByInstanceId;
|
|
17
17
|
};
|
|
18
18
|
const useInstanceProps = (instanceId) => {
|
|
19
|
-
const { propsByInstanceIdStore } = useContext(ReactSdkContext);
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
const { propsByInstanceIdStore, dataSourceValuesStore } = useContext(ReactSdkContext);
|
|
20
|
+
const instancePropsObjectStore = useMemo(() => {
|
|
21
|
+
return computed(
|
|
22
|
+
[propsByInstanceIdStore, dataSourceValuesStore],
|
|
23
|
+
(propsByInstanceId, dataSourceValues) => {
|
|
24
|
+
const instancePropsObject2 = {};
|
|
25
|
+
const instanceProps = propsByInstanceId.get(instanceId);
|
|
26
|
+
if (instanceProps === void 0) {
|
|
27
|
+
return instancePropsObject2;
|
|
28
|
+
}
|
|
29
|
+
for (const prop of instanceProps) {
|
|
30
|
+
if (prop.type === "asset" || prop.type === "page") {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (prop.type === "dataSource") {
|
|
34
|
+
const dataSourceId = prop.value;
|
|
35
|
+
const value = dataSourceValues.get(dataSourceId);
|
|
36
|
+
if (value !== void 0) {
|
|
37
|
+
instancePropsObject2[prop.name] = value;
|
|
38
|
+
}
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
instancePropsObject2[prop.name] = prop.value;
|
|
42
|
+
}
|
|
43
|
+
return instancePropsObject2;
|
|
27
44
|
}
|
|
28
|
-
|
|
29
|
-
}
|
|
45
|
+
);
|
|
46
|
+
}, [propsByInstanceIdStore, dataSourceValuesStore, instanceId]);
|
|
47
|
+
const instancePropsObject = useStore(instancePropsObjectStore);
|
|
30
48
|
return instancePropsObject;
|
|
31
49
|
};
|
|
32
50
|
const usePropAsset = (instanceId, name) => {
|
|
@@ -11,6 +11,8 @@ const createElementsTree = ({
|
|
|
11
11
|
propsByInstanceIdStore,
|
|
12
12
|
assetsStore,
|
|
13
13
|
pagesStore,
|
|
14
|
+
dataSourceValuesStore,
|
|
15
|
+
onDataSourceUpdate,
|
|
14
16
|
Component,
|
|
15
17
|
components
|
|
16
18
|
}) => {
|
|
@@ -46,9 +48,20 @@ const createElementsTree = ({
|
|
|
46
48
|
propsByInstanceIdStore,
|
|
47
49
|
assetsStore,
|
|
48
50
|
pagesStore,
|
|
51
|
+
dataSourceValuesStore,
|
|
49
52
|
renderer,
|
|
50
53
|
imageBaseUrl,
|
|
51
|
-
assetBaseUrl
|
|
54
|
+
assetBaseUrl,
|
|
55
|
+
setDataSourceValue: (instanceId, propName, value) => {
|
|
56
|
+
const propsByInstanceId = propsByInstanceIdStore.get();
|
|
57
|
+
const props = propsByInstanceId.get(instanceId);
|
|
58
|
+
const prop = props?.find((prop2) => prop2.name === propName);
|
|
59
|
+
if (prop?.type !== "dataSource") {
|
|
60
|
+
throw Error(`${propName} is not data source`);
|
|
61
|
+
}
|
|
62
|
+
const dataSourceId = prop.value;
|
|
63
|
+
onDataSourceUpdate(dataSourceId, value);
|
|
64
|
+
}
|
|
52
65
|
},
|
|
53
66
|
children: root
|
|
54
67
|
}
|
package/lib/tree/root.js
CHANGED
|
@@ -1,12 +1,47 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
import {
|
|
3
|
+
atom,
|
|
4
|
+
computed
|
|
5
|
+
} from "nanostores";
|
|
2
6
|
import { createElementsTree } from "./create-elements-tree";
|
|
3
7
|
import { WebstudioComponent } from "./webstudio-component";
|
|
4
8
|
import { getPropsByInstanceId } from "../props";
|
|
5
9
|
const InstanceRoot = ({
|
|
6
10
|
data,
|
|
11
|
+
computeExpressions,
|
|
7
12
|
Component,
|
|
8
13
|
components
|
|
9
14
|
}) => {
|
|
15
|
+
const dataSourceVariablesStoreRef = useRef(void 0);
|
|
16
|
+
if (dataSourceVariablesStoreRef.current === void 0) {
|
|
17
|
+
dataSourceVariablesStoreRef.current = atom(/* @__PURE__ */ new Map());
|
|
18
|
+
}
|
|
19
|
+
const dataSourceVariablesStore = dataSourceVariablesStoreRef.current;
|
|
20
|
+
const dataSourceValuesStoreRef = useRef(void 0);
|
|
21
|
+
if (dataSourceValuesStoreRef.current === void 0) {
|
|
22
|
+
dataSourceValuesStoreRef.current = computed(
|
|
23
|
+
dataSourceVariablesStore,
|
|
24
|
+
(dataSourceVariables) => {
|
|
25
|
+
const dataSourceValues = /* @__PURE__ */ new Map();
|
|
26
|
+
for (const [dataSourceId, dataSource] of data.build.dataSources) {
|
|
27
|
+
if (dataSource.type === "variable") {
|
|
28
|
+
const value = dataSourceVariables.get(dataSourceId) ?? dataSource.value.value;
|
|
29
|
+
dataSourceValues.set(dataSourceId, value);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const result = computeExpressions(dataSourceValues);
|
|
34
|
+
for (const [id, value] of result) {
|
|
35
|
+
dataSourceValues.set(id, value);
|
|
36
|
+
}
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.error(error);
|
|
39
|
+
}
|
|
40
|
+
return dataSourceValues;
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
const dataSourceValuesStore = dataSourceValuesStoreRef.current;
|
|
10
45
|
return createElementsTree({
|
|
11
46
|
imageBaseUrl: data.params?.imageBaseUrl ?? "/",
|
|
12
47
|
assetBaseUrl: data.params?.assetBaseUrl ?? "/",
|
|
@@ -17,6 +52,12 @@ const InstanceRoot = ({
|
|
|
17
52
|
),
|
|
18
53
|
assetsStore: atom(new Map(data.assets.map((asset) => [asset.id, asset]))),
|
|
19
54
|
pagesStore: atom(new Map(data.pages.map((page) => [page.id, page]))),
|
|
55
|
+
dataSourceValuesStore,
|
|
56
|
+
onDataSourceUpdate: (dataSourceId, value) => {
|
|
57
|
+
const dataSourceVariables = new Map(dataSourceVariablesStore.get());
|
|
58
|
+
dataSourceVariables.set(dataSourceId, value);
|
|
59
|
+
dataSourceVariablesStore.set(dataSourceVariables);
|
|
60
|
+
},
|
|
20
61
|
Component: Component ?? WebstudioComponent,
|
|
21
62
|
components
|
|
22
63
|
});
|
|
@@ -23,13 +23,18 @@ const WebstudioComponent = ({
|
|
|
23
23
|
components,
|
|
24
24
|
...rest
|
|
25
25
|
}) => {
|
|
26
|
-
const instanceProps = useInstanceProps(
|
|
26
|
+
const { [showAttribute]: show = true, ...instanceProps } = useInstanceProps(
|
|
27
|
+
instance.id
|
|
28
|
+
);
|
|
27
29
|
const props = {
|
|
28
30
|
...instanceProps,
|
|
29
31
|
...rest,
|
|
30
32
|
[idAttribute]: instance.id,
|
|
31
33
|
[componentAttribute]: instance.component
|
|
32
34
|
};
|
|
35
|
+
if (show === false) {
|
|
36
|
+
return /* @__PURE__ */ jsx(Fragment, {});
|
|
37
|
+
}
|
|
33
38
|
const Component = components.get(instance.component);
|
|
34
39
|
if (Component === void 0) {
|
|
35
40
|
return /* @__PURE__ */ jsx(Fragment, {});
|
|
@@ -38,11 +43,13 @@ const WebstudioComponent = ({
|
|
|
38
43
|
};
|
|
39
44
|
const idAttribute = "data-ws-id";
|
|
40
45
|
const componentAttribute = "data-ws-component";
|
|
46
|
+
const showAttribute = "data-ws-show";
|
|
41
47
|
const collapsedAttribute = "data-ws-collapsed";
|
|
42
48
|
export {
|
|
43
49
|
WebstudioComponent,
|
|
44
50
|
collapsedAttribute,
|
|
45
51
|
componentAttribute,
|
|
46
52
|
idAttribute,
|
|
47
|
-
renderWebstudioComponentChildren
|
|
53
|
+
renderWebstudioComponentChildren,
|
|
54
|
+
showAttribute
|
|
48
55
|
};
|
|
@@ -694,7 +694,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
694
694
|
type: "unparsed";
|
|
695
695
|
value: string;
|
|
696
696
|
hidden?: boolean | undefined;
|
|
697
|
+
} | {
|
|
698
|
+
type: "rgb";
|
|
699
|
+
alpha: number;
|
|
700
|
+
r: number;
|
|
701
|
+
g: number;
|
|
702
|
+
b: number;
|
|
697
703
|
})[];
|
|
704
|
+
hidden?: boolean | undefined;
|
|
698
705
|
} | {
|
|
699
706
|
type: "layers";
|
|
700
707
|
value: ({
|
|
@@ -734,7 +741,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
734
741
|
type: "unparsed";
|
|
735
742
|
value: string;
|
|
736
743
|
hidden?: boolean | undefined;
|
|
744
|
+
} | {
|
|
745
|
+
type: "rgb";
|
|
746
|
+
alpha: number;
|
|
747
|
+
r: number;
|
|
748
|
+
g: number;
|
|
749
|
+
b: number;
|
|
737
750
|
})[];
|
|
751
|
+
hidden?: boolean | undefined;
|
|
738
752
|
})[];
|
|
739
753
|
} | {
|
|
740
754
|
type: "var";
|
|
@@ -782,7 +796,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
782
796
|
type: "unparsed";
|
|
783
797
|
value: string;
|
|
784
798
|
hidden?: boolean | undefined;
|
|
799
|
+
} | {
|
|
800
|
+
type: "rgb";
|
|
801
|
+
alpha: number;
|
|
802
|
+
r: number;
|
|
803
|
+
g: number;
|
|
804
|
+
b: number;
|
|
785
805
|
})[];
|
|
806
|
+
hidden?: boolean | undefined;
|
|
786
807
|
} | {
|
|
787
808
|
type: "layers";
|
|
788
809
|
value: ({
|
|
@@ -822,7 +843,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
822
843
|
type: "unparsed";
|
|
823
844
|
value: string;
|
|
824
845
|
hidden?: boolean | undefined;
|
|
846
|
+
} | {
|
|
847
|
+
type: "rgb";
|
|
848
|
+
alpha: number;
|
|
849
|
+
r: number;
|
|
850
|
+
g: number;
|
|
851
|
+
b: number;
|
|
825
852
|
})[];
|
|
853
|
+
hidden?: boolean | undefined;
|
|
826
854
|
})[];
|
|
827
855
|
})[];
|
|
828
856
|
};
|
|
@@ -878,7 +906,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
878
906
|
type: "unparsed";
|
|
879
907
|
value: string;
|
|
880
908
|
hidden?: boolean | undefined;
|
|
909
|
+
} | {
|
|
910
|
+
type: "rgb";
|
|
911
|
+
alpha: number;
|
|
912
|
+
r: number;
|
|
913
|
+
g: number;
|
|
914
|
+
b: number;
|
|
881
915
|
})[];
|
|
916
|
+
hidden?: boolean | undefined;
|
|
882
917
|
} | {
|
|
883
918
|
type: "layers";
|
|
884
919
|
value: ({
|
|
@@ -918,7 +953,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
918
953
|
type: "unparsed";
|
|
919
954
|
value: string;
|
|
920
955
|
hidden?: boolean | undefined;
|
|
956
|
+
} | {
|
|
957
|
+
type: "rgb";
|
|
958
|
+
alpha: number;
|
|
959
|
+
r: number;
|
|
960
|
+
g: number;
|
|
961
|
+
b: number;
|
|
921
962
|
})[];
|
|
963
|
+
hidden?: boolean | undefined;
|
|
922
964
|
})[];
|
|
923
965
|
} | {
|
|
924
966
|
type: "var";
|
|
@@ -966,7 +1008,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
966
1008
|
type: "unparsed";
|
|
967
1009
|
value: string;
|
|
968
1010
|
hidden?: boolean | undefined;
|
|
1011
|
+
} | {
|
|
1012
|
+
type: "rgb";
|
|
1013
|
+
alpha: number;
|
|
1014
|
+
r: number;
|
|
1015
|
+
g: number;
|
|
1016
|
+
b: number;
|
|
969
1017
|
})[];
|
|
1018
|
+
hidden?: boolean | undefined;
|
|
970
1019
|
} | {
|
|
971
1020
|
type: "layers";
|
|
972
1021
|
value: ({
|
|
@@ -1006,7 +1055,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1006
1055
|
type: "unparsed";
|
|
1007
1056
|
value: string;
|
|
1008
1057
|
hidden?: boolean | undefined;
|
|
1058
|
+
} | {
|
|
1059
|
+
type: "rgb";
|
|
1060
|
+
alpha: number;
|
|
1061
|
+
r: number;
|
|
1062
|
+
g: number;
|
|
1063
|
+
b: number;
|
|
1009
1064
|
})[];
|
|
1065
|
+
hidden?: boolean | undefined;
|
|
1010
1066
|
})[];
|
|
1011
1067
|
})[];
|
|
1012
1068
|
};
|
|
@@ -1096,7 +1152,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1096
1152
|
type: "unparsed";
|
|
1097
1153
|
value: string;
|
|
1098
1154
|
hidden?: boolean | undefined;
|
|
1155
|
+
} | {
|
|
1156
|
+
type: "rgb";
|
|
1157
|
+
alpha: number;
|
|
1158
|
+
r: number;
|
|
1159
|
+
g: number;
|
|
1160
|
+
b: number;
|
|
1099
1161
|
})[];
|
|
1162
|
+
hidden?: boolean | undefined;
|
|
1100
1163
|
} | {
|
|
1101
1164
|
type: "layers";
|
|
1102
1165
|
value: ({
|
|
@@ -1136,7 +1199,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1136
1199
|
type: "unparsed";
|
|
1137
1200
|
value: string;
|
|
1138
1201
|
hidden?: boolean | undefined;
|
|
1202
|
+
} | {
|
|
1203
|
+
type: "rgb";
|
|
1204
|
+
alpha: number;
|
|
1205
|
+
r: number;
|
|
1206
|
+
g: number;
|
|
1207
|
+
b: number;
|
|
1139
1208
|
})[];
|
|
1209
|
+
hidden?: boolean | undefined;
|
|
1140
1210
|
})[];
|
|
1141
1211
|
} | {
|
|
1142
1212
|
type: "var";
|
|
@@ -1184,7 +1254,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1184
1254
|
type: "unparsed";
|
|
1185
1255
|
value: string;
|
|
1186
1256
|
hidden?: boolean | undefined;
|
|
1257
|
+
} | {
|
|
1258
|
+
type: "rgb";
|
|
1259
|
+
alpha: number;
|
|
1260
|
+
r: number;
|
|
1261
|
+
g: number;
|
|
1262
|
+
b: number;
|
|
1187
1263
|
})[];
|
|
1264
|
+
hidden?: boolean | undefined;
|
|
1188
1265
|
} | {
|
|
1189
1266
|
type: "layers";
|
|
1190
1267
|
value: ({
|
|
@@ -1224,7 +1301,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1224
1301
|
type: "unparsed";
|
|
1225
1302
|
value: string;
|
|
1226
1303
|
hidden?: boolean | undefined;
|
|
1304
|
+
} | {
|
|
1305
|
+
type: "rgb";
|
|
1306
|
+
alpha: number;
|
|
1307
|
+
r: number;
|
|
1308
|
+
g: number;
|
|
1309
|
+
b: number;
|
|
1227
1310
|
})[];
|
|
1311
|
+
hidden?: boolean | undefined;
|
|
1228
1312
|
})[];
|
|
1229
1313
|
})[];
|
|
1230
1314
|
};
|
|
@@ -1300,7 +1384,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1300
1384
|
type: "unparsed";
|
|
1301
1385
|
value: string;
|
|
1302
1386
|
hidden?: boolean | undefined;
|
|
1387
|
+
} | {
|
|
1388
|
+
type: "rgb";
|
|
1389
|
+
alpha: number;
|
|
1390
|
+
r: number;
|
|
1391
|
+
g: number;
|
|
1392
|
+
b: number;
|
|
1303
1393
|
})[];
|
|
1394
|
+
hidden?: boolean | undefined;
|
|
1304
1395
|
} | {
|
|
1305
1396
|
type: "layers";
|
|
1306
1397
|
value: ({
|
|
@@ -1340,7 +1431,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1340
1431
|
type: "unparsed";
|
|
1341
1432
|
value: string;
|
|
1342
1433
|
hidden?: boolean | undefined;
|
|
1434
|
+
} | {
|
|
1435
|
+
type: "rgb";
|
|
1436
|
+
alpha: number;
|
|
1437
|
+
r: number;
|
|
1438
|
+
g: number;
|
|
1439
|
+
b: number;
|
|
1343
1440
|
})[];
|
|
1441
|
+
hidden?: boolean | undefined;
|
|
1344
1442
|
})[];
|
|
1345
1443
|
} | {
|
|
1346
1444
|
type: "var";
|
|
@@ -1388,7 +1486,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1388
1486
|
type: "unparsed";
|
|
1389
1487
|
value: string;
|
|
1390
1488
|
hidden?: boolean | undefined;
|
|
1489
|
+
} | {
|
|
1490
|
+
type: "rgb";
|
|
1491
|
+
alpha: number;
|
|
1492
|
+
r: number;
|
|
1493
|
+
g: number;
|
|
1494
|
+
b: number;
|
|
1391
1495
|
})[];
|
|
1496
|
+
hidden?: boolean | undefined;
|
|
1392
1497
|
} | {
|
|
1393
1498
|
type: "layers";
|
|
1394
1499
|
value: ({
|
|
@@ -1428,7 +1533,14 @@ declare const WsComponentMeta: z.ZodObject<{
|
|
|
1428
1533
|
type: "unparsed";
|
|
1429
1534
|
value: string;
|
|
1430
1535
|
hidden?: boolean | undefined;
|
|
1536
|
+
} | {
|
|
1537
|
+
type: "rgb";
|
|
1538
|
+
alpha: number;
|
|
1539
|
+
r: number;
|
|
1540
|
+
g: number;
|
|
1541
|
+
b: number;
|
|
1431
1542
|
})[];
|
|
1543
|
+
hidden?: boolean | undefined;
|
|
1432
1544
|
})[];
|
|
1433
1545
|
})[];
|
|
1434
1546
|
};
|
package/lib/types/context.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { type ReadableAtom } from "nanostores";
|
|
3
3
|
import type { Assets } from "@webstudio-is/asset-uploader";
|
|
4
|
+
import type { DataSource, Instance, Prop } from "@webstudio-is/project-build";
|
|
4
5
|
import type { Pages, PropsByInstanceId } from "./props";
|
|
5
6
|
export type Params = {
|
|
6
7
|
renderer?: "canvas" | "preview";
|
|
@@ -32,4 +33,6 @@ export declare const ReactSdkContext: import("react").Context<Params & {
|
|
|
32
33
|
propsByInstanceIdStore: ReadableAtom<PropsByInstanceId>;
|
|
33
34
|
assetsStore: ReadableAtom<Assets>;
|
|
34
35
|
pagesStore: ReadableAtom<Pages>;
|
|
36
|
+
dataSourceValuesStore: ReadableAtom<Map<DataSource["id"], unknown>>;
|
|
37
|
+
setDataSourceValue: (instanceId: Instance["id"], prop: Prop["name"], value: unknown) => void;
|
|
35
38
|
}>;
|