@measured/puck 0.18.0-canary.c6df5b2 → 0.18.0-canary.cfe4ca8

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -101,11 +101,11 @@ Available recipes include:
101
101
  - [Discord server](https://discord.gg/D9e4E3MQVZ) for discussions
102
102
  - [awesome-puck](https://github.com/measuredco/awesome-puck) community repo for plugins, custom fields & more
103
103
 
104
- ## Hire the Puck team
104
+ ## Get support
105
105
 
106
- Puck is developed and maintained by **Measured**, a small group of industry veterans with decades of experience helping companies solve hard UI problems. We offer consultancy and development services for scale-ups, SMEs and enterprises.
106
+ If you have any questions about Puck, please open a [GitHub issue](https://github.com/measuredco/puck/issues) or join us on [Discord](https://discord.gg/D9e4E3MQVZ).
107
107
 
108
- If you need support integrating Puck or creating a beautiful component library, please reach out via the [Measured](https://measured.co) website.
108
+ Or [book a discovery call](https://app.cal.com/chrisvxd/puck-enquiry/) for hands-on support and consultancy.
109
109
 
110
110
  ## License
111
111
 
package/dist/index.css CHANGED
@@ -136,6 +136,7 @@
136
136
 
137
137
  /* styles.css */
138
138
  #frame-root {
139
+ height: 1px;
139
140
  min-height: 100vh;
140
141
  }
141
142
 
@@ -224,27 +225,10 @@
224
225
  }
225
226
 
226
227
  /* css-module:/home/runner/work/puck/puck/packages/core/components/AutoField/styles.module.css/#css-module-data */
227
- ._InputWrapper_1l5m8_1 {
228
- color: var(--puck-color-grey-04);
229
- padding: 16px;
230
- padding-bottom: 12px;
231
- display: block;
232
- }
233
- ._InputWrapper_1l5m8_1 + ._InputWrapper_1l5m8_1 {
234
- border-top: 1px solid var(--puck-color-grey-09);
235
- margin-top: 8px;
236
- }
237
- ._Input_1l5m8_1 ._InputWrapper_1l5m8_1 {
238
- padding: 0px;
239
- }
240
- ._Input_1l5m8_1 * {
241
- box-sizing: border-box;
242
- }
243
- ._Input_1l5m8_1 ._InputWrapper_1l5m8_1 + ._InputWrapper_1l5m8_1 {
244
- border-top: 0px;
228
+ ._InputWrapper_1h1p1_1 + ._InputWrapper_1h1p1_1 {
245
229
  margin-top: 12px;
246
230
  }
247
- ._Input-label_1l5m8_26 {
231
+ ._Input-label_1h1p1_5 {
248
232
  align-items: center;
249
233
  color: var(--puck-color-grey-04);
250
234
  display: flex;
@@ -252,17 +236,17 @@
252
236
  font-size: var(--puck-font-size-xxs);
253
237
  font-weight: 600;
254
238
  }
255
- ._Input-labelIcon_1l5m8_35 {
239
+ ._Input-labelIcon_1h1p1_14 {
256
240
  color: var(--puck-color-grey-07);
257
241
  display: flex;
258
242
  margin-right: 4px;
259
243
  padding-left: 4px;
260
244
  }
261
- ._Input-disabledIcon_1l5m8_42 {
245
+ ._Input-disabledIcon_1h1p1_21 {
262
246
  color: var(--puck-color-grey-05);
263
247
  margin-left: auto;
264
248
  }
265
- ._Input-input_1l5m8_47 {
249
+ ._Input-input_1h1p1_26 {
266
250
  background: var(--puck-color-white);
267
251
  border-width: 1px;
268
252
  border-style: solid;
@@ -274,7 +258,7 @@
274
258
  transition: border-color 50ms ease-in;
275
259
  width: 100%;
276
260
  }
277
- select._Input-input_1l5m8_47 {
261
+ select._Input-input_1h1p1_26 {
278
262
  appearance: none;
279
263
  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' fill='%23c3c3c3'><polygon points='0,0 100,0 50,50'/></svg>") no-repeat;
280
264
  background-size: 12px;
@@ -284,25 +268,25 @@ select._Input-input_1l5m8_47 {
284
268
  cursor: pointer;
285
269
  }
286
270
  @media (hover: hover) and (pointer: fine) {
287
- ._Input_1l5m8_1:has(> input):hover ._Input-input_1l5m8_47:not([readonly]),
288
- ._Input_1l5m8_1:has(> textarea):hover ._Input-input_1l5m8_47:not([readonly]) {
271
+ ._Input_1h1p1_1:has(> input):hover ._Input-input_1h1p1_26:not([readonly]),
272
+ ._Input_1h1p1_1:has(> textarea):hover ._Input-input_1h1p1_26:not([readonly]) {
289
273
  border-color: var(--puck-color-grey-05);
290
274
  transition: none;
291
275
  }
292
- ._Input_1l5m8_1:has(> select):hover ._Input-input_1l5m8_47:not([disabled]) {
276
+ ._Input_1h1p1_1:has(> select):hover ._Input-input_1h1p1_26:not([disabled]) {
293
277
  background-color: var(--puck-color-azure-12);
294
278
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' fill='%235a5a5a'><polygon points='0,0 100,0 50,50'/></svg>");
295
279
  border-color: var(--puck-color-grey-05);
296
280
  transition: none;
297
281
  }
298
282
  }
299
- ._Input-input_1l5m8_47:focus {
283
+ ._Input-input_1h1p1_26:focus {
300
284
  border-color: var(--puck-color-grey-05);
301
285
  outline: 2px solid var(--puck-color-azure-05);
302
286
  transition: none;
303
287
  }
304
- ._Input--readOnly_1l5m8_91 > ._Input-input_1l5m8_47,
305
- ._Input--readOnly_1l5m8_91 > select._Input-input_1l5m8_47 {
288
+ ._Input--readOnly_1h1p1_70 > ._Input-input_1h1p1_26,
289
+ ._Input--readOnly_1h1p1_70 > select._Input-input_1h1p1_26 {
306
290
  background-color: var(--puck-color-grey-11);
307
291
  border-color: var(--puck-color-grey-09);
308
292
  color: var(--puck-color-grey-04);
@@ -311,34 +295,34 @@ select._Input-input_1l5m8_47 {
311
295
  outline: 0;
312
296
  transition: none;
313
297
  }
314
- ._Input-radioGroupItems_1l5m8_102 {
298
+ ._Input-radioGroupItems_1h1p1_81 {
315
299
  display: flex;
316
300
  border: 1px solid var(--puck-color-grey-09);
317
301
  border-radius: 4px;
318
302
  flex-wrap: wrap;
319
303
  }
320
- ._Input-radio_1l5m8_102 {
304
+ ._Input-radio_1h1p1_81 {
321
305
  border-right: 1px solid var(--puck-color-grey-09);
322
306
  flex-grow: 1;
323
307
  }
324
- ._Input-radio_1l5m8_102:first-of-type {
308
+ ._Input-radio_1h1p1_81:first-of-type {
325
309
  border-bottom-left-radius: 4px;
326
310
  border-top-left-radius: 4px;
327
311
  }
328
- ._Input-radio_1l5m8_102:first-of-type ._Input-radioInner_1l5m8_119 {
312
+ ._Input-radio_1h1p1_81:first-of-type ._Input-radioInner_1h1p1_98 {
329
313
  border-bottom-left-radius: 3px;
330
314
  border-top-left-radius: 3px;
331
315
  }
332
- ._Input-radio_1l5m8_102:last-of-type {
316
+ ._Input-radio_1h1p1_81:last-of-type {
333
317
  border-bottom-right-radius: 4px;
334
318
  border-right: 0;
335
319
  border-top-right-radius: 4px;
336
320
  }
337
- ._Input-radio_1l5m8_102:last-of-type ._Input-radioInner_1l5m8_119 {
321
+ ._Input-radio_1h1p1_81:last-of-type ._Input-radioInner_1h1p1_98 {
338
322
  border-bottom-right-radius: 3px;
339
323
  border-top-right-radius: 3px;
340
324
  }
341
- ._Input-radioInner_1l5m8_119 {
325
+ ._Input-radioInner_1h1p1_98 {
342
326
  background-color: var(--puck-color-white);
343
327
  color: var(--puck-color-grey-04);
344
328
  cursor: pointer;
@@ -347,32 +331,32 @@ select._Input-input_1l5m8_47 {
347
331
  text-align: center;
348
332
  transition: background-color 50ms ease-in;
349
333
  }
350
- ._Input-radio_1l5m8_102:has(:focus-visible) {
334
+ ._Input-radio_1h1p1_81:has(:focus-visible) {
351
335
  outline: 2px solid var(--puck-color-azure-05);
352
336
  outline-offset: 2px;
353
337
  position: relative;
354
338
  }
355
339
  @media (hover: hover) and (pointer: fine) {
356
- ._Input-radioInner_1l5m8_119:hover {
340
+ ._Input-radioInner_1h1p1_98:hover {
357
341
  background-color: var(--puck-color-azure-12);
358
342
  transition: none;
359
343
  }
360
344
  }
361
- ._Input--readOnly_1l5m8_91 ._Input-radioInner_1l5m8_119 {
345
+ ._Input--readOnly_1h1p1_70 ._Input-radioInner_1h1p1_98 {
362
346
  background-color: var(--puck-color-white);
363
347
  color: var(--puck-color-grey-04);
364
348
  cursor: default;
365
349
  }
366
- ._Input-radio_1l5m8_102 ._Input-radioInput_1l5m8_164:checked ~ ._Input-radioInner_1l5m8_119 {
350
+ ._Input-radio_1h1p1_81 ._Input-radioInput_1h1p1_143:checked ~ ._Input-radioInner_1h1p1_98 {
367
351
  background-color: var(--puck-color-azure-11);
368
352
  color: var(--puck-color-azure-04);
369
353
  font-weight: 500;
370
354
  }
371
- ._Input--readOnly_1l5m8_91 ._Input-radioInput_1l5m8_164:checked ~ ._Input-radioInner_1l5m8_119 {
355
+ ._Input--readOnly_1h1p1_70 ._Input-radioInput_1h1p1_143:checked ~ ._Input-radioInner_1h1p1_98 {
372
356
  background-color: var(--puck-color-grey-11);
373
357
  color: var(--puck-color-grey-04);
374
358
  }
375
- ._Input-radio_1l5m8_102 ._Input-radioInput_1l5m8_164 {
359
+ ._Input-radio_1h1p1_81 ._Input-radioInput_1h1p1_143 {
376
360
  clip: rect(0 0 0 0);
377
361
  clip-path: inset(100%);
378
362
  height: 1px;
@@ -381,7 +365,7 @@ select._Input-input_1l5m8_47 {
381
365
  white-space: nowrap;
382
366
  width: 1px;
383
367
  }
384
- textarea._Input-input_1l5m8_47 {
368
+ textarea._Input-input_1h1p1_26 {
385
369
  margin-bottom: -4px;
386
370
  }
387
371
 
@@ -1567,14 +1551,14 @@ body:has(._DropZone--isAnimating_kmkdc_70:empty) [data-puck-overlay] {
1567
1551
  }
1568
1552
 
1569
1553
  /* css-module:/home/runner/work/puck/puck/packages/core/components/Puck/components/Fields/styles.module.css/#css-module-data */
1570
- ._PuckFields_jp3lw_1 {
1554
+ ._PuckFields_10bh7_1 {
1571
1555
  position: relative;
1572
1556
  font-family: var(--puck-font-family);
1573
1557
  }
1574
- ._PuckFields--isLoading_jp3lw_6 {
1558
+ ._PuckFields--isLoading_10bh7_6 {
1575
1559
  min-height: 48px;
1576
1560
  }
1577
- ._PuckFields-loadingOverlay_jp3lw_10 {
1561
+ ._PuckFields-loadingOverlay_10bh7_10 {
1578
1562
  background: var(--puck-color-white);
1579
1563
  display: flex;
1580
1564
  justify-content: flex-end;
@@ -1588,12 +1572,25 @@ body:has(._DropZone--isAnimating_kmkdc_70:empty) [data-puck-overlay] {
1588
1572
  box-sizing: border-box;
1589
1573
  opacity: 0.8;
1590
1574
  }
1591
- ._PuckFields-loadingOverlayInner_jp3lw_25 {
1575
+ ._PuckFields-loadingOverlayInner_10bh7_25 {
1592
1576
  display: flex;
1593
1577
  padding: 16px;
1594
1578
  position: sticky;
1595
1579
  top: 0;
1596
1580
  }
1581
+ ._PuckFields-field_10bh7_32 * {
1582
+ box-sizing: border-box;
1583
+ }
1584
+ ._PuckFields--wrapFields_10bh7_36 ._PuckFields-field_10bh7_32 {
1585
+ color: var(--puck-color-grey-04);
1586
+ padding: 16px;
1587
+ padding-bottom: 12px;
1588
+ display: block;
1589
+ }
1590
+ ._PuckFields--wrapFields_10bh7_36 ._PuckFields-field_10bh7_32 + ._PuckFields-field_10bh7_32 {
1591
+ border-top: 1px solid var(--puck-color-grey-09);
1592
+ margin-top: 8px;
1593
+ }
1597
1594
 
1598
1595
  /* css-module:/home/runner/work/puck/puck/packages/core/components/ComponentList/styles.module.css/#css-module-data */
1599
1596
  ._ComponentList_odh9d_1 {
package/dist/index.d.mts CHANGED
@@ -165,7 +165,9 @@ declare function Puck<UserConfig extends Config = Config, G extends UserGenerics
165
165
  }): react_jsx_runtime.JSX.Element;
166
166
  declare namespace Puck {
167
167
  var Components: () => react_jsx_runtime.JSX.Element;
168
- var Fields: () => react_jsx_runtime.JSX.Element;
168
+ var Fields: ({ wrapFields }: {
169
+ wrapFields?: boolean;
170
+ }) => react_jsx_runtime.JSX.Element;
169
171
  var Outline: () => react_jsx_runtime.JSX.Element;
170
172
  var Preview: ({ id }: {
171
173
  id?: string;
package/dist/index.d.ts CHANGED
@@ -165,7 +165,9 @@ declare function Puck<UserConfig extends Config = Config, G extends UserGenerics
165
165
  }): react_jsx_runtime.JSX.Element;
166
166
  declare namespace Puck {
167
167
  var Components: () => react_jsx_runtime.JSX.Element;
168
- var Fields: () => react_jsx_runtime.JSX.Element;
168
+ var Fields: ({ wrapFields }: {
169
+ wrapFields?: boolean;
170
+ }) => react_jsx_runtime.JSX.Element;
169
171
  var Outline: () => react_jsx_runtime.JSX.Element;
170
172
  var Preview: ({ id }: {
171
173
  id?: string;
package/dist/index.js CHANGED
@@ -308,7 +308,7 @@ init_react_import();
308
308
 
309
309
  // css-module:/home/runner/work/puck/puck/packages/core/components/AutoField/styles.module.css#css-module
310
310
  init_react_import();
311
- var styles_module_default2 = { "InputWrapper": "_InputWrapper_1l5m8_1", "Input": "_Input_1l5m8_1", "Input-label": "_Input-label_1l5m8_26", "Input-labelIcon": "_Input-labelIcon_1l5m8_35", "Input-disabledIcon": "_Input-disabledIcon_1l5m8_42", "Input-input": "_Input-input_1l5m8_47", "Input--readOnly": "_Input--readOnly_1l5m8_91", "Input-radioGroupItems": "_Input-radioGroupItems_1l5m8_102", "Input-radio": "_Input-radio_1l5m8_102", "Input-radioInner": "_Input-radioInner_1l5m8_119", "Input-radioInput": "_Input-radioInput_1l5m8_164" };
311
+ var styles_module_default2 = { "InputWrapper": "_InputWrapper_1h1p1_1", "Input-label": "_Input-label_1h1p1_5", "Input-labelIcon": "_Input-labelIcon_1h1p1_14", "Input-disabledIcon": "_Input-disabledIcon_1h1p1_21", "Input-input": "_Input-input_1h1p1_26", "Input": "_Input_1h1p1_1", "Input--readOnly": "_Input--readOnly_1h1p1_70", "Input-radioGroupItems": "_Input-radioGroupItems_1h1p1_81", "Input-radio": "_Input-radio_1h1p1_81", "Input-radioInner": "_Input-radioInner_1h1p1_98", "Input-radioInput": "_Input-radioInput_1h1p1_143" };
312
312
 
313
313
  // components/AutoField/index.tsx
314
314
  var import_react20 = require("react");
@@ -1723,7 +1723,14 @@ var DefaultField = ({
1723
1723
  value: typeof value === "undefined" ? "" : value.toString(),
1724
1724
  onChange: (e) => {
1725
1725
  if (field.type === "number") {
1726
- onChange(Number(e.currentTarget.value));
1726
+ const numberValue = Number(e.currentTarget.value);
1727
+ if (typeof field.min !== "undefined" && numberValue < field.min) {
1728
+ return;
1729
+ }
1730
+ if (typeof field.max !== "undefined" && numberValue > field.max) {
1731
+ return;
1732
+ }
1733
+ onChange(numberValue);
1727
1734
  } else {
1728
1735
  onChange(e.currentTarget.value);
1729
1736
  }
@@ -2471,6 +2478,7 @@ var FieldLabelInternal = ({
2471
2478
  function AutoFieldInternal(props) {
2472
2479
  var _a, _b, _c, _d, _e, _f, _g, _h;
2473
2480
  const { dispatch, overrides, selectedItem } = useAppContext();
2481
+ const nestedFieldContext = (0, import_react20.useContext)(NestedFieldContext);
2474
2482
  const { id, Label: Label2 = FieldLabelInternal } = props;
2475
2483
  const field = props.field;
2476
2484
  const label = field.label;
@@ -2535,7 +2543,6 @@ function AutoFieldInternal(props) {
2535
2543
  }
2536
2544
  const children = defaultFields[field.type](mergedProps);
2537
2545
  const Render2 = render[field.type];
2538
- const nestedFieldContext = (0, import_react20.useContext)(NestedFieldContext);
2539
2546
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2540
2547
  NestedFieldContext.Provider,
2541
2548
  {
@@ -3656,8 +3663,9 @@ var import_jsx_runtime22 = require("react/jsx-runtime");
3656
3663
  var getClassName17 = get_class_name_factory_default("DropZone", styles_module_default12);
3657
3664
  var getRandomColor = () => `#${Math.floor(Math.random() * 16777215).toString(16)}`;
3658
3665
  var RENDER_DEBUG = false;
3666
+ var DropZoneEditPure = (props) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropZoneEdit, __spreadValues({}, props));
3659
3667
  var DropZoneEdit = (0, import_react29.forwardRef)(
3660
- function DropZoneEdit2({
3668
+ function DropZoneEditInternal({
3661
3669
  zone,
3662
3670
  allow,
3663
3671
  disallow,
@@ -3815,10 +3823,10 @@ var DropZoneEdit = (0, import_react29.forwardRef)(
3815
3823
  backgroundColor: RENDER_DEBUG ? getRandomColor() : void 0
3816
3824
  }),
3817
3825
  children: contentWithPreview.map((item, i) => {
3818
- var _a, _b, _c, _d, _e;
3826
+ var _a, _b, _c, _d, _e, _f, _g;
3819
3827
  const componentId = item.props.id;
3820
3828
  const puckProps = {
3821
- renderDropZone: DropZone,
3829
+ renderDropZone: DropZoneEditPure,
3822
3830
  isEditing: true,
3823
3831
  dragRef: null
3824
3832
  };
@@ -3835,13 +3843,13 @@ var DropZoneEdit = (0, import_react29.forwardRef)(
3835
3843
  const componentConfig = config.components[item.type];
3836
3844
  let componentType = item.type;
3837
3845
  let label = (_b = componentConfig == null ? void 0 : componentConfig["label"]) != null ? _b : item.type.toString();
3838
- if (item.type === "preview" && preview) {
3846
+ if (item.type === "preview") {
3839
3847
  let Preview4 = function() {
3840
3848
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DrawerItemInner, { name: label, children: appContext2.overrides.componentItem });
3841
3849
  };
3842
3850
  var Preview3 = Preview4;
3843
- componentType = preview.componentType;
3844
- label = (_d = (_c = config.components[componentType]) == null ? void 0 : _c.label) != null ? _d : preview.componentType;
3851
+ componentType = (_c = preview == null ? void 0 : preview.componentType) != null ? _c : "__preview";
3852
+ label = (_f = (_e = (_d = config.components[componentType]) == null ? void 0 : _d.label) != null ? _e : componentType) != null ? _f : "Preview";
3845
3853
  Render2 = Preview4;
3846
3854
  }
3847
3855
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
@@ -3856,7 +3864,7 @@ var DropZoneEdit = (0, import_react29.forwardRef)(
3856
3864
  zoneCompound,
3857
3865
  depth: depth + 1,
3858
3866
  index: i,
3859
- isLoading: ((_e = appContext2.componentState[componentId]) == null ? void 0 : _e.loadingCount) > 0,
3867
+ isLoading: ((_g = appContext2.componentState[componentId]) == null ? void 0 : _g.loadingCount) > 0,
3860
3868
  isSelected,
3861
3869
  label,
3862
3870
  isEnabled,
@@ -3881,8 +3889,9 @@ var DropZoneEdit = (0, import_react29.forwardRef)(
3881
3889
  );
3882
3890
  }
3883
3891
  );
3892
+ var DropZoneRenderPure = (props) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropZoneRender, __spreadValues({}, props));
3884
3893
  var DropZoneRender = (0, import_react29.forwardRef)(
3885
- function DropZoneRender2({ className, style, zone }, ref) {
3894
+ function DropZoneRenderInternal({ className, style, zone }, ref) {
3886
3895
  const ctx = (0, import_react29.useContext)(dropZoneContext);
3887
3896
  const { data, areaId = "root", config } = ctx || {};
3888
3897
  let zoneCompound = rootDroppableId;
@@ -3920,7 +3929,9 @@ var DropZoneRender = (0, import_react29.forwardRef)(
3920
3929
  children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3921
3930
  Component.render,
3922
3931
  __spreadProps(__spreadValues({}, item.props), {
3923
- puck: { renderDropZone: DropZoneRender2 }
3932
+ puck: {
3933
+ renderDropZone: DropZoneRenderPure
3934
+ }
3924
3935
  })
3925
3936
  )
3926
3937
  },
@@ -3995,6 +4006,48 @@ var getFrame = () => {
3995
4006
  return (frameEl == null ? void 0 : frameEl.ownerDocument) || document;
3996
4007
  };
3997
4008
 
4009
+ // lib/global-position.ts
4010
+ init_react_import();
4011
+ var GlobalPosition = class {
4012
+ constructor(target, original) {
4013
+ this.scaleFactor = 1;
4014
+ this.frameEl = null;
4015
+ this.frameRect = null;
4016
+ var _a;
4017
+ this.target = target;
4018
+ this.original = original;
4019
+ this.frameEl = document.querySelector("iframe");
4020
+ if (this.frameEl) {
4021
+ this.frameRect = this.frameEl.getBoundingClientRect();
4022
+ this.scaleFactor = this.frameRect.width / (((_a = this.frameEl.contentWindow) == null ? void 0 : _a.innerWidth) || 1);
4023
+ }
4024
+ }
4025
+ get x() {
4026
+ return this.original.x;
4027
+ }
4028
+ get y() {
4029
+ return this.original.y;
4030
+ }
4031
+ get global() {
4032
+ if (document !== this.target.ownerDocument && this.frameRect) {
4033
+ return {
4034
+ x: this.x * this.scaleFactor + this.frameRect.left,
4035
+ y: this.y * this.scaleFactor + this.frameRect.top
4036
+ };
4037
+ }
4038
+ return this.original;
4039
+ }
4040
+ get frame() {
4041
+ if (document === this.target.ownerDocument && this.frameRect) {
4042
+ return {
4043
+ x: (this.x - this.frameRect.left) / this.scaleFactor,
4044
+ y: (this.y - this.frameRect.top) / this.scaleFactor
4045
+ };
4046
+ }
4047
+ return this.original;
4048
+ }
4049
+ };
4050
+
3998
4051
  // lib/dnd/NestedDroppablePlugin.ts
3999
4052
  var depthSort = (candidates) => {
4000
4053
  return candidates.sort((a, b) => {
@@ -4024,10 +4077,12 @@ var getZoneId2 = (candidate) => {
4024
4077
  }
4025
4078
  return id;
4026
4079
  };
4027
- var getPointerCollisions = (position, manager, ownerDocument) => {
4028
- var _a;
4080
+ var getPointerCollisions = (position, manager) => {
4029
4081
  const candidates = [];
4030
- let elements = ownerDocument.elementsFromPoint(position.x, position.y);
4082
+ let elements = position.target.ownerDocument.elementsFromPoint(
4083
+ position.x,
4084
+ position.y
4085
+ );
4031
4086
  const previewFrame = elements.find(
4032
4087
  (el) => el.getAttribute("data-puck-preview")
4033
4088
  );
@@ -4036,17 +4091,9 @@ var getPointerCollisions = (position, manager, ownerDocument) => {
4036
4091
  elements = [drawer];
4037
4092
  }
4038
4093
  if (previewFrame) {
4039
- const iframe = previewFrame.querySelector("iframe");
4040
- if (iframe) {
4041
- const rect = iframe.getBoundingClientRect();
4042
- const frame = getFrame();
4043
- if (frame) {
4044
- const scaleFactor = rect.width / (((_a = iframe.contentWindow) == null ? void 0 : _a.innerWidth) || 1);
4045
- elements = frame.elementsFromPoint(
4046
- (position.x - rect.left) / scaleFactor,
4047
- (position.y - rect.top) / scaleFactor
4048
- );
4049
- }
4094
+ const frame = getFrame();
4095
+ if (frame) {
4096
+ elements = frame.elementsFromPoint(position.frame.x, position.frame.y);
4050
4097
  }
4051
4098
  }
4052
4099
  if (elements) {
@@ -4063,9 +4110,9 @@ var getPointerCollisions = (position, manager, ownerDocument) => {
4063
4110
  }
4064
4111
  return candidates;
4065
4112
  };
4066
- var findDeepestCandidate = (position, manager, ownerDocument) => {
4113
+ var findDeepestCandidate = (position, manager) => {
4067
4114
  var _a;
4068
- const candidates = getPointerCollisions(position, manager, ownerDocument);
4115
+ const candidates = getPointerCollisions(position, manager);
4069
4116
  if (candidates.length > 0) {
4070
4117
  const sortedCandidates = depthSort(candidates);
4071
4118
  const draggable = manager.dragOperation.source;
@@ -4118,22 +4165,18 @@ var createNestedDroppablePlugin = ({ onChange }, id) => class NestedDroppablePlu
4118
4165
  }
4119
4166
  const cleanupEffect = (0, import_state.effects)(() => {
4120
4167
  const handleMove = (event) => {
4121
- const position = {
4168
+ const target = event.originalTarget || event.target;
4169
+ const position = new GlobalPosition(target, {
4122
4170
  x: event.clientX,
4123
4171
  y: event.clientY
4124
- };
4125
- const target = event.originalTarget || event.target;
4126
- const ownerDocument = target == null ? void 0 : target.ownerDocument;
4172
+ });
4127
4173
  const elements = document.elementsFromPoint(
4128
- event.clientX,
4129
- event.clientY
4174
+ position.global.x,
4175
+ position.global.y
4130
4176
  );
4131
4177
  const overEl = elements.some((el) => el.id === id);
4132
4178
  if (overEl) {
4133
- onChange(
4134
- findDeepestCandidate(position, manager, ownerDocument),
4135
- manager
4136
- );
4179
+ onChange(findDeepestCandidate(position, manager), manager);
4137
4180
  }
4138
4181
  };
4139
4182
  const handleMoveThrottled = throttle(handleMove, 50);
@@ -4464,6 +4507,11 @@ var reduceUi = (ui, action) => {
4464
4507
  itemSelector: { index: action.sourceIndex + 1, zone: action.sourceZone }
4465
4508
  });
4466
4509
  }
4510
+ if (action.type === "remove") {
4511
+ return __spreadProps(__spreadValues({}, ui), {
4512
+ itemSelector: null
4513
+ });
4514
+ }
4467
4515
  return ui;
4468
4516
  };
4469
4517
 
@@ -4714,6 +4762,9 @@ var _PointerSensor = class _PointerSensor extends import_abstract10.Sensor {
4714
4762
  }
4715
4763
  }
4716
4764
  handlePointerUp(event) {
4765
+ if (!this.source) {
4766
+ return;
4767
+ }
4717
4768
  event.preventDefault();
4718
4769
  event.stopPropagation();
4719
4770
  const { status } = this.manager.dragOperation;
@@ -5335,7 +5386,7 @@ var Drawer = ({
5335
5386
  "Warning: The `direction` prop on Drawer is deprecated and no longer required to achieve multi-directional dragging."
5336
5387
  );
5337
5388
  }
5338
- const [id] = (0, import_react32.useState)(generateId());
5389
+ const id = (0, import_react32.useId)();
5339
5390
  const { ref } = useDroppableSafe({
5340
5391
  id,
5341
5392
  type: "void",
@@ -5550,7 +5601,7 @@ init_react_import();
5550
5601
 
5551
5602
  // css-module:/home/runner/work/puck/puck/packages/core/components/Puck/components/Fields/styles.module.css#css-module
5552
5603
  init_react_import();
5553
- var styles_module_default16 = { "PuckFields": "_PuckFields_jp3lw_1", "PuckFields--isLoading": "_PuckFields--isLoading_jp3lw_6", "PuckFields-loadingOverlay": "_PuckFields-loadingOverlay_jp3lw_10", "PuckFields-loadingOverlayInner": "_PuckFields-loadingOverlayInner_jp3lw_25" };
5604
+ var styles_module_default16 = { "PuckFields": "_PuckFields_10bh7_1", "PuckFields--isLoading": "_PuckFields--isLoading_10bh7_6", "PuckFields-loadingOverlay": "_PuckFields-loadingOverlay_10bh7_10", "PuckFields-loadingOverlayInner": "_PuckFields-loadingOverlayInner_10bh7_25", "PuckFields-field": "_PuckFields-field_10bh7_32", "PuckFields--wrapFields": "_PuckFields--wrapFields_10bh7_36" };
5554
5605
 
5555
5606
  // components/Puck/components/Fields/index.tsx
5556
5607
  var import_react35 = require("react");
@@ -5636,22 +5687,36 @@ var useResolvedFields = () => {
5636
5687
  lastData
5637
5688
  });
5638
5689
  }),
5639
- [data, config, componentData, selectedItem, resolvedFields, state]
5690
+ [data, config, componentData, selectedItem, resolvedFields, state, parent]
5640
5691
  );
5692
+ const [hasParent, setHasParent] = (0, import_react35.useState)(false);
5641
5693
  (0, import_react35.useEffect)(() => {
5642
- if (hasResolver) {
5643
- setFieldsLoading(true);
5644
- resolveFields(defaultFields).then((fields) => {
5645
- setResolvedFields(fields || {});
5646
- setFieldsLoading(false);
5647
- });
5648
- } else {
5649
- setResolvedFields(defaultFields);
5694
+ setHasParent(!!parent);
5695
+ }, [parent]);
5696
+ (0, import_react35.useEffect)(() => {
5697
+ var _a2, _b2;
5698
+ if (!((_a2 = state.ui.itemSelector) == null ? void 0 : _a2.zone) || ((_b2 = state.ui.itemSelector) == null ? void 0 : _b2.zone) === "default-zone" || hasParent) {
5699
+ if (hasResolver) {
5700
+ setFieldsLoading(true);
5701
+ resolveFields(defaultFields).then((fields) => {
5702
+ setResolvedFields(fields || {});
5703
+ setFieldsLoading(false);
5704
+ });
5705
+ return;
5706
+ }
5650
5707
  }
5651
- }, [data, defaultFields, selectedItem, hasResolver]);
5708
+ setResolvedFields(defaultFields);
5709
+ }, [
5710
+ data,
5711
+ defaultFields,
5712
+ state.ui.itemSelector,
5713
+ selectedItem,
5714
+ hasResolver,
5715
+ hasParent
5716
+ ]);
5652
5717
  return [resolvedFields, fieldsLoading];
5653
5718
  };
5654
- var Fields = () => {
5719
+ var Fields = ({ wrapFields = true }) => {
5655
5720
  var _a, _b;
5656
5721
  const {
5657
5722
  selectedItem,
@@ -5673,7 +5738,7 @@ var Fields = () => {
5673
5738
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
5674
5739
  "form",
5675
5740
  {
5676
- className: getClassName21(),
5741
+ className: getClassName21({ wrapFields }),
5677
5742
  onSubmit: (e) => {
5678
5743
  e.preventDefault();
5679
5744
  },
@@ -5749,7 +5814,7 @@ var Fields = () => {
5749
5814
  item: selectedItem
5750
5815
  });
5751
5816
  const id = `${selectedItem.props.id}_${field.type}_${fieldName}`;
5752
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5817
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: getClassName21("field"), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5753
5818
  AutoFieldPrivate,
5754
5819
  {
5755
5820
  field,
@@ -5758,16 +5823,15 @@ var Fields = () => {
5758
5823
  readOnly: !edit || readOnly[fieldName],
5759
5824
  value: selectedItem.props[fieldName],
5760
5825
  onChange
5761
- },
5762
- id
5763
- );
5826
+ }
5827
+ ) }, id);
5764
5828
  } else {
5765
5829
  const readOnly = data.root.readOnly || {};
5766
5830
  const { edit } = getPermissions({
5767
5831
  root: true
5768
5832
  });
5769
5833
  const id = `root_${field.type}_${fieldName}`;
5770
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5834
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: getClassName21("field"), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5771
5835
  AutoFieldPrivate,
5772
5836
  {
5773
5837
  field,
@@ -5776,9 +5840,8 @@ var Fields = () => {
5776
5840
  readOnly: !edit || readOnly[fieldName],
5777
5841
  value: rootProps[fieldName],
5778
5842
  onChange
5779
- },
5780
- id
5781
- );
5843
+ }
5844
+ ) }, id);
5782
5845
  }
5783
5846
  }) }),
5784
5847
  isLoading && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: getClassName21("loadingOverlay"), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: getClassName21("loadingOverlayInner"), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Loader, { size: 16 }) }) })
package/dist/index.mjs CHANGED
@@ -205,7 +205,7 @@ init_react_import();
205
205
 
206
206
  // css-module:/home/runner/work/puck/puck/packages/core/components/AutoField/styles.module.css#css-module
207
207
  init_react_import();
208
- var styles_module_default2 = { "InputWrapper": "_InputWrapper_1l5m8_1", "Input": "_Input_1l5m8_1", "Input-label": "_Input-label_1l5m8_26", "Input-labelIcon": "_Input-labelIcon_1l5m8_35", "Input-disabledIcon": "_Input-disabledIcon_1l5m8_42", "Input-input": "_Input-input_1l5m8_47", "Input--readOnly": "_Input--readOnly_1l5m8_91", "Input-radioGroupItems": "_Input-radioGroupItems_1l5m8_102", "Input-radio": "_Input-radio_1l5m8_102", "Input-radioInner": "_Input-radioInner_1l5m8_119", "Input-radioInput": "_Input-radioInput_1l5m8_164" };
208
+ var styles_module_default2 = { "InputWrapper": "_InputWrapper_1h1p1_1", "Input-label": "_Input-label_1h1p1_5", "Input-labelIcon": "_Input-labelIcon_1h1p1_14", "Input-disabledIcon": "_Input-disabledIcon_1h1p1_21", "Input-input": "_Input-input_1h1p1_26", "Input": "_Input_1h1p1_1", "Input--readOnly": "_Input--readOnly_1h1p1_70", "Input-radioGroupItems": "_Input-radioGroupItems_1h1p1_81", "Input-radio": "_Input-radio_1h1p1_81", "Input-radioInner": "_Input-radioInner_1h1p1_98", "Input-radioInput": "_Input-radioInput_1h1p1_143" };
209
209
 
210
210
  // components/AutoField/index.tsx
211
211
  import {
@@ -1530,7 +1530,14 @@ var DefaultField = ({
1530
1530
  value: typeof value === "undefined" ? "" : value.toString(),
1531
1531
  onChange: (e) => {
1532
1532
  if (field.type === "number") {
1533
- onChange(Number(e.currentTarget.value));
1533
+ const numberValue = Number(e.currentTarget.value);
1534
+ if (typeof field.min !== "undefined" && numberValue < field.min) {
1535
+ return;
1536
+ }
1537
+ if (typeof field.max !== "undefined" && numberValue > field.max) {
1538
+ return;
1539
+ }
1540
+ onChange(numberValue);
1534
1541
  } else {
1535
1542
  onChange(e.currentTarget.value);
1536
1543
  }
@@ -2284,6 +2291,7 @@ var FieldLabelInternal = ({
2284
2291
  function AutoFieldInternal(props) {
2285
2292
  var _a, _b, _c, _d, _e, _f, _g, _h;
2286
2293
  const { dispatch, overrides, selectedItem } = useAppContext();
2294
+ const nestedFieldContext = useContext3(NestedFieldContext);
2287
2295
  const { id, Label: Label2 = FieldLabelInternal } = props;
2288
2296
  const field = props.field;
2289
2297
  const label = field.label;
@@ -2348,7 +2356,6 @@ function AutoFieldInternal(props) {
2348
2356
  }
2349
2357
  const children = defaultFields[field.type](mergedProps);
2350
2358
  const Render2 = render[field.type];
2351
- const nestedFieldContext = useContext3(NestedFieldContext);
2352
2359
  return /* @__PURE__ */ jsx19(
2353
2360
  NestedFieldContext.Provider,
2354
2361
  {
@@ -2418,7 +2425,7 @@ init_react_import();
2418
2425
  var styles_module_default10 = { "Drawer": "_Drawer_fkqfo_1", "Drawer-draggable": "_Drawer-draggable_fkqfo_8", "Drawer-draggableBg": "_Drawer-draggableBg_fkqfo_12", "Drawer-draggableFg": "_Drawer-draggableFg_fkqfo_21", "DrawerItem-draggable": "_DrawerItem-draggable_fkqfo_25", "DrawerItem--disabled": "_DrawerItem--disabled_fkqfo_38", "DrawerItem": "_DrawerItem_fkqfo_25", "Drawer--isDraggingFrom": "_Drawer--isDraggingFrom_fkqfo_48", "DrawerItem-name": "_DrawerItem-name_fkqfo_66" };
2419
2426
 
2420
2427
  // components/Drawer/index.tsx
2421
- import { useMemo as useMemo9, useState as useState18 } from "react";
2428
+ import { useId as useId2, useMemo as useMemo9, useState as useState18 } from "react";
2422
2429
 
2423
2430
  // components/DragDropContext/index.tsx
2424
2431
  init_react_import();
@@ -3499,8 +3506,9 @@ import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs10 } from "react/jsx-r
3499
3506
  var getClassName17 = get_class_name_factory_default("DropZone", styles_module_default12);
3500
3507
  var getRandomColor = () => `#${Math.floor(Math.random() * 16777215).toString(16)}`;
3501
3508
  var RENDER_DEBUG = false;
3509
+ var DropZoneEditPure = (props) => /* @__PURE__ */ jsx22(DropZoneEdit, __spreadValues({}, props));
3502
3510
  var DropZoneEdit = forwardRef3(
3503
- function DropZoneEdit2({
3511
+ function DropZoneEditInternal({
3504
3512
  zone,
3505
3513
  allow,
3506
3514
  disallow,
@@ -3658,10 +3666,10 @@ var DropZoneEdit = forwardRef3(
3658
3666
  backgroundColor: RENDER_DEBUG ? getRandomColor() : void 0
3659
3667
  }),
3660
3668
  children: contentWithPreview.map((item, i) => {
3661
- var _a, _b, _c, _d, _e;
3669
+ var _a, _b, _c, _d, _e, _f, _g;
3662
3670
  const componentId = item.props.id;
3663
3671
  const puckProps = {
3664
- renderDropZone: DropZone,
3672
+ renderDropZone: DropZoneEditPure,
3665
3673
  isEditing: true,
3666
3674
  dragRef: null
3667
3675
  };
@@ -3678,13 +3686,13 @@ var DropZoneEdit = forwardRef3(
3678
3686
  const componentConfig = config.components[item.type];
3679
3687
  let componentType = item.type;
3680
3688
  let label = (_b = componentConfig == null ? void 0 : componentConfig["label"]) != null ? _b : item.type.toString();
3681
- if (item.type === "preview" && preview) {
3689
+ if (item.type === "preview") {
3682
3690
  let Preview4 = function() {
3683
3691
  return /* @__PURE__ */ jsx22(DrawerItemInner, { name: label, children: appContext2.overrides.componentItem });
3684
3692
  };
3685
3693
  var Preview3 = Preview4;
3686
- componentType = preview.componentType;
3687
- label = (_d = (_c = config.components[componentType]) == null ? void 0 : _c.label) != null ? _d : preview.componentType;
3694
+ componentType = (_c = preview == null ? void 0 : preview.componentType) != null ? _c : "__preview";
3695
+ label = (_f = (_e = (_d = config.components[componentType]) == null ? void 0 : _d.label) != null ? _e : componentType) != null ? _f : "Preview";
3688
3696
  Render2 = Preview4;
3689
3697
  }
3690
3698
  return /* @__PURE__ */ jsx22(
@@ -3699,7 +3707,7 @@ var DropZoneEdit = forwardRef3(
3699
3707
  zoneCompound,
3700
3708
  depth: depth + 1,
3701
3709
  index: i,
3702
- isLoading: ((_e = appContext2.componentState[componentId]) == null ? void 0 : _e.loadingCount) > 0,
3710
+ isLoading: ((_g = appContext2.componentState[componentId]) == null ? void 0 : _g.loadingCount) > 0,
3703
3711
  isSelected,
3704
3712
  label,
3705
3713
  isEnabled,
@@ -3724,8 +3732,9 @@ var DropZoneEdit = forwardRef3(
3724
3732
  );
3725
3733
  }
3726
3734
  );
3735
+ var DropZoneRenderPure = (props) => /* @__PURE__ */ jsx22(DropZoneRender, __spreadValues({}, props));
3727
3736
  var DropZoneRender = forwardRef3(
3728
- function DropZoneRender2({ className, style, zone }, ref) {
3737
+ function DropZoneRenderInternal({ className, style, zone }, ref) {
3729
3738
  const ctx = useContext6(dropZoneContext);
3730
3739
  const { data, areaId = "root", config } = ctx || {};
3731
3740
  let zoneCompound = rootDroppableId;
@@ -3763,7 +3772,9 @@ var DropZoneRender = forwardRef3(
3763
3772
  children: /* @__PURE__ */ jsx22(
3764
3773
  Component.render,
3765
3774
  __spreadProps(__spreadValues({}, item.props), {
3766
- puck: { renderDropZone: DropZoneRender2 }
3775
+ puck: {
3776
+ renderDropZone: DropZoneRenderPure
3777
+ }
3767
3778
  })
3768
3779
  )
3769
3780
  },
@@ -3838,6 +3849,48 @@ var getFrame = () => {
3838
3849
  return (frameEl == null ? void 0 : frameEl.ownerDocument) || document;
3839
3850
  };
3840
3851
 
3852
+ // lib/global-position.ts
3853
+ init_react_import();
3854
+ var GlobalPosition = class {
3855
+ constructor(target, original) {
3856
+ this.scaleFactor = 1;
3857
+ this.frameEl = null;
3858
+ this.frameRect = null;
3859
+ var _a;
3860
+ this.target = target;
3861
+ this.original = original;
3862
+ this.frameEl = document.querySelector("iframe");
3863
+ if (this.frameEl) {
3864
+ this.frameRect = this.frameEl.getBoundingClientRect();
3865
+ this.scaleFactor = this.frameRect.width / (((_a = this.frameEl.contentWindow) == null ? void 0 : _a.innerWidth) || 1);
3866
+ }
3867
+ }
3868
+ get x() {
3869
+ return this.original.x;
3870
+ }
3871
+ get y() {
3872
+ return this.original.y;
3873
+ }
3874
+ get global() {
3875
+ if (document !== this.target.ownerDocument && this.frameRect) {
3876
+ return {
3877
+ x: this.x * this.scaleFactor + this.frameRect.left,
3878
+ y: this.y * this.scaleFactor + this.frameRect.top
3879
+ };
3880
+ }
3881
+ return this.original;
3882
+ }
3883
+ get frame() {
3884
+ if (document === this.target.ownerDocument && this.frameRect) {
3885
+ return {
3886
+ x: (this.x - this.frameRect.left) / this.scaleFactor,
3887
+ y: (this.y - this.frameRect.top) / this.scaleFactor
3888
+ };
3889
+ }
3890
+ return this.original;
3891
+ }
3892
+ };
3893
+
3841
3894
  // lib/dnd/NestedDroppablePlugin.ts
3842
3895
  var depthSort = (candidates) => {
3843
3896
  return candidates.sort((a, b) => {
@@ -3867,10 +3920,12 @@ var getZoneId2 = (candidate) => {
3867
3920
  }
3868
3921
  return id;
3869
3922
  };
3870
- var getPointerCollisions = (position, manager, ownerDocument) => {
3871
- var _a;
3923
+ var getPointerCollisions = (position, manager) => {
3872
3924
  const candidates = [];
3873
- let elements = ownerDocument.elementsFromPoint(position.x, position.y);
3925
+ let elements = position.target.ownerDocument.elementsFromPoint(
3926
+ position.x,
3927
+ position.y
3928
+ );
3874
3929
  const previewFrame = elements.find(
3875
3930
  (el) => el.getAttribute("data-puck-preview")
3876
3931
  );
@@ -3879,17 +3934,9 @@ var getPointerCollisions = (position, manager, ownerDocument) => {
3879
3934
  elements = [drawer];
3880
3935
  }
3881
3936
  if (previewFrame) {
3882
- const iframe = previewFrame.querySelector("iframe");
3883
- if (iframe) {
3884
- const rect = iframe.getBoundingClientRect();
3885
- const frame = getFrame();
3886
- if (frame) {
3887
- const scaleFactor = rect.width / (((_a = iframe.contentWindow) == null ? void 0 : _a.innerWidth) || 1);
3888
- elements = frame.elementsFromPoint(
3889
- (position.x - rect.left) / scaleFactor,
3890
- (position.y - rect.top) / scaleFactor
3891
- );
3892
- }
3937
+ const frame = getFrame();
3938
+ if (frame) {
3939
+ elements = frame.elementsFromPoint(position.frame.x, position.frame.y);
3893
3940
  }
3894
3941
  }
3895
3942
  if (elements) {
@@ -3906,9 +3953,9 @@ var getPointerCollisions = (position, manager, ownerDocument) => {
3906
3953
  }
3907
3954
  return candidates;
3908
3955
  };
3909
- var findDeepestCandidate = (position, manager, ownerDocument) => {
3956
+ var findDeepestCandidate = (position, manager) => {
3910
3957
  var _a;
3911
- const candidates = getPointerCollisions(position, manager, ownerDocument);
3958
+ const candidates = getPointerCollisions(position, manager);
3912
3959
  if (candidates.length > 0) {
3913
3960
  const sortedCandidates = depthSort(candidates);
3914
3961
  const draggable = manager.dragOperation.source;
@@ -3961,22 +4008,18 @@ var createNestedDroppablePlugin = ({ onChange }, id) => class NestedDroppablePlu
3961
4008
  }
3962
4009
  const cleanupEffect = effects(() => {
3963
4010
  const handleMove = (event) => {
3964
- const position = {
4011
+ const target = event.originalTarget || event.target;
4012
+ const position = new GlobalPosition(target, {
3965
4013
  x: event.clientX,
3966
4014
  y: event.clientY
3967
- };
3968
- const target = event.originalTarget || event.target;
3969
- const ownerDocument = target == null ? void 0 : target.ownerDocument;
4015
+ });
3970
4016
  const elements = document.elementsFromPoint(
3971
- event.clientX,
3972
- event.clientY
4017
+ position.global.x,
4018
+ position.global.y
3973
4019
  );
3974
4020
  const overEl = elements.some((el) => el.id === id);
3975
4021
  if (overEl) {
3976
- onChange(
3977
- findDeepestCandidate(position, manager, ownerDocument),
3978
- manager
3979
- );
4022
+ onChange(findDeepestCandidate(position, manager), manager);
3980
4023
  }
3981
4024
  };
3982
4025
  const handleMoveThrottled = throttle(handleMove, 50);
@@ -4307,6 +4350,11 @@ var reduceUi = (ui, action) => {
4307
4350
  itemSelector: { index: action.sourceIndex + 1, zone: action.sourceZone }
4308
4351
  });
4309
4352
  }
4353
+ if (action.type === "remove") {
4354
+ return __spreadProps(__spreadValues({}, ui), {
4355
+ itemSelector: null
4356
+ });
4357
+ }
4310
4358
  return ui;
4311
4359
  };
4312
4360
 
@@ -4566,6 +4614,9 @@ var _PointerSensor = class _PointerSensor extends Sensor {
4566
4614
  }
4567
4615
  }
4568
4616
  handlePointerUp(event) {
4617
+ if (!this.source) {
4618
+ return;
4619
+ }
4569
4620
  event.preventDefault();
4570
4621
  event.stopPropagation();
4571
4622
  const { status } = this.manager.dragOperation;
@@ -5187,7 +5238,7 @@ var Drawer = ({
5187
5238
  "Warning: The `direction` prop on Drawer is deprecated and no longer required to achieve multi-directional dragging."
5188
5239
  );
5189
5240
  }
5190
- const [id] = useState18(generateId());
5241
+ const id = useId2();
5191
5242
  const { ref } = useDroppableSafe({
5192
5243
  id,
5193
5244
  type: "void",
@@ -5408,7 +5459,7 @@ init_react_import();
5408
5459
 
5409
5460
  // css-module:/home/runner/work/puck/puck/packages/core/components/Puck/components/Fields/styles.module.css#css-module
5410
5461
  init_react_import();
5411
- var styles_module_default16 = { "PuckFields": "_PuckFields_jp3lw_1", "PuckFields--isLoading": "_PuckFields--isLoading_jp3lw_6", "PuckFields-loadingOverlay": "_PuckFields-loadingOverlay_jp3lw_10", "PuckFields-loadingOverlayInner": "_PuckFields-loadingOverlayInner_jp3lw_25" };
5462
+ var styles_module_default16 = { "PuckFields": "_PuckFields_10bh7_1", "PuckFields--isLoading": "_PuckFields--isLoading_10bh7_6", "PuckFields-loadingOverlay": "_PuckFields-loadingOverlay_10bh7_10", "PuckFields-loadingOverlayInner": "_PuckFields-loadingOverlayInner_10bh7_25", "PuckFields-field": "_PuckFields-field_10bh7_32", "PuckFields--wrapFields": "_PuckFields--wrapFields_10bh7_36" };
5412
5463
 
5413
5464
  // components/Puck/components/Fields/index.tsx
5414
5465
  import { useCallback as useCallback12, useEffect as useEffect16, useMemo as useMemo11, useState as useState19 } from "react";
@@ -5494,22 +5545,36 @@ var useResolvedFields = () => {
5494
5545
  lastData
5495
5546
  });
5496
5547
  }),
5497
- [data, config, componentData, selectedItem, resolvedFields, state]
5548
+ [data, config, componentData, selectedItem, resolvedFields, state, parent]
5498
5549
  );
5550
+ const [hasParent, setHasParent] = useState19(false);
5499
5551
  useEffect16(() => {
5500
- if (hasResolver) {
5501
- setFieldsLoading(true);
5502
- resolveFields(defaultFields).then((fields) => {
5503
- setResolvedFields(fields || {});
5504
- setFieldsLoading(false);
5505
- });
5506
- } else {
5507
- setResolvedFields(defaultFields);
5552
+ setHasParent(!!parent);
5553
+ }, [parent]);
5554
+ useEffect16(() => {
5555
+ var _a2, _b2;
5556
+ if (!((_a2 = state.ui.itemSelector) == null ? void 0 : _a2.zone) || ((_b2 = state.ui.itemSelector) == null ? void 0 : _b2.zone) === "default-zone" || hasParent) {
5557
+ if (hasResolver) {
5558
+ setFieldsLoading(true);
5559
+ resolveFields(defaultFields).then((fields) => {
5560
+ setResolvedFields(fields || {});
5561
+ setFieldsLoading(false);
5562
+ });
5563
+ return;
5564
+ }
5508
5565
  }
5509
- }, [data, defaultFields, selectedItem, hasResolver]);
5566
+ setResolvedFields(defaultFields);
5567
+ }, [
5568
+ data,
5569
+ defaultFields,
5570
+ state.ui.itemSelector,
5571
+ selectedItem,
5572
+ hasResolver,
5573
+ hasParent
5574
+ ]);
5510
5575
  return [resolvedFields, fieldsLoading];
5511
5576
  };
5512
- var Fields = () => {
5577
+ var Fields = ({ wrapFields = true }) => {
5513
5578
  var _a, _b;
5514
5579
  const {
5515
5580
  selectedItem,
@@ -5531,7 +5596,7 @@ var Fields = () => {
5531
5596
  return /* @__PURE__ */ jsxs14(
5532
5597
  "form",
5533
5598
  {
5534
- className: getClassName21(),
5599
+ className: getClassName21({ wrapFields }),
5535
5600
  onSubmit: (e) => {
5536
5601
  e.preventDefault();
5537
5602
  },
@@ -5607,7 +5672,7 @@ var Fields = () => {
5607
5672
  item: selectedItem
5608
5673
  });
5609
5674
  const id = `${selectedItem.props.id}_${field.type}_${fieldName}`;
5610
- return /* @__PURE__ */ jsx27(
5675
+ return /* @__PURE__ */ jsx27("div", { className: getClassName21("field"), children: /* @__PURE__ */ jsx27(
5611
5676
  AutoFieldPrivate,
5612
5677
  {
5613
5678
  field,
@@ -5616,16 +5681,15 @@ var Fields = () => {
5616
5681
  readOnly: !edit || readOnly[fieldName],
5617
5682
  value: selectedItem.props[fieldName],
5618
5683
  onChange
5619
- },
5620
- id
5621
- );
5684
+ }
5685
+ ) }, id);
5622
5686
  } else {
5623
5687
  const readOnly = data.root.readOnly || {};
5624
5688
  const { edit } = getPermissions({
5625
5689
  root: true
5626
5690
  });
5627
5691
  const id = `root_${field.type}_${fieldName}`;
5628
- return /* @__PURE__ */ jsx27(
5692
+ return /* @__PURE__ */ jsx27("div", { className: getClassName21("field"), children: /* @__PURE__ */ jsx27(
5629
5693
  AutoFieldPrivate,
5630
5694
  {
5631
5695
  field,
@@ -5634,9 +5698,8 @@ var Fields = () => {
5634
5698
  readOnly: !edit || readOnly[fieldName],
5635
5699
  value: rootProps[fieldName],
5636
5700
  onChange
5637
- },
5638
- id
5639
- );
5701
+ }
5702
+ ) }, id);
5640
5703
  }
5641
5704
  }) }),
5642
5705
  isLoading && /* @__PURE__ */ jsx27("div", { className: getClassName21("loadingOverlay"), children: /* @__PURE__ */ jsx27("div", { className: getClassName21("loadingOverlayInner"), children: /* @__PURE__ */ jsx27(Loader, { size: 16 }) }) })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@measured/puck",
3
- "version": "0.18.0-canary.c6df5b2",
3
+ "version": "0.18.0-canary.cfe4ca8",
4
4
  "author": "Measured Corporation Ltd <hello@measured.co>",
5
5
  "repository": "measuredco/puck",
6
6
  "bugs": "https://github.com/measuredco/puck/issues",