@measured/puck 0.18.0-canary.01d9695 → 0.18.0-canary.01f089b

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/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 {
@@ -1504,12 +1504,13 @@ var DefaultField = ({
1504
1504
  field,
1505
1505
  onChange,
1506
1506
  readOnly,
1507
- value,
1507
+ value: _value,
1508
1508
  name,
1509
1509
  label,
1510
1510
  Label: Label2,
1511
1511
  id
1512
1512
  }) => {
1513
+ const value = _value;
1513
1514
  return /* @__PURE__ */ jsx9(
1514
1515
  Label2,
1515
1516
  {
@@ -1527,7 +1528,7 @@ var DefaultField = ({
1527
1528
  type: field.type,
1528
1529
  title: label || name,
1529
1530
  name,
1530
- value: typeof value === "undefined" ? "" : value.toString(),
1531
+ value: (value == null ? void 0 : value.toString) ? value.toString() : "",
1531
1532
  onChange: (e) => {
1532
1533
  if (field.type === "number") {
1533
1534
  const numberValue = Number(e.currentTarget.value);
@@ -2436,7 +2437,7 @@ import {
2436
2437
  useContext as useContext7,
2437
2438
  useEffect as useEffect15,
2438
2439
  useId,
2439
- useRef as useRef4,
2440
+ useRef as useRef3,
2440
2441
  useState as useState17
2441
2442
  } from "react";
2442
2443
  import { AutoScroller, defaultPreset } from "@dnd-kit/dom";
@@ -2449,7 +2450,7 @@ import {
2449
2450
  useContext as useContext6,
2450
2451
  useEffect as useEffect14,
2451
2452
  useMemo as useMemo8,
2452
- useRef as useRef3
2453
+ useRef as useRef2
2453
2454
  } from "react";
2454
2455
 
2455
2456
  // components/DraggableComponent/index.tsx
@@ -2459,7 +2460,7 @@ import {
2459
2460
  useContext as useContext5,
2460
2461
  useEffect as useEffect10,
2461
2462
  useMemo as useMemo7,
2462
- useRef as useRef2,
2463
+ useRef,
2463
2464
  useState as useState13
2464
2465
  } from "react";
2465
2466
 
@@ -3047,7 +3048,7 @@ var DraggableComponent = ({
3047
3048
  }
3048
3049
  });
3049
3050
  const thisIsDragging = status === "dragging";
3050
- const ref = useRef2(null);
3051
+ const ref = useRef(null);
3051
3052
  const refSetter = useCallback7(
3052
3053
  (el) => {
3053
3054
  sortableRef(el);
@@ -3098,13 +3099,19 @@ var DraggableComponent = ({
3098
3099
  }
3099
3100
  }, [ref.current]);
3100
3101
  useEffect10(() => {
3101
- if (isSelected) {
3102
- ctx == null ? void 0 : ctx.registerPath({
3102
+ ctx == null ? void 0 : ctx.registerPath(
3103
+ id,
3104
+ {
3103
3105
  index,
3104
3106
  zone: zoneCompound
3105
- });
3106
- }
3107
- }, [isSelected]);
3107
+ },
3108
+ componentType
3109
+ );
3110
+ return () => {
3111
+ var _a;
3112
+ (_a = ctx == null ? void 0 : ctx.unregisterPath) == null ? void 0 : _a.call(ctx, id);
3113
+ };
3114
+ }, [id, zoneCompound, index, componentType]);
3108
3115
  const CustomActionBar = useMemo7(
3109
3116
  () => overrides.actionBar || DefaultActionBar,
3110
3117
  [overrides.actionBar]
@@ -3424,9 +3431,20 @@ var useContentWithPreview = (content, zoneCompound) => {
3424
3431
  };
3425
3432
  }
3426
3433
  );
3434
+ const {
3435
+ state: {
3436
+ ui: { isDragging }
3437
+ }
3438
+ } = useAppContext();
3427
3439
  const [contentWithPreview, setContentWithPreview] = useState15(content);
3440
+ const [localPreview, setLocalPreview] = useState15(
3441
+ preview
3442
+ );
3428
3443
  const updateContent = useRenderedCallback(
3429
- (content2, preview2) => {
3444
+ (content2, preview2, isDragging2) => {
3445
+ if (isDragging2 && !previewExists) {
3446
+ return;
3447
+ }
3430
3448
  if (preview2) {
3431
3449
  if (preview2.type === "insert") {
3432
3450
  setContentWithPreview(
@@ -3456,13 +3474,14 @@ var useContentWithPreview = (content, zoneCompound) => {
3456
3474
  previewExists ? content2.filter((item) => item.props.id !== draggedItemId) : content2
3457
3475
  );
3458
3476
  }
3477
+ setLocalPreview(preview2);
3459
3478
  },
3460
3479
  [draggedItemId, previewExists]
3461
3480
  );
3462
3481
  useEffect12(() => {
3463
- updateContent(content, preview);
3464
- }, [content, preview]);
3465
- return contentWithPreview;
3482
+ updateContent(content, preview, isDragging);
3483
+ }, [content, preview, isDragging]);
3484
+ return [contentWithPreview, localPreview];
3466
3485
  };
3467
3486
 
3468
3487
  // components/DropZone/lib/use-drag-axis.ts
@@ -3542,8 +3561,7 @@ var DropZoneEdit = forwardRef3(
3542
3561
  isDeepestZone,
3543
3562
  inNextDeepestArea,
3544
3563
  draggedComponentType,
3545
- userIsDragging,
3546
- preview
3564
+ userIsDragging
3547
3565
  } = useContextStore(ZoneStoreContext, (s) => {
3548
3566
  var _a, _b, _c;
3549
3567
  return {
@@ -3551,8 +3569,7 @@ var DropZoneEdit = forwardRef3(
3551
3569
  inNextDeepestArea: s.nextAreaDepthIndex[areaId || ""],
3552
3570
  draggedItemId: (_b = s.draggedItem) == null ? void 0 : _b.id,
3553
3571
  draggedComponentType: (_c = s.draggedItem) == null ? void 0 : _c.data.componentType,
3554
- userIsDragging: !!s.draggedItem,
3555
- preview: s.previewIndex[zoneCompound]
3572
+ userIsDragging: !!s.draggedItem
3556
3573
  };
3557
3574
  });
3558
3575
  const { itemSelector } = appContext2.state.ui;
@@ -3577,7 +3594,7 @@ var DropZoneEdit = forwardRef3(
3577
3594
  }
3578
3595
  return data.content || [];
3579
3596
  }, [data, zoneCompound]);
3580
- const ref = useRef3(null);
3597
+ const ref = useRef2(null);
3581
3598
  const acceptsTarget = useCallback10(
3582
3599
  (componentType) => {
3583
3600
  if (!componentType) {
@@ -3618,7 +3635,10 @@ var DropZoneEdit = forwardRef3(
3618
3635
  if (isEnabled) {
3619
3636
  isEnabled = acceptsTarget(draggedComponentType);
3620
3637
  }
3621
- const contentWithPreview = useContentWithPreview(content, zoneCompound);
3638
+ const [contentWithPreview, preview] = useContentWithPreview(
3639
+ content,
3640
+ zoneCompound
3641
+ );
3622
3642
  const isDropEnabled = isEnabled && (preview ? contentWithPreview.length === 1 : contentWithPreview.length === 0);
3623
3643
  const droppableConfig = {
3624
3644
  id: zoneCompound,
@@ -3660,10 +3680,9 @@ var DropZoneEdit = forwardRef3(
3660
3680
  },
3661
3681
  "data-testid": `dropzone:${zoneCompound}`,
3662
3682
  "data-puck-dropzone": zoneCompound,
3663
- "data-puck-dnd": zoneCompound,
3664
3683
  style: __spreadProps(__spreadValues({}, style), {
3665
3684
  "--min-empty-height": `${minEmptyHeight}px`,
3666
- backgroundColor: RENDER_DEBUG ? getRandomColor() : void 0
3685
+ backgroundColor: RENDER_DEBUG ? getRandomColor() : style == null ? void 0 : style.backgroundColor
3667
3686
  }),
3668
3687
  children: contentWithPreview.map((item, i) => {
3669
3688
  var _a, _b, _c, _d, _e, _f, _g;
@@ -3942,6 +3961,13 @@ var getPointerCollisions = (position, manager) => {
3942
3961
  if (elements) {
3943
3962
  for (let i = 0; i < elements.length; i++) {
3944
3963
  const element = elements[i];
3964
+ const dropzoneId = element.getAttribute("data-puck-dropzone");
3965
+ if (dropzoneId) {
3966
+ const droppable = manager.registry.droppables.get(dropzoneId);
3967
+ if (droppable) {
3968
+ candidates.push(droppable);
3969
+ }
3970
+ }
3945
3971
  const id = element.getAttribute("data-puck-dnd");
3946
3972
  if (id) {
3947
3973
  const droppable = manager.registry.droppables.get(id);
@@ -4350,6 +4376,11 @@ var reduceUi = (ui, action) => {
4350
4376
  itemSelector: { index: action.sourceIndex + 1, zone: action.sourceZone }
4351
4377
  });
4352
4378
  }
4379
+ if (action.type === "remove") {
4380
+ return __spreadProps(__spreadValues({}, ui), {
4381
+ itemSelector: null
4382
+ });
4383
+ }
4353
4384
  return ui;
4354
4385
  };
4355
4386
 
@@ -4729,7 +4760,7 @@ function useDragListener(type, fn, deps = []) {
4729
4760
  }
4730
4761
  var AREA_CHANGE_DEBOUNCE_MS = 100;
4731
4762
  var useTempDisableFallback = (timeout3) => {
4732
- const lastFallbackDisable = useRef4(null);
4763
+ const lastFallbackDisable = useRef3(null);
4733
4764
  return useCallback11((manager) => {
4734
4765
  collisionStore.setState({ fallbackEnabled: false });
4735
4766
  const fallbackId = generateId();
@@ -4749,7 +4780,7 @@ var DragDropContextClient = ({
4749
4780
  const { state, config, dispatch, resolveData } = useAppContext();
4750
4781
  const id = useId();
4751
4782
  const { data } = state;
4752
- const debouncedParamsRef = useRef4(null);
4783
+ const debouncedParamsRef = useRef3(null);
4753
4784
  const tempDisableFallback = useTempDisableFallback(100);
4754
4785
  const [zoneStore] = useState17(
4755
4786
  () => createStore3(() => ({
@@ -4888,30 +4919,36 @@ var DragDropContextClient = ({
4888
4919
  ]);
4889
4920
  const [dragListeners, setDragListeners] = useState17({});
4890
4921
  const [pathData, setPathData] = useState17();
4891
- const dragMode = useRef4(null);
4922
+ const dragMode = useRef3(null);
4892
4923
  const registerPath = useCallback11(
4893
- (selector) => {
4894
- const item = getItem(selector, data);
4895
- if (!item) {
4896
- return;
4897
- }
4924
+ (id2, selector, label) => {
4898
4925
  const [area] = getZoneId(selector.zone);
4899
4926
  setPathData((latestPathData = {}) => {
4900
4927
  const parentPathData = latestPathData[area] || { path: [] };
4901
4928
  return __spreadProps(__spreadValues({}, latestPathData), {
4902
- [item.props.id]: {
4929
+ [id2]: {
4903
4930
  path: [
4904
4931
  ...parentPathData.path,
4905
4932
  ...selector.zone ? [selector.zone] : []
4906
4933
  ],
4907
- label: item.type
4934
+ label
4908
4935
  }
4909
4936
  });
4910
4937
  });
4911
4938
  },
4912
4939
  [data, setPathData]
4913
4940
  );
4914
- const initialSelector = useRef4(void 0);
4941
+ const unregisterPath = useCallback11(
4942
+ (id2) => {
4943
+ setPathData((latestPathData = {}) => {
4944
+ const newPathData = __spreadValues({}, latestPathData);
4945
+ delete newPathData[id2];
4946
+ return newPathData;
4947
+ });
4948
+ },
4949
+ [data, setPathData]
4950
+ );
4951
+ const initialSelector = useRef3(void 0);
4915
4952
  return /* @__PURE__ */ jsx23("div", { id, children: /* @__PURE__ */ jsx23(
4916
4953
  dragListenerContext.Provider,
4917
4954
  {
@@ -5107,6 +5144,7 @@ var DragDropContextClient = ({
5107
5144
  areaId: "root",
5108
5145
  depth: 0,
5109
5146
  registerPath,
5147
+ unregisterPath,
5110
5148
  pathData,
5111
5149
  path: []
5112
5150
  },
@@ -5256,9 +5294,9 @@ Drawer.Item = DrawerItem;
5256
5294
  // components/Puck/index.tsx
5257
5295
  init_react_import();
5258
5296
  import {
5259
- useCallback as useCallback17,
5260
- useEffect as useEffect23,
5261
- useMemo as useMemo18,
5297
+ useCallback as useCallback18,
5298
+ useEffect as useEffect24,
5299
+ useMemo as useMemo19,
5262
5300
  useReducer,
5263
5301
  useState as useState26
5264
5302
  } from "react";
@@ -5454,36 +5492,61 @@ init_react_import();
5454
5492
 
5455
5493
  // css-module:/home/runner/work/puck/puck/packages/core/components/Puck/components/Fields/styles.module.css#css-module
5456
5494
  init_react_import();
5457
- 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" };
5495
+ 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" };
5458
5496
 
5459
5497
  // components/Puck/components/Fields/index.tsx
5460
- import { useCallback as useCallback12, useEffect as useEffect16, useMemo as useMemo11, useState as useState19 } from "react";
5498
+ import { useMemo as useMemo12 } from "react";
5499
+
5500
+ // lib/use-resolved-fields.ts
5501
+ init_react_import();
5502
+ import { useCallback as useCallback13, useEffect as useEffect17, useMemo as useMemo11, useRef as useRef5, useState as useState19 } from "react";
5461
5503
 
5462
5504
  // lib/use-parent.ts
5463
5505
  init_react_import();
5464
- import { useContext as useContext9 } from "react";
5465
- var useParent = (itemSelector) => {
5506
+ import { useCallback as useCallback12, useContext as useContext9 } from "react";
5507
+ var getParent = (itemSelector, pathData, data) => {
5466
5508
  var _a;
5467
- const { selectedItem, state } = useAppContext();
5468
- const { pathData } = useContext9(dropZoneContext) || {};
5469
- const item = itemSelector ? getItem(itemSelector, state.data) : selectedItem;
5470
- const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, state.data);
5509
+ if (!itemSelector) return null;
5510
+ const item = getItem(itemSelector, data);
5511
+ const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, data);
5471
5512
  const lastItem = breadcrumbs[breadcrumbs.length - 1];
5472
- const parent = (lastItem == null ? void 0 : lastItem.selector) ? (_a = getItem(lastItem.selector, state.data)) != null ? _a : null : null;
5513
+ const parent = (lastItem == null ? void 0 : lastItem.selector) ? (_a = getItem(lastItem.selector, data)) != null ? _a : null : null;
5473
5514
  return parent || null;
5474
5515
  };
5516
+ var useGetParent = () => {
5517
+ const { state } = useAppContext();
5518
+ const { pathData } = useContext9(dropZoneContext) || {};
5519
+ return useCallback12(
5520
+ () => getParent(state.ui.itemSelector, pathData, state.data),
5521
+ [state.ui.itemSelector, pathData, state.data]
5522
+ );
5523
+ };
5524
+ var useParent = () => {
5525
+ return useGetParent()();
5526
+ };
5475
5527
 
5476
- // components/Puck/components/Fields/index.tsx
5477
- import { Fragment as Fragment8, jsx as jsx27, jsxs as jsxs14 } from "react/jsx-runtime";
5478
- var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
5528
+ // lib/use-on-value-change.ts
5529
+ init_react_import();
5530
+ import { useRef as useRef4, useEffect as useEffect16 } from "react";
5531
+ function useOnValueChange(value, onChange, compare = Object.is, deps = []) {
5532
+ const tracked = useRef4(value);
5533
+ useEffect16(() => {
5534
+ const oldValue = tracked.current;
5535
+ if (!compare(value, oldValue)) {
5536
+ tracked.current = value;
5537
+ onChange(value, oldValue);
5538
+ }
5539
+ }, [onChange, compare, value, ...deps]);
5540
+ }
5541
+
5542
+ // lib/selector-is.ts
5543
+ init_react_import();
5544
+ var selectorIs = (a, b) => (a == null ? void 0 : a.zone) === (b == null ? void 0 : b.zone) && (a == null ? void 0 : a.index) === (b == null ? void 0 : b.index);
5545
+
5546
+ // lib/use-resolved-fields.ts
5479
5547
  var defaultPageFields = {
5480
5548
  title: { type: "text" }
5481
5549
  };
5482
- var DefaultFields = ({
5483
- children
5484
- }) => {
5485
- return /* @__PURE__ */ jsx27(Fragment8, { children });
5486
- };
5487
5550
  var useResolvedFields = () => {
5488
5551
  var _a, _b;
5489
5552
  const { selectedItem, state, config } = useAppContext();
@@ -5499,12 +5562,13 @@ var useResolvedFields = () => {
5499
5562
  const [lastSelectedData, setLastSelectedData] = useState19({});
5500
5563
  const [resolvedFields, setResolvedFields] = useState19(defaultFields);
5501
5564
  const [fieldsLoading, setFieldsLoading] = useState19(false);
5565
+ const lastFields = useRef5(defaultFields);
5502
5566
  const defaultResolveFields = (_componentData, _params) => defaultFields;
5503
5567
  const componentData = selectedItem ? selectedItem : { props: rootProps, readOnly: data.root.readOnly };
5504
5568
  const hasComponentResolver = selectedItem && (componentConfig == null ? void 0 : componentConfig.resolveFields);
5505
5569
  const hasRootResolver = !selectedItem && ((_b = config.root) == null ? void 0 : _b.resolveFields);
5506
5570
  const hasResolver = hasComponentResolver || hasRootResolver;
5507
- const resolveFields = useCallback12(
5571
+ const resolveFields = useCallback13(
5508
5572
  (..._0) => __async(void 0, [..._0], function* (fields = {}) {
5509
5573
  var _a2;
5510
5574
  const lastData = ((_a2 = lastSelectedData.props) == null ? void 0 : _a2.id) === componentData.props.id ? lastSelectedData : null;
@@ -5516,7 +5580,7 @@ var useResolvedFields = () => {
5516
5580
  {
5517
5581
  changed,
5518
5582
  fields,
5519
- lastFields: resolvedFields,
5583
+ lastFields: lastFields.current,
5520
5584
  lastData,
5521
5585
  appState: state,
5522
5586
  parent
@@ -5527,7 +5591,7 @@ var useResolvedFields = () => {
5527
5591
  return yield config.root.resolveFields(componentData, {
5528
5592
  changed,
5529
5593
  fields,
5530
- lastFields: resolvedFields,
5594
+ lastFields: lastFields.current,
5531
5595
  lastData,
5532
5596
  appState: state,
5533
5597
  parent
@@ -5536,40 +5600,56 @@ var useResolvedFields = () => {
5536
5600
  return defaultResolveFields(componentData, {
5537
5601
  changed,
5538
5602
  fields,
5539
- lastFields: resolvedFields,
5603
+ lastFields: lastFields.current,
5540
5604
  lastData
5541
5605
  });
5542
5606
  }),
5543
- [data, config, componentData, selectedItem, resolvedFields, state, parent]
5607
+ [data, config, componentData, selectedItem, state, parent]
5544
5608
  );
5545
- const [hasParent, setHasParent] = useState19(false);
5546
- useEffect16(() => {
5547
- setHasParent(!!parent);
5548
- }, [parent]);
5549
- useEffect16(() => {
5609
+ const triggerResolver = useCallback13(() => {
5550
5610
  var _a2, _b2;
5551
- if (!((_a2 = state.ui.itemSelector) == null ? void 0 : _a2.zone) || ((_b2 = state.ui.itemSelector) == null ? void 0 : _b2.zone) === "default-zone" || hasParent) {
5611
+ if (!((_a2 = state.ui.itemSelector) == null ? void 0 : _a2.zone) || ((_b2 = state.ui.itemSelector) == null ? void 0 : _b2.zone) === "default-zone" || parent) {
5552
5612
  if (hasResolver) {
5553
5613
  setFieldsLoading(true);
5554
5614
  resolveFields(defaultFields).then((fields) => {
5555
5615
  setResolvedFields(fields || {});
5616
+ lastFields.current = fields;
5556
5617
  setFieldsLoading(false);
5557
5618
  });
5558
- } else {
5559
- setResolvedFields(defaultFields);
5619
+ return;
5560
5620
  }
5561
5621
  }
5562
- }, [
5563
- data,
5564
- defaultFields,
5622
+ setResolvedFields(defaultFields);
5623
+ }, [defaultFields, state.ui.itemSelector, hasResolver, parent]);
5624
+ useOnValueChange(
5565
5625
  state.ui.itemSelector,
5566
- selectedItem,
5567
- hasResolver,
5568
- hasParent
5569
- ]);
5626
+ () => {
5627
+ lastFields.current = defaultFields;
5628
+ },
5629
+ selectorIs
5630
+ );
5631
+ useOnValueChange(
5632
+ { data, parent, itemSelector: state.ui.itemSelector },
5633
+ () => {
5634
+ triggerResolver();
5635
+ },
5636
+ (a, b) => JSON.stringify(a) === JSON.stringify(b)
5637
+ );
5638
+ useEffect17(() => {
5639
+ triggerResolver();
5640
+ }, []);
5570
5641
  return [resolvedFields, fieldsLoading];
5571
5642
  };
5572
- var Fields = () => {
5643
+
5644
+ // components/Puck/components/Fields/index.tsx
5645
+ import { Fragment as Fragment8, jsx as jsx27, jsxs as jsxs14 } from "react/jsx-runtime";
5646
+ var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
5647
+ var DefaultFields = ({
5648
+ children
5649
+ }) => {
5650
+ return /* @__PURE__ */ jsx27(Fragment8, { children });
5651
+ };
5652
+ var Fields = ({ wrapFields = true }) => {
5573
5653
  var _a, _b;
5574
5654
  const {
5575
5655
  selectedItem,
@@ -5587,11 +5667,11 @@ var Fields = () => {
5587
5667
  const componentResolving = selectedItem ? ((_a = componentState[selectedItem == null ? void 0 : selectedItem.props.id]) == null ? void 0 : _a.loadingCount) > 0 : ((_b = componentState["puck-root"]) == null ? void 0 : _b.loadingCount) > 0;
5588
5668
  const isLoading = fieldsResolving || componentResolving;
5589
5669
  const rootProps = data.root.props || data.root;
5590
- const Wrapper = useMemo11(() => overrides.fields || DefaultFields, [overrides]);
5670
+ const Wrapper = useMemo12(() => overrides.fields || DefaultFields, [overrides]);
5591
5671
  return /* @__PURE__ */ jsxs14(
5592
5672
  "form",
5593
5673
  {
5594
- className: getClassName21(),
5674
+ className: getClassName21({ wrapFields }),
5595
5675
  onSubmit: (e) => {
5596
5676
  e.preventDefault();
5597
5677
  },
@@ -5667,7 +5747,7 @@ var Fields = () => {
5667
5747
  item: selectedItem
5668
5748
  });
5669
5749
  const id = `${selectedItem.props.id}_${field.type}_${fieldName}`;
5670
- return /* @__PURE__ */ jsx27(
5750
+ return /* @__PURE__ */ jsx27("div", { className: getClassName21("field"), children: /* @__PURE__ */ jsx27(
5671
5751
  AutoFieldPrivate,
5672
5752
  {
5673
5753
  field,
@@ -5676,16 +5756,15 @@ var Fields = () => {
5676
5756
  readOnly: !edit || readOnly[fieldName],
5677
5757
  value: selectedItem.props[fieldName],
5678
5758
  onChange
5679
- },
5680
- id
5681
- );
5759
+ }
5760
+ ) }, id);
5682
5761
  } else {
5683
5762
  const readOnly = data.root.readOnly || {};
5684
5763
  const { edit } = getPermissions({
5685
5764
  root: true
5686
5765
  });
5687
5766
  const id = `root_${field.type}_${fieldName}`;
5688
- return /* @__PURE__ */ jsx27(
5767
+ return /* @__PURE__ */ jsx27("div", { className: getClassName21("field"), children: /* @__PURE__ */ jsx27(
5689
5768
  AutoFieldPrivate,
5690
5769
  {
5691
5770
  field,
@@ -5694,9 +5773,8 @@ var Fields = () => {
5694
5773
  readOnly: !edit || readOnly[fieldName],
5695
5774
  value: rootProps[fieldName],
5696
5775
  onChange
5697
- },
5698
- id
5699
- );
5776
+ }
5777
+ ) }, id);
5700
5778
  }
5701
5779
  }) }),
5702
5780
  isLoading && /* @__PURE__ */ jsx27("div", { className: getClassName21("loadingOverlay"), children: /* @__PURE__ */ jsx27("div", { className: getClassName21("loadingOverlayInner"), children: /* @__PURE__ */ jsx27(Loader, { size: 16 }) }) })
@@ -5710,7 +5788,7 @@ init_react_import();
5710
5788
 
5711
5789
  // lib/use-component-list.tsx
5712
5790
  init_react_import();
5713
- import { useEffect as useEffect17, useState as useState20 } from "react";
5791
+ import { useEffect as useEffect18, useState as useState20 } from "react";
5714
5792
 
5715
5793
  // components/ComponentList/index.tsx
5716
5794
  init_react_import();
@@ -5778,7 +5856,7 @@ ComponentList.Item = ComponentListItem;
5778
5856
  import { jsx as jsx29 } from "react/jsx-runtime";
5779
5857
  var useComponentList = (config, ui) => {
5780
5858
  const [componentList, setComponentList] = useState20();
5781
- useEffect17(() => {
5859
+ useEffect18(() => {
5782
5860
  var _a, _b, _c;
5783
5861
  if (Object.keys(ui.componentList).length > 0) {
5784
5862
  const matchedComponents = [];
@@ -5847,25 +5925,25 @@ var useComponentList = (config, ui) => {
5847
5925
  };
5848
5926
 
5849
5927
  // components/Puck/components/Components/index.tsx
5850
- import { useMemo as useMemo12 } from "react";
5928
+ import { useMemo as useMemo13 } from "react";
5851
5929
  import { jsx as jsx30 } from "react/jsx-runtime";
5852
5930
  var Components = () => {
5853
5931
  const { config, state, overrides } = useAppContext();
5854
5932
  const componentList = useComponentList(config, state.ui);
5855
- const Wrapper = useMemo12(() => overrides.components || "div", [overrides]);
5933
+ const Wrapper = useMemo13(() => overrides.components || "div", [overrides]);
5856
5934
  return /* @__PURE__ */ jsx30(Wrapper, { children: componentList ? componentList : /* @__PURE__ */ jsx30(ComponentList, { id: "all" }) });
5857
5935
  };
5858
5936
 
5859
5937
  // components/Puck/components/Preview/index.tsx
5860
5938
  init_react_import();
5861
- import { useCallback as useCallback13, useEffect as useEffect19, useRef as useRef6, useMemo as useMemo13 } from "react";
5939
+ import { useCallback as useCallback14, useEffect as useEffect20, useRef as useRef7, useMemo as useMemo14 } from "react";
5862
5940
 
5863
5941
  // components/AutoFrame/index.tsx
5864
5942
  init_react_import();
5865
5943
  import {
5866
5944
  createContext as createContext5,
5867
5945
  useContext as useContext10,
5868
- useEffect as useEffect18,
5946
+ useEffect as useEffect19,
5869
5947
  useState as useState21
5870
5948
  } from "react";
5871
5949
  import hash from "object-hash";
@@ -5913,7 +5991,7 @@ var CopyHostStyles = ({
5913
5991
  onStylesLoaded = () => null
5914
5992
  }) => {
5915
5993
  const { document: doc, window: win } = useFrame();
5916
- useEffect18(() => {
5994
+ useEffect19(() => {
5917
5995
  if (!win || !doc) {
5918
5996
  return () => {
5919
5997
  };
@@ -6093,7 +6171,7 @@ function AutoFrame(_a) {
6093
6171
  const [loaded, setLoaded] = useState21(false);
6094
6172
  const [ctx, setCtx] = useState21({});
6095
6173
  const [mountTarget, setMountTarget] = useState21();
6096
- useEffect18(() => {
6174
+ useEffect19(() => {
6097
6175
  var _a2;
6098
6176
  if (frameRef.current) {
6099
6177
  setCtx({
@@ -6187,7 +6265,7 @@ import { Fragment as Fragment10, jsx as jsx33 } from "react/jsx-runtime";
6187
6265
  var getClassName23 = get_class_name_factory_default("PuckPreview", styles_module_default18);
6188
6266
  var useBubbleIframeEvents = (ref) => {
6189
6267
  const { status } = useAppContext();
6190
- useEffect19(() => {
6268
+ useEffect20(() => {
6191
6269
  var _a;
6192
6270
  if (ref.current && status === "READY") {
6193
6271
  const iframe = ref.current;
@@ -6226,7 +6304,7 @@ var useBubbleIframeEvents = (ref) => {
6226
6304
  };
6227
6305
  var Preview2 = ({ id = "puck-preview" }) => {
6228
6306
  const { config, dispatch, state, setStatus, iframe, overrides } = useAppContext();
6229
- const Page = useCallback13(
6307
+ const Page = useCallback14(
6230
6308
  (pageProps) => {
6231
6309
  var _a, _b;
6232
6310
  return ((_a = config.root) == null ? void 0 : _a.render) ? (_b = config.root) == null ? void 0 : _b.render(__spreadValues({
@@ -6235,9 +6313,9 @@ var Preview2 = ({ id = "puck-preview" }) => {
6235
6313
  },
6236
6314
  [config.root]
6237
6315
  );
6238
- const Frame = useMemo13(() => overrides.iframe, [overrides]);
6316
+ const Frame = useMemo14(() => overrides.iframe, [overrides]);
6239
6317
  const rootProps = state.data.root.props || state.data.root;
6240
- const ref = useRef6(null);
6318
+ const ref = useRef7(null);
6241
6319
  useBubbleIframeEvents(ref);
6242
6320
  const inner = state.ui.previewMode === "edit" ? /* @__PURE__ */ jsx33(
6243
6321
  Page,
@@ -6487,13 +6565,13 @@ var LayerTree = ({
6487
6565
  };
6488
6566
 
6489
6567
  // components/Puck/components/Outline/index.tsx
6490
- import { useCallback as useCallback14, useMemo as useMemo14 } from "react";
6568
+ import { useCallback as useCallback15, useMemo as useMemo15 } from "react";
6491
6569
  import { Fragment as Fragment12, jsx as jsx35, jsxs as jsxs17 } from "react/jsx-runtime";
6492
6570
  var Outline = () => {
6493
6571
  const { dispatch, state, overrides, config } = useAppContext();
6494
6572
  const { data, ui } = state;
6495
6573
  const { itemSelector } = ui;
6496
- const setItemSelector = useCallback14(
6574
+ const setItemSelector = useCallback15(
6497
6575
  (newItemSelector) => {
6498
6576
  dispatch({
6499
6577
  type: "setUi",
@@ -6502,7 +6580,7 @@ var Outline = () => {
6502
6580
  },
6503
6581
  []
6504
6582
  );
6505
- const Wrapper = useMemo14(() => overrides.outline || "div", [overrides]);
6583
+ const Wrapper = useMemo15(() => overrides.outline || "div", [overrides]);
6506
6584
  return /* @__PURE__ */ jsx35(Wrapper, { children: /* @__PURE__ */ jsx35(dropZoneContext.Consumer, { children: (ctx) => /* @__PURE__ */ jsxs17(Fragment12, { children: [
6507
6585
  (ctx == null ? void 0 : ctx.activeZones) && (ctx == null ? void 0 : ctx.activeZones[rootDroppableId]) && /* @__PURE__ */ jsx35(
6508
6586
  LayerTree,
@@ -6789,16 +6867,16 @@ var getBox = function getBox2(el) {
6789
6867
 
6790
6868
  // components/Puck/components/Canvas/index.tsx
6791
6869
  import {
6792
- useCallback as useCallback15,
6793
- useEffect as useEffect21,
6794
- useMemo as useMemo16,
6795
- useRef as useRef7,
6870
+ useCallback as useCallback16,
6871
+ useEffect as useEffect22,
6872
+ useMemo as useMemo17,
6873
+ useRef as useRef8,
6796
6874
  useState as useState24
6797
6875
  } from "react";
6798
6876
 
6799
6877
  // components/ViewportControls/index.tsx
6800
6878
  init_react_import();
6801
- import { useEffect as useEffect20, useMemo as useMemo15, useState as useState23 } from "react";
6879
+ import { useEffect as useEffect21, useMemo as useMemo16, useState as useState23 } from "react";
6802
6880
 
6803
6881
  // css-module:/home/runner/work/puck/puck/packages/core/components/ViewportControls/styles.module.css#css-module
6804
6882
  init_react_import();
@@ -6822,7 +6900,7 @@ var ViewportButton = ({
6822
6900
  }) => {
6823
6901
  const { state } = useAppContext();
6824
6902
  const [isActive, setIsActive] = useState23(false);
6825
- useEffect20(() => {
6903
+ useEffect21(() => {
6826
6904
  setIsActive(width === state.ui.viewports.current.width);
6827
6905
  }, [width, state.ui.viewports.current.width]);
6828
6906
  return /* @__PURE__ */ jsx36("span", { className: getClassNameButton({ isActive }), children: /* @__PURE__ */ jsx36(
@@ -6858,7 +6936,7 @@ var ViewportControls = ({
6858
6936
  const defaultsContainAutoZoom = defaultZoomOptions.find(
6859
6937
  (option) => option.value === autoZoom
6860
6938
  );
6861
- const zoomOptions = useMemo15(
6939
+ const zoomOptions = useMemo16(
6862
6940
  () => [
6863
6941
  ...defaultZoomOptions,
6864
6942
  ...defaultsContainAutoZoom ? [] : [
@@ -6981,17 +7059,17 @@ var Canvas = () => {
6981
7059
  const { status, iframe } = useAppContext();
6982
7060
  const { dispatch, state, overrides, setUi, zoomConfig, setZoomConfig } = useAppContext();
6983
7061
  const { ui } = state;
6984
- const frameRef = useRef7(null);
7062
+ const frameRef = useRef8(null);
6985
7063
  const [showTransition, setShowTransition] = useState24(false);
6986
- const defaultRender = useMemo16(() => {
7064
+ const defaultRender = useMemo17(() => {
6987
7065
  const PuckDefault = ({ children }) => /* @__PURE__ */ jsx37(Fragment13, { children });
6988
7066
  return PuckDefault;
6989
7067
  }, []);
6990
- const CustomPreview = useMemo16(
7068
+ const CustomPreview = useMemo17(
6991
7069
  () => overrides.preview || defaultRender,
6992
7070
  [overrides]
6993
7071
  );
6994
- const getFrameDimensions = useCallback15(() => {
7072
+ const getFrameDimensions = useCallback16(() => {
6995
7073
  if (frameRef.current) {
6996
7074
  const frame = frameRef.current;
6997
7075
  const box = getBox(frame);
@@ -6999,7 +7077,7 @@ var Canvas = () => {
6999
7077
  }
7000
7078
  return { width: 0, height: 0 };
7001
7079
  }, [frameRef]);
7002
- const resetAutoZoom = useCallback15(
7080
+ const resetAutoZoom = useCallback16(
7003
7081
  (ui2 = state.ui) => {
7004
7082
  if (frameRef.current) {
7005
7083
  setZoomConfig(
@@ -7009,11 +7087,11 @@ var Canvas = () => {
7009
7087
  },
7010
7088
  [frameRef, zoomConfig, state.ui]
7011
7089
  );
7012
- useEffect21(() => {
7090
+ useEffect22(() => {
7013
7091
  setShowTransition(false);
7014
7092
  resetAutoZoom();
7015
7093
  }, [frameRef, ui.leftSideBarVisible, ui.rightSideBarVisible]);
7016
- useEffect21(() => {
7094
+ useEffect22(() => {
7017
7095
  const { height: frameHeight } = getFrameDimensions();
7018
7096
  if (ui.viewports.current.height === "auto") {
7019
7097
  setZoomConfig(__spreadProps(__spreadValues({}, zoomConfig), {
@@ -7021,13 +7099,13 @@ var Canvas = () => {
7021
7099
  }));
7022
7100
  }
7023
7101
  }, [zoomConfig.zoom]);
7024
- useEffect21(() => {
7102
+ useEffect22(() => {
7025
7103
  if (ZOOM_ON_CHANGE) {
7026
7104
  setShowTransition(true);
7027
7105
  resetAutoZoom(ui);
7028
7106
  }
7029
7107
  }, [ui.viewports.current.width]);
7030
- useEffect21(() => {
7108
+ useEffect22(() => {
7031
7109
  const cb = () => {
7032
7110
  setShowTransition(false);
7033
7111
  resetAutoZoom();
@@ -7038,7 +7116,7 @@ var Canvas = () => {
7038
7116
  };
7039
7117
  }, []);
7040
7118
  const [showLoader, setShowLoader] = useState24(false);
7041
- useEffect21(() => {
7119
+ useEffect22(() => {
7042
7120
  setTimeout(() => {
7043
7121
  setShowLoader(true);
7044
7122
  }, 500);
@@ -7116,7 +7194,7 @@ var Canvas = () => {
7116
7194
 
7117
7195
  // lib/use-loaded-overrides.ts
7118
7196
  init_react_import();
7119
- import { useMemo as useMemo17 } from "react";
7197
+ import { useMemo as useMemo18 } from "react";
7120
7198
 
7121
7199
  // lib/load-overrides.ts
7122
7200
  init_react_import();
@@ -7155,7 +7233,7 @@ var useLoadedOverrides = ({
7155
7233
  overrides,
7156
7234
  plugins
7157
7235
  }) => {
7158
- return useMemo17(() => {
7236
+ return useMemo18(() => {
7159
7237
  return loadOverrides({ overrides, plugins });
7160
7238
  }, [plugins, overrides]);
7161
7239
  };
@@ -7167,14 +7245,14 @@ var DefaultOverride = ({ children }) => /* @__PURE__ */ jsx38(Fragment14, { chil
7167
7245
 
7168
7246
  // lib/use-inject-css.ts
7169
7247
  init_react_import();
7170
- import { useEffect as useEffect22, useState as useState25 } from "react";
7248
+ import { useEffect as useEffect23, useState as useState25 } from "react";
7171
7249
  var styles = ``;
7172
7250
  var useInjectStyleSheet = (initialStyles, iframeEnabled) => {
7173
7251
  const [el, setEl] = useState25();
7174
- useEffect22(() => {
7252
+ useEffect23(() => {
7175
7253
  setEl(document.createElement("style"));
7176
7254
  }, []);
7177
- useEffect22(() => {
7255
+ useEffect23(() => {
7178
7256
  var _a;
7179
7257
  if (!el || typeof window === "undefined") {
7180
7258
  return;
@@ -7194,10 +7272,10 @@ var useInjectGlobalCss = (iframeEnabled) => {
7194
7272
 
7195
7273
  // lib/use-preview-mode-hotkeys.ts
7196
7274
  init_react_import();
7197
- import { useCallback as useCallback16 } from "react";
7275
+ import { useCallback as useCallback17 } from "react";
7198
7276
  import { useHotkeys as useHotkeys2 } from "react-hotkeys-hook";
7199
7277
  var usePreviewModeHotkeys = (dispatch, iframeEnabled) => {
7200
- const toggleInteractive = useCallback16(() => {
7278
+ const toggleInteractive = useCallback17(() => {
7201
7279
  dispatch({
7202
7280
  type: "setUi",
7203
7281
  ui: (ui) => ({
@@ -7342,11 +7420,11 @@ function Puck({
7342
7420
  const [menuOpen, setMenuOpen] = useState26(false);
7343
7421
  const { itemSelector, leftSideBarVisible, rightSideBarVisible } = ui;
7344
7422
  const selectedItem = itemSelector ? getItem(itemSelector, data) : null;
7345
- useEffect23(() => {
7423
+ useEffect24(() => {
7346
7424
  if (onChange) onChange(data);
7347
7425
  }, [data]);
7348
7426
  const rootProps = data.root.props || data.root;
7349
- const toggleSidebars = useCallback17(
7427
+ const toggleSidebars = useCallback18(
7350
7428
  (sidebar) => {
7351
7429
  const widerViewport = window.matchMedia("(min-width: 638px)").matches;
7352
7430
  const sideBarVisible = sidebar === "left" ? leftSideBarVisible : rightSideBarVisible;
@@ -7360,7 +7438,7 @@ function Puck({
7360
7438
  },
7361
7439
  [dispatch, leftSideBarVisible, rightSideBarVisible]
7362
7440
  );
7363
- useEffect23(() => {
7441
+ useEffect24(() => {
7364
7442
  if (!window.matchMedia("(min-width: 638px)").matches) {
7365
7443
  dispatch({
7366
7444
  type: "setUi",
@@ -7383,7 +7461,7 @@ function Puck({
7383
7461
  window.removeEventListener("resize", handleResize);
7384
7462
  };
7385
7463
  }, []);
7386
- const defaultHeaderRender = useMemo18(() => {
7464
+ const defaultHeaderRender = useMemo19(() => {
7387
7465
  if (renderHeader) {
7388
7466
  console.warn(
7389
7467
  "`renderHeader` is deprecated. Please use `overrides.header` and the `usePuck` hook instead"
@@ -7397,7 +7475,7 @@ function Puck({
7397
7475
  }
7398
7476
  return DefaultOverride;
7399
7477
  }, [renderHeader]);
7400
- const defaultHeaderActionsRender = useMemo18(() => {
7478
+ const defaultHeaderActionsRender = useMemo19(() => {
7401
7479
  if (renderHeaderActions) {
7402
7480
  console.warn(
7403
7481
  "`renderHeaderActions` is deprecated. Please use `overrides.headerActions` and the `usePuck` hook instead."
@@ -7414,20 +7492,20 @@ function Puck({
7414
7492
  overrides,
7415
7493
  plugins
7416
7494
  });
7417
- const CustomPuck = useMemo18(
7495
+ const CustomPuck = useMemo19(
7418
7496
  () => loadedOverrides.puck || DefaultOverride,
7419
7497
  [loadedOverrides]
7420
7498
  );
7421
- const CustomHeader = useMemo18(
7499
+ const CustomHeader = useMemo19(
7422
7500
  () => loadedOverrides.header || defaultHeaderRender,
7423
7501
  [loadedOverrides]
7424
7502
  );
7425
- const CustomHeaderActions = useMemo18(
7503
+ const CustomHeaderActions = useMemo19(
7426
7504
  () => loadedOverrides.headerActions || defaultHeaderActionsRender,
7427
7505
  [loadedOverrides]
7428
7506
  );
7429
7507
  const [mounted, setMounted] = useState26(false);
7430
- useEffect23(() => {
7508
+ useEffect24(() => {
7431
7509
  setMounted(true);
7432
7510
  }, []);
7433
7511
  const selectedComponentConfig = selectedItem && config.components[selectedItem.type];