@measured/puck 0.19.0-canary.ad78e98 → 0.19.0-canary.af1dc891

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/dist/rsc.mjs CHANGED
@@ -1,113 +1,18 @@
1
1
  import {
2
- __spreadProps,
3
- __spreadValues,
2
+ Render,
4
3
  init_react_import,
4
+ migrate,
5
5
  resolveAllData,
6
- rootAreaId,
7
- rootDroppableId,
8
- rootZone,
9
- setupZone
10
- } from "./chunk-T6VJEBJD.mjs";
6
+ transformProps,
7
+ walkTree
8
+ } from "./chunk-HGAPIQP5.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
- resolveAllData
14
+ migrate,
15
+ resolveAllData,
16
+ transformProps,
17
+ walkTree
113
18
  };
@@ -1,4 +1,4 @@
1
- import { CSSProperties, ReactElement, JSX, ReactNode } from 'react';
1
+ import { CSSProperties, ReactElement, ReactNode, JSX } from 'react';
2
2
 
3
3
  type ItemSelector = {
4
4
  index: number;
@@ -22,6 +22,9 @@ type FieldOption = {
22
22
  type FieldOptions = Array<FieldOption> | ReadonlyArray<FieldOption>;
23
23
  type BaseField = {
24
24
  label?: string;
25
+ labelIcon?: ReactElement;
26
+ metadata?: Metadata;
27
+ visible?: boolean;
25
28
  };
26
29
  type TextField = BaseField & {
27
30
  type: "text";
@@ -108,16 +111,22 @@ type ExternalField<Props extends {
108
111
  filterFields?: Record<string, Field>;
109
112
  initialFilters?: Record<string, any>;
110
113
  };
111
- type CustomField<Props extends any = {}> = BaseField & {
114
+ type CustomFieldRender<Value extends any> = (props: {
115
+ field: CustomField<Value>;
116
+ name: string;
117
+ id: string;
118
+ value: Value;
119
+ onChange: (value: Value) => void;
120
+ readOnly?: boolean;
121
+ }) => ReactElement;
122
+ type CustomField<Value extends any> = BaseField & {
112
123
  type: "custom";
113
- render: (props: {
114
- field: CustomField<Props>;
115
- name: string;
116
- id: string;
117
- value: Props;
118
- onChange: (value: Props) => void;
119
- readOnly?: boolean;
120
- }) => ReactElement;
124
+ render: CustomFieldRender<Value>;
125
+ };
126
+ type SlotField = BaseField & {
127
+ type: "slot";
128
+ allow?: string[];
129
+ disallow?: string[];
121
130
  };
122
131
  type Field<Props extends any = any> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<Props extends {
123
132
  [key: string]: any;
@@ -127,7 +136,7 @@ type Field<Props extends any = any> = TextField | NumberField | TextareaField |
127
136
  [key: string]: any;
128
137
  } ? Props : any> | ExternalFieldWithAdaptor<Props extends {
129
138
  [key: string]: any;
130
- } ? Props : any> | CustomField<Props>;
139
+ } ? Props : any> | CustomField<Props> | SlotField;
131
140
  type Fields<ComponentProps extends DefaultComponentProps = DefaultComponentProps> = {
132
141
  [PropName in keyof Omit<ComponentProps, "editMode">]: Field<ComponentProps[PropName]>;
133
142
  };
@@ -139,7 +148,14 @@ type FieldProps<F = Field<any>, ValueType = any> = {
139
148
  readOnly?: boolean;
140
149
  };
141
150
 
142
- type PuckComponent<Props> = (props: WithId<WithPuckProps<Props>>) => JSX.Element;
151
+ type SlotComponent = (props?: Omit<DropZoneProps, "zone">) => ReactNode;
152
+ type PuckComponent<Props> = (props: WithId<WithPuckProps<{
153
+ [K in keyof Props]: WithDeepSlots<Props[K], SlotComponent>;
154
+ }>>) => JSX.Element;
155
+ type ResolveDataTrigger = "insert" | "replace" | "load" | "force";
156
+ type WithPartialProps<T, Props extends DefaultComponentProps> = Omit<T, "props"> & {
157
+ props?: Partial<Props>;
158
+ };
143
159
  type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponentProps, FieldProps extends DefaultComponentProps = RenderProps, DataShape = Omit<ComponentData<FieldProps>, "type">> = {
144
160
  render: PuckComponent<RenderProps>;
145
161
  label?: string;
@@ -148,7 +164,9 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
148
164
  permissions?: Partial<Permissions>;
149
165
  inline?: boolean;
150
166
  resolveFields?: (data: DataShape, params: {
151
- changed: Partial<Record<keyof FieldProps, boolean>>;
167
+ changed: Partial<Record<keyof FieldProps, boolean> & {
168
+ id: string;
169
+ }>;
152
170
  fields: Fields<FieldProps>;
153
171
  lastFields: Fields<FieldProps>;
154
172
  lastData: DataShape | null;
@@ -156,24 +174,25 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
156
174
  parent: ComponentData | null;
157
175
  }) => Promise<Fields<FieldProps>> | Fields<FieldProps>;
158
176
  resolveData?: (data: DataShape, params: {
159
- changed: Partial<Record<keyof FieldProps, boolean>>;
177
+ changed: Partial<Record<keyof FieldProps, boolean> & {
178
+ id: string;
179
+ }>;
160
180
  lastData: DataShape | null;
161
181
  metadata: Metadata;
162
- }) => Promise<{
163
- props?: Partial<FieldProps>;
164
- readOnly?: Partial<Record<keyof FieldProps, boolean>>;
165
- }> | {
166
- props?: Partial<FieldProps>;
167
- readOnly?: Partial<Record<keyof FieldProps, boolean>>;
168
- };
182
+ trigger: ResolveDataTrigger;
183
+ }) => Promise<WithPartialProps<DataShape, FieldProps>> | WithPartialProps<DataShape, FieldProps>;
169
184
  resolvePermissions?: (data: DataShape, params: {
170
- changed: Partial<Record<keyof FieldProps, boolean>>;
185
+ changed: Partial<Record<keyof FieldProps, boolean> & {
186
+ id: string;
187
+ }>;
171
188
  lastPermissions: Partial<Permissions>;
172
189
  permissions: Partial<Permissions>;
173
190
  appState: AppState;
174
191
  lastData: DataShape | null;
175
192
  }) => Promise<Partial<Permissions>> | Partial<Permissions>;
193
+ metadata?: Metadata;
176
194
  };
195
+ type RootConfig<RootProps extends DefaultComponentProps = any> = Partial<ComponentConfig<WithChildren<RootProps>, AsFieldProps<RootProps>, RootData<AsFieldProps<RootProps>>>>;
177
196
  type Category<ComponentName> = {
178
197
  components?: ComponentName[];
179
198
  title?: string;
@@ -187,7 +206,7 @@ type Config<Props extends DefaultComponentProps = DefaultComponentProps, RootPro
187
206
  components: {
188
207
  [ComponentName in keyof Props]: Omit<ComponentConfig<Props[ComponentName], Props[ComponentName]>, "type">;
189
208
  };
190
- root?: Partial<ComponentConfig<WithChildren<RootProps>, AsFieldProps<RootProps>, RootData<AsFieldProps<RootProps>>>>;
209
+ root?: RootConfig<RootProps>;
191
210
  };
192
211
 
193
212
  type WithId<Props> = Props & {
@@ -203,7 +222,7 @@ type WithChildren<Props> = Props & {
203
222
  };
204
223
  type ExtractPropsFromConfig<UserConfig> = UserConfig extends Config<infer P, any, any> ? P : never;
205
224
  type ExtractRootPropsFromConfig<UserConfig> = UserConfig extends Config<any, infer P, any> ? P : never;
206
- 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 AppState<UserData> = AppState<UserData>, UserComponentData extends ComponentData = UserData["content"][0]> = {
225
+ 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]> = {
207
226
  UserConfig: UserConfig;
208
227
  UserProps: UserProps;
209
228
  UserRootProps: UserRootProps;
@@ -219,6 +238,7 @@ type PuckContext = {
219
238
  dragRef: ((element: Element | null) => void) | null;
220
239
  };
221
240
  type DefaultRootFieldProps = {
241
+ [key: string]: any;
222
242
  title?: string;
223
243
  };
224
244
  type DefaultRootRenderProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = WithPuckProps<WithChildren<Props>>;
@@ -239,23 +259,29 @@ type RootDataWithProps<Props extends DefaultComponentProps = DefaultRootFieldPro
239
259
  };
240
260
  type RootDataWithoutProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = Props;
241
261
  type RootData<Props extends DefaultComponentProps = DefaultRootFieldProps> = Partial<RootDataWithProps<AsFieldProps<Props>>> & Partial<RootDataWithoutProps<Props>>;
242
- type ComponentData<Props extends DefaultComponentProps = DefaultComponentProps, Name = string> = {
262
+ type ComponentData<Props extends DefaultComponentProps = DefaultComponentProps, Name = string, AllProps extends Record<string, DefaultComponentProps> = Record<string, DefaultComponentProps>> = {
263
+ type: Name;
264
+ props: WithDeepSlots<WithId<Props>, Content<AllProps>>;
265
+ } & BaseData<Props>;
266
+ type ComponentDataOptionalId<Props extends DefaultComponentProps = DefaultComponentProps, Name = string> = {
243
267
  type: Name;
244
- props: WithId<Props>;
268
+ props: Props & {
269
+ id?: string;
270
+ };
245
271
  } & BaseData<Props>;
246
272
  type MappedItem = ComponentData;
247
- type ComponentDataMap<Props extends Record<string, DefaultComponentProps> = DefaultComponentProps> = {
248
- [K in keyof Props]: ComponentData<Props[K], K extends string ? K : never>;
249
- }[keyof Props];
273
+ type ComponentDataMap<AllProps extends DefaultAllProps = DefaultAllProps> = {
274
+ [K in keyof AllProps]: ComponentData<AllProps[K], K extends string ? K : never, AllProps>;
275
+ }[keyof AllProps];
250
276
  type Content<PropsMap extends {
251
- [key: string]: any;
277
+ [key: string]: DefaultComponentProps;
252
278
  } = {
253
- [key: string]: any;
279
+ [key: string]: DefaultComponentProps;
254
280
  }> = ComponentDataMap<PropsMap>[];
255
- type Data<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = {
256
- root: RootData<RootProps>;
257
- content: Content<Props>;
258
- zones?: Record<string, Content<Props>>;
281
+ type Data<AllProps extends DefaultAllProps = DefaultAllProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = {
282
+ root: WithDeepSlots<RootData<RootProps>, Content<AllProps>>;
283
+ content: Content<AllProps>;
284
+ zones?: Record<string, Content<AllProps>>;
259
285
  };
260
286
  type Metadata = {
261
287
  [key: string]: any;
@@ -299,6 +325,34 @@ type AppState<UserData extends Data = Data> = {
299
325
  ui: UiState;
300
326
  };
301
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
+ type DefaultAllProps = Record<string, DefaultComponentProps>;
349
+ /**
350
+ * Recursively walk T and replace Slots with SlotComponents
351
+ */
352
+ type WithDeepSlots<T, SlotType = T> = T extends Slot ? SlotType : T extends (infer U)[] ? Array<WithDeepSlots<U, SlotType>> : T extends (infer U)[] ? WithDeepSlots<U, SlotType>[] : T extends object ? {
353
+ [K in keyof T]: WithDeepSlots<T[K], SlotType>;
354
+ } : T;
355
+
302
356
  type RenderFunc<Props extends {
303
357
  [key: string]: any;
304
358
  } = {
@@ -405,6 +459,14 @@ type InitialHistoryNoAppend<AS = Partial<AppState>> = {
405
459
  appendData?: false;
406
460
  };
407
461
  type InitialHistory<AS = Partial<AppState>> = InitialHistoryAppend<AS> | InitialHistoryNoAppend<AS>;
462
+ type Slot<Props extends {
463
+ [key: string]: DefaultComponentProps;
464
+ } = {
465
+ [key: string]: DefaultComponentProps;
466
+ }> = {
467
+ [K in keyof Props]: ComponentDataOptionalId<Props[K], K extends string ? K : never>;
468
+ }[keyof Props][];
469
+ type WithSlotProps<Target extends Record<string, any>, AllProps extends DefaultAllProps = DefaultAllProps, SlotType extends Content<AllProps> = Content<AllProps>> = WithDeepSlots<Target, SlotType>;
408
470
 
409
471
  type InsertAction = {
410
472
  type: "insert";
@@ -418,11 +480,17 @@ type DuplicateAction = {
418
480
  sourceIndex: number;
419
481
  sourceZone: string;
420
482
  };
421
- type ReplaceAction = {
483
+ type ReplaceAction<UserData extends Data = Data> = {
422
484
  type: "replace";
423
485
  destinationIndex: number;
424
486
  destinationZone: string;
425
- data: any;
487
+ data: ComponentData;
488
+ ui?: Partial<AppState<UserData>["ui"]>;
489
+ };
490
+ type ReplaceRootAction<UserData extends Data = Data> = {
491
+ type: "replaceRoot";
492
+ root: RootData;
493
+ ui?: Partial<AppState<UserData>["ui"]>;
426
494
  };
427
495
  type ReorderAction = {
428
496
  type: "reorder";
@@ -452,7 +520,7 @@ type SetDataAction = {
452
520
  };
453
521
  type SetAction<UserData extends Data = Data> = {
454
522
  type: "set";
455
- state: Partial<AppState<UserData>> | ((previous: AppState<UserData>) => Partial<AppState<UserData>>);
523
+ state: Partial<PrivateAppState<UserData>> | ((previous: PrivateAppState<UserData>) => Partial<PrivateAppState<UserData>>);
456
524
  };
457
525
  type RegisterZoneAction = {
458
526
  type: "registerZone";
@@ -464,8 +532,27 @@ type UnregisterZoneAction = {
464
532
  };
465
533
  type PuckAction = {
466
534
  recordHistory?: boolean;
467
- } & (ReorderAction | InsertAction | MoveAction | ReplaceAction | RemoveAction | DuplicateAction | SetAction | SetDataAction | SetUiAction | RegisterZoneAction | UnregisterZoneAction);
535
+ } & (ReorderAction | InsertAction | MoveAction | ReplaceAction | ReplaceRootAction | RemoveAction | DuplicateAction | SetAction | SetDataAction | SetUiAction | RegisterZoneAction | UnregisterZoneAction);
536
+
537
+ declare function migrate(data: Data, config?: Config): Data;
538
+
539
+ type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = Partial<{
540
+ [ComponentName in keyof Props]: (props: Props[ComponentName] & {
541
+ [key: string]: any;
542
+ }) => Props[ComponentName];
543
+ } & {
544
+ root: (props: RootProps & {
545
+ [key: string]: any;
546
+ }) => RootProps;
547
+ }>;
548
+ declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>, config?: Config): Data;
468
549
 
469
550
  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>>;
470
551
 
471
- export { type DefaultRootProps as $, type AppState as A, type BaseData as B, type Config as C, type DropZoneProps as D, type BaseField as E, type FieldProps as F, type TextareaField as G, type History as H, type IframeConfig as I, type RadioField as J, type ArrayField as K, type ObjectField as L, type Metadata as M, type NumberField as N, type OnAction as O, type Permissions as P, type Adaptor as Q, type RootDataWithProps as R, type SelectField as S, type TextField as T, type UserGenerics as U, type Viewports as V, type ExternalFieldWithAdaptor as W, type ExternalField as X, type CustomField as Y, type PuckContext as Z, type DefaultRootRenderProps as _, type Field as a, type WithId as a0, type WithPuckProps as a1, type AsFieldProps as a2, type WithChildren as a3, type ExtractPropsFromConfig as a4, type ExtractRootPropsFromConfig as a5, resolveAllData as a6, type Data as b, type UiState as c, type Plugin as d, type Overrides as e, type PuckAction as f, type InitialHistory as g, type DefaultComponentProps as h, type DefaultRootFieldProps as i, type ComponentData as j, type Fields as k, type ComponentConfig 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 RootDataWithoutProps as v, type RootData as w, type MappedItem as x, type ComponentDataMap as y, type Content as z };
552
+ type WalkTreeOptions = {
553
+ parentId: string;
554
+ propName: string;
555
+ };
556
+ 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;
557
+
558
+ 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 };