@measured/puck 0.19.0-canary.91cb9cee → 0.19.0-canary.a60c81eb

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.
@@ -24,6 +24,7 @@ type BaseField = {
24
24
  label?: string;
25
25
  labelIcon?: ReactElement;
26
26
  metadata?: Metadata;
27
+ visible?: boolean;
27
28
  };
28
29
  type TextField = BaseField & {
29
30
  type: "text";
@@ -147,10 +148,14 @@ type FieldProps<F = Field<any>, ValueType = any> = {
147
148
  readOnly?: boolean;
148
149
  };
149
150
 
151
+ type SlotComponent = (props?: Omit<DropZoneProps, "zone">) => ReactNode;
150
152
  type PuckComponent<Props> = (props: WithId<WithPuckProps<{
151
- [PropName in keyof Props]: Props[PropName] extends Slot ? (props?: Omit<DropZoneProps, "zone">) => ReactNode : Props[PropName];
153
+ [K in keyof Props]: WithDeepSlots<Props[K], SlotComponent>;
152
154
  }>>) => JSX.Element;
153
155
  type ResolveDataTrigger = "insert" | "replace" | "load" | "force";
156
+ type WithPartialProps<T, Props extends DefaultComponentProps> = Omit<T, "props"> & {
157
+ props?: Partial<Props>;
158
+ };
154
159
  type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponentProps, FieldProps extends DefaultComponentProps = RenderProps, DataShape = Omit<ComponentData<FieldProps>, "type">> = {
155
160
  render: PuckComponent<RenderProps>;
156
161
  label?: string;
@@ -175,13 +180,7 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
175
180
  lastData: DataShape | null;
176
181
  metadata: Metadata;
177
182
  trigger: ResolveDataTrigger;
178
- }) => Promise<{
179
- props?: Partial<FieldProps>;
180
- readOnly?: Partial<Record<keyof FieldProps, boolean>>;
181
- }> | {
182
- props?: Partial<FieldProps>;
183
- readOnly?: Partial<Record<keyof FieldProps, boolean>>;
184
- };
183
+ }) => Promise<WithPartialProps<DataShape, FieldProps>> | WithPartialProps<DataShape, FieldProps>;
185
184
  resolvePermissions?: (data: DataShape, params: {
186
185
  changed: Partial<Record<keyof FieldProps, boolean> & {
187
186
  id: string;
@@ -239,6 +238,7 @@ type PuckContext = {
239
238
  dragRef: ((element: Element | null) => void) | null;
240
239
  };
241
240
  type DefaultRootFieldProps = {
241
+ [key: string]: any;
242
242
  title?: string;
243
243
  };
244
244
  type DefaultRootRenderProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = WithPuckProps<WithChildren<Props>>;
@@ -255,13 +255,13 @@ type BaseData<Props extends {
255
255
  readOnly?: Partial<Record<keyof Props, boolean>>;
256
256
  };
257
257
  type RootDataWithProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = BaseData<Props> & {
258
- props: WithSlotProps<Props>;
258
+ props: Props;
259
259
  };
260
260
  type RootDataWithoutProps<Props extends DefaultComponentProps = DefaultRootFieldProps> = Props;
261
261
  type RootData<Props extends DefaultComponentProps = DefaultRootFieldProps> = Partial<RootDataWithProps<AsFieldProps<Props>>> & Partial<RootDataWithoutProps<Props>>;
262
- 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
263
  type: Name;
264
- props: WithId<WithSlotProps<Props>>;
264
+ props: WithDeepSlots<WithId<Props>, Content<AllProps>>;
265
265
  } & BaseData<Props>;
266
266
  type ComponentDataOptionalId<Props extends DefaultComponentProps = DefaultComponentProps, Name = string> = {
267
267
  type: Name;
@@ -270,18 +270,18 @@ type ComponentDataOptionalId<Props extends DefaultComponentProps = DefaultCompon
270
270
  };
271
271
  } & BaseData<Props>;
272
272
  type MappedItem = ComponentData;
273
- type ComponentDataMap<Props extends Record<string, DefaultComponentProps> = DefaultComponentProps> = {
274
- [K in keyof Props]: ComponentData<Props[K], K extends string ? K : never>;
275
- }[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];
276
276
  type Content<PropsMap extends {
277
277
  [key: string]: DefaultComponentProps;
278
278
  } = {
279
279
  [key: string]: DefaultComponentProps;
280
280
  }> = ComponentDataMap<PropsMap>[];
281
- type Data<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = {
282
- root: RootData<RootProps>;
283
- content: Content<Props>;
284
- 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>>;
285
285
  };
286
286
  type Metadata = {
287
287
  [key: string]: any;
@@ -345,6 +345,13 @@ type PrivateAppState<UserData extends Data = Data> = AppState<UserData> & {
345
345
  zones: ZoneIndex;
346
346
  };
347
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;
348
355
 
349
356
  type RenderFunc<Props extends {
350
357
  [key: string]: any;
@@ -459,9 +466,7 @@ type Slot<Props extends {
459
466
  }> = {
460
467
  [K in keyof Props]: ComponentDataOptionalId<Props[K], K extends string ? K : never>;
461
468
  }[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
- };
469
+ type WithSlotProps<Target extends Record<string, any>, AllProps extends DefaultAllProps = DefaultAllProps, SlotType extends Content<AllProps> = Content<AllProps>> = WithDeepSlots<Target, SlotType>;
465
470
 
466
471
  type InsertAction = {
467
472
  type: "insert";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@measured/puck",
3
- "version": "0.19.0-canary.91cb9cee",
3
+ "version": "0.19.0-canary.a60c81eb",
4
4
  "author": "Chris Villa <chris@puckeditor.com>",
5
5
  "repository": "measuredco/puck",
6
6
  "bugs": "https://github.com/measuredco/puck/issues",
@@ -49,9 +49,12 @@
49
49
  "dist"
50
50
  ],
51
51
  "devDependencies": {
52
+ "@juggle/resize-observer": "^3.4.0",
53
+ "@testing-library/jest-dom": "^6.6.3",
52
54
  "@testing-library/react": "^16.1.0",
53
55
  "@types/deep-diff": "^1.0.3",
54
- "@types/jest": "^29.5.4",
56
+ "@types/flat": "^5.0.5",
57
+ "@types/jest": "^29.5.14",
55
58
  "@types/object-hash": "^3.0.6",
56
59
  "@types/react": "^19.0.1",
57
60
  "@types/react-dom": "^19.0.2",
@@ -59,20 +62,22 @@
59
62
  "css-box-model": "^1.2.1",
60
63
  "eslint": "^7.32.0",
61
64
  "eslint-config-custom": "*",
62
- "jest": "^29.6.4",
63
- "jest-environment-jsdom": "^29.6.4",
65
+ "identity-obj-proxy": "^3.0.0",
66
+ "jest": "^29.7.0",
67
+ "jest-environment-jsdom": "^30.0.0-beta.3",
64
68
  "lucide-react": "^0.468.0",
65
- "ts-jest": "^29.2.4",
69
+ "ts-jest": "^29.3.4",
66
70
  "tsconfig": "*",
67
71
  "tsup": "^8.2.4",
68
72
  "tsup-config": "*",
69
73
  "typescript": "^5.5.4"
70
74
  },
71
75
  "dependencies": {
72
- "@dnd-kit/helpers": "0.1.18-beta-20250525014052",
73
- "@dnd-kit/react": "0.1.18-beta-20250525014052",
76
+ "@dnd-kit/helpers": "0.1.18",
77
+ "@dnd-kit/react": "0.1.18",
74
78
  "deep-diff": "^1.0.2",
75
79
  "fast-deep-equal": "^3.1.3",
80
+ "flat": "^5.0.2",
76
81
  "object-hash": "^3.0.0",
77
82
  "react-hotkeys-hook": "^4.6.1",
78
83
  "use-debounce": "^9.0.4",