@measured/puck 0.20.0-canary.274fe3d9 → 0.20.0-canary.29cd4d52

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.
@@ -1,20 +1,10 @@
1
- import { CSSProperties, ReactElement, ReactNode, JSX } from 'react';
1
+ import { ReactElement, CSSProperties, ReactNode, JSX } from 'react';
2
2
 
3
3
  type ItemSelector = {
4
4
  index: number;
5
5
  zone?: string;
6
6
  };
7
7
 
8
- type DropZoneProps = {
9
- zone: string;
10
- allow?: string[];
11
- disallow?: string[];
12
- style?: CSSProperties;
13
- minEmptyHeight?: number;
14
- className?: string;
15
- collisionAxis?: DragAxis;
16
- };
17
-
18
8
  type FieldOption = {
19
9
  label: string;
20
10
  value: string | number | boolean | undefined | null | object;
@@ -29,6 +19,7 @@ type BaseField = {
29
19
  type TextField = BaseField & {
30
20
  type: "text";
31
21
  placeholder?: string;
22
+ contentEditable?: boolean;
32
23
  };
33
24
  type NumberField = BaseField & {
34
25
  type: "number";
@@ -40,6 +31,7 @@ type NumberField = BaseField & {
40
31
  type TextareaField = BaseField & {
41
32
  type: "textarea";
42
33
  placeholder?: string;
34
+ contentEditable?: boolean;
43
35
  };
44
36
  type SelectField = BaseField & {
45
37
  type: "select";
@@ -49,26 +41,30 @@ type RadioField = BaseField & {
49
41
  type: "radio";
50
42
  options: FieldOptions;
51
43
  };
52
- type ArrayField<Props extends any = {
44
+ type ArrayField<Props extends {
53
45
  [key: string]: any;
54
- }> = Props extends {
46
+ }[] = {
55
47
  [key: string]: any;
56
- } ? BaseField & {
48
+ }[], UserField extends {} = {}> = BaseField & {
57
49
  type: "array";
58
50
  arrayFields: {
59
- [SubPropName in keyof Props[0]]: Field<Props[0][SubPropName]>;
51
+ [SubPropName in keyof Props[0]]: UserField extends {
52
+ type: PropertyKey;
53
+ } ? Field<Props[0][SubPropName], UserField> | UserField : Field<Props[0][SubPropName], UserField>;
60
54
  };
61
55
  defaultItemProps?: Props[0];
62
56
  getItemSummary?: (item: Props[0], index?: number) => string;
63
57
  max?: number;
64
58
  min?: number;
65
- } : never;
59
+ };
66
60
  type ObjectField<Props extends any = {
67
61
  [key: string]: any;
68
- }> = BaseField & {
62
+ }, UserField extends {} = {}> = BaseField & {
69
63
  type: "object";
70
64
  objectFields: {
71
- [SubPropName in keyof Props]: Field<Props[SubPropName]>;
65
+ [SubPropName in keyof Props]: UserField extends {
66
+ type: PropertyKey;
67
+ } ? Field<Props[SubPropName]> | UserField : Field<Props[SubPropName]>;
72
68
  };
73
69
  };
74
70
  type Adaptor<AdaptorParams = {}, TableShape extends Record<string, any> = {}, PropShape = TableShape> = {
@@ -117,15 +113,20 @@ type CustomFieldRender<Value extends any> = (props: {
117
113
  type CustomField<Value extends any> = BaseField & {
118
114
  type: "custom";
119
115
  render: CustomFieldRender<Value>;
116
+ contentEditable?: boolean;
120
117
  };
121
118
  type SlotField = BaseField & {
122
119
  type: "slot";
123
120
  allow?: string[];
124
121
  disallow?: string[];
125
122
  };
126
- type Field<ValueType = any> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<ValueType> | ObjectField<ValueType> | ExternalField<ValueType> | ExternalFieldWithAdaptor<ValueType> | CustomField<ValueType> | SlotField;
127
- type Fields<ComponentProps extends DefaultComponentProps = DefaultComponentProps> = {
128
- [PropName in keyof Omit<ComponentProps, "editMode">]: Field<ComponentProps[PropName]>;
123
+ type Field<ValueType = any, UserField extends {} = {}> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<ValueType extends {
124
+ [key: string]: any;
125
+ }[] ? ValueType : {}[], UserField> | ObjectField<ValueType, UserField> | ExternalField<ValueType> | ExternalFieldWithAdaptor<ValueType> | CustomField<ValueType> | SlotField;
126
+ type Fields<ComponentProps extends DefaultComponentProps = DefaultComponentProps, UserField extends {} = {}> = {
127
+ [PropName in keyof Omit<ComponentProps, "editMode">]: UserField extends {
128
+ type: PropertyKey;
129
+ } ? Field<ComponentProps[PropName], UserField> | UserField : Field<ComponentProps[PropName]>;
129
130
  };
130
131
  type FieldProps<F = Field<any>, ValueType = any> = {
131
132
  field: F;
@@ -135,6 +136,59 @@ type FieldProps<F = Field<any>, ValueType = any> = {
135
136
  readOnly?: boolean;
136
137
  };
137
138
 
139
+ type DropZoneProps = {
140
+ zone: string;
141
+ allow?: string[];
142
+ disallow?: string[];
143
+ style?: CSSProperties;
144
+ minEmptyHeight?: number;
145
+ className?: string;
146
+ collisionAxis?: DragAxis;
147
+ };
148
+
149
+ type PuckContext = {
150
+ renderDropZone: React.FC<DropZoneProps>;
151
+ metadata: Metadata;
152
+ isEditing: boolean;
153
+ dragRef: ((element: Element | null) => void) | null;
154
+ };
155
+ type DefaultRootFieldProps = {
156
+ title?: string;
157
+ };
158
+ type DefaultRootRenderProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = WithPuckProps<WithChildren<Props>>;
159
+ type DefaultRootProps = DefaultRootRenderProps;
160
+ type DefaultComponentProps = {
161
+ [key: string]: any;
162
+ };
163
+
164
+ type WithId<Props> = Props & {
165
+ id: string;
166
+ };
167
+ type WithPuckProps<Props> = Props & {
168
+ puck: PuckContext;
169
+ editMode?: boolean;
170
+ };
171
+ type AsFieldProps<Props> = Omit<Props, "children" | "puck" | "editMode">;
172
+ type WithChildren<Props> = Props & {
173
+ children: ReactNode;
174
+ };
175
+ type UserGenerics<UserConfig extends Config = Config, UserParams extends ExtractConfigParams<UserConfig> = ExtractConfigParams<UserConfig>, UserData extends Data<UserParams["props"], UserParams["rootProps"]> | Data = Data<UserParams["props"], UserParams["rootProps"]>, UserAppState extends PrivateAppState<UserData> = PrivateAppState<UserData>, UserPublicAppState extends AppState<UserData> = AppState<UserData>, UserComponentData extends ComponentData = UserData["content"][0]> = {
176
+ UserConfig: UserConfig;
177
+ UserParams: UserParams;
178
+ UserProps: UserParams["props"];
179
+ UserRootProps: UserParams["rootProps"] & DefaultRootFieldProps;
180
+ UserData: UserData;
181
+ UserAppState: UserAppState;
182
+ UserPublicAppState: UserPublicAppState;
183
+ UserComponentData: UserComponentData;
184
+ UserField: UserParams["field"];
185
+ };
186
+ type ExtractField<UserField extends {
187
+ type: PropertyKey;
188
+ }, T extends UserField["type"]> = Extract<UserField, {
189
+ type: T;
190
+ }>;
191
+
138
192
  type SlotComponent = (props?: Omit<DropZoneProps, "zone">) => ReactNode;
139
193
  type PuckComponent<Props> = (props: WithId<WithPuckProps<{
140
194
  [K in keyof Props]: WithDeepSlots<Props[K], SlotComponent>;
@@ -143,11 +197,12 @@ type ResolveDataTrigger = "insert" | "replace" | "load" | "force";
143
197
  type WithPartialProps<T, Props extends DefaultComponentProps> = Omit<T, "props"> & {
144
198
  props?: Partial<Props>;
145
199
  };
146
- type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponentProps, FieldProps extends DefaultComponentProps = RenderProps, DataShape = Omit<ComponentData<FieldProps>, "type">> = {
200
+ type ComponentConfigInternal<RenderProps extends DefaultComponentProps, FieldProps extends DefaultComponentProps, DataShape = Omit<ComponentData<FieldProps>, "type">, // NB this doesn't include AllProps, so types will not contain deep slot types. To fix, we require a breaking change.
201
+ UserField extends BaseField = {}> = {
147
202
  render: PuckComponent<RenderProps>;
148
203
  label?: string;
149
204
  defaultProps?: FieldProps;
150
- fields?: Fields<FieldProps>;
205
+ fields?: Fields<FieldProps, UserField>;
151
206
  permissions?: Partial<Permissions>;
152
207
  inline?: boolean;
153
208
  resolveFields?: (data: DataShape, params: {
@@ -179,61 +234,36 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
179
234
  }) => Promise<Partial<Permissions>> | Partial<Permissions>;
180
235
  metadata?: Metadata;
181
236
  };
182
- type RootConfig<RootProps extends DefaultComponentProps = any> = Partial<ComponentConfig<WithChildren<RootProps>, AsFieldProps<RootProps>, RootData<AsFieldProps<RootProps>>>>;
237
+ type ComponentConfig<RenderPropsOrParams extends LeftOrExactRight<RenderPropsOrParams, DefaultComponentProps, ComponentConfigParams> = DefaultComponentProps, FieldProps extends DefaultComponentProps = RenderPropsOrParams extends {
238
+ props: any;
239
+ } ? RenderPropsOrParams["props"] : RenderPropsOrParams, DataShape = Omit<ComponentData<FieldProps>, "type">> = RenderPropsOrParams extends ComponentConfigParams<infer ParamsRenderProps, never> ? ComponentConfigInternal<ParamsRenderProps, FieldProps, DataShape, {}> : RenderPropsOrParams extends ComponentConfigParams<infer ParamsRenderProps, infer ParamsFields> ? ComponentConfigInternal<ParamsRenderProps, FieldProps, DataShape, ParamsFields[keyof ParamsFields] & BaseField> : ComponentConfigInternal<RenderPropsOrParams, FieldProps, DataShape>;
240
+ type RootConfigInternal<RootProps extends DefaultComponentProps = DefaultComponentProps, UserField extends BaseField = {}> = Partial<ComponentConfigInternal<WithChildren<RootProps>, AsFieldProps<RootProps>, RootData<AsFieldProps<RootProps>>, UserField>>;
241
+ type RootConfig<RootPropsOrParams extends LeftOrExactRight<RootPropsOrParams, DefaultComponentProps, ComponentConfigParams> = DefaultComponentProps> = RootPropsOrParams extends ComponentConfigParams<infer Props, never> ? Partial<RootConfigInternal<WithChildren<Props>, {}>> : RootPropsOrParams extends ComponentConfigParams<infer Props, infer UserFields> ? Partial<RootConfigInternal<WithChildren<Props>, UserFields[keyof UserFields] & BaseField>> : Partial<RootConfigInternal<WithChildren<RootPropsOrParams>>>;
183
242
  type Category<ComponentName> = {
184
243
  components?: ComponentName[];
185
244
  title?: string;
186
245
  visible?: boolean;
187
246
  defaultExpanded?: boolean;
188
247
  };
189
- type Config<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = any, CategoryName extends string = string> = {
248
+ type ConfigInternal<Props extends DefaultComponents = DefaultComponents, RootProps extends DefaultComponentProps = DefaultComponentProps, CategoryName extends string = string, UserField extends {} = {}> = {
190
249
  categories?: Record<CategoryName, Category<keyof Props>> & {
191
250
  other?: Category<keyof Props>;
192
251
  };
193
252
  components: {
194
- [ComponentName in keyof Props]: Omit<ComponentConfig<Props[ComponentName], Props[ComponentName]>, "type">;
253
+ [ComponentName in keyof Props]: Omit<ComponentConfigInternal<Props[ComponentName], Props[ComponentName], Omit<ComponentData<Props[ComponentName]>, "type">, UserField>, "type">;
195
254
  };
196
- root?: RootConfig<RootProps>;
197
- };
198
-
199
- type WithId<Props> = Props & {
200
- id: string;
201
- };
202
- type WithPuckProps<Props> = Props & {
203
- puck: PuckContext;
204
- editMode?: boolean;
205
- };
206
- type AsFieldProps<Props> = Omit<Props, "children" | "puck" | "editMode">;
207
- type WithChildren<Props> = Props & {
208
- children: ReactNode;
209
- };
210
- type ExtractPropsFromConfig<UserConfig> = UserConfig extends Config<infer P, any, any> ? P : never;
211
- type ExtractRootPropsFromConfig<UserConfig> = UserConfig extends Config<any, infer P, any> ? P : never;
212
- 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>, UserPublicAppState extends AppState<UserData> = AppState<UserData>, UserComponentData extends ComponentData = UserData["content"][0]> = {
213
- UserConfig: UserConfig;
214
- UserProps: UserProps;
215
- UserRootProps: UserRootProps;
216
- UserData: UserData;
217
- UserAppState: UserAppState;
218
- UserPublicAppState: UserPublicAppState;
219
- UserComponentData: UserComponentData;
220
- };
221
-
222
- type PuckContext = {
223
- renderDropZone: React.FC<DropZoneProps>;
224
- metadata: Metadata;
225
- isEditing: boolean;
226
- dragRef: ((element: Element | null) => void) | null;
227
- };
228
- type DefaultRootFieldProps = {
229
- [key: string]: any;
230
- title?: string;
231
- };
232
- type DefaultRootRenderProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = WithPuckProps<WithChildren<Props>>;
233
- type DefaultRootProps = DefaultRootRenderProps;
234
- type DefaultComponentProps = {
235
- [key: string]: any;
236
- };
255
+ root?: RootConfigInternal<RootProps, UserField>;
256
+ };
257
+ type DefaultComponents = Record<string, any>;
258
+ type Config<PropsOrParams extends LeftOrExactRight<PropsOrParams, DefaultComponents, ConfigParams> = DefaultComponents | ConfigParams, RootProps extends DefaultComponentProps = DefaultComponentProps, CategoryName extends string = string> = PropsOrParams extends ConfigParams<infer ParamComponents, infer ParamRoot, infer ParamCategoryName, never> ? ConfigInternal<ParamComponents, ParamRoot, ParamCategoryName[number]> : PropsOrParams extends ConfigParams<infer ParamComponents, infer ParamRoot, infer ParamCategoryName, infer ParamFields> ? ConfigInternal<ParamComponents, ParamRoot, ParamCategoryName[number], ParamFields[keyof ParamFields] & BaseField> : PropsOrParams extends ConfigParams<infer ParamComponents, infer ParamRoot, infer ParamCategoryName, any> ? ConfigInternal<ParamComponents, ParamRoot, ParamCategoryName[number], {}> : ConfigInternal<PropsOrParams, RootProps, CategoryName>;
259
+ type ExtractConfigParams<UserConfig extends ConfigInternal> = UserConfig extends ConfigInternal<infer PropsOrParams, infer RootProps, infer CategoryName, infer UserField> ? {
260
+ props: PropsOrParams;
261
+ rootProps: RootProps & DefaultRootFieldProps;
262
+ categoryNames: CategoryName;
263
+ field: UserField extends {
264
+ type: string;
265
+ } ? UserField : Field;
266
+ } : never;
237
267
 
238
268
  type BaseData<Props extends {
239
269
  [key: string]: any;
@@ -247,9 +277,9 @@ type RootDataWithProps<Props extends DefaultComponentProps = DefaultRootFieldPro
247
277
  };
248
278
  type RootDataWithoutProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = Props;
249
279
  type RootData<Props extends DefaultComponentProps = DefaultRootFieldProps> = Partial<RootDataWithProps<AsFieldProps<Props>>> & Partial<RootDataWithoutProps<Props>>;
250
- type ComponentData<Props extends DefaultComponentProps = DefaultComponentProps, Name = string, AllProps extends Record<string, DefaultComponentProps> = Record<string, DefaultComponentProps>> = {
280
+ type ComponentData<Props extends DefaultComponentProps = DefaultComponentProps, Name = string, Components extends Record<string, DefaultComponentProps> = Record<string, DefaultComponentProps>> = {
251
281
  type: Name;
252
- props: WithDeepSlots<WithId<Props>, Content<AllProps>>;
282
+ props: WithDeepSlots<WithId<Props>, Content<Components>>;
253
283
  } & BaseData<Props>;
254
284
  type ComponentDataOptionalId<Props extends DefaultComponentProps = DefaultComponentProps, Name = string> = {
255
285
  type: Name;
@@ -258,18 +288,18 @@ type ComponentDataOptionalId<Props extends DefaultComponentProps = DefaultCompon
258
288
  };
259
289
  } & BaseData<Props>;
260
290
  type MappedItem = ComponentData;
261
- type ComponentDataMap<AllProps extends DefaultAllProps = DefaultAllProps> = {
262
- [K in keyof AllProps]: ComponentData<AllProps[K], K extends string ? K : never, AllProps>;
263
- }[keyof AllProps];
291
+ type ComponentDataMap<Components extends DefaultComponents = DefaultComponents> = {
292
+ [K in keyof Components]: ComponentData<Components[K], K extends string ? K : never, Components>;
293
+ }[keyof Components];
264
294
  type Content<PropsMap extends {
265
295
  [key: string]: DefaultComponentProps;
266
296
  } = {
267
297
  [key: string]: DefaultComponentProps;
268
298
  }> = ComponentDataMap<PropsMap>[];
269
- type Data<AllProps extends DefaultAllProps = DefaultAllProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = {
270
- root: WithDeepSlots<RootData<RootProps>, Content<AllProps>>;
271
- content: Content<AllProps>;
272
- zones?: Record<string, Content<AllProps>>;
299
+ type Data<Components extends DefaultComponents = DefaultComponents, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = {
300
+ root: WithDeepSlots<RootData<RootProps>, Content<Components>>;
301
+ content: Content<Components>;
302
+ zones?: Record<string, Content<Components>>;
273
303
  };
274
304
  type Metadata = {
275
305
  [key: string]: any;
@@ -286,6 +316,8 @@ type ArrayState = {
286
316
  type UiState = {
287
317
  leftSideBarVisible: boolean;
288
318
  rightSideBarVisible: boolean;
319
+ leftSideBarWidth?: number | null;
320
+ rightSideBarWidth?: number | null;
289
321
  itemSelector: ItemSelector | null;
290
322
  arrayState: Record<string, ArrayState | undefined>;
291
323
  previewMode: "interactive" | "edit";
@@ -333,7 +365,6 @@ type PrivateAppState<UserData extends Data = Data> = AppState<UserData> & {
333
365
  zones: ZoneIndex;
334
366
  };
335
367
  };
336
- type DefaultAllProps = Record<string, DefaultComponentProps>;
337
368
  type BuiltinTypes = Date | RegExp | Error | Function | symbol | null | undefined;
338
369
  /**
339
370
  * Recursively walk T and replace Slots with SlotComponents
@@ -341,19 +372,61 @@ type BuiltinTypes = Date | RegExp | Error | Function | symbol | null | undefined
341
372
  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 BuiltinTypes ? T : T extends object ? {
342
373
  [K in keyof T]: WithDeepSlots<T[K], SlotType>;
343
374
  } : T;
375
+ type ConfigParams<Components extends DefaultComponents = DefaultComponents, RootProps extends DefaultComponentProps = DefaultComponentProps, CategoryNames extends string[] = string[], UserFields extends FieldsExtension = FieldsExtension> = {
376
+ components?: Components;
377
+ root?: RootProps;
378
+ categories?: CategoryNames;
379
+ fields?: AssertHasValue<UserFields>;
380
+ };
381
+ type FieldsExtension = {
382
+ [Type in string]: {
383
+ type: Type;
384
+ };
385
+ };
386
+ type ComponentConfigParams<Props extends DefaultComponentProps = DefaultComponentProps, UserFields extends FieldsExtension = never> = {
387
+ props: Props;
388
+ fields?: AssertHasValue<UserFields>;
389
+ };
390
+ type Exact<T, Target> = Record<Exclude<keyof T, keyof Target>, never>;
391
+ type LeftOrExactRight<Union, Left, Right> = (Left & Union extends Right ? Exact<Union, Right> : Left) | (Right & Exact<Union, Right>);
392
+ type AssertHasValue<T, True = T, False = never> = [keyof T] extends [
393
+ never
394
+ ] ? False : True;
395
+
396
+ type MapFnParams<ThisField = Field> = {
397
+ value: any;
398
+ parentId: string;
399
+ propName: string;
400
+ field: ThisField;
401
+ propPath: string;
402
+ };
403
+
404
+ type FieldTransformFnParams<T> = Omit<MapFnParams<T>, "parentId"> & {
405
+ isReadOnly: boolean;
406
+ componentId: string;
407
+ };
408
+ type FieldTransformFn<T> = (params: FieldTransformFnParams<T>) => any;
409
+ type FieldTransforms<UserConfig extends Config = Config<{
410
+ fields: {};
411
+ }>, // Setting fields: {} helps TS choose default field types
412
+ G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>, UserField extends {
413
+ type: string;
414
+ } = Field | G["UserField"]> = Partial<{
415
+ [Type in UserField["type"]]: FieldTransformFn<ExtractField<UserField, Type>>;
416
+ }>;
344
417
 
345
418
  type RenderFunc<Props extends {
346
419
  [key: string]: any;
347
420
  } = {
348
421
  children: ReactNode;
349
422
  }> = (props: Props) => ReactElement;
350
- declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "components", "componentItem", "outline", "puck", "preview"];
423
+ declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "drawer", "drawerItem", "componentOverlay", "outline", "puck", "preview"];
351
424
  type OverrideKey = (typeof overrideKeys)[number];
352
425
  type OverridesGeneric<Shape extends {
353
426
  [key in OverrideKey]: any;
354
427
  }> = Shape;
355
- type Overrides = OverridesGeneric<{
356
- fieldTypes: Partial<FieldRenderFunctions>;
428
+ type Overrides<UserConfig extends Config = Config> = OverridesGeneric<{
429
+ fieldTypes: Partial<FieldRenderFunctions<UserConfig>>;
357
430
  header: RenderFunc<{
358
431
  actions: ReactNode;
359
432
  children: ReactNode;
@@ -385,26 +458,33 @@ type Overrides = OverridesGeneric<{
385
458
  children: ReactNode;
386
459
  name: string;
387
460
  }>;
461
+ drawer: RenderFunc;
462
+ drawerItem: RenderFunc<{
463
+ children: ReactNode;
464
+ name: string;
465
+ }>;
388
466
  iframe: RenderFunc<{
389
467
  children: ReactNode;
390
468
  document?: Document;
391
469
  }>;
392
470
  outline: RenderFunc;
393
- puck: RenderFunc;
394
- }>;
395
- type FieldRenderFunctions = Omit<{
396
- [Type in Field["type"]]: React.FunctionComponent<FieldProps<Extract<Field, {
397
- type: Type;
398
- }>, any> & {
471
+ componentOverlay: RenderFunc<{
399
472
  children: ReactNode;
400
- name: string;
473
+ hover: boolean;
474
+ isSelected: boolean;
475
+ componentId: string;
476
+ componentType: string;
401
477
  }>;
402
- }, "custom"> & {
403
- [key: string]: React.FunctionComponent<FieldProps<any> & {
478
+ puck: RenderFunc;
479
+ }>;
480
+ type FieldRenderFunctions<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>, UserField extends {
481
+ type: string;
482
+ } = Field | G["UserField"]> = Omit<{
483
+ [Type in UserField["type"]]: React.FunctionComponent<FieldProps<ExtractField<UserField, Type>, any> & {
404
484
  children: ReactNode;
405
485
  name: string;
406
486
  }>;
407
- };
487
+ }, "custom">;
408
488
 
409
489
  type Direction = "left" | "right" | "up" | "down" | null;
410
490
  type DragAxis = "dynamic" | "y" | "x";
@@ -430,8 +510,9 @@ type IframeConfig = {
430
510
  waitForStyles?: boolean;
431
511
  };
432
512
  type OnAction<UserData extends Data = Data> = (action: PuckAction, appState: AppState<UserData>, prevAppState: AppState<UserData>) => void;
433
- type Plugin = {
434
- overrides: Partial<Overrides>;
513
+ type Plugin<UserConfig extends Config = Config> = {
514
+ overrides?: Partial<Overrides<UserConfig>>;
515
+ fieldTransforms?: FieldTransforms<UserConfig>;
435
516
  };
436
517
  type History<D = any> = {
437
518
  state: D;
@@ -455,7 +536,7 @@ type Slot<Props extends {
455
536
  }> = {
456
537
  [K in keyof Props]: ComponentDataOptionalId<Props[K], K extends string ? K : never>;
457
538
  }[keyof Props][];
458
- type WithSlotProps<Target extends Record<string, any>, AllProps extends DefaultAllProps = DefaultAllProps, SlotType extends Content<AllProps> = Content<AllProps>> = WithDeepSlots<Target, SlotType>;
539
+ type WithSlotProps<Target extends Record<string, any>, Components extends DefaultComponents = DefaultComponents, SlotType extends Content<Components> = Content<Components>> = WithDeepSlots<Target, SlotType>;
459
540
 
460
541
  type InsertAction = {
461
542
  type: "insert";
@@ -530,18 +611,18 @@ type MigrationOptions<UserConfig extends Config> = {
530
611
  };
531
612
  declare function migrate<UserConfig extends Config = Config>(data: Data, config?: UserConfig, migrationOptions?: MigrationOptions<UserConfig>): Data;
532
613
 
533
- type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = Partial<{
534
- [ComponentName in keyof Props]: (props: Props[ComponentName] & {
614
+ type PropTransform<Components extends DefaultComponents = DefaultComponents, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = Partial<{
615
+ [ComponentName in keyof Components]: (props: Components[ComponentName] & {
535
616
  [key: string]: any;
536
- }) => Props[ComponentName];
617
+ }) => Components[ComponentName];
537
618
  } & {
538
619
  root: (props: RootProps & {
539
620
  [key: string]: any;
540
621
  }) => RootProps;
541
622
  }>;
542
- declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>, config?: Config): Data;
623
+ declare function transformProps<Components extends DefaultComponents = DefaultComponents, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Components, RootProps>, config?: Config): Data;
543
624
 
544
- 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>>;
625
+ declare function resolveAllData<Components extends DefaultComponents = DefaultComponents, RootProps extends Record<string, any> = DefaultRootFieldProps>(data: Partial<Data>, config: Config, metadata?: Metadata, onResolveStart?: (item: ComponentData) => void, onResolveEnd?: (item: ComponentData) => void): Promise<Data<Components, RootProps>>;
545
626
 
546
627
  type WalkTreeOptions = {
547
628
  parentId: string;
@@ -549,4 +630,4 @@ type WalkTreeOptions = {
549
630
  };
550
631
  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;
551
632
 
552
- export { type RadioField as $, type AppState as A, type RootConfig as B, type Config as C, type DropZoneProps as D, type BaseData as E, type Fields as F, type RootDataWithoutProps as G, type History as H, type IframeConfig as I, type RootData as J, type ComponentDataOptionalId as K, type MappedItem as L, type Metadata as M, type ComponentDataMap as N, type Overrides as O, type Permissions as P, type Content as Q, type RootDataWithProps as R, type Slot as S, type BaseField as T, type UserGenerics as U, type Viewports as V, type WithSlotProps as W, type TextField as X, type NumberField as Y, type TextareaField as Z, type SelectField as _, type ComponentData as a, type ArrayField as a0, type ObjectField as a1, type Adaptor as a2, type ExternalFieldWithAdaptor as a3, type ExternalField as a4, type CustomFieldRender as a5, type CustomField as a6, type SlotField as a7, type PuckContext as a8, type DefaultRootFieldProps as a9, type DefaultRootRenderProps as aa, type DefaultRootProps as ab, type DefaultComponentProps as ac, type WithId as ad, type WithPuckProps as ae, type AsFieldProps as af, type WithChildren as ag, type ExtractPropsFromConfig as ah, type ExtractRootPropsFromConfig as ai, 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, migrate as m, type Direction as n, type DragAxis as o, type Viewport as p, overrideKeys as q, resolveAllData as r, type OverrideKey as s, transformProps as t, type FieldRenderFunctions as u, type ItemWithId as v, walkTree as w, type ArrayState as x, type SlotComponent as y, type PuckComponent as z };
633
+ export { type BaseField as $, type AppState as A, type ArrayState as B, type Config as C, type DropZoneProps as D, type SlotComponent as E, type Fields as F, type PuckComponent as G, type History as H, type IframeConfig as I, type RootConfig as J, type DefaultComponents as K, type ExtractConfigParams as L, type Metadata as M, type BaseData as N, type Overrides as O, type Permissions as P, type RootDataWithoutProps as Q, type RootDataWithProps as R, type Slot as S, type RootData as T, type UserGenerics as U, type Viewports as V, type WithSlotProps as W, type ComponentDataOptionalId as X, type MappedItem as Y, type ComponentDataMap as Z, type Content as _, type ComponentData as a, type TextField as a0, type NumberField as a1, type TextareaField as a2, type SelectField as a3, type RadioField as a4, type ArrayField as a5, type ObjectField as a6, type Adaptor as a7, type ExternalFieldWithAdaptor as a8, type ExternalField as a9, type CustomFieldRender as aa, type CustomField as ab, type SlotField as ac, type PuckContext as ad, type DefaultRootFieldProps as ae, type DefaultRootRenderProps as af, type DefaultRootProps as ag, type DefaultComponentProps as ah, type WithId as ai, type WithPuckProps as aj, type AsFieldProps as ak, type WithChildren as al, type ExtractField as am, type PuckAction as b, type ResolveDataTrigger as c, type Plugin as d, type UiState as e, type ComponentConfig as f, type FieldTransforms as g, type Field as h, type FieldProps as i, type Data as j, type OnAction as k, type InitialHistory as l, migrate as m, type ItemSelector as n, type Direction as o, type DragAxis as p, type Viewport as q, resolveAllData as r, type FieldTransformFnParams as s, transformProps as t, type FieldTransformFn as u, overrideKeys as v, walkTree as w, type OverrideKey as x, type FieldRenderFunctions as y, type ItemWithId as z };