@measured/puck 0.19.0-canary.61c8658 → 0.19.0-canary.6dc5101e
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/README.md +2 -4
- package/dist/chunk-DDGE2CCN.mjs +875 -0
- package/dist/index.css +86 -71
- package/dist/index.d.mts +118 -121
- package/dist/index.d.ts +118 -121
- package/dist/index.js +2552 -2277
- package/dist/index.mjs +1798 -2087
- package/dist/rsc.d.mts +2 -2
- package/dist/rsc.d.ts +2 -2
- package/dist/rsc.js +622 -135
- package/dist/rsc.mjs +9 -104
- package/dist/{resolve-all-data-DleIzc4N.d.mts → walk-tree-DOB5QZVq.d.mts} +107 -26
- package/dist/{resolve-all-data-DleIzc4N.d.ts → walk-tree-DOB5QZVq.d.ts} +107 -26
- package/package.json +6 -6
- package/dist/chunk-T6VJEBJD.mjs +0 -272
package/dist/rsc.mjs
CHANGED
@@ -1,113 +1,18 @@
|
|
1
1
|
import {
|
2
|
-
|
3
|
-
__spreadValues,
|
2
|
+
Render,
|
4
3
|
init_react_import,
|
4
|
+
migrate,
|
5
5
|
resolveAllData,
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
setupZone
|
10
|
-
} from "./chunk-T6VJEBJD.mjs";
|
6
|
+
transformProps,
|
7
|
+
walkTree
|
8
|
+
} from "./chunk-DDGE2CCN.mjs";
|
11
9
|
|
12
10
|
// rsc.tsx
|
13
11
|
init_react_import();
|
14
|
-
|
15
|
-
// components/ServerRender/index.tsx
|
16
|
-
init_react_import();
|
17
|
-
import { Fragment, jsx } from "react/jsx-runtime";
|
18
|
-
function DropZoneRender({
|
19
|
-
zone,
|
20
|
-
data,
|
21
|
-
areaId = "root",
|
22
|
-
config,
|
23
|
-
metadata = {}
|
24
|
-
}) {
|
25
|
-
let zoneCompound = rootDroppableId;
|
26
|
-
let content = (data == null ? void 0 : data.content) || [];
|
27
|
-
if (!data || !config) {
|
28
|
-
return null;
|
29
|
-
}
|
30
|
-
if (areaId !== rootAreaId && zone !== rootZone) {
|
31
|
-
zoneCompound = `${areaId}:${zone}`;
|
32
|
-
content = setupZone(data, zoneCompound).zones[zoneCompound];
|
33
|
-
}
|
34
|
-
return /* @__PURE__ */ jsx(Fragment, { children: content.map((item) => {
|
35
|
-
const Component = config.components[item.type];
|
36
|
-
if (Component) {
|
37
|
-
return /* @__PURE__ */ jsx(
|
38
|
-
Component.render,
|
39
|
-
__spreadProps(__spreadValues({}, item.props), {
|
40
|
-
puck: {
|
41
|
-
renderDropZone: ({ zone: zone2 }) => /* @__PURE__ */ jsx(
|
42
|
-
DropZoneRender,
|
43
|
-
{
|
44
|
-
zone: zone2,
|
45
|
-
data,
|
46
|
-
areaId: item.props.id,
|
47
|
-
config,
|
48
|
-
metadata
|
49
|
-
}
|
50
|
-
),
|
51
|
-
metadata
|
52
|
-
}
|
53
|
-
}),
|
54
|
-
item.props.id
|
55
|
-
);
|
56
|
-
}
|
57
|
-
return null;
|
58
|
-
}) });
|
59
|
-
}
|
60
|
-
function Render({
|
61
|
-
config,
|
62
|
-
data,
|
63
|
-
metadata
|
64
|
-
}) {
|
65
|
-
var _a;
|
66
|
-
if ((_a = config.root) == null ? void 0 : _a.render) {
|
67
|
-
const rootProps = data.root.props || data.root;
|
68
|
-
const title = rootProps.title || "";
|
69
|
-
return /* @__PURE__ */ jsx(
|
70
|
-
config.root.render,
|
71
|
-
__spreadProps(__spreadValues({}, rootProps), {
|
72
|
-
puck: {
|
73
|
-
renderDropZone: ({ zone }) => /* @__PURE__ */ jsx(
|
74
|
-
DropZoneRender,
|
75
|
-
{
|
76
|
-
zone,
|
77
|
-
data,
|
78
|
-
config,
|
79
|
-
metadata
|
80
|
-
}
|
81
|
-
),
|
82
|
-
isEditing: false,
|
83
|
-
dragRef: null
|
84
|
-
},
|
85
|
-
title,
|
86
|
-
editMode: false,
|
87
|
-
id: "puck-root",
|
88
|
-
children: /* @__PURE__ */ jsx(
|
89
|
-
DropZoneRender,
|
90
|
-
{
|
91
|
-
config,
|
92
|
-
data,
|
93
|
-
zone: rootZone,
|
94
|
-
metadata
|
95
|
-
}
|
96
|
-
)
|
97
|
-
})
|
98
|
-
);
|
99
|
-
}
|
100
|
-
return /* @__PURE__ */ jsx(
|
101
|
-
DropZoneRender,
|
102
|
-
{
|
103
|
-
config,
|
104
|
-
data,
|
105
|
-
zone: rootZone,
|
106
|
-
metadata
|
107
|
-
}
|
108
|
-
);
|
109
|
-
}
|
110
12
|
export {
|
111
13
|
Render,
|
112
|
-
|
14
|
+
migrate,
|
15
|
+
resolveAllData,
|
16
|
+
transformProps,
|
17
|
+
walkTree
|
113
18
|
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { CSSProperties, ReactElement,
|
1
|
+
import { CSSProperties, ReactElement, ReactNode, JSX } from 'react';
|
2
2
|
|
3
3
|
type ItemSelector = {
|
4
4
|
index: number;
|
@@ -23,6 +23,7 @@ type FieldOptions = Array<FieldOption> | ReadonlyArray<FieldOption>;
|
|
23
23
|
type BaseField = {
|
24
24
|
label?: string;
|
25
25
|
labelIcon?: ReactElement;
|
26
|
+
metadata?: Metadata;
|
26
27
|
};
|
27
28
|
type TextField = BaseField & {
|
28
29
|
type: "text";
|
@@ -109,16 +110,22 @@ type ExternalField<Props extends {
|
|
109
110
|
filterFields?: Record<string, Field>;
|
110
111
|
initialFilters?: Record<string, any>;
|
111
112
|
};
|
112
|
-
type
|
113
|
+
type CustomFieldRender<Value extends any> = (props: {
|
114
|
+
field: CustomField<Value>;
|
115
|
+
name: string;
|
116
|
+
id: string;
|
117
|
+
value: Value;
|
118
|
+
onChange: (value: Value) => void;
|
119
|
+
readOnly?: boolean;
|
120
|
+
}) => ReactElement;
|
121
|
+
type CustomField<Value extends any> = BaseField & {
|
113
122
|
type: "custom";
|
114
|
-
render:
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
readOnly?: boolean;
|
121
|
-
}) => ReactElement;
|
123
|
+
render: CustomFieldRender<Value>;
|
124
|
+
};
|
125
|
+
type SlotField = BaseField & {
|
126
|
+
type: "slot";
|
127
|
+
allow?: string[];
|
128
|
+
disallow?: string[];
|
122
129
|
};
|
123
130
|
type Field<Props extends any = any> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<Props extends {
|
124
131
|
[key: string]: any;
|
@@ -128,7 +135,7 @@ type Field<Props extends any = any> = TextField | NumberField | TextareaField |
|
|
128
135
|
[key: string]: any;
|
129
136
|
} ? Props : any> | ExternalFieldWithAdaptor<Props extends {
|
130
137
|
[key: string]: any;
|
131
|
-
} ? Props : any> | CustomField<Props
|
138
|
+
} ? Props : any> | CustomField<Props> | SlotField;
|
132
139
|
type Fields<ComponentProps extends DefaultComponentProps = DefaultComponentProps> = {
|
133
140
|
[PropName in keyof Omit<ComponentProps, "editMode">]: Field<ComponentProps[PropName]>;
|
134
141
|
};
|
@@ -140,7 +147,10 @@ type FieldProps<F = Field<any>, ValueType = any> = {
|
|
140
147
|
readOnly?: boolean;
|
141
148
|
};
|
142
149
|
|
143
|
-
type PuckComponent<Props> = (props: WithId<WithPuckProps<
|
150
|
+
type PuckComponent<Props> = (props: WithId<WithPuckProps<{
|
151
|
+
[PropName in keyof Props]: Props[PropName] extends Slot ? (props?: Omit<DropZoneProps, "zone">) => ReactNode : Props[PropName];
|
152
|
+
}>>) => JSX.Element;
|
153
|
+
type ResolveDataTrigger = "insert" | "replace" | "load" | "force";
|
144
154
|
type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponentProps, FieldProps extends DefaultComponentProps = RenderProps, DataShape = Omit<ComponentData<FieldProps>, "type">> = {
|
145
155
|
render: PuckComponent<RenderProps>;
|
146
156
|
label?: string;
|
@@ -149,7 +159,9 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
|
|
149
159
|
permissions?: Partial<Permissions>;
|
150
160
|
inline?: boolean;
|
151
161
|
resolveFields?: (data: DataShape, params: {
|
152
|
-
changed: Partial<Record<keyof FieldProps, boolean
|
162
|
+
changed: Partial<Record<keyof FieldProps, boolean> & {
|
163
|
+
id: string;
|
164
|
+
}>;
|
153
165
|
fields: Fields<FieldProps>;
|
154
166
|
lastFields: Fields<FieldProps>;
|
155
167
|
lastData: DataShape | null;
|
@@ -157,9 +169,12 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
|
|
157
169
|
parent: ComponentData | null;
|
158
170
|
}) => Promise<Fields<FieldProps>> | Fields<FieldProps>;
|
159
171
|
resolveData?: (data: DataShape, params: {
|
160
|
-
changed: Partial<Record<keyof FieldProps, boolean
|
172
|
+
changed: Partial<Record<keyof FieldProps, boolean> & {
|
173
|
+
id: string;
|
174
|
+
}>;
|
161
175
|
lastData: DataShape | null;
|
162
176
|
metadata: Metadata;
|
177
|
+
trigger: ResolveDataTrigger;
|
163
178
|
}) => Promise<{
|
164
179
|
props?: Partial<FieldProps>;
|
165
180
|
readOnly?: Partial<Record<keyof FieldProps, boolean>>;
|
@@ -168,13 +183,17 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
|
|
168
183
|
readOnly?: Partial<Record<keyof FieldProps, boolean>>;
|
169
184
|
};
|
170
185
|
resolvePermissions?: (data: DataShape, params: {
|
171
|
-
changed: Partial<Record<keyof FieldProps, boolean
|
186
|
+
changed: Partial<Record<keyof FieldProps, boolean> & {
|
187
|
+
id: string;
|
188
|
+
}>;
|
172
189
|
lastPermissions: Partial<Permissions>;
|
173
190
|
permissions: Partial<Permissions>;
|
174
191
|
appState: AppState;
|
175
192
|
lastData: DataShape | null;
|
176
193
|
}) => Promise<Partial<Permissions>> | Partial<Permissions>;
|
194
|
+
metadata?: Metadata;
|
177
195
|
};
|
196
|
+
type RootConfig<RootProps extends DefaultComponentProps = any> = Partial<ComponentConfig<WithChildren<RootProps>, AsFieldProps<RootProps>, RootData<AsFieldProps<RootProps>>>>;
|
178
197
|
type Category<ComponentName> = {
|
179
198
|
components?: ComponentName[];
|
180
199
|
title?: string;
|
@@ -188,7 +207,7 @@ type Config<Props extends DefaultComponentProps = DefaultComponentProps, RootPro
|
|
188
207
|
components: {
|
189
208
|
[ComponentName in keyof Props]: Omit<ComponentConfig<Props[ComponentName], Props[ComponentName]>, "type">;
|
190
209
|
};
|
191
|
-
root?:
|
210
|
+
root?: RootConfig<RootProps>;
|
192
211
|
};
|
193
212
|
|
194
213
|
type WithId<Props> = Props & {
|
@@ -204,7 +223,7 @@ type WithChildren<Props> = Props & {
|
|
204
223
|
};
|
205
224
|
type ExtractPropsFromConfig<UserConfig> = UserConfig extends Config<infer P, any, any> ? P : never;
|
206
225
|
type ExtractRootPropsFromConfig<UserConfig> = UserConfig extends Config<any, infer P, any> ? P : never;
|
207
|
-
type UserGenerics<UserConfig extends Config = Config, UserProps extends ExtractPropsFromConfig<UserConfig> = ExtractPropsFromConfig<UserConfig>, UserRootProps extends ExtractRootPropsFromConfig<UserConfig> = ExtractRootPropsFromConfig<UserConfig>, UserData extends Data<UserProps, UserRootProps> | Data = Data<UserProps, UserRootProps>, UserAppState extends
|
226
|
+
type UserGenerics<UserConfig extends Config = Config, UserProps extends ExtractPropsFromConfig<UserConfig> = ExtractPropsFromConfig<UserConfig>, UserRootProps extends ExtractRootPropsFromConfig<UserConfig> = ExtractRootPropsFromConfig<UserConfig>, UserData extends Data<UserProps, UserRootProps> | Data = Data<UserProps, UserRootProps>, UserAppState extends PrivateAppState<UserData> = PrivateAppState<UserData>, UserComponentData extends ComponentData = UserData["content"][0]> = {
|
208
227
|
UserConfig: UserConfig;
|
209
228
|
UserProps: UserProps;
|
210
229
|
UserRootProps: UserRootProps;
|
@@ -236,22 +255,28 @@ type BaseData<Props extends {
|
|
236
255
|
readOnly?: Partial<Record<keyof Props, boolean>>;
|
237
256
|
};
|
238
257
|
type RootDataWithProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = BaseData<Props> & {
|
239
|
-
props: Props
|
258
|
+
props: WithSlotProps<Props>;
|
240
259
|
};
|
241
260
|
type RootDataWithoutProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = Props;
|
242
261
|
type RootData<Props extends DefaultComponentProps = DefaultRootFieldProps> = Partial<RootDataWithProps<AsFieldProps<Props>>> & Partial<RootDataWithoutProps<Props>>;
|
243
262
|
type ComponentData<Props extends DefaultComponentProps = DefaultComponentProps, Name = string> = {
|
244
263
|
type: Name;
|
245
|
-
props: WithId<Props
|
264
|
+
props: WithId<WithSlotProps<Props>>;
|
265
|
+
} & BaseData<Props>;
|
266
|
+
type ComponentDataOptionalId<Props extends DefaultComponentProps = DefaultComponentProps, Name = string> = {
|
267
|
+
type: Name;
|
268
|
+
props: Props & {
|
269
|
+
id?: string;
|
270
|
+
};
|
246
271
|
} & BaseData<Props>;
|
247
272
|
type MappedItem = ComponentData;
|
248
273
|
type ComponentDataMap<Props extends Record<string, DefaultComponentProps> = DefaultComponentProps> = {
|
249
274
|
[K in keyof Props]: ComponentData<Props[K], K extends string ? K : never>;
|
250
275
|
}[keyof Props];
|
251
276
|
type Content<PropsMap extends {
|
252
|
-
[key: string]:
|
277
|
+
[key: string]: DefaultComponentProps;
|
253
278
|
} = {
|
254
|
-
[key: string]:
|
279
|
+
[key: string]: DefaultComponentProps;
|
255
280
|
}> = ComponentDataMap<PropsMap>[];
|
256
281
|
type Data<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = {
|
257
282
|
root: RootData<RootProps>;
|
@@ -300,6 +325,27 @@ type AppState<UserData extends Data = Data> = {
|
|
300
325
|
ui: UiState;
|
301
326
|
};
|
302
327
|
|
328
|
+
type ZoneType = "root" | "dropzone" | "slot";
|
329
|
+
type PuckNodeData = {
|
330
|
+
data: ComponentData;
|
331
|
+
flatData: ComponentData;
|
332
|
+
parentId: string | null;
|
333
|
+
zone: string;
|
334
|
+
path: string[];
|
335
|
+
};
|
336
|
+
type PuckZoneData = {
|
337
|
+
contentIds: string[];
|
338
|
+
type: ZoneType;
|
339
|
+
};
|
340
|
+
type NodeIndex = Record<string, PuckNodeData>;
|
341
|
+
type ZoneIndex = Record<string, PuckZoneData>;
|
342
|
+
type PrivateAppState<UserData extends Data = Data> = AppState<UserData> & {
|
343
|
+
indexes: {
|
344
|
+
nodes: NodeIndex;
|
345
|
+
zones: ZoneIndex;
|
346
|
+
};
|
347
|
+
};
|
348
|
+
|
303
349
|
type RenderFunc<Props extends {
|
304
350
|
[key: string]: any;
|
305
351
|
} = {
|
@@ -406,6 +452,16 @@ type InitialHistoryNoAppend<AS = Partial<AppState>> = {
|
|
406
452
|
appendData?: false;
|
407
453
|
};
|
408
454
|
type InitialHistory<AS = Partial<AppState>> = InitialHistoryAppend<AS> | InitialHistoryNoAppend<AS>;
|
455
|
+
type Slot<Props extends {
|
456
|
+
[key: string]: DefaultComponentProps;
|
457
|
+
} = {
|
458
|
+
[key: string]: DefaultComponentProps;
|
459
|
+
}> = {
|
460
|
+
[K in keyof Props]: ComponentDataOptionalId<Props[K], K extends string ? K : never>;
|
461
|
+
}[keyof Props][];
|
462
|
+
type WithSlotProps<Props extends DefaultComponentProps = DefaultComponentProps, SlotProps extends DefaultComponentProps = Props> = Props extends any ? any : {
|
463
|
+
[PropName in keyof Props]: Props[PropName] extends Slot<SlotProps> ? Content<SlotProps> : Props[PropName];
|
464
|
+
};
|
409
465
|
|
410
466
|
type InsertAction = {
|
411
467
|
type: "insert";
|
@@ -419,11 +475,17 @@ type DuplicateAction = {
|
|
419
475
|
sourceIndex: number;
|
420
476
|
sourceZone: string;
|
421
477
|
};
|
422
|
-
type ReplaceAction = {
|
478
|
+
type ReplaceAction<UserData extends Data = Data> = {
|
423
479
|
type: "replace";
|
424
480
|
destinationIndex: number;
|
425
481
|
destinationZone: string;
|
426
|
-
data:
|
482
|
+
data: ComponentData;
|
483
|
+
ui?: Partial<AppState<UserData>["ui"]>;
|
484
|
+
};
|
485
|
+
type ReplaceRootAction<UserData extends Data = Data> = {
|
486
|
+
type: "replaceRoot";
|
487
|
+
root: RootData;
|
488
|
+
ui?: Partial<AppState<UserData>["ui"]>;
|
427
489
|
};
|
428
490
|
type ReorderAction = {
|
429
491
|
type: "reorder";
|
@@ -453,7 +515,7 @@ type SetDataAction = {
|
|
453
515
|
};
|
454
516
|
type SetAction<UserData extends Data = Data> = {
|
455
517
|
type: "set";
|
456
|
-
state: Partial<
|
518
|
+
state: Partial<PrivateAppState<UserData>> | ((previous: PrivateAppState<UserData>) => Partial<PrivateAppState<UserData>>);
|
457
519
|
};
|
458
520
|
type RegisterZoneAction = {
|
459
521
|
type: "registerZone";
|
@@ -465,8 +527,27 @@ type UnregisterZoneAction = {
|
|
465
527
|
};
|
466
528
|
type PuckAction = {
|
467
529
|
recordHistory?: boolean;
|
468
|
-
} & (ReorderAction | InsertAction | MoveAction | ReplaceAction | RemoveAction | DuplicateAction | SetAction | SetDataAction | SetUiAction | RegisterZoneAction | UnregisterZoneAction);
|
530
|
+
} & (ReorderAction | InsertAction | MoveAction | ReplaceAction | ReplaceRootAction | RemoveAction | DuplicateAction | SetAction | SetDataAction | SetUiAction | RegisterZoneAction | UnregisterZoneAction);
|
531
|
+
|
532
|
+
declare function migrate(data: Data, config?: Config): Data;
|
533
|
+
|
534
|
+
type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = Partial<{
|
535
|
+
[ComponentName in keyof Props]: (props: Props[ComponentName] & {
|
536
|
+
[key: string]: any;
|
537
|
+
}) => Props[ComponentName];
|
538
|
+
} & {
|
539
|
+
root: (props: RootProps & {
|
540
|
+
[key: string]: any;
|
541
|
+
}) => RootProps;
|
542
|
+
}>;
|
543
|
+
declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>, config?: Config): Data;
|
469
544
|
|
470
545
|
declare function resolveAllData<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends Record<string, any> = DefaultRootFieldProps>(data: Partial<Data>, config: Config, metadata?: Metadata, onResolveStart?: (item: ComponentData) => void, onResolveEnd?: (item: ComponentData) => void): Promise<Data<Props, RootProps>>;
|
471
546
|
|
472
|
-
|
547
|
+
type WalkTreeOptions = {
|
548
|
+
parentId: string;
|
549
|
+
propName: string;
|
550
|
+
};
|
551
|
+
declare function walkTree<T extends ComponentData | RootData | G["UserData"], UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>(data: T, config: UserConfig, callbackFn: (data: Content, options: WalkTreeOptions) => Content | null | void): T;
|
552
|
+
|
553
|
+
export { type ExternalFieldWithAdaptor as $, type AppState as A, type BaseData as B, type ComponentData as C, type DropZoneProps as D, type MappedItem as E, type Fields as F, type ComponentDataMap as G, type History as H, type IframeConfig as I, type Content as J, type BaseField as K, type TextareaField as L, type Metadata as M, type NumberField as N, type Overrides as O, type Permissions as P, type SelectField as Q, type RootDataWithProps as R, type Slot as S, type TextField as T, type UserGenerics as U, type Viewports as V, type WithSlotProps as W, type RadioField as X, type ArrayField as Y, type ObjectField as Z, type Adaptor as _, type Config as a, type ExternalField as a0, type CustomFieldRender as a1, type CustomField as a2, type SlotField as a3, type PuckContext as a4, type DefaultRootFieldProps as a5, type DefaultRootRenderProps as a6, type DefaultRootProps as a7, type DefaultComponentProps as a8, type WithId as a9, type WithPuckProps as aa, type AsFieldProps as ab, type WithChildren as ac, type ExtractPropsFromConfig as ad, type ExtractRootPropsFromConfig as ae, migrate as af, transformProps as ag, resolveAllData as ah, type PuckAction as b, type ResolveDataTrigger as c, type Plugin as d, type UiState as e, type ComponentConfig as f, type Field as g, type FieldProps as h, type Data as i, type OnAction as j, type InitialHistory as k, type ItemSelector as l, type Direction as m, type DragAxis as n, type Viewport as o, overrideKeys as p, type OverrideKey as q, type FieldRenderFunctions as r, type ItemWithId as s, type ArrayState as t, type PuckComponent as u, type RootConfig as v, walkTree as w, type RootDataWithoutProps as x, type RootData as y, type ComponentDataOptionalId as z };
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { CSSProperties, ReactElement,
|
1
|
+
import { CSSProperties, ReactElement, ReactNode, JSX } from 'react';
|
2
2
|
|
3
3
|
type ItemSelector = {
|
4
4
|
index: number;
|
@@ -23,6 +23,7 @@ type FieldOptions = Array<FieldOption> | ReadonlyArray<FieldOption>;
|
|
23
23
|
type BaseField = {
|
24
24
|
label?: string;
|
25
25
|
labelIcon?: ReactElement;
|
26
|
+
metadata?: Metadata;
|
26
27
|
};
|
27
28
|
type TextField = BaseField & {
|
28
29
|
type: "text";
|
@@ -109,16 +110,22 @@ type ExternalField<Props extends {
|
|
109
110
|
filterFields?: Record<string, Field>;
|
110
111
|
initialFilters?: Record<string, any>;
|
111
112
|
};
|
112
|
-
type
|
113
|
+
type CustomFieldRender<Value extends any> = (props: {
|
114
|
+
field: CustomField<Value>;
|
115
|
+
name: string;
|
116
|
+
id: string;
|
117
|
+
value: Value;
|
118
|
+
onChange: (value: Value) => void;
|
119
|
+
readOnly?: boolean;
|
120
|
+
}) => ReactElement;
|
121
|
+
type CustomField<Value extends any> = BaseField & {
|
113
122
|
type: "custom";
|
114
|
-
render:
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
readOnly?: boolean;
|
121
|
-
}) => ReactElement;
|
123
|
+
render: CustomFieldRender<Value>;
|
124
|
+
};
|
125
|
+
type SlotField = BaseField & {
|
126
|
+
type: "slot";
|
127
|
+
allow?: string[];
|
128
|
+
disallow?: string[];
|
122
129
|
};
|
123
130
|
type Field<Props extends any = any> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<Props extends {
|
124
131
|
[key: string]: any;
|
@@ -128,7 +135,7 @@ type Field<Props extends any = any> = TextField | NumberField | TextareaField |
|
|
128
135
|
[key: string]: any;
|
129
136
|
} ? Props : any> | ExternalFieldWithAdaptor<Props extends {
|
130
137
|
[key: string]: any;
|
131
|
-
} ? Props : any> | CustomField<Props
|
138
|
+
} ? Props : any> | CustomField<Props> | SlotField;
|
132
139
|
type Fields<ComponentProps extends DefaultComponentProps = DefaultComponentProps> = {
|
133
140
|
[PropName in keyof Omit<ComponentProps, "editMode">]: Field<ComponentProps[PropName]>;
|
134
141
|
};
|
@@ -140,7 +147,10 @@ type FieldProps<F = Field<any>, ValueType = any> = {
|
|
140
147
|
readOnly?: boolean;
|
141
148
|
};
|
142
149
|
|
143
|
-
type PuckComponent<Props> = (props: WithId<WithPuckProps<
|
150
|
+
type PuckComponent<Props> = (props: WithId<WithPuckProps<{
|
151
|
+
[PropName in keyof Props]: Props[PropName] extends Slot ? (props?: Omit<DropZoneProps, "zone">) => ReactNode : Props[PropName];
|
152
|
+
}>>) => JSX.Element;
|
153
|
+
type ResolveDataTrigger = "insert" | "replace" | "load" | "force";
|
144
154
|
type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponentProps, FieldProps extends DefaultComponentProps = RenderProps, DataShape = Omit<ComponentData<FieldProps>, "type">> = {
|
145
155
|
render: PuckComponent<RenderProps>;
|
146
156
|
label?: string;
|
@@ -149,7 +159,9 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
|
|
149
159
|
permissions?: Partial<Permissions>;
|
150
160
|
inline?: boolean;
|
151
161
|
resolveFields?: (data: DataShape, params: {
|
152
|
-
changed: Partial<Record<keyof FieldProps, boolean
|
162
|
+
changed: Partial<Record<keyof FieldProps, boolean> & {
|
163
|
+
id: string;
|
164
|
+
}>;
|
153
165
|
fields: Fields<FieldProps>;
|
154
166
|
lastFields: Fields<FieldProps>;
|
155
167
|
lastData: DataShape | null;
|
@@ -157,9 +169,12 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
|
|
157
169
|
parent: ComponentData | null;
|
158
170
|
}) => Promise<Fields<FieldProps>> | Fields<FieldProps>;
|
159
171
|
resolveData?: (data: DataShape, params: {
|
160
|
-
changed: Partial<Record<keyof FieldProps, boolean
|
172
|
+
changed: Partial<Record<keyof FieldProps, boolean> & {
|
173
|
+
id: string;
|
174
|
+
}>;
|
161
175
|
lastData: DataShape | null;
|
162
176
|
metadata: Metadata;
|
177
|
+
trigger: ResolveDataTrigger;
|
163
178
|
}) => Promise<{
|
164
179
|
props?: Partial<FieldProps>;
|
165
180
|
readOnly?: Partial<Record<keyof FieldProps, boolean>>;
|
@@ -168,13 +183,17 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
|
|
168
183
|
readOnly?: Partial<Record<keyof FieldProps, boolean>>;
|
169
184
|
};
|
170
185
|
resolvePermissions?: (data: DataShape, params: {
|
171
|
-
changed: Partial<Record<keyof FieldProps, boolean
|
186
|
+
changed: Partial<Record<keyof FieldProps, boolean> & {
|
187
|
+
id: string;
|
188
|
+
}>;
|
172
189
|
lastPermissions: Partial<Permissions>;
|
173
190
|
permissions: Partial<Permissions>;
|
174
191
|
appState: AppState;
|
175
192
|
lastData: DataShape | null;
|
176
193
|
}) => Promise<Partial<Permissions>> | Partial<Permissions>;
|
194
|
+
metadata?: Metadata;
|
177
195
|
};
|
196
|
+
type RootConfig<RootProps extends DefaultComponentProps = any> = Partial<ComponentConfig<WithChildren<RootProps>, AsFieldProps<RootProps>, RootData<AsFieldProps<RootProps>>>>;
|
178
197
|
type Category<ComponentName> = {
|
179
198
|
components?: ComponentName[];
|
180
199
|
title?: string;
|
@@ -188,7 +207,7 @@ type Config<Props extends DefaultComponentProps = DefaultComponentProps, RootPro
|
|
188
207
|
components: {
|
189
208
|
[ComponentName in keyof Props]: Omit<ComponentConfig<Props[ComponentName], Props[ComponentName]>, "type">;
|
190
209
|
};
|
191
|
-
root?:
|
210
|
+
root?: RootConfig<RootProps>;
|
192
211
|
};
|
193
212
|
|
194
213
|
type WithId<Props> = Props & {
|
@@ -204,7 +223,7 @@ type WithChildren<Props> = Props & {
|
|
204
223
|
};
|
205
224
|
type ExtractPropsFromConfig<UserConfig> = UserConfig extends Config<infer P, any, any> ? P : never;
|
206
225
|
type ExtractRootPropsFromConfig<UserConfig> = UserConfig extends Config<any, infer P, any> ? P : never;
|
207
|
-
type UserGenerics<UserConfig extends Config = Config, UserProps extends ExtractPropsFromConfig<UserConfig> = ExtractPropsFromConfig<UserConfig>, UserRootProps extends ExtractRootPropsFromConfig<UserConfig> = ExtractRootPropsFromConfig<UserConfig>, UserData extends Data<UserProps, UserRootProps> | Data = Data<UserProps, UserRootProps>, UserAppState extends
|
226
|
+
type UserGenerics<UserConfig extends Config = Config, UserProps extends ExtractPropsFromConfig<UserConfig> = ExtractPropsFromConfig<UserConfig>, UserRootProps extends ExtractRootPropsFromConfig<UserConfig> = ExtractRootPropsFromConfig<UserConfig>, UserData extends Data<UserProps, UserRootProps> | Data = Data<UserProps, UserRootProps>, UserAppState extends PrivateAppState<UserData> = PrivateAppState<UserData>, UserComponentData extends ComponentData = UserData["content"][0]> = {
|
208
227
|
UserConfig: UserConfig;
|
209
228
|
UserProps: UserProps;
|
210
229
|
UserRootProps: UserRootProps;
|
@@ -236,22 +255,28 @@ type BaseData<Props extends {
|
|
236
255
|
readOnly?: Partial<Record<keyof Props, boolean>>;
|
237
256
|
};
|
238
257
|
type RootDataWithProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = BaseData<Props> & {
|
239
|
-
props: Props
|
258
|
+
props: WithSlotProps<Props>;
|
240
259
|
};
|
241
260
|
type RootDataWithoutProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = Props;
|
242
261
|
type RootData<Props extends DefaultComponentProps = DefaultRootFieldProps> = Partial<RootDataWithProps<AsFieldProps<Props>>> & Partial<RootDataWithoutProps<Props>>;
|
243
262
|
type ComponentData<Props extends DefaultComponentProps = DefaultComponentProps, Name = string> = {
|
244
263
|
type: Name;
|
245
|
-
props: WithId<Props
|
264
|
+
props: WithId<WithSlotProps<Props>>;
|
265
|
+
} & BaseData<Props>;
|
266
|
+
type ComponentDataOptionalId<Props extends DefaultComponentProps = DefaultComponentProps, Name = string> = {
|
267
|
+
type: Name;
|
268
|
+
props: Props & {
|
269
|
+
id?: string;
|
270
|
+
};
|
246
271
|
} & BaseData<Props>;
|
247
272
|
type MappedItem = ComponentData;
|
248
273
|
type ComponentDataMap<Props extends Record<string, DefaultComponentProps> = DefaultComponentProps> = {
|
249
274
|
[K in keyof Props]: ComponentData<Props[K], K extends string ? K : never>;
|
250
275
|
}[keyof Props];
|
251
276
|
type Content<PropsMap extends {
|
252
|
-
[key: string]:
|
277
|
+
[key: string]: DefaultComponentProps;
|
253
278
|
} = {
|
254
|
-
[key: string]:
|
279
|
+
[key: string]: DefaultComponentProps;
|
255
280
|
}> = ComponentDataMap<PropsMap>[];
|
256
281
|
type Data<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = {
|
257
282
|
root: RootData<RootProps>;
|
@@ -300,6 +325,27 @@ type AppState<UserData extends Data = Data> = {
|
|
300
325
|
ui: UiState;
|
301
326
|
};
|
302
327
|
|
328
|
+
type ZoneType = "root" | "dropzone" | "slot";
|
329
|
+
type PuckNodeData = {
|
330
|
+
data: ComponentData;
|
331
|
+
flatData: ComponentData;
|
332
|
+
parentId: string | null;
|
333
|
+
zone: string;
|
334
|
+
path: string[];
|
335
|
+
};
|
336
|
+
type PuckZoneData = {
|
337
|
+
contentIds: string[];
|
338
|
+
type: ZoneType;
|
339
|
+
};
|
340
|
+
type NodeIndex = Record<string, PuckNodeData>;
|
341
|
+
type ZoneIndex = Record<string, PuckZoneData>;
|
342
|
+
type PrivateAppState<UserData extends Data = Data> = AppState<UserData> & {
|
343
|
+
indexes: {
|
344
|
+
nodes: NodeIndex;
|
345
|
+
zones: ZoneIndex;
|
346
|
+
};
|
347
|
+
};
|
348
|
+
|
303
349
|
type RenderFunc<Props extends {
|
304
350
|
[key: string]: any;
|
305
351
|
} = {
|
@@ -406,6 +452,16 @@ type InitialHistoryNoAppend<AS = Partial<AppState>> = {
|
|
406
452
|
appendData?: false;
|
407
453
|
};
|
408
454
|
type InitialHistory<AS = Partial<AppState>> = InitialHistoryAppend<AS> | InitialHistoryNoAppend<AS>;
|
455
|
+
type Slot<Props extends {
|
456
|
+
[key: string]: DefaultComponentProps;
|
457
|
+
} = {
|
458
|
+
[key: string]: DefaultComponentProps;
|
459
|
+
}> = {
|
460
|
+
[K in keyof Props]: ComponentDataOptionalId<Props[K], K extends string ? K : never>;
|
461
|
+
}[keyof Props][];
|
462
|
+
type WithSlotProps<Props extends DefaultComponentProps = DefaultComponentProps, SlotProps extends DefaultComponentProps = Props> = Props extends any ? any : {
|
463
|
+
[PropName in keyof Props]: Props[PropName] extends Slot<SlotProps> ? Content<SlotProps> : Props[PropName];
|
464
|
+
};
|
409
465
|
|
410
466
|
type InsertAction = {
|
411
467
|
type: "insert";
|
@@ -419,11 +475,17 @@ type DuplicateAction = {
|
|
419
475
|
sourceIndex: number;
|
420
476
|
sourceZone: string;
|
421
477
|
};
|
422
|
-
type ReplaceAction = {
|
478
|
+
type ReplaceAction<UserData extends Data = Data> = {
|
423
479
|
type: "replace";
|
424
480
|
destinationIndex: number;
|
425
481
|
destinationZone: string;
|
426
|
-
data:
|
482
|
+
data: ComponentData;
|
483
|
+
ui?: Partial<AppState<UserData>["ui"]>;
|
484
|
+
};
|
485
|
+
type ReplaceRootAction<UserData extends Data = Data> = {
|
486
|
+
type: "replaceRoot";
|
487
|
+
root: RootData;
|
488
|
+
ui?: Partial<AppState<UserData>["ui"]>;
|
427
489
|
};
|
428
490
|
type ReorderAction = {
|
429
491
|
type: "reorder";
|
@@ -453,7 +515,7 @@ type SetDataAction = {
|
|
453
515
|
};
|
454
516
|
type SetAction<UserData extends Data = Data> = {
|
455
517
|
type: "set";
|
456
|
-
state: Partial<
|
518
|
+
state: Partial<PrivateAppState<UserData>> | ((previous: PrivateAppState<UserData>) => Partial<PrivateAppState<UserData>>);
|
457
519
|
};
|
458
520
|
type RegisterZoneAction = {
|
459
521
|
type: "registerZone";
|
@@ -465,8 +527,27 @@ type UnregisterZoneAction = {
|
|
465
527
|
};
|
466
528
|
type PuckAction = {
|
467
529
|
recordHistory?: boolean;
|
468
|
-
} & (ReorderAction | InsertAction | MoveAction | ReplaceAction | RemoveAction | DuplicateAction | SetAction | SetDataAction | SetUiAction | RegisterZoneAction | UnregisterZoneAction);
|
530
|
+
} & (ReorderAction | InsertAction | MoveAction | ReplaceAction | ReplaceRootAction | RemoveAction | DuplicateAction | SetAction | SetDataAction | SetUiAction | RegisterZoneAction | UnregisterZoneAction);
|
531
|
+
|
532
|
+
declare function migrate(data: Data, config?: Config): Data;
|
533
|
+
|
534
|
+
type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = Partial<{
|
535
|
+
[ComponentName in keyof Props]: (props: Props[ComponentName] & {
|
536
|
+
[key: string]: any;
|
537
|
+
}) => Props[ComponentName];
|
538
|
+
} & {
|
539
|
+
root: (props: RootProps & {
|
540
|
+
[key: string]: any;
|
541
|
+
}) => RootProps;
|
542
|
+
}>;
|
543
|
+
declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>, config?: Config): Data;
|
469
544
|
|
470
545
|
declare function resolveAllData<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends Record<string, any> = DefaultRootFieldProps>(data: Partial<Data>, config: Config, metadata?: Metadata, onResolveStart?: (item: ComponentData) => void, onResolveEnd?: (item: ComponentData) => void): Promise<Data<Props, RootProps>>;
|
471
546
|
|
472
|
-
|
547
|
+
type WalkTreeOptions = {
|
548
|
+
parentId: string;
|
549
|
+
propName: string;
|
550
|
+
};
|
551
|
+
declare function walkTree<T extends ComponentData | RootData | G["UserData"], UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>(data: T, config: UserConfig, callbackFn: (data: Content, options: WalkTreeOptions) => Content | null | void): T;
|
552
|
+
|
553
|
+
export { type ExternalFieldWithAdaptor as $, type AppState as A, type BaseData as B, type ComponentData as C, type DropZoneProps as D, type MappedItem as E, type Fields as F, type ComponentDataMap as G, type History as H, type IframeConfig as I, type Content as J, type BaseField as K, type TextareaField as L, type Metadata as M, type NumberField as N, type Overrides as O, type Permissions as P, type SelectField as Q, type RootDataWithProps as R, type Slot as S, type TextField as T, type UserGenerics as U, type Viewports as V, type WithSlotProps as W, type RadioField as X, type ArrayField as Y, type ObjectField as Z, type Adaptor as _, type Config as a, type ExternalField as a0, type CustomFieldRender as a1, type CustomField as a2, type SlotField as a3, type PuckContext as a4, type DefaultRootFieldProps as a5, type DefaultRootRenderProps as a6, type DefaultRootProps as a7, type DefaultComponentProps as a8, type WithId as a9, type WithPuckProps as aa, type AsFieldProps as ab, type WithChildren as ac, type ExtractPropsFromConfig as ad, type ExtractRootPropsFromConfig as ae, migrate as af, transformProps as ag, resolveAllData as ah, type PuckAction as b, type ResolveDataTrigger as c, type Plugin as d, type UiState as e, type ComponentConfig as f, type Field as g, type FieldProps as h, type Data as i, type OnAction as j, type InitialHistory as k, type ItemSelector as l, type Direction as m, type DragAxis as n, type Viewport as o, overrideKeys as p, type OverrideKey as q, type FieldRenderFunctions as r, type ItemWithId as s, type ArrayState as t, type PuckComponent as u, type RootConfig as v, walkTree as w, type RootDataWithoutProps as x, type RootData as y, type ComponentDataOptionalId as z };
|