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

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
@@ -16,7 +16,7 @@ import {
16
16
  resolveRootData,
17
17
  rootDroppableId,
18
18
  setupZone
19
- } from "./chunk-EXKSBUY5.mjs";
19
+ } from "./chunk-CHWFBYEM.mjs";
20
20
 
21
21
  // ../../node_modules/classnames/index.js
22
22
  var require_classnames = __commonJS({
@@ -210,8 +210,9 @@ var styles_module_default2 = { "InputWrapper": "_InputWrapper_1l5m8_1", "Input":
210
210
  // components/AutoField/index.tsx
211
211
  import {
212
212
  useCallback as useCallback5,
213
+ useContext as useContext3,
213
214
  useEffect as useEffect9,
214
- useMemo as useMemo4,
215
+ useMemo as useMemo5,
215
216
  useState as useState11
216
217
  } from "react";
217
218
 
@@ -962,6 +963,7 @@ var defaultAppState = {
962
963
  itemSelector: null,
963
964
  componentList: {},
964
965
  isDragging: false,
966
+ previewMode: "edit",
965
967
  viewports: {
966
968
  current: {
967
969
  width: defaultViewports[0].width,
@@ -1084,7 +1086,7 @@ init_react_import();
1084
1086
  import { DragDropProvider } from "@dnd-kit/react";
1085
1087
  import { useState as useState5 } from "react";
1086
1088
 
1087
- // lib/dnd-kit/safe.ts
1089
+ // lib/dnd/dnd-kit/safe.ts
1088
1090
  init_react_import();
1089
1091
  import {
1090
1092
  useDraggable,
@@ -1164,8 +1166,53 @@ var Sortable = ({
1164
1166
  return children({ status, ref: sortableRef });
1165
1167
  };
1166
1168
 
1169
+ // components/AutoField/context.tsx
1170
+ init_react_import();
1171
+ import { createContext as createContext2, useContext as useContext2, useMemo } from "react";
1172
+ import { jsx as jsx7 } from "react/jsx-runtime";
1173
+ var NestedFieldContext = createContext2({});
1174
+ var useNestedFieldContext = () => {
1175
+ const context = useContext2(NestedFieldContext);
1176
+ return __spreadProps(__spreadValues({}, context), {
1177
+ readOnlyFields: context.readOnlyFields || {}
1178
+ });
1179
+ };
1180
+ var NestedFieldProvider = ({
1181
+ children,
1182
+ name,
1183
+ subName,
1184
+ wildcardName = name,
1185
+ readOnlyFields
1186
+ }) => {
1187
+ const subPath = `${name}.${subName}`;
1188
+ const wildcardSubPath = `${wildcardName}.${subName}`;
1189
+ const subReadOnlyFields = useMemo(
1190
+ () => Object.keys(readOnlyFields).reduce((acc, readOnlyKey) => {
1191
+ const isLocal = readOnlyKey.indexOf(subPath) > -1 || readOnlyKey.indexOf(wildcardSubPath) > -1;
1192
+ if (isLocal) {
1193
+ const subPathPattern = new RegExp(
1194
+ `^(${name}|${wildcardName}).`.replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/\./g, "\\.").replace(/\*/g, "\\*")
1195
+ );
1196
+ const localName = readOnlyKey.replace(subPathPattern, "");
1197
+ return __spreadProps(__spreadValues({}, acc), {
1198
+ [localName]: readOnlyFields[readOnlyKey]
1199
+ });
1200
+ }
1201
+ return acc;
1202
+ }, {}),
1203
+ [name, subName, wildcardName, readOnlyFields]
1204
+ );
1205
+ return /* @__PURE__ */ jsx7(
1206
+ NestedFieldContext.Provider,
1207
+ {
1208
+ value: { readOnlyFields: subReadOnlyFields, localName: subName },
1209
+ children
1210
+ }
1211
+ );
1212
+ };
1213
+
1167
1214
  // components/AutoField/fields/ArrayField/index.tsx
1168
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
1215
+ import { jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
1169
1216
  var getClassName5 = get_class_name_factory_default("ArrayField", styles_module_default3);
1170
1217
  var getClassNameItem = get_class_name_factory_default("ArrayFieldItem", styles_module_default3);
1171
1218
  var ArrayField = ({
@@ -1176,10 +1223,10 @@ var ArrayField = ({
1176
1223
  label,
1177
1224
  readOnly,
1178
1225
  id,
1179
- Label: Label2 = (props) => /* @__PURE__ */ jsx7("div", __spreadValues({}, props))
1226
+ Label: Label2 = (props) => /* @__PURE__ */ jsx8("div", __spreadValues({}, props))
1180
1227
  }) => {
1181
1228
  const { state, setUi, selectedItem, getPermissions } = useAppContext();
1182
- const readOnlyFields = (selectedItem == null ? void 0 : selectedItem.readOnly) || {};
1229
+ const { readOnlyFields, localName = name } = useNestedFieldContext();
1183
1230
  const value = _value;
1184
1231
  const arrayState = state.ui.arrayState[id] || {
1185
1232
  items: Array.from(value || []).map((item, idx) => {
@@ -1239,14 +1286,14 @@ var ArrayField = ({
1239
1286
  return null;
1240
1287
  }
1241
1288
  const addDisabled = field.max !== void 0 && localState.arrayState.items.length >= field.max || readOnly;
1242
- return /* @__PURE__ */ jsx7(
1289
+ return /* @__PURE__ */ jsx8(
1243
1290
  Label2,
1244
1291
  {
1245
1292
  label: label || name,
1246
- icon: /* @__PURE__ */ jsx7(List, { size: 16 }),
1293
+ icon: /* @__PURE__ */ jsx8(List, { size: 16 }),
1247
1294
  el: "div",
1248
1295
  readOnly,
1249
- children: /* @__PURE__ */ jsx7(
1296
+ children: /* @__PURE__ */ jsx8(
1250
1297
  SortableProvider,
1251
1298
  {
1252
1299
  onMove: (move) => {
@@ -1282,7 +1329,7 @@ var ArrayField = ({
1282
1329
  localState.arrayState.items.map((item, i) => {
1283
1330
  const { _arrayId = `${id}-${i}`, _originalIndex = i } = item;
1284
1331
  const data = Array.from(localState.value || [])[i] || {};
1285
- return /* @__PURE__ */ jsx7(
1332
+ return /* @__PURE__ */ jsx8(
1286
1333
  Sortable,
1287
1334
  {
1288
1335
  id: _arrayId,
@@ -1323,7 +1370,7 @@ var ArrayField = ({
1323
1370
  field.getItemSummary ? field.getItemSummary(data, i) : `Item #${_originalIndex}`,
1324
1371
  /* @__PURE__ */ jsxs3("div", { className: getClassNameItem("rhs"), children: [
1325
1372
  !readOnly && /* @__PURE__ */ jsxs3("div", { className: getClassNameItem("actions"), children: [
1326
- /* @__PURE__ */ jsx7("div", { className: getClassNameItem("action"), children: /* @__PURE__ */ jsx7(
1373
+ /* @__PURE__ */ jsx8("div", { className: getClassNameItem("action"), children: /* @__PURE__ */ jsx8(
1327
1374
  IconButton,
1328
1375
  {
1329
1376
  type: "button",
@@ -1340,10 +1387,10 @@ var ArrayField = ({
1340
1387
  );
1341
1388
  },
1342
1389
  title: "Duplicate",
1343
- children: /* @__PURE__ */ jsx7(Copy, { size: 16 })
1390
+ children: /* @__PURE__ */ jsx8(Copy, { size: 16 })
1344
1391
  }
1345
1392
  ) }),
1346
- /* @__PURE__ */ jsx7("div", { className: getClassNameItem("action"), children: /* @__PURE__ */ jsx7(
1393
+ /* @__PURE__ */ jsx8("div", { className: getClassNameItem("action"), children: /* @__PURE__ */ jsx8(
1347
1394
  IconButton,
1348
1395
  {
1349
1396
  type: "button",
@@ -1364,39 +1411,56 @@ var ArrayField = ({
1364
1411
  );
1365
1412
  },
1366
1413
  title: "Delete",
1367
- children: /* @__PURE__ */ jsx7(Trash, { size: 16 })
1414
+ children: /* @__PURE__ */ jsx8(Trash, { size: 16 })
1368
1415
  }
1369
1416
  ) })
1370
1417
  ] }),
1371
- /* @__PURE__ */ jsx7("div", { children: /* @__PURE__ */ jsx7(DragIcon, {}) })
1418
+ /* @__PURE__ */ jsx8("div", { children: /* @__PURE__ */ jsx8(DragIcon, {}) })
1372
1419
  ] })
1373
1420
  ]
1374
1421
  }
1375
1422
  ),
1376
- /* @__PURE__ */ jsx7("div", { className: getClassNameItem("body"), children: /* @__PURE__ */ jsx7("fieldset", { className: getClassNameItem("fieldset"), children: Object.keys(field.arrayFields).map((fieldName) => {
1377
- const subField = field.arrayFields[fieldName];
1378
- const subFieldName = `${name}[${i}].${fieldName}`;
1379
- const wildcardFieldName = `${name}[*].${fieldName}`;
1380
- const subReadOnly = forceReadOnly ? forceReadOnly : typeof readOnlyFields[subFieldName] !== "undefined" ? readOnlyFields[subFieldName] : readOnlyFields[wildcardFieldName];
1381
- return /* @__PURE__ */ jsx7(
1382
- AutoFieldPrivate,
1423
+ /* @__PURE__ */ jsx8("div", { className: getClassNameItem("body"), children: /* @__PURE__ */ jsx8("fieldset", { className: getClassNameItem("fieldset"), children: Object.keys(field.arrayFields).map((subName) => {
1424
+ const subField = field.arrayFields[subName];
1425
+ const indexName = `${name}[${i}]`;
1426
+ const subPath = `${indexName}.${subName}`;
1427
+ const localIndexName = `${localName}[${i}]`;
1428
+ const localWildcardName = `${localName}[*]`;
1429
+ const localSubPath = `${localIndexName}.${subName}`;
1430
+ const localWildcardSubPath = `${localWildcardName}.${subName}`;
1431
+ const subReadOnly = forceReadOnly ? forceReadOnly : typeof readOnlyFields[subPath] !== "undefined" ? readOnlyFields[localSubPath] : readOnlyFields[localWildcardSubPath];
1432
+ const label2 = subField.label || subName;
1433
+ return /* @__PURE__ */ jsx8(
1434
+ NestedFieldProvider,
1383
1435
  {
1384
- name: subFieldName,
1385
- label: subField.label || fieldName,
1386
- id: `${_arrayId}_${fieldName}`,
1387
- readOnly: subReadOnly,
1388
- field: subField,
1389
- value: data[fieldName],
1390
- onChange: (val, ui) => {
1391
- onChange(
1392
- replace(value, i, __spreadProps(__spreadValues({}, data), {
1393
- [fieldName]: val
1394
- })),
1395
- ui
1396
- );
1397
- }
1436
+ name: localIndexName,
1437
+ wildcardName: localWildcardName,
1438
+ subName,
1439
+ readOnlyFields,
1440
+ children: /* @__PURE__ */ jsx8(
1441
+ AutoFieldPrivate,
1442
+ {
1443
+ name: subPath,
1444
+ label: label2,
1445
+ id: `${_arrayId}_${subName}`,
1446
+ readOnly: subReadOnly,
1447
+ field: __spreadProps(__spreadValues({}, subField), {
1448
+ label: label2
1449
+ // May be used by custom fields
1450
+ }),
1451
+ value: data[subName],
1452
+ onChange: (val, ui) => {
1453
+ onChange(
1454
+ replace(value, i, __spreadProps(__spreadValues({}, data), {
1455
+ [subName]: val
1456
+ })),
1457
+ ui
1458
+ );
1459
+ }
1460
+ }
1461
+ )
1398
1462
  },
1399
- subFieldName
1463
+ subPath
1400
1464
  );
1401
1465
  }) }) })
1402
1466
  ]
@@ -1406,7 +1470,7 @@ var ArrayField = ({
1406
1470
  _arrayId
1407
1471
  );
1408
1472
  }),
1409
- !addDisabled && /* @__PURE__ */ jsx7(
1473
+ !addDisabled && /* @__PURE__ */ jsx8(
1410
1474
  "button",
1411
1475
  {
1412
1476
  type: "button",
@@ -1420,7 +1484,7 @@ var ArrayField = ({
1420
1484
  const newArrayState = regenerateArrayState(newValue);
1421
1485
  onChange(newValue, mapArrayStateToUi(newArrayState));
1422
1486
  },
1423
- children: /* @__PURE__ */ jsx7(Plus, { size: 21 })
1487
+ children: /* @__PURE__ */ jsx8(Plus, { size: 21 })
1424
1488
  }
1425
1489
  )
1426
1490
  ]
@@ -1434,7 +1498,7 @@ var ArrayField = ({
1434
1498
 
1435
1499
  // components/AutoField/fields/DefaultField/index.tsx
1436
1500
  init_react_import();
1437
- import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
1501
+ import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
1438
1502
  var getClassName6 = get_class_name_factory_default("Input", styles_module_default2);
1439
1503
  var DefaultField = ({
1440
1504
  field,
@@ -1446,16 +1510,16 @@ var DefaultField = ({
1446
1510
  Label: Label2,
1447
1511
  id
1448
1512
  }) => {
1449
- return /* @__PURE__ */ jsx8(
1513
+ return /* @__PURE__ */ jsx9(
1450
1514
  Label2,
1451
1515
  {
1452
1516
  label: label || name,
1453
1517
  icon: /* @__PURE__ */ jsxs4(Fragment2, { children: [
1454
- field.type === "text" && /* @__PURE__ */ jsx8(Type, { size: 16 }),
1455
- field.type === "number" && /* @__PURE__ */ jsx8(Hash, { size: 16 })
1518
+ field.type === "text" && /* @__PURE__ */ jsx9(Type, { size: 16 }),
1519
+ field.type === "number" && /* @__PURE__ */ jsx9(Hash, { size: 16 })
1456
1520
  ] }),
1457
1521
  readOnly,
1458
- children: /* @__PURE__ */ jsx8(
1522
+ children: /* @__PURE__ */ jsx9(
1459
1523
  "input",
1460
1524
  {
1461
1525
  className: getClassName6("input"),
@@ -1489,7 +1553,7 @@ import { useEffect as useEffect8 } from "react";
1489
1553
  // components/ExternalInput/index.tsx
1490
1554
  init_react_import();
1491
1555
  import {
1492
- useMemo,
1556
+ useMemo as useMemo2,
1493
1557
  useEffect as useEffect7,
1494
1558
  useState as useState9,
1495
1559
  useCallback as useCallback4,
@@ -1510,7 +1574,7 @@ var styles_module_default7 = { "Modal": "_Modal_ikbaj_1", "Modal--isOpen": "_Mod
1510
1574
 
1511
1575
  // components/Modal/index.tsx
1512
1576
  import { createPortal } from "react-dom";
1513
- import { jsx as jsx9 } from "react/jsx-runtime";
1577
+ import { jsx as jsx10 } from "react/jsx-runtime";
1514
1578
  var getClassName7 = get_class_name_factory_default("Modal", styles_module_default7);
1515
1579
  var Modal = ({
1516
1580
  children,
@@ -1522,10 +1586,10 @@ var Modal = ({
1522
1586
  setRootEl(document.getElementById("puck-portal-root"));
1523
1587
  }, []);
1524
1588
  if (!rootEl) {
1525
- return /* @__PURE__ */ jsx9("div", {});
1589
+ return /* @__PURE__ */ jsx10("div", {});
1526
1590
  }
1527
1591
  return createPortal(
1528
- /* @__PURE__ */ jsx9("div", { className: getClassName7({ isOpen }), onClick: onClose, children: /* @__PURE__ */ jsx9(
1592
+ /* @__PURE__ */ jsx10("div", { className: getClassName7({ isOpen }), onClick: onClose, children: /* @__PURE__ */ jsx10(
1529
1593
  "div",
1530
1594
  {
1531
1595
  className: getClassName7("inner"),
@@ -1545,11 +1609,11 @@ init_react_import();
1545
1609
  var styles_module_default8 = { "Heading": "_Heading_qxrry_1", "Heading--xxxxl": "_Heading--xxxxl_qxrry_12", "Heading--xxxl": "_Heading--xxxl_qxrry_18", "Heading--xxl": "_Heading--xxl_qxrry_22", "Heading--xl": "_Heading--xl_qxrry_26", "Heading--l": "_Heading--l_qxrry_30", "Heading--m": "_Heading--m_qxrry_34", "Heading--s": "_Heading--s_qxrry_38", "Heading--xs": "_Heading--xs_qxrry_42" };
1546
1610
 
1547
1611
  // components/Heading/index.tsx
1548
- import { jsx as jsx10 } from "react/jsx-runtime";
1612
+ import { jsx as jsx11 } from "react/jsx-runtime";
1549
1613
  var getClassName8 = get_class_name_factory_default("Heading", styles_module_default8);
1550
1614
  var Heading = ({ children, rank, size = "m" }) => {
1551
1615
  const Tag = rank ? `h${rank}` : "span";
1552
- return /* @__PURE__ */ jsx10(
1616
+ return /* @__PURE__ */ jsx11(
1553
1617
  Tag,
1554
1618
  {
1555
1619
  className: getClassName8({
@@ -1585,7 +1649,7 @@ var filterDataAttrs = (props) => {
1585
1649
  };
1586
1650
 
1587
1651
  // components/Button/Button.tsx
1588
- import { jsx as jsx11, jsxs as jsxs5 } from "react/jsx-runtime";
1652
+ import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
1589
1653
  var getClassName9 = get_class_name_factory_default("Button", Button_module_default);
1590
1654
  var Button = (_a) => {
1591
1655
  var _b = _a, {
@@ -1644,9 +1708,9 @@ var Button = (_a) => {
1644
1708
  href
1645
1709
  }, dataAttrs), {
1646
1710
  children: [
1647
- icon && /* @__PURE__ */ jsx11("div", { className: getClassName9("icon"), children: icon }),
1711
+ icon && /* @__PURE__ */ jsx12("div", { className: getClassName9("icon"), children: icon }),
1648
1712
  children,
1649
- loading && /* @__PURE__ */ jsx11("div", { className: getClassName9("spinner"), children: /* @__PURE__ */ jsx11(Loader, { size: 14 }) })
1713
+ loading && /* @__PURE__ */ jsx12("div", { className: getClassName9("spinner"), children: /* @__PURE__ */ jsx12(Loader, { size: 14 }) })
1650
1714
  ]
1651
1715
  })
1652
1716
  );
@@ -1654,7 +1718,7 @@ var Button = (_a) => {
1654
1718
  };
1655
1719
 
1656
1720
  // components/ExternalInput/index.tsx
1657
- import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
1721
+ import { Fragment as Fragment3, jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
1658
1722
  var getClassName10 = get_class_name_factory_default("ExternalInput", styles_module_default6);
1659
1723
  var getClassNameModal = get_class_name_factory_default("ExternalInputModal", styles_module_default6);
1660
1724
  var dataCache = {};
@@ -1677,10 +1741,10 @@ var ExternalInput = ({
1677
1741
  const hasFilterFields = !!filterFields;
1678
1742
  const [filters, setFilters] = useState9(field.initialFilters || {});
1679
1743
  const [filtersToggled, setFiltersToggled] = useState9(hasFilterFields);
1680
- const mappedData = useMemo(() => {
1744
+ const mappedData = useMemo2(() => {
1681
1745
  return data.map(mapRow);
1682
1746
  }, [data]);
1683
- const keys = useMemo(() => {
1747
+ const keys = useMemo2(() => {
1684
1748
  const validKeys = /* @__PURE__ */ new Set();
1685
1749
  for (const item of mappedData) {
1686
1750
  for (const key of Object.keys(item)) {
@@ -1727,7 +1791,7 @@ var ExternalInput = ({
1727
1791
  id,
1728
1792
  children: [
1729
1793
  /* @__PURE__ */ jsxs6("div", { className: getClassName10("actions"), children: [
1730
- /* @__PURE__ */ jsx12(
1794
+ /* @__PURE__ */ jsx13(
1731
1795
  "button",
1732
1796
  {
1733
1797
  type: "button",
@@ -1735,12 +1799,12 @@ var ExternalInput = ({
1735
1799
  className: getClassName10("button"),
1736
1800
  disabled: readOnly,
1737
1801
  children: value ? field.getItemSummary ? field.getItemSummary(value) : "External item" : /* @__PURE__ */ jsxs6(Fragment3, { children: [
1738
- /* @__PURE__ */ jsx12(Link, { size: "16" }),
1739
- /* @__PURE__ */ jsx12("span", { children: field.placeholder })
1802
+ /* @__PURE__ */ jsx13(Link, { size: "16" }),
1803
+ /* @__PURE__ */ jsx13("span", { children: field.placeholder })
1740
1804
  ] })
1741
1805
  }
1742
1806
  ),
1743
- value && /* @__PURE__ */ jsx12(
1807
+ value && /* @__PURE__ */ jsx13(
1744
1808
  "button",
1745
1809
  {
1746
1810
  type: "button",
@@ -1749,11 +1813,11 @@ var ExternalInput = ({
1749
1813
  onChange(null);
1750
1814
  },
1751
1815
  disabled: readOnly,
1752
- children: /* @__PURE__ */ jsx12(LockOpen, { size: 16 })
1816
+ children: /* @__PURE__ */ jsx13(LockOpen, { size: 16 })
1753
1817
  }
1754
1818
  )
1755
1819
  ] }),
1756
- /* @__PURE__ */ jsx12(Modal, { onClose: () => setOpen(false), isOpen, children: /* @__PURE__ */ jsxs6(
1820
+ /* @__PURE__ */ jsx13(Modal, { onClose: () => setOpen(false), isOpen, children: /* @__PURE__ */ jsxs6(
1757
1821
  "form",
1758
1822
  {
1759
1823
  className: getClassNameModal({
@@ -1767,11 +1831,11 @@ var ExternalInput = ({
1767
1831
  search(searchQuery, filters);
1768
1832
  },
1769
1833
  children: [
1770
- /* @__PURE__ */ jsx12("div", { className: getClassNameModal("masthead"), children: field.showSearch ? /* @__PURE__ */ jsxs6("div", { className: getClassNameModal("searchForm"), children: [
1834
+ /* @__PURE__ */ jsx13("div", { className: getClassNameModal("masthead"), children: field.showSearch ? /* @__PURE__ */ jsxs6("div", { className: getClassNameModal("searchForm"), children: [
1771
1835
  /* @__PURE__ */ jsxs6("label", { className: getClassNameModal("search"), children: [
1772
- /* @__PURE__ */ jsx12("span", { className: getClassNameModal("searchIconText"), children: "Search" }),
1773
- /* @__PURE__ */ jsx12("div", { className: getClassNameModal("searchIcon"), children: /* @__PURE__ */ jsx12(Search, { size: "18" }) }),
1774
- /* @__PURE__ */ jsx12(
1836
+ /* @__PURE__ */ jsx13("span", { className: getClassNameModal("searchIconText"), children: "Search" }),
1837
+ /* @__PURE__ */ jsx13("div", { className: getClassNameModal("searchIcon"), children: /* @__PURE__ */ jsx13(Search, { size: "18" }) }),
1838
+ /* @__PURE__ */ jsx13(
1775
1839
  "input",
1776
1840
  {
1777
1841
  className: getClassNameModal("searchInput"),
@@ -1787,8 +1851,8 @@ var ExternalInput = ({
1787
1851
  )
1788
1852
  ] }),
1789
1853
  /* @__PURE__ */ jsxs6("div", { className: getClassNameModal("searchActions"), children: [
1790
- /* @__PURE__ */ jsx12(Button, { type: "submit", loading: isLoading, fullWidth: true, children: "Search" }),
1791
- hasFilterFields && /* @__PURE__ */ jsx12("div", { className: getClassNameModal("searchActionIcon"), children: /* @__PURE__ */ jsx12(
1854
+ /* @__PURE__ */ jsx13(Button, { type: "submit", loading: isLoading, fullWidth: true, children: "Search" }),
1855
+ hasFilterFields && /* @__PURE__ */ jsx13("div", { className: getClassNameModal("searchActionIcon"), children: /* @__PURE__ */ jsx13(
1792
1856
  IconButton,
1793
1857
  {
1794
1858
  title: "Toggle filters",
@@ -1797,15 +1861,15 @@ var ExternalInput = ({
1797
1861
  e.stopPropagation();
1798
1862
  setFiltersToggled(!filtersToggled);
1799
1863
  },
1800
- children: /* @__PURE__ */ jsx12(SlidersHorizontal, { size: 20 })
1864
+ children: /* @__PURE__ */ jsx13(SlidersHorizontal, { size: 20 })
1801
1865
  }
1802
1866
  ) })
1803
1867
  ] })
1804
- ] }) : /* @__PURE__ */ jsx12(Heading, { rank: "2", size: "xs", children: field.placeholder || "Select data" }) }),
1868
+ ] }) : /* @__PURE__ */ jsx13(Heading, { rank: "2", size: "xs", children: field.placeholder || "Select data" }) }),
1805
1869
  /* @__PURE__ */ jsxs6("div", { className: getClassNameModal("grid"), children: [
1806
- hasFilterFields && /* @__PURE__ */ jsx12("div", { className: getClassNameModal("filters"), children: hasFilterFields && Object.keys(filterFields).map((fieldName) => {
1870
+ hasFilterFields && /* @__PURE__ */ jsx13("div", { className: getClassNameModal("filters"), children: hasFilterFields && Object.keys(filterFields).map((fieldName) => {
1807
1871
  const filterField = filterFields[fieldName];
1808
- return /* @__PURE__ */ jsx12(
1872
+ return /* @__PURE__ */ jsx13(
1809
1873
  AutoFieldPrivate,
1810
1874
  {
1811
1875
  field: filterField,
@@ -1824,7 +1888,7 @@ var ExternalInput = ({
1824
1888
  }) }),
1825
1889
  /* @__PURE__ */ jsxs6("div", { className: getClassNameModal("tableWrapper"), children: [
1826
1890
  /* @__PURE__ */ jsxs6("table", { className: getClassNameModal("table"), children: [
1827
- /* @__PURE__ */ jsx12("thead", { className: getClassNameModal("thead"), children: /* @__PURE__ */ jsx12("tr", { className: getClassNameModal("tr"), children: keys.map((key) => /* @__PURE__ */ jsx12(
1891
+ /* @__PURE__ */ jsx13("thead", { className: getClassNameModal("thead"), children: /* @__PURE__ */ jsx13("tr", { className: getClassNameModal("tr"), children: keys.map((key) => /* @__PURE__ */ jsx13(
1828
1892
  "th",
1829
1893
  {
1830
1894
  className: getClassNameModal("th"),
@@ -1833,8 +1897,8 @@ var ExternalInput = ({
1833
1897
  },
1834
1898
  key
1835
1899
  )) }) }),
1836
- /* @__PURE__ */ jsx12("tbody", { className: getClassNameModal("tbody"), children: mappedData.map((item, i) => {
1837
- return /* @__PURE__ */ jsx12(
1900
+ /* @__PURE__ */ jsx13("tbody", { className: getClassNameModal("tbody"), children: mappedData.map((item, i) => {
1901
+ return /* @__PURE__ */ jsx13(
1838
1902
  "tr",
1839
1903
  {
1840
1904
  style: { whiteSpace: "nowrap" },
@@ -1843,16 +1907,16 @@ var ExternalInput = ({
1843
1907
  onChange(mapProp(data[i]));
1844
1908
  setOpen(false);
1845
1909
  },
1846
- children: keys.map((key) => /* @__PURE__ */ jsx12("td", { className: getClassNameModal("td"), children: item[key] }, key))
1910
+ children: keys.map((key) => /* @__PURE__ */ jsx13("td", { className: getClassNameModal("td"), children: item[key] }, key))
1847
1911
  },
1848
1912
  i
1849
1913
  );
1850
1914
  }) })
1851
1915
  ] }),
1852
- /* @__PURE__ */ jsx12("div", { className: getClassNameModal("loadingBanner"), children: /* @__PURE__ */ jsx12(Loader, { size: 24 }) })
1916
+ /* @__PURE__ */ jsx13("div", { className: getClassNameModal("loadingBanner"), children: /* @__PURE__ */ jsx13(Loader, { size: 24 }) })
1853
1917
  ] })
1854
1918
  ] }),
1855
- /* @__PURE__ */ jsx12("div", { className: getClassNameModal("footerContainer"), children: /* @__PURE__ */ jsx12(Footer, { items: mappedData }) })
1919
+ /* @__PURE__ */ jsx13("div", { className: getClassNameModal("footerContainer"), children: /* @__PURE__ */ jsx13(Footer, { items: mappedData }) })
1856
1920
  ]
1857
1921
  }
1858
1922
  ) })
@@ -1862,7 +1926,7 @@ var ExternalInput = ({
1862
1926
  };
1863
1927
 
1864
1928
  // components/AutoField/fields/ExternalField/index.tsx
1865
- import { jsx as jsx13 } from "react/jsx-runtime";
1929
+ import { jsx as jsx14 } from "react/jsx-runtime";
1866
1930
  var ExternalField = ({
1867
1931
  field,
1868
1932
  onChange,
@@ -1886,7 +1950,7 @@ var ExternalField = ({
1886
1950
  if (field.type !== "external") {
1887
1951
  return null;
1888
1952
  }
1889
- return /* @__PURE__ */ jsx13(Label2, { label: label || name, icon: /* @__PURE__ */ jsx13(Link, { size: 16 }), el: "div", children: /* @__PURE__ */ jsx13(
1953
+ return /* @__PURE__ */ jsx14(Label2, { label: label || name, icon: /* @__PURE__ */ jsx14(Link, { size: 16 }), el: "div", children: /* @__PURE__ */ jsx14(
1890
1954
  ExternalInput,
1891
1955
  {
1892
1956
  name,
@@ -1911,7 +1975,7 @@ var ExternalField = ({
1911
1975
 
1912
1976
  // components/AutoField/fields/RadioField/index.tsx
1913
1977
  init_react_import();
1914
- import { useMemo as useMemo2 } from "react";
1978
+ import { useMemo as useMemo3 } from "react";
1915
1979
 
1916
1980
  // lib/safe-json-parse.ts
1917
1981
  init_react_import();
@@ -1925,7 +1989,7 @@ var safeJsonParse = (str) => {
1925
1989
  };
1926
1990
 
1927
1991
  // components/AutoField/fields/RadioField/index.tsx
1928
- import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
1992
+ import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
1929
1993
  var getClassName11 = get_class_name_factory_default("Input", styles_module_default2);
1930
1994
  var RadioField = ({
1931
1995
  field,
@@ -1937,26 +2001,26 @@ var RadioField = ({
1937
2001
  label,
1938
2002
  Label: Label2
1939
2003
  }) => {
1940
- const flatOptions = useMemo2(
2004
+ const flatOptions = useMemo3(
1941
2005
  () => field.type === "radio" ? field.options.map(({ value: value2 }) => value2) : [],
1942
2006
  [field]
1943
2007
  );
1944
2008
  if (field.type !== "radio" || !field.options) {
1945
2009
  return null;
1946
2010
  }
1947
- return /* @__PURE__ */ jsx14(
2011
+ return /* @__PURE__ */ jsx15(
1948
2012
  Label2,
1949
2013
  {
1950
- icon: /* @__PURE__ */ jsx14(CircleCheckBig, { size: 16 }),
2014
+ icon: /* @__PURE__ */ jsx15(CircleCheckBig, { size: 16 }),
1951
2015
  label: label || name,
1952
2016
  readOnly,
1953
2017
  el: "div",
1954
- children: /* @__PURE__ */ jsx14("div", { className: getClassName11("radioGroupItems"), id, children: field.options.map((option) => /* @__PURE__ */ jsxs7(
2018
+ children: /* @__PURE__ */ jsx15("div", { className: getClassName11("radioGroupItems"), id, children: field.options.map((option) => /* @__PURE__ */ jsxs7(
1955
2019
  "label",
1956
2020
  {
1957
2021
  className: getClassName11("radio"),
1958
2022
  children: [
1959
- /* @__PURE__ */ jsx14(
2023
+ /* @__PURE__ */ jsx15(
1960
2024
  "input",
1961
2025
  {
1962
2026
  type: "radio",
@@ -1976,7 +2040,7 @@ var RadioField = ({
1976
2040
  checked: value === option.value
1977
2041
  }
1978
2042
  ),
1979
- /* @__PURE__ */ jsx14("div", { className: getClassName11("radioInner"), children: option.label || option.value })
2043
+ /* @__PURE__ */ jsx15("div", { className: getClassName11("radioInner"), children: option.label || option.value })
1980
2044
  ]
1981
2045
  },
1982
2046
  option.label + option.value
@@ -1987,8 +2051,8 @@ var RadioField = ({
1987
2051
 
1988
2052
  // components/AutoField/fields/SelectField/index.tsx
1989
2053
  init_react_import();
1990
- import { useMemo as useMemo3 } from "react";
1991
- import { jsx as jsx15 } from "react/jsx-runtime";
2054
+ import { useMemo as useMemo4 } from "react";
2055
+ import { jsx as jsx16 } from "react/jsx-runtime";
1992
2056
  var getClassName12 = get_class_name_factory_default("Input", styles_module_default2);
1993
2057
  var SelectField = ({
1994
2058
  field,
@@ -2000,20 +2064,20 @@ var SelectField = ({
2000
2064
  readOnly,
2001
2065
  id
2002
2066
  }) => {
2003
- const flatOptions = useMemo3(
2067
+ const flatOptions = useMemo4(
2004
2068
  () => field.type === "select" ? field.options.map(({ value: value2 }) => value2) : [],
2005
2069
  [field]
2006
2070
  );
2007
2071
  if (field.type !== "select" || !field.options) {
2008
2072
  return null;
2009
2073
  }
2010
- return /* @__PURE__ */ jsx15(
2074
+ return /* @__PURE__ */ jsx16(
2011
2075
  Label2,
2012
2076
  {
2013
2077
  label: label || name,
2014
- icon: /* @__PURE__ */ jsx15(ChevronDown, { size: 16 }),
2078
+ icon: /* @__PURE__ */ jsx16(ChevronDown, { size: 16 }),
2015
2079
  readOnly,
2016
- children: /* @__PURE__ */ jsx15(
2080
+ children: /* @__PURE__ */ jsx16(
2017
2081
  "select",
2018
2082
  {
2019
2083
  id,
@@ -2030,7 +2094,7 @@ var SelectField = ({
2030
2094
  }
2031
2095
  },
2032
2096
  value,
2033
- children: field.options.map((option) => /* @__PURE__ */ jsx15(
2097
+ children: field.options.map((option) => /* @__PURE__ */ jsx16(
2034
2098
  "option",
2035
2099
  {
2036
2100
  label: option.label,
@@ -2046,7 +2110,7 @@ var SelectField = ({
2046
2110
 
2047
2111
  // components/AutoField/fields/TextareaField/index.tsx
2048
2112
  init_react_import();
2049
- import { jsx as jsx16 } from "react/jsx-runtime";
2113
+ import { jsx as jsx17 } from "react/jsx-runtime";
2050
2114
  var getClassName13 = get_class_name_factory_default("Input", styles_module_default2);
2051
2115
  var TextareaField = ({
2052
2116
  onChange,
@@ -2057,7 +2121,7 @@ var TextareaField = ({
2057
2121
  Label: Label2,
2058
2122
  id
2059
2123
  }) => {
2060
- return /* @__PURE__ */ jsx16(Label2, { label: label || name, icon: /* @__PURE__ */ jsx16(Type, { size: 16 }), readOnly, children: /* @__PURE__ */ jsx16(
2124
+ return /* @__PURE__ */ jsx17(Label2, { label: label || name, icon: /* @__PURE__ */ jsx17(Type, { size: 16 }), readOnly, children: /* @__PURE__ */ jsx17(
2061
2125
  "textarea",
2062
2126
  {
2063
2127
  id,
@@ -2084,7 +2148,7 @@ init_react_import();
2084
2148
  var styles_module_default9 = { "ObjectField": "_ObjectField_1ua3y_5", "ObjectField-fieldset": "_ObjectField-fieldset_1ua3y_13" };
2085
2149
 
2086
2150
  // components/AutoField/fields/ObjectField/index.tsx
2087
- import { jsx as jsx17 } from "react/jsx-runtime";
2151
+ import { jsx as jsx18 } from "react/jsx-runtime";
2088
2152
  var getClassName14 = get_class_name_factory_default("ObjectField", styles_module_default9);
2089
2153
  var ObjectField = ({
2090
2154
  field,
@@ -2096,43 +2160,54 @@ var ObjectField = ({
2096
2160
  readOnly,
2097
2161
  id
2098
2162
  }) => {
2099
- const { selectedItem } = useAppContext();
2163
+ const { readOnlyFields, localName = name } = useNestedFieldContext();
2100
2164
  if (field.type !== "object" || !field.objectFields) {
2101
2165
  return null;
2102
2166
  }
2103
- const readOnlyFields = (selectedItem == null ? void 0 : selectedItem.readOnly) || {};
2104
2167
  const data = value || {};
2105
- return /* @__PURE__ */ jsx17(
2168
+ return /* @__PURE__ */ jsx18(
2106
2169
  Label2,
2107
2170
  {
2108
2171
  label: label || name,
2109
- icon: /* @__PURE__ */ jsx17(EllipsisVertical, { size: 16 }),
2172
+ icon: /* @__PURE__ */ jsx18(EllipsisVertical, { size: 16 }),
2110
2173
  el: "div",
2111
2174
  readOnly,
2112
- children: /* @__PURE__ */ jsx17("div", { className: getClassName14(), children: /* @__PURE__ */ jsx17("fieldset", { className: getClassName14("fieldset"), children: Object.keys(field.objectFields).map((fieldName) => {
2113
- const subField = field.objectFields[fieldName];
2114
- const subFieldName = `${name}.${fieldName}`;
2115
- const wildcardFieldName = `${name}.${fieldName}`;
2116
- const subReadOnly = readOnly ? readOnly : typeof readOnlyFields[subFieldName] !== "undefined" ? readOnlyFields[subFieldName] : readOnlyFields[wildcardFieldName];
2117
- return /* @__PURE__ */ jsx17(
2118
- AutoFieldPrivate,
2175
+ children: /* @__PURE__ */ jsx18("div", { className: getClassName14(), children: /* @__PURE__ */ jsx18("fieldset", { className: getClassName14("fieldset"), children: Object.keys(field.objectFields).map((subName) => {
2176
+ const subField = field.objectFields[subName];
2177
+ const subPath = `${name}.${subName}`;
2178
+ const localSubPath = `${localName || name}.${subName}`;
2179
+ const subReadOnly = readOnly ? readOnly : readOnlyFields[localSubPath];
2180
+ const label2 = subField.label || subName;
2181
+ return /* @__PURE__ */ jsx18(
2182
+ NestedFieldProvider,
2119
2183
  {
2120
- name: subFieldName,
2121
- label: subField.label || fieldName,
2122
- id: `${id}_${fieldName}`,
2123
- readOnly: subReadOnly,
2124
- field: subField,
2125
- value: data[fieldName],
2126
- onChange: (val, ui) => {
2127
- onChange(
2128
- __spreadProps(__spreadValues({}, data), {
2129
- [fieldName]: val
2184
+ name: localName || id,
2185
+ subName,
2186
+ readOnlyFields,
2187
+ children: /* @__PURE__ */ jsx18(
2188
+ AutoFieldPrivate,
2189
+ {
2190
+ name: subPath,
2191
+ label: subPath,
2192
+ id: `${id}_${subName}`,
2193
+ readOnly: subReadOnly,
2194
+ field: __spreadProps(__spreadValues({}, subField), {
2195
+ label: label2
2196
+ // May be used by custom fields
2130
2197
  }),
2131
- ui
2132
- );
2133
- }
2198
+ value: data[subName],
2199
+ onChange: (val, ui) => {
2200
+ onChange(
2201
+ __spreadProps(__spreadValues({}, data), {
2202
+ [subName]: val
2203
+ }),
2204
+ ui
2205
+ );
2206
+ }
2207
+ }
2208
+ )
2134
2209
  },
2135
- subFieldName
2210
+ subPath
2136
2211
  );
2137
2212
  }) }) })
2138
2213
  }
@@ -2158,7 +2233,7 @@ var useSafeId = () => {
2158
2233
  };
2159
2234
 
2160
2235
  // components/AutoField/index.tsx
2161
- import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
2236
+ import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
2162
2237
  var getClassName15 = get_class_name_factory_default("Input", styles_module_default2);
2163
2238
  var getClassNameWrapper = get_class_name_factory_default("InputWrapper", styles_module_default2);
2164
2239
  var FieldLabel = ({
@@ -2172,14 +2247,14 @@ var FieldLabel = ({
2172
2247
  const El = el;
2173
2248
  return /* @__PURE__ */ jsxs8(El, { className, children: [
2174
2249
  /* @__PURE__ */ jsxs8("div", { className: getClassName15("label"), children: [
2175
- icon ? /* @__PURE__ */ jsx18("div", { className: getClassName15("labelIcon"), children: icon }) : /* @__PURE__ */ jsx18(Fragment4, {}),
2250
+ icon ? /* @__PURE__ */ jsx19("div", { className: getClassName15("labelIcon"), children: icon }) : /* @__PURE__ */ jsx19(Fragment4, {}),
2176
2251
  label,
2177
- readOnly && /* @__PURE__ */ jsx18("div", { className: getClassName15("disabledIcon"), title: "Read-only", children: /* @__PURE__ */ jsx18(Lock, { size: "12" }) })
2252
+ readOnly && /* @__PURE__ */ jsx19("div", { className: getClassName15("disabledIcon"), title: "Read-only", children: /* @__PURE__ */ jsx19(Lock, { size: "12" }) })
2178
2253
  ] }),
2179
2254
  children
2180
2255
  ] });
2181
2256
  };
2182
- var FieldLabelInternal2 = ({
2257
+ var FieldLabelInternal = ({
2183
2258
  children,
2184
2259
  icon,
2185
2260
  label,
@@ -2187,14 +2262,14 @@ var FieldLabelInternal2 = ({
2187
2262
  readOnly
2188
2263
  }) => {
2189
2264
  const { overrides } = useAppContext();
2190
- const Wrapper = useMemo4(
2265
+ const Wrapper = useMemo5(
2191
2266
  () => overrides.fieldLabel || FieldLabel,
2192
2267
  [overrides]
2193
2268
  );
2194
2269
  if (!label) {
2195
- return /* @__PURE__ */ jsx18(Fragment4, { children });
2270
+ return /* @__PURE__ */ jsx19(Fragment4, { children });
2196
2271
  }
2197
- return /* @__PURE__ */ jsx18(
2272
+ return /* @__PURE__ */ jsx19(
2198
2273
  Wrapper,
2199
2274
  {
2200
2275
  label,
@@ -2208,8 +2283,8 @@ var FieldLabelInternal2 = ({
2208
2283
  };
2209
2284
  function AutoFieldInternal(props) {
2210
2285
  var _a, _b, _c, _d, _e, _f, _g, _h;
2211
- const { dispatch, overrides } = useAppContext();
2212
- const { id, Label: Label2 = FieldLabelInternal2 } = props;
2286
+ const { dispatch, overrides, selectedItem } = useAppContext();
2287
+ const { id, Label: Label2 = FieldLabelInternal } = props;
2213
2288
  const field = props.field;
2214
2289
  const label = field.label;
2215
2290
  const defaultId = useSafeId();
@@ -2269,20 +2344,30 @@ function AutoFieldInternal(props) {
2269
2344
  return null;
2270
2345
  }
2271
2346
  const CustomField = field.render;
2272
- return /* @__PURE__ */ jsx18("div", { className: getClassNameWrapper(), onFocus, onBlur, children: /* @__PURE__ */ jsx18("div", { className: getClassName15(), children: /* @__PURE__ */ jsx18(CustomField, __spreadValues({}, mergedProps)) }) });
2347
+ return /* @__PURE__ */ jsx19("div", { className: getClassNameWrapper(), onFocus, onBlur, children: /* @__PURE__ */ jsx19("div", { className: getClassName15(), children: /* @__PURE__ */ jsx19(CustomField, __spreadValues({}, mergedProps)) }) });
2273
2348
  }
2274
2349
  const children = defaultFields[field.type](mergedProps);
2275
2350
  const Render2 = render[field.type];
2276
- return /* @__PURE__ */ jsx18(
2277
- "div",
2351
+ const nestedFieldContext = useContext3(NestedFieldContext);
2352
+ return /* @__PURE__ */ jsx19(
2353
+ NestedFieldContext.Provider,
2278
2354
  {
2279
- className: getClassNameWrapper(),
2280
- onFocus,
2281
- onBlur,
2282
- onClick: (e) => {
2283
- e.stopPropagation();
2355
+ value: {
2356
+ readOnlyFields: nestedFieldContext.readOnlyFields || (selectedItem == null ? void 0 : selectedItem.readOnly) || {},
2357
+ localName: nestedFieldContext.localName
2284
2358
  },
2285
- children: /* @__PURE__ */ jsx18(Render2, __spreadProps(__spreadValues({}, mergedProps), { children }))
2359
+ children: /* @__PURE__ */ jsx19(
2360
+ "div",
2361
+ {
2362
+ className: getClassNameWrapper(),
2363
+ onFocus,
2364
+ onBlur,
2365
+ onClick: (e) => {
2366
+ e.stopPropagation();
2367
+ },
2368
+ children: /* @__PURE__ */ jsx19(Render2, __spreadProps(__spreadValues({}, mergedProps), { children }))
2369
+ }
2370
+ )
2286
2371
  }
2287
2372
  );
2288
2373
  }
@@ -2310,11 +2395,11 @@ function AutoFieldPrivate(props) {
2310
2395
  value: localValue,
2311
2396
  onChange: onChangeLocal
2312
2397
  };
2313
- return /* @__PURE__ */ jsx18(AutoFieldInternal, __spreadValues(__spreadValues({}, props), localProps));
2398
+ return /* @__PURE__ */ jsx19(AutoFieldInternal, __spreadValues(__spreadValues({}, props), localProps));
2314
2399
  }
2315
2400
  function AutoField(props) {
2316
- const DefaultLabel = useMemo4(() => {
2317
- const DefaultLabel2 = (labelProps) => /* @__PURE__ */ jsx18(
2401
+ const DefaultLabel = useMemo5(() => {
2402
+ const DefaultLabel2 = (labelProps) => /* @__PURE__ */ jsx19(
2318
2403
  "div",
2319
2404
  __spreadProps(__spreadValues({}, labelProps), {
2320
2405
  className: getClassName15({ readOnly: props.readOnly })
@@ -2322,7 +2407,7 @@ function AutoField(props) {
2322
2407
  );
2323
2408
  return DefaultLabel2;
2324
2409
  }, [props.readOnly]);
2325
- return /* @__PURE__ */ jsx18(AutoFieldInternal, __spreadProps(__spreadValues({}, props), { Label: DefaultLabel }));
2410
+ return /* @__PURE__ */ jsx19(AutoFieldInternal, __spreadProps(__spreadValues({}, props), { Label: DefaultLabel }));
2326
2411
  }
2327
2412
 
2328
2413
  // components/Drawer/index.tsx
@@ -2333,17 +2418,18 @@ init_react_import();
2333
2418
  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" };
2334
2419
 
2335
2420
  // components/Drawer/index.tsx
2336
- import { useMemo as useMemo8, useState as useState18 } from "react";
2421
+ import { useMemo as useMemo9, useState as useState18 } from "react";
2337
2422
 
2338
2423
  // components/DragDropContext/index.tsx
2339
2424
  init_react_import();
2340
2425
  import { DragDropProvider as DragDropProvider2 } from "@dnd-kit/react";
2341
2426
  import {
2342
- createContext as createContext3,
2343
- useCallback as useCallback9,
2344
- useContext as useContext4,
2345
- useEffect as useEffect14,
2346
- useRef as useRef5,
2427
+ createContext as createContext4,
2428
+ useCallback as useCallback11,
2429
+ useContext as useContext7,
2430
+ useEffect as useEffect15,
2431
+ useId,
2432
+ useRef as useRef4,
2347
2433
  useState as useState17
2348
2434
  } from "react";
2349
2435
  import { AutoScroller, defaultPreset } from "@dnd-kit/dom";
@@ -2352,22 +2438,21 @@ import { AutoScroller, defaultPreset } from "@dnd-kit/dom";
2352
2438
  init_react_import();
2353
2439
  import {
2354
2440
  forwardRef as forwardRef3,
2355
- useCallback as useCallback8,
2356
- useContext as useContext3,
2357
- useEffect as useEffect13,
2358
- useMemo as useMemo7,
2359
- useRef as useRef4,
2360
- useState as useState16
2441
+ useCallback as useCallback10,
2442
+ useContext as useContext6,
2443
+ useEffect as useEffect14,
2444
+ useMemo as useMemo8,
2445
+ useRef as useRef3
2361
2446
  } from "react";
2362
2447
 
2363
2448
  // components/DraggableComponent/index.tsx
2364
2449
  init_react_import();
2365
2450
  import {
2366
- useCallback as useCallback6,
2367
- useContext as useContext2,
2368
- useEffect as useEffect11,
2369
- useMemo as useMemo5,
2370
- useRef as useRef3,
2451
+ useCallback as useCallback7,
2452
+ useContext as useContext5,
2453
+ useEffect as useEffect10,
2454
+ useMemo as useMemo7,
2455
+ useRef as useRef2,
2371
2456
  useState as useState13
2372
2457
  } from "react";
2373
2458
 
@@ -2375,47 +2460,21 @@ import {
2375
2460
  init_react_import();
2376
2461
  var styles_module_default11 = { "DraggableComponent": "_DraggableComponent_1ukn8_1", "DraggableComponent-overlay": "_DraggableComponent-overlay_1ukn8_12", "DraggableComponent-loadingOverlay": "_DraggableComponent-loadingOverlay_1ukn8_29", "DraggableComponent--hover": "_DraggableComponent--hover_1ukn8_45", "DraggableComponent--isLocked": "_DraggableComponent--isLocked_1ukn8_45", "DraggableComponent--isSelected": "_DraggableComponent--isSelected_1ukn8_54", "DraggableComponent-actionsOverlay": "_DraggableComponent-actionsOverlay_1ukn8_66", "DraggableComponent-actions": "_DraggableComponent-actions_1ukn8_66" };
2377
2462
 
2378
- // lib/use-modifier-held.ts
2379
- init_react_import();
2380
- import { useEffect as useEffect10, useState as useState12 } from "react";
2381
- var useModifierHeld = (modifier) => {
2382
- const [modifierHeld, setModifierHeld] = useState12(false);
2383
- useEffect10(() => {
2384
- function downHandler({ key }) {
2385
- if (key === modifier) {
2386
- setModifierHeld(true);
2387
- }
2388
- }
2389
- function upHandler({ key }) {
2390
- if (key === modifier) {
2391
- setModifierHeld(false);
2392
- }
2393
- }
2394
- window.addEventListener("keydown", downHandler);
2395
- window.addEventListener("keyup", upHandler);
2396
- return () => {
2397
- window.removeEventListener("keydown", downHandler);
2398
- window.removeEventListener("keyup", upHandler);
2399
- };
2400
- }, [modifier]);
2401
- return modifierHeld;
2402
- };
2403
-
2404
2463
  // components/DraggableComponent/index.tsx
2405
2464
  import { createPortal as createPortal2 } from "react-dom";
2406
2465
 
2407
- // components/DraggableComponent/collision/dynamic/index.ts
2466
+ // lib/dnd/collision/dynamic/index.ts
2408
2467
  init_react_import();
2409
2468
  import {
2410
2469
  CollisionPriority as CollisionPriority7,
2411
2470
  CollisionType as CollisionType7
2412
2471
  } from "@dnd-kit/abstract";
2413
2472
 
2414
- // components/DraggableComponent/collision/directional/index.ts
2473
+ // lib/dnd/collision/directional/index.ts
2415
2474
  init_react_import();
2416
2475
  import { CollisionType } from "@dnd-kit/abstract";
2417
2476
 
2418
- // components/DraggableComponent/collision/collision-debug.ts
2477
+ // lib/dnd/collision/collision-debug.ts
2419
2478
  init_react_import();
2420
2479
  var DEBUG = false;
2421
2480
  var debugElements = {};
@@ -2464,7 +2523,7 @@ var collisionDebug = (a, b, id, color, label) => {
2464
2523
  });
2465
2524
  };
2466
2525
 
2467
- // components/DraggableComponent/collision/directional/index.ts
2526
+ // lib/dnd/collision/directional/index.ts
2468
2527
  var distanceChange = "increasing";
2469
2528
  var directionalCollision = (input, previous) => {
2470
2529
  var _a;
@@ -2497,7 +2556,7 @@ var directionalCollision = (input, previous) => {
2497
2556
  return null;
2498
2557
  };
2499
2558
 
2500
- // components/DraggableComponent/collision/dynamic/get-direction.ts
2559
+ // lib/dnd/collision/dynamic/get-direction.ts
2501
2560
  init_react_import();
2502
2561
  var getDirection = (dragAxis, delta) => {
2503
2562
  if (dragAxis === "dynamic") {
@@ -2512,7 +2571,7 @@ var getDirection = (dragAxis, delta) => {
2512
2571
  return delta.y === 0 ? null : delta.y > 0 ? "down" : "up";
2513
2572
  };
2514
2573
 
2515
- // components/DraggableComponent/collision/dynamic/get-midpoint-impact.ts
2574
+ // lib/dnd/collision/dynamic/get-midpoint-impact.ts
2516
2575
  init_react_import();
2517
2576
  var getMidpointImpact = (dragShape, dropShape, direction, offsetMultiplier = 0) => {
2518
2577
  const dragRect = dragShape.boundingRectangle;
@@ -2531,7 +2590,7 @@ var getMidpointImpact = (dragShape, dropShape, direction, offsetMultiplier = 0)
2531
2590
  return dragRect.right - offset >= dropCenter.x;
2532
2591
  };
2533
2592
 
2534
- // components/DraggableComponent/collision/dynamic/track-movement-interval.ts
2593
+ // lib/dnd/collision/dynamic/track-movement-interval.ts
2535
2594
  init_react_import();
2536
2595
  import { Point } from "@dnd-kit/geometry";
2537
2596
  var INTERVAL_SENSITIVITY = 10;
@@ -2635,7 +2694,14 @@ var closestCorners = (input) => {
2635
2694
  };
2636
2695
  };
2637
2696
 
2638
- // components/DraggableComponent/collision/dynamic/index.ts
2697
+ // lib/dnd/collision/dynamic/store.ts
2698
+ init_react_import();
2699
+ import { createStore } from "zustand/vanilla";
2700
+ var collisionStore = createStore(() => ({
2701
+ fallbackEnabled: false
2702
+ }));
2703
+
2704
+ // lib/dnd/collision/dynamic/index.ts
2639
2705
  var flushNext = "";
2640
2706
  var createDynamicCollisionDetector = (dragAxis, midpointOffset = 0.05) => (input) => {
2641
2707
  var _a, _b, _c, _d, _e;
@@ -2647,6 +2713,7 @@ var createDynamicCollisionDetector = (dragAxis, midpointOffset = 0.05) => (input
2647
2713
  return null;
2648
2714
  }
2649
2715
  const { center: dragCenter } = dragShape;
2716
+ const { fallbackEnabled } = collisionStore.getState();
2650
2717
  const interval = trackMovementInterval(position.current, dragAxis);
2651
2718
  dragOperation.data = __spreadProps(__spreadValues({}, dragOperation.data), {
2652
2719
  direction: interval.direction
@@ -2692,7 +2759,7 @@ var createDynamicCollisionDetector = (dragAxis, midpointOffset = 0.05) => (input
2692
2759
  flushNext = "";
2693
2760
  return __spreadProps(__spreadValues({}, collision), { id: shouldFlushId ? "flush" : collision.id });
2694
2761
  }
2695
- if (((_c = dragOperation.source) == null ? void 0 : _c.id) !== droppable.id) {
2762
+ if (fallbackEnabled && ((_c = dragOperation.source) == null ? void 0 : _c.id) !== droppable.id) {
2696
2763
  const xAxisIntersection = dropShape.boundingRectangle.right > dragShape.boundingRectangle.left && dropShape.boundingRectangle.left < dragShape.boundingRectangle.right;
2697
2764
  const yAxisIntersection = dropShape.boundingRectangle.bottom > dragShape.boundingRectangle.top && dropShape.boundingRectangle.top < dragShape.boundingRectangle.bottom;
2698
2765
  if (dragAxis === "y" && xAxisIntersection || yAxisIntersection) {
@@ -2753,8 +2820,107 @@ function getDeepScrollPosition(element) {
2753
2820
  return totalScroll;
2754
2821
  }
2755
2822
 
2823
+ // components/DropZone/context.tsx
2824
+ init_react_import();
2825
+ import {
2826
+ createContext as createContext3,
2827
+ useCallback as useCallback6,
2828
+ useMemo as useMemo6,
2829
+ useState as useState12
2830
+ } from "react";
2831
+ import { createStore as createStore2 } from "zustand";
2832
+ import { Fragment as Fragment5, jsx as jsx20 } from "react/jsx-runtime";
2833
+ var dropZoneContext = createContext3(null);
2834
+ var ZoneStoreContext = createContext3(
2835
+ createStore2(() => ({
2836
+ zoneDepthIndex: {},
2837
+ nextZoneDepthIndex: {},
2838
+ areaDepthIndex: {},
2839
+ nextAreaDepthIndex: {},
2840
+ draggedItem: null,
2841
+ previewIndex: {}
2842
+ }))
2843
+ );
2844
+ var ZoneStoreProvider = ({
2845
+ children,
2846
+ store
2847
+ }) => {
2848
+ return /* @__PURE__ */ jsx20(ZoneStoreContext.Provider, { value: store, children });
2849
+ };
2850
+ var DropZoneProvider = ({
2851
+ children,
2852
+ value
2853
+ }) => {
2854
+ const [hoveringComponent, setHoveringComponent] = useState12();
2855
+ const [areasWithZones, setAreasWithZones] = useState12(
2856
+ {}
2857
+ );
2858
+ const [activeZones, setActiveZones] = useState12({});
2859
+ const { dispatch } = useAppContext();
2860
+ const registerZoneArea = useCallback6(
2861
+ (area) => {
2862
+ setAreasWithZones((latest) => __spreadProps(__spreadValues({}, latest), { [area]: true }));
2863
+ },
2864
+ [setAreasWithZones]
2865
+ );
2866
+ const registerZone = useCallback6(
2867
+ (zoneCompound) => {
2868
+ if (!dispatch) {
2869
+ return;
2870
+ }
2871
+ dispatch({
2872
+ type: "registerZone",
2873
+ zone: zoneCompound
2874
+ });
2875
+ setActiveZones((latest) => __spreadProps(__spreadValues({}, latest), { [zoneCompound]: true }));
2876
+ },
2877
+ [setActiveZones, dispatch]
2878
+ );
2879
+ const unregisterZone = useCallback6(
2880
+ (zoneCompound) => {
2881
+ if (!dispatch) {
2882
+ return;
2883
+ }
2884
+ dispatch({
2885
+ type: "unregisterZone",
2886
+ zone: zoneCompound
2887
+ });
2888
+ setActiveZones((latest) => __spreadProps(__spreadValues({}, latest), {
2889
+ [zoneCompound]: false
2890
+ }));
2891
+ },
2892
+ [setActiveZones, dispatch]
2893
+ );
2894
+ const memoValue = useMemo6(
2895
+ () => __spreadValues({
2896
+ hoveringComponent,
2897
+ setHoveringComponent,
2898
+ registerZoneArea,
2899
+ areasWithZones,
2900
+ registerZone,
2901
+ unregisterZone,
2902
+ activeZones
2903
+ }, value),
2904
+ [value, hoveringComponent, areasWithZones, activeZones]
2905
+ );
2906
+ return /* @__PURE__ */ jsx20(Fragment5, { children: memoValue && /* @__PURE__ */ jsx20(dropZoneContext.Provider, { value: memoValue, children }) });
2907
+ };
2908
+
2909
+ // lib/use-context-store.ts
2910
+ init_react_import();
2911
+ import { useContext as useContext4 } from "react";
2912
+ import { useStore } from "zustand";
2913
+ import { useShallow } from "zustand/react/shallow";
2914
+ function useContextStore(context, selector) {
2915
+ const store = useContext4(context);
2916
+ if (!store) {
2917
+ throw new Error("useContextStore must be used inside context");
2918
+ }
2919
+ return useStore(store, useShallow(selector));
2920
+ }
2921
+
2756
2922
  // components/DraggableComponent/index.tsx
2757
- import { jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
2923
+ import { jsx as jsx21, jsxs as jsxs9 } from "react/jsx-runtime";
2758
2924
  var getClassName16 = get_class_name_factory_default("DraggableComponent", styles_module_default11);
2759
2925
  var DEBUG2 = false;
2760
2926
  var space = 8;
@@ -2768,9 +2934,9 @@ var DefaultActionBar = ({
2768
2934
  }) => /* @__PURE__ */ jsxs9(ActionBar, { children: [
2769
2935
  /* @__PURE__ */ jsxs9(ActionBar.Group, { children: [
2770
2936
  parentAction,
2771
- label && /* @__PURE__ */ jsx19(ActionBar.Label, { label })
2937
+ label && /* @__PURE__ */ jsx21(ActionBar.Label, { label })
2772
2938
  ] }),
2773
- /* @__PURE__ */ jsx19(ActionBar.Group, { children })
2939
+ /* @__PURE__ */ jsx21(ActionBar.Group, { children })
2774
2940
  ] });
2775
2941
  var convertIdToSelector = (id, zoneCompound, data) => {
2776
2942
  const content = zoneCompound && data.zones && zoneCompound !== "default-zone" ? data.zones[zoneCompound] : data.content;
@@ -2805,10 +2971,9 @@ var DraggableComponent = ({
2805
2971
  iframe,
2806
2972
  state
2807
2973
  } = useAppContext();
2808
- const isModifierHeld = useModifierHeld("Alt");
2809
- const ctx = useContext2(dropZoneContext);
2974
+ const ctx = useContext5(dropZoneContext);
2810
2975
  const [localZones, setLocalZones] = useState13({});
2811
- const registerLocalZone = useCallback6(
2976
+ const registerLocalZone = useCallback7(
2812
2977
  (zoneCompound2, active) => {
2813
2978
  var _a;
2814
2979
  (_a = ctx == null ? void 0 : ctx.registerLocalZone) == null ? void 0 : _a.call(ctx, zoneCompound2, active);
@@ -2818,7 +2983,7 @@ var DraggableComponent = ({
2818
2983
  },
2819
2984
  [setLocalZones]
2820
2985
  );
2821
- const unregisterLocalZone = useCallback6(
2986
+ const unregisterLocalZone = useCallback7(
2822
2987
  (zoneCompound2) => {
2823
2988
  var _a;
2824
2989
  (_a = ctx == null ? void 0 : ctx.unregisterLocalZone) == null ? void 0 : _a.call(ctx, zoneCompound2);
@@ -2833,7 +2998,7 @@ var DraggableComponent = ({
2833
2998
  const containsActiveZone = Object.values(localZones).filter(Boolean).length > 0;
2834
2999
  const { path = [] } = ctx || {};
2835
3000
  const [canDrag, setCanDrag] = useState13(false);
2836
- useEffect11(() => {
3001
+ useEffect10(() => {
2837
3002
  var _a;
2838
3003
  const item = getItem({ index, zone: zoneCompound }, state.data);
2839
3004
  if (item) {
@@ -2843,7 +3008,10 @@ var DraggableComponent = ({
2843
3008
  setCanDrag((_a = perms.drag) != null ? _a : true);
2844
3009
  }
2845
3010
  }, [state, index, zoneCompound, getPermissions]);
2846
- const userIsDragging = !!(ctx == null ? void 0 : ctx.draggedItem);
3011
+ const userIsDragging = useContextStore(
3012
+ ZoneStoreContext,
3013
+ (s) => !!s.draggedItem
3014
+ );
2847
3015
  const canCollide = canDrag || userIsDragging;
2848
3016
  const disabled = !isEnabled || !canCollide;
2849
3017
  const [dragAxis, setDragAxis] = useState13(userDragAxis || autoDragAxis);
@@ -2872,8 +3040,8 @@ var DraggableComponent = ({
2872
3040
  }
2873
3041
  });
2874
3042
  const thisIsDragging = status === "dragging";
2875
- const ref = useRef3(null);
2876
- const refSetter = useCallback6(
3043
+ const ref = useRef2(null);
3044
+ const refSetter = useCallback7(
2877
3045
  (el) => {
2878
3046
  sortableRef(el);
2879
3047
  if (el) {
@@ -2883,13 +3051,13 @@ var DraggableComponent = ({
2883
3051
  [sortableRef]
2884
3052
  );
2885
3053
  const [portalEl, setPortalEl] = useState13();
2886
- useEffect11(() => {
3054
+ useEffect10(() => {
2887
3055
  var _a, _b, _c;
2888
3056
  setPortalEl(
2889
3057
  iframe.enabled ? (_a = ref.current) == null ? void 0 : _a.ownerDocument.body : (_c = (_b = ref.current) == null ? void 0 : _b.closest("[data-puck-preview]")) != null ? _c : document.body
2890
3058
  );
2891
3059
  }, [iframe.enabled, ref.current]);
2892
- const getStyle = useCallback6(() => {
3060
+ const getStyle = useCallback7(() => {
2893
3061
  var _a, _b, _c;
2894
3062
  if (!ref.current) return;
2895
3063
  const rect = ref.current.getBoundingClientRect();
@@ -2910,10 +3078,10 @@ var DraggableComponent = ({
2910
3078
  return style2;
2911
3079
  }, [ref.current]);
2912
3080
  const [style, setStyle] = useState13();
2913
- const sync = useCallback6(() => {
3081
+ const sync = useCallback7(() => {
2914
3082
  setStyle(getStyle());
2915
3083
  }, [ref.current, iframe]);
2916
- useEffect11(() => {
3084
+ useEffect10(() => {
2917
3085
  if (ref.current) {
2918
3086
  const observer = new ResizeObserver(sync);
2919
3087
  observer.observe(ref.current);
@@ -2922,20 +3090,22 @@ var DraggableComponent = ({
2922
3090
  };
2923
3091
  }
2924
3092
  }, [ref.current]);
2925
- useEffect11(() => {
2926
- ctx == null ? void 0 : ctx.registerPath({
2927
- index,
2928
- zone: zoneCompound
2929
- });
3093
+ useEffect10(() => {
3094
+ if (isSelected) {
3095
+ ctx == null ? void 0 : ctx.registerPath({
3096
+ index,
3097
+ zone: zoneCompound
3098
+ });
3099
+ }
2930
3100
  }, [isSelected]);
2931
- const CustomActionBar = useMemo5(
3101
+ const CustomActionBar = useMemo7(
2932
3102
  () => overrides.actionBar || DefaultActionBar,
2933
3103
  [overrides.actionBar]
2934
3104
  );
2935
3105
  const permissions = getPermissions({
2936
3106
  item: selectedItem
2937
3107
  });
2938
- const onClick = useCallback6(
3108
+ const onClick = useCallback7(
2939
3109
  (e) => {
2940
3110
  e.stopPropagation();
2941
3111
  dispatch({
@@ -2947,7 +3117,7 @@ var DraggableComponent = ({
2947
3117
  },
2948
3118
  [index, zoneCompound, id]
2949
3119
  );
2950
- const onSelectParent = useCallback6(() => {
3120
+ const onSelectParent = useCallback7(() => {
2951
3121
  if (!(ctx == null ? void 0 : ctx.areaId)) {
2952
3122
  return;
2953
3123
  }
@@ -2965,14 +3135,14 @@ var DraggableComponent = ({
2965
3135
  }
2966
3136
  });
2967
3137
  }, [ctx, path]);
2968
- const onDuplicate = useCallback6(() => {
3138
+ const onDuplicate = useCallback7(() => {
2969
3139
  dispatch({
2970
3140
  type: "duplicate",
2971
3141
  sourceIndex: index,
2972
3142
  sourceZone: zoneCompound
2973
3143
  });
2974
3144
  }, [index, zoneCompound]);
2975
- const onDelete = useCallback6(() => {
3145
+ const onDelete = useCallback7(() => {
2976
3146
  dispatch({
2977
3147
  type: "remove",
2978
3148
  index,
@@ -2981,7 +3151,7 @@ var DraggableComponent = ({
2981
3151
  }, [index, zoneCompound]);
2982
3152
  const [hover, setHover] = useState13(false);
2983
3153
  const indicativeHover = (ctx == null ? void 0 : ctx.hoveringComponent) === id;
2984
- useEffect11(() => {
3154
+ useEffect10(() => {
2985
3155
  if (!ref.current) {
2986
3156
  return;
2987
3157
  }
@@ -3031,7 +3201,7 @@ var DraggableComponent = ({
3031
3201
  thisIsDragging,
3032
3202
  inDroppableZone
3033
3203
  ]);
3034
- useEffect11(() => {
3204
+ useEffect10(() => {
3035
3205
  if (ref.current && disabled) {
3036
3206
  ref.current.setAttribute("data-puck-disabled", "");
3037
3207
  return () => {
@@ -3041,7 +3211,7 @@ var DraggableComponent = ({
3041
3211
  }
3042
3212
  }, [disabled, ref]);
3043
3213
  const [isVisible, setIsVisible] = useState13(false);
3044
- useEffect11(() => {
3214
+ useEffect10(() => {
3045
3215
  sync();
3046
3216
  if ((isSelected || hover || indicativeHover) && !userIsDragging) {
3047
3217
  setIsVisible(true);
@@ -3049,7 +3219,7 @@ var DraggableComponent = ({
3049
3219
  setIsVisible(false);
3050
3220
  }
3051
3221
  }, [isSelected, hover, indicativeHover, iframe, state.data, userIsDragging]);
3052
- const syncActionsPosition = useCallback6(
3222
+ const syncActionsPosition = useCallback7(
3053
3223
  (el) => {
3054
3224
  if (el) {
3055
3225
  const view = el.ownerDocument.defaultView;
@@ -3066,7 +3236,7 @@ var DraggableComponent = ({
3066
3236
  },
3067
3237
  [zoomConfig]
3068
3238
  );
3069
- useEffect11(() => {
3239
+ useEffect10(() => {
3070
3240
  if (userDragAxis) {
3071
3241
  setDragAxis(userDragAxis);
3072
3242
  return;
@@ -3080,7 +3250,7 @@ var DraggableComponent = ({
3080
3250
  }
3081
3251
  setDragAxis(autoDragAxis);
3082
3252
  }, [ref, userDragAxis, autoDragAxis]);
3083
- const parentAction = (ctx == null ? void 0 : ctx.areaId) && (ctx == null ? void 0 : ctx.areaId) !== "root" && /* @__PURE__ */ jsx19(ActionBar.Action, { onClick: onSelectParent, label: "Select parent", children: /* @__PURE__ */ jsx19(CornerLeftUp, { size: 16 }) });
3253
+ const parentAction = (ctx == null ? void 0 : ctx.areaId) && (ctx == null ? void 0 : ctx.areaId) !== "root" && /* @__PURE__ */ jsx21(ActionBar.Action, { onClick: onSelectParent, label: "Select parent", children: /* @__PURE__ */ jsx21(CornerLeftUp, { size: 16 }) });
3084
3254
  return /* @__PURE__ */ jsxs9(
3085
3255
  DropZoneProvider,
3086
3256
  {
@@ -3101,22 +3271,21 @@ var DraggableComponent = ({
3101
3271
  className: getClassName16({
3102
3272
  isSelected,
3103
3273
  isDragging: thisIsDragging,
3104
- isModifierHeld,
3105
3274
  hover: hover || indicativeHover
3106
3275
  }),
3107
3276
  style: __spreadValues({}, style),
3108
3277
  "data-puck-overlay": true,
3109
3278
  children: [
3110
3279
  debug,
3111
- isLoading && /* @__PURE__ */ jsx19("div", { className: getClassName16("loadingOverlay"), children: /* @__PURE__ */ jsx19(Loader, {}) }),
3112
- /* @__PURE__ */ jsx19(
3280
+ isLoading && /* @__PURE__ */ jsx21("div", { className: getClassName16("loadingOverlay"), children: /* @__PURE__ */ jsx21(Loader, {}) }),
3281
+ /* @__PURE__ */ jsx21(
3113
3282
  "div",
3114
3283
  {
3115
3284
  className: getClassName16("actionsOverlay"),
3116
3285
  style: {
3117
3286
  top: actionsOverlayTop / zoomConfig.zoom
3118
3287
  },
3119
- children: /* @__PURE__ */ jsx19(
3288
+ children: /* @__PURE__ */ jsx21(
3120
3289
  "div",
3121
3290
  {
3122
3291
  className: getClassName16("actions"),
@@ -3134,8 +3303,8 @@ var DraggableComponent = ({
3134
3303
  parentAction,
3135
3304
  label: DEBUG2 ? id : label,
3136
3305
  children: [
3137
- permissions.duplicate && /* @__PURE__ */ jsx19(ActionBar.Action, { onClick: onDuplicate, label: "Duplicate", children: /* @__PURE__ */ jsx19(Copy, { size: 16 }) }),
3138
- permissions.delete && /* @__PURE__ */ jsx19(ActionBar.Action, { onClick: onDelete, label: "Delete", children: /* @__PURE__ */ jsx19(Trash, { size: 16 }) })
3306
+ permissions.duplicate && /* @__PURE__ */ jsx21(ActionBar.Action, { onClick: onDuplicate, label: "Duplicate", children: /* @__PURE__ */ jsx21(Copy, { size: 16 }) }),
3307
+ permissions.delete && /* @__PURE__ */ jsx21(ActionBar.Action, { onClick: onDelete, label: "Delete", children: /* @__PURE__ */ jsx21(Trash, { size: 16 }) })
3139
3308
  ]
3140
3309
  }
3141
3310
  )
@@ -3143,7 +3312,7 @@ var DraggableComponent = ({
3143
3312
  )
3144
3313
  }
3145
3314
  ),
3146
- /* @__PURE__ */ jsx19("div", { className: getClassName16("overlay") })
3315
+ /* @__PURE__ */ jsx21("div", { className: getClassName16("overlay") })
3147
3316
  ]
3148
3317
  }
3149
3318
  ),
@@ -3159,98 +3328,26 @@ var DraggableComponent = ({
3159
3328
  init_react_import();
3160
3329
  var styles_module_default12 = { "DropZone": "_DropZone_kmkdc_1", "DropZone--isActive": "_DropZone--isActive_kmkdc_10", "DropZone--hasChildren": "_DropZone--hasChildren_kmkdc_14", "DropZone--userIsDragging": "_DropZone--userIsDragging_kmkdc_22", "DropZone--isAreaSelected": "_DropZone--isAreaSelected_kmkdc_26", "DropZone--hoveringOverArea": "_DropZone--hoveringOverArea_kmkdc_27", "DropZone--isRootZone": "_DropZone--isRootZone_kmkdc_27", "DropZone--isDestination": "_DropZone--isDestination_kmkdc_37", "DropZone-item": "_DropZone-item_kmkdc_49", "DropZone-hitbox": "_DropZone-hitbox_kmkdc_53", "DropZone--isEnabled": "_DropZone--isEnabled_kmkdc_61", "DropZone--isAnimating": "_DropZone--isAnimating_kmkdc_70" };
3161
3330
 
3162
- // components/DropZone/context.tsx
3163
- init_react_import();
3164
- import {
3165
- createContext as createContext2,
3166
- useCallback as useCallback7,
3167
- useMemo as useMemo6,
3168
- useState as useState14
3169
- } from "react";
3170
- import { Fragment as Fragment5, jsx as jsx20 } from "react/jsx-runtime";
3171
- var dropZoneContext = createContext2(null);
3172
- var DropZoneProvider = ({
3173
- children,
3174
- value
3175
- }) => {
3176
- const [hoveringComponent, setHoveringComponent] = useState14();
3177
- const [areasWithZones, setAreasWithZones] = useState14(
3178
- {}
3179
- );
3180
- const [activeZones, setActiveZones] = useState14({});
3181
- const { dispatch = null } = value ? value : {};
3182
- const registerZoneArea = useCallback7(
3183
- (area) => {
3184
- setAreasWithZones((latest) => __spreadProps(__spreadValues({}, latest), { [area]: true }));
3185
- },
3186
- [setAreasWithZones]
3187
- );
3188
- const registerZone = useCallback7(
3189
- (zoneCompound) => {
3190
- if (!dispatch) {
3191
- return;
3192
- }
3193
- dispatch({
3194
- type: "registerZone",
3195
- zone: zoneCompound
3196
- });
3197
- setActiveZones((latest) => __spreadProps(__spreadValues({}, latest), { [zoneCompound]: true }));
3198
- },
3199
- [setActiveZones, dispatch]
3200
- );
3201
- const unregisterZone = useCallback7(
3202
- (zoneCompound) => {
3203
- if (!dispatch) {
3204
- return;
3205
- }
3206
- dispatch({
3207
- type: "unregisterZone",
3208
- zone: zoneCompound
3209
- });
3210
- setActiveZones((latest) => __spreadProps(__spreadValues({}, latest), {
3211
- [zoneCompound]: false
3212
- }));
3213
- },
3214
- [setActiveZones, dispatch]
3215
- );
3216
- const memoValue = useMemo6(
3217
- () => __spreadValues({
3218
- hoveringComponent,
3219
- setHoveringComponent,
3220
- registerZoneArea,
3221
- areasWithZones,
3222
- registerZone,
3223
- unregisterZone,
3224
- activeZones
3225
- }, value),
3226
- [value, hoveringComponent, areasWithZones, activeZones]
3227
- );
3228
- return /* @__PURE__ */ jsx20(Fragment5, { children: memoValue && /* @__PURE__ */ jsx20(dropZoneContext.Provider, { value: memoValue, children }) });
3229
- };
3230
-
3231
- // lib/insert.ts
3232
- init_react_import();
3233
- var insert = (list, index, item) => {
3234
- const result = Array.from(list);
3235
- result.splice(index, 0, item);
3236
- return result;
3237
- };
3238
-
3239
- // components/DropZone/use-min-empty-height.ts
3331
+ // components/DropZone/lib/use-min-empty-height.ts
3240
3332
  init_react_import();
3241
- import { useEffect as useEffect12, useState as useState15 } from "react";
3333
+ import { useEffect as useEffect11, useState as useState14 } from "react";
3242
3334
  var useMinEmptyHeight = ({
3243
- draggedItem,
3244
3335
  zoneCompound,
3245
3336
  userMinEmptyHeight,
3246
3337
  ref
3247
3338
  }) => {
3248
- const [prevHeight, setPrevHeight] = useState15(0);
3249
- const [isAnimating, setIsAnimating] = useState15(false);
3250
- useEffect12(() => {
3339
+ const [prevHeight, setPrevHeight] = useState14(0);
3340
+ const [isAnimating, setIsAnimating] = useState14(false);
3341
+ const { draggedItem, isZone } = useContextStore(ZoneStoreContext, (s) => {
3342
+ var _a, _b;
3343
+ return {
3344
+ draggedItem: ((_a = s.draggedItem) == null ? void 0 : _a.data.zone) === zoneCompound ? s.draggedItem : null,
3345
+ isZone: ((_b = s.draggedItem) == null ? void 0 : _b.data.zone) === zoneCompound
3346
+ };
3347
+ });
3348
+ useEffect11(() => {
3251
3349
  if (draggedItem && ref.current) {
3252
- const componentData = draggedItem.data;
3253
- if (componentData.zone === zoneCompound) {
3350
+ if (isZone) {
3254
3351
  const rect = ref.current.getBoundingClientRect();
3255
3352
  setPrevHeight(rect.height);
3256
3353
  setIsAnimating(true);
@@ -3280,13 +3377,128 @@ function assignRefs(refs, node) {
3280
3377
  });
3281
3378
  }
3282
3379
 
3283
- // components/DropZone/index.tsx
3284
- import { Fragment as Fragment6, jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
3285
- var getClassName17 = get_class_name_factory_default("DropZone", styles_module_default12);
3286
- var DEBUG3 = false;
3380
+ // components/DropZone/lib/use-content-with-preview.ts
3381
+ init_react_import();
3382
+ import { useEffect as useEffect12, useState as useState15 } from "react";
3383
+
3384
+ // lib/dnd/use-rendered-callback.ts
3385
+ init_react_import();
3386
+ import { useDragDropManager } from "@dnd-kit/react";
3387
+ import { useCallback as useCallback8 } from "react";
3388
+ function useRenderedCallback(callback, deps) {
3389
+ const manager = useDragDropManager();
3390
+ return useCallback8(
3391
+ (...args) => __async(this, null, function* () {
3392
+ yield manager == null ? void 0 : manager.renderer.rendering;
3393
+ return callback(...args);
3394
+ }),
3395
+ [...deps, manager]
3396
+ );
3397
+ }
3398
+
3399
+ // lib/insert.ts
3400
+ init_react_import();
3401
+ var insert = (list, index, item) => {
3402
+ const result = Array.from(list);
3403
+ result.splice(index, 0, item);
3404
+ return result;
3405
+ };
3406
+
3407
+ // components/DropZone/lib/use-content-with-preview.ts
3408
+ var useContentWithPreview = (content, zoneCompound) => {
3409
+ const { draggedItemId, preview, previewExists } = useContextStore(
3410
+ ZoneStoreContext,
3411
+ (s) => {
3412
+ var _a;
3413
+ return {
3414
+ draggedItemId: (_a = s.draggedItem) == null ? void 0 : _a.id,
3415
+ preview: s.previewIndex[zoneCompound],
3416
+ previewExists: Object.keys(s.previewIndex || {}).length > 0
3417
+ };
3418
+ }
3419
+ );
3420
+ const [contentWithPreview, setContentWithPreview] = useState15(content);
3421
+ const updateContent = useRenderedCallback(
3422
+ (content2, preview2) => {
3423
+ if (preview2) {
3424
+ if (preview2.type === "insert") {
3425
+ setContentWithPreview(
3426
+ insert(
3427
+ content2.filter((item) => item.props.id !== preview2.props.id),
3428
+ preview2.index,
3429
+ {
3430
+ type: "preview",
3431
+ props: { id: preview2.props.id }
3432
+ }
3433
+ )
3434
+ );
3435
+ } else {
3436
+ setContentWithPreview(
3437
+ insert(
3438
+ content2.filter((item) => item.props.id !== preview2.props.id),
3439
+ preview2.index,
3440
+ {
3441
+ type: preview2.componentType,
3442
+ props: preview2.props
3443
+ }
3444
+ )
3445
+ );
3446
+ }
3447
+ } else {
3448
+ setContentWithPreview(
3449
+ previewExists ? content2.filter((item) => item.props.id !== draggedItemId) : content2
3450
+ );
3451
+ }
3452
+ },
3453
+ [draggedItemId, previewExists]
3454
+ );
3455
+ useEffect12(() => {
3456
+ updateContent(content, preview);
3457
+ }, [content, preview]);
3458
+ return contentWithPreview;
3459
+ };
3460
+
3461
+ // components/DropZone/lib/use-drag-axis.ts
3462
+ init_react_import();
3463
+ import { useCallback as useCallback9, useEffect as useEffect13, useState as useState16 } from "react";
3287
3464
  var GRID_DRAG_AXIS = "dynamic";
3288
3465
  var FLEX_ROW_DRAG_AXIS = "x";
3289
3466
  var DEFAULT_DRAG_AXIS = "y";
3467
+ var useDragAxis = (ref, collisionAxis) => {
3468
+ const { status } = useAppContext();
3469
+ const [dragAxis, setDragAxis] = useState16(
3470
+ collisionAxis || DEFAULT_DRAG_AXIS
3471
+ );
3472
+ const calculateDragAxis = useCallback9(() => {
3473
+ if (ref.current) {
3474
+ const computedStyle = window.getComputedStyle(ref.current);
3475
+ if (computedStyle.display === "grid") {
3476
+ setDragAxis(GRID_DRAG_AXIS);
3477
+ } else if (computedStyle.display === "flex" && computedStyle.flexDirection === "row") {
3478
+ setDragAxis(FLEX_ROW_DRAG_AXIS);
3479
+ } else {
3480
+ setDragAxis(DEFAULT_DRAG_AXIS);
3481
+ }
3482
+ }
3483
+ }, [ref.current]);
3484
+ useEffect13(() => {
3485
+ const onViewportChange = () => {
3486
+ calculateDragAxis();
3487
+ };
3488
+ window.addEventListener("viewportchange", onViewportChange);
3489
+ return () => {
3490
+ window.removeEventListener("viewportchange", onViewportChange);
3491
+ };
3492
+ }, []);
3493
+ useEffect13(calculateDragAxis, [status, collisionAxis]);
3494
+ return [dragAxis, calculateDragAxis];
3495
+ };
3496
+
3497
+ // components/DropZone/index.tsx
3498
+ import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs10 } from "react/jsx-runtime";
3499
+ var getClassName17 = get_class_name_factory_default("DropZone", styles_module_default12);
3500
+ var getRandomColor = () => `#${Math.floor(Math.random() * 16777215).toString(16)}`;
3501
+ var RENDER_DEBUG = false;
3290
3502
  var DropZoneEdit = forwardRef3(
3291
3503
  function DropZoneEdit2({
3292
3504
  zone,
@@ -3298,31 +3510,50 @@ var DropZoneEdit = forwardRef3(
3298
3510
  collisionAxis
3299
3511
  }, userRef) {
3300
3512
  const appContext2 = useAppContext();
3301
- const ctx = useContext3(dropZoneContext);
3513
+ const ctx = useContext6(dropZoneContext);
3302
3514
  const {
3303
3515
  // These all need setting via context
3304
3516
  data,
3305
3517
  config,
3306
3518
  areaId,
3307
- draggedItem,
3308
3519
  registerZoneArea,
3309
3520
  depth,
3310
3521
  registerLocalZone,
3311
3522
  unregisterLocalZone,
3312
- deepestZone = rootDroppableId,
3313
- deepestArea,
3314
- nextDeepestArea,
3315
3523
  path = [],
3316
3524
  activeZones
3317
3525
  } = ctx;
3318
- const { itemSelector } = appContext2.state.ui;
3319
3526
  let zoneCompound = rootDroppableId;
3320
- useEffect13(() => {
3527
+ if (areaId) {
3528
+ if (zone !== rootDroppableId) {
3529
+ zoneCompound = `${areaId}:${zone}`;
3530
+ }
3531
+ }
3532
+ const isRootZone = zoneCompound === rootDroppableId || zone === rootDroppableId || areaId === "root";
3533
+ const {
3534
+ isDeepestZone,
3535
+ inNextDeepestArea,
3536
+ draggedComponentType,
3537
+ userIsDragging,
3538
+ preview
3539
+ } = useContextStore(ZoneStoreContext, (s) => {
3540
+ var _a, _b, _c;
3541
+ return {
3542
+ isDeepestZone: (_a = s.zoneDepthIndex[zoneCompound]) != null ? _a : false,
3543
+ inNextDeepestArea: s.nextAreaDepthIndex[areaId || ""],
3544
+ draggedItemId: (_b = s.draggedItem) == null ? void 0 : _b.id,
3545
+ draggedComponentType: (_c = s.draggedItem) == null ? void 0 : _c.data.componentType,
3546
+ userIsDragging: !!s.draggedItem,
3547
+ preview: s.previewIndex[zoneCompound]
3548
+ };
3549
+ });
3550
+ const { itemSelector } = appContext2.state.ui;
3551
+ useEffect14(() => {
3321
3552
  if (areaId && registerZoneArea) {
3322
3553
  registerZoneArea(areaId);
3323
3554
  }
3324
3555
  }, [areaId]);
3325
- useEffect13(() => {
3556
+ useEffect14(() => {
3326
3557
  if (ctx == null ? void 0 : ctx.registerZone) {
3327
3558
  ctx == null ? void 0 : ctx.registerZone(zoneCompound);
3328
3559
  }
@@ -3332,25 +3563,18 @@ var DropZoneEdit = forwardRef3(
3332
3563
  }
3333
3564
  };
3334
3565
  }, []);
3335
- if (areaId) {
3336
- if (zone !== rootDroppableId) {
3337
- zoneCompound = `${areaId}:${zone}`;
3338
- }
3339
- }
3340
- const content = useMemo7(() => {
3566
+ const content = useMemo8(() => {
3341
3567
  if (areaId && zone !== rootDroppableId) {
3342
3568
  return setupZone(data, zoneCompound).zones[zoneCompound];
3343
3569
  }
3344
3570
  return data.content || [];
3345
3571
  }, [data, zoneCompound]);
3346
- const ref = useRef4(null);
3347
- const acceptsTarget = useCallback8(
3348
- (target) => {
3349
- if (!target) {
3572
+ const ref = useRef3(null);
3573
+ const acceptsTarget = useCallback10(
3574
+ (componentType) => {
3575
+ if (!componentType) {
3350
3576
  return true;
3351
3577
  }
3352
- const data2 = target.data;
3353
- const { componentType } = data2;
3354
3578
  if (disallow) {
3355
3579
  const defaultedAllow = allow || [];
3356
3580
  const filteredDisallow = (disallow || []).filter(
@@ -3368,49 +3592,26 @@ var DropZoneEdit = forwardRef3(
3368
3592
  },
3369
3593
  [allow, disallow]
3370
3594
  );
3371
- useEffect13(() => {
3595
+ useEffect14(() => {
3372
3596
  if (registerLocalZone) {
3373
- registerLocalZone(zoneCompound, acceptsTarget(draggedItem));
3597
+ registerLocalZone(zoneCompound, acceptsTarget(draggedComponentType));
3374
3598
  }
3375
3599
  return () => {
3376
3600
  if (unregisterLocalZone) {
3377
3601
  unregisterLocalZone(zoneCompound);
3378
3602
  }
3379
3603
  };
3380
- }, [draggedItem, zoneCompound]);
3381
- const isRootZone = zoneCompound === rootDroppableId || zone === rootDroppableId || areaId === "root";
3382
- const hoveringOverArea = nextDeepestArea ? nextDeepestArea === areaId : isRootZone;
3383
- const userIsDragging = !!draggedItem;
3604
+ }, [draggedComponentType, zoneCompound]);
3605
+ const hoveringOverArea = inNextDeepestArea || isRootZone;
3384
3606
  let isEnabled = true;
3385
- if (draggedItem) {
3386
- isEnabled = deepestZone === zoneCompound;
3607
+ if (userIsDragging) {
3608
+ isEnabled = isDeepestZone;
3387
3609
  }
3388
3610
  if (isEnabled) {
3389
- isEnabled = acceptsTarget(draggedItem);
3390
- }
3391
- const preview = useContext3(previewContext);
3392
- const previewInZone = (preview == null ? void 0 : preview.zone) === zoneCompound;
3393
- const contentWithPreview = useMemo7(() => {
3394
- let contentWithPreview2 = preview ? content.filter((item) => item.props.id !== preview.props.id) : content;
3395
- if (previewInZone) {
3396
- contentWithPreview2 = content.filter(
3397
- (item) => item.props.id !== preview.props.id
3398
- );
3399
- if (preview.type === "insert") {
3400
- contentWithPreview2 = insert(contentWithPreview2, preview.index, {
3401
- type: "preview",
3402
- props: { id: preview.props.id }
3403
- });
3404
- } else {
3405
- contentWithPreview2 = insert(contentWithPreview2, preview.index, {
3406
- type: preview.componentType,
3407
- props: preview.props
3408
- });
3409
- }
3410
- }
3411
- return contentWithPreview2;
3412
- }, [preview, content]);
3413
- const isDropEnabled = isEnabled && (previewInZone ? contentWithPreview.length === 1 : contentWithPreview.length === 0);
3611
+ isEnabled = acceptsTarget(draggedComponentType);
3612
+ }
3613
+ const contentWithPreview = useContentWithPreview(content, zoneCompound);
3614
+ const isDropEnabled = isEnabled && (preview ? contentWithPreview.length === 1 : contentWithPreview.length === 0);
3414
3615
  const droppableConfig = {
3415
3616
  id: zoneCompound,
3416
3617
  collisionPriority: isEnabled ? depth : 0,
@@ -3420,45 +3621,20 @@ var DropZoneEdit = forwardRef3(
3420
3621
  data: {
3421
3622
  areaId,
3422
3623
  depth,
3423
- isDroppableTarget: acceptsTarget(draggedItem),
3624
+ isDroppableTarget: acceptsTarget(draggedComponentType),
3424
3625
  path
3425
3626
  }
3426
3627
  };
3427
3628
  const { ref: dropRef } = useDroppableSafe(droppableConfig);
3428
3629
  const selectedItem = itemSelector ? getItem(itemSelector, data) : null;
3429
3630
  const isAreaSelected = selectedItem && areaId === selectedItem.props.id;
3430
- const [dragAxis, setDragAxis] = useState16(
3431
- collisionAxis || DEFAULT_DRAG_AXIS
3432
- );
3433
- const calculateDragAxis = useCallback8(() => {
3434
- if (ref.current) {
3435
- const computedStyle = window.getComputedStyle(ref.current);
3436
- if (computedStyle.display === "grid") {
3437
- setDragAxis(GRID_DRAG_AXIS);
3438
- } else if (computedStyle.display === "flex" && computedStyle.flexDirection === "row") {
3439
- setDragAxis(FLEX_ROW_DRAG_AXIS);
3440
- } else {
3441
- setDragAxis(DEFAULT_DRAG_AXIS);
3442
- }
3443
- }
3444
- }, [ref.current]);
3445
- useEffect13(calculateDragAxis, [appContext2.status, collisionAxis]);
3446
- useEffect13(() => {
3447
- const onViewportChange = () => {
3448
- calculateDragAxis();
3449
- };
3450
- window.addEventListener("viewportchange", onViewportChange);
3451
- return () => {
3452
- window.removeEventListener("viewportchange", onViewportChange);
3453
- };
3454
- }, []);
3631
+ const [dragAxis] = useDragAxis(ref, collisionAxis);
3455
3632
  const [minEmptyHeight, isAnimating] = useMinEmptyHeight({
3456
- draggedItem,
3457
3633
  zoneCompound,
3458
3634
  userMinEmptyHeight,
3459
3635
  ref
3460
3636
  });
3461
- return /* @__PURE__ */ jsxs10(
3637
+ return /* @__PURE__ */ jsx22(
3462
3638
  "div",
3463
3639
  {
3464
3640
  className: `${getClassName17({
@@ -3478,87 +3654,92 @@ var DropZoneEdit = forwardRef3(
3478
3654
  "data-puck-dropzone": zoneCompound,
3479
3655
  "data-puck-dnd": zoneCompound,
3480
3656
  style: __spreadProps(__spreadValues({}, style), {
3481
- "--min-empty-height": `${minEmptyHeight}px`
3657
+ "--min-empty-height": `${minEmptyHeight}px`,
3658
+ backgroundColor: RENDER_DEBUG ? getRandomColor() : void 0
3482
3659
  }),
3483
- children: [
3484
- isRootZone && DEBUG3 && /* @__PURE__ */ jsxs10("div", { "data-puck-component": true, children: [
3485
- /* @__PURE__ */ jsx21("p", { children: deepestZone || rootDroppableId }),
3486
- /* @__PURE__ */ jsx21("p", { children: deepestArea || "No area" })
3487
- ] }),
3488
- contentWithPreview.map((item, i) => {
3489
- var _a, _b, _c, _d, _e;
3490
- const componentId = item.props.id;
3491
- const puckProps = {
3492
- renderDropZone: DropZone,
3493
- isEditing: true,
3494
- dragRef: null
3495
- };
3496
- const defaultedProps = __spreadProps(__spreadValues(__spreadValues({}, (_a = config.components[item.type]) == null ? void 0 : _a.defaultProps), item.props), {
3497
- puck: puckProps,
3498
- editMode: true
3499
- // DEPRECATED
3500
- });
3501
- const isSelected = (selectedItem == null ? void 0 : selectedItem.props.id) === componentId || false;
3502
- let Render2 = config.components[item.type] ? config.components[item.type].render : () => /* @__PURE__ */ jsxs10("div", { style: { padding: 48, textAlign: "center" }, children: [
3503
- "No configuration for ",
3504
- item.type
3505
- ] });
3506
- const componentConfig = config.components[item.type];
3507
- let componentType = item.type;
3508
- let label = (_b = componentConfig == null ? void 0 : componentConfig["label"]) != null ? _b : item.type.toString();
3509
- if (item.type === "preview") {
3510
- let Preview3 = function() {
3511
- return /* @__PURE__ */ jsx21(DrawerItemInner, { name: label });
3512
- };
3513
- var Preview2 = Preview3;
3514
- componentType = preview.componentType;
3515
- label = (_d = (_c = config.components[componentType]) == null ? void 0 : _c.label) != null ? _d : preview.componentType;
3516
- Render2 = Preview3;
3517
- }
3518
- return /* @__PURE__ */ jsx21(
3519
- DropZoneProvider,
3520
- {
3521
- value: __spreadProps(__spreadValues({}, ctx), { path: [...path, zoneCompound] }),
3522
- children: /* @__PURE__ */ jsx21(
3523
- DraggableComponent,
3524
- {
3525
- id: componentId,
3526
- componentType,
3527
- zoneCompound,
3528
- depth: depth + 1,
3529
- index: i,
3530
- isLoading: ((_e = appContext2.componentState[componentId]) == null ? void 0 : _e.loadingCount) > 0,
3531
- isSelected,
3532
- label,
3533
- isEnabled,
3534
- autoDragAxis: dragAxis,
3535
- userDragAxis: collisionAxis,
3536
- inDroppableZone: acceptsTarget(draggedItem),
3537
- children: (dragRef) => (componentConfig == null ? void 0 : componentConfig.inline) ? /* @__PURE__ */ jsx21(
3538
- Render2,
3539
- __spreadProps(__spreadValues({}, defaultedProps), {
3540
- puck: __spreadProps(__spreadValues({}, defaultedProps.puck), {
3541
- dragRef
3542
- })
3660
+ children: contentWithPreview.map((item, i) => {
3661
+ var _a, _b, _c, _d, _e;
3662
+ const componentId = item.props.id;
3663
+ const puckProps = {
3664
+ renderDropZone: DropZone,
3665
+ isEditing: true,
3666
+ dragRef: null
3667
+ };
3668
+ const defaultedProps = __spreadProps(__spreadValues(__spreadValues({}, (_a = config.components[item.type]) == null ? void 0 : _a.defaultProps), item.props), {
3669
+ puck: puckProps,
3670
+ editMode: true
3671
+ // DEPRECATED
3672
+ });
3673
+ const isSelected = (selectedItem == null ? void 0 : selectedItem.props.id) === componentId || false;
3674
+ let Render2 = config.components[item.type] && item.type !== "preview" ? config.components[item.type].render : () => /* @__PURE__ */ jsxs10("div", { style: { padding: 48, textAlign: "center" }, children: [
3675
+ "No configuration for ",
3676
+ item.type
3677
+ ] });
3678
+ const componentConfig = config.components[item.type];
3679
+ let componentType = item.type;
3680
+ let label = (_b = componentConfig == null ? void 0 : componentConfig["label"]) != null ? _b : item.type.toString();
3681
+ if (item.type === "preview" && preview) {
3682
+ let Preview4 = function() {
3683
+ return /* @__PURE__ */ jsx22(DrawerItemInner, { name: label, children: appContext2.overrides.componentItem });
3684
+ };
3685
+ var Preview3 = Preview4;
3686
+ componentType = preview.componentType;
3687
+ label = (_d = (_c = config.components[componentType]) == null ? void 0 : _c.label) != null ? _d : preview.componentType;
3688
+ Render2 = Preview4;
3689
+ }
3690
+ return /* @__PURE__ */ jsx22(
3691
+ DropZoneProvider,
3692
+ {
3693
+ value: __spreadProps(__spreadValues({}, ctx), { path: [...path, zoneCompound] }),
3694
+ children: /* @__PURE__ */ jsx22(
3695
+ DraggableComponent,
3696
+ {
3697
+ id: componentId,
3698
+ componentType,
3699
+ zoneCompound,
3700
+ depth: depth + 1,
3701
+ index: i,
3702
+ isLoading: ((_e = appContext2.componentState[componentId]) == null ? void 0 : _e.loadingCount) > 0,
3703
+ isSelected,
3704
+ label,
3705
+ isEnabled,
3706
+ autoDragAxis: dragAxis,
3707
+ userDragAxis: collisionAxis,
3708
+ inDroppableZone: acceptsTarget(draggedComponentType),
3709
+ children: (dragRef) => (componentConfig == null ? void 0 : componentConfig.inline) ? /* @__PURE__ */ jsx22(
3710
+ Render2,
3711
+ __spreadProps(__spreadValues({}, defaultedProps), {
3712
+ puck: __spreadProps(__spreadValues({}, defaultedProps.puck), {
3713
+ dragRef
3543
3714
  })
3544
- ) : /* @__PURE__ */ jsx21("div", { ref: dragRef, children: /* @__PURE__ */ jsx21(Render2, __spreadValues({}, defaultedProps)) })
3545
- }
3546
- )
3547
- },
3548
- componentId
3549
- );
3550
- })
3551
- ]
3715
+ })
3716
+ ) : /* @__PURE__ */ jsx22("div", { ref: dragRef, children: /* @__PURE__ */ jsx22(Render2, __spreadValues({}, defaultedProps)) })
3717
+ }
3718
+ )
3719
+ },
3720
+ componentId
3721
+ );
3722
+ })
3552
3723
  }
3553
3724
  );
3554
3725
  }
3555
3726
  );
3556
3727
  var DropZoneRender = forwardRef3(
3557
3728
  function DropZoneRender2({ className, style, zone }, ref) {
3558
- const ctx = useContext3(dropZoneContext);
3729
+ const ctx = useContext6(dropZoneContext);
3559
3730
  const { data, areaId = "root", config } = ctx || {};
3560
3731
  let zoneCompound = rootDroppableId;
3561
3732
  let content = (data == null ? void 0 : data.content) || [];
3733
+ useEffect14(() => {
3734
+ if (ctx == null ? void 0 : ctx.registerZone) {
3735
+ ctx == null ? void 0 : ctx.registerZone(zoneCompound);
3736
+ }
3737
+ return () => {
3738
+ if (ctx == null ? void 0 : ctx.unregisterZone) {
3739
+ ctx == null ? void 0 : ctx.unregisterZone(zoneCompound);
3740
+ }
3741
+ };
3742
+ }, []);
3562
3743
  if (!data || !config) {
3563
3744
  return null;
3564
3745
  }
@@ -3566,10 +3747,10 @@ var DropZoneRender = forwardRef3(
3566
3747
  zoneCompound = `${areaId}:${zone}`;
3567
3748
  content = setupZone(data, zoneCompound).zones[zoneCompound];
3568
3749
  }
3569
- return /* @__PURE__ */ jsx21("div", { className, style, ref, children: content.map((item) => {
3750
+ return /* @__PURE__ */ jsx22("div", { className, style, ref, children: content.map((item) => {
3570
3751
  const Component = config.components[item.type];
3571
3752
  if (Component) {
3572
- return /* @__PURE__ */ jsx21(
3753
+ return /* @__PURE__ */ jsx22(
3573
3754
  DropZoneProvider,
3574
3755
  {
3575
3756
  value: {
@@ -3579,7 +3760,7 @@ var DropZoneRender = forwardRef3(
3579
3760
  depth: 1,
3580
3761
  path: []
3581
3762
  },
3582
- children: /* @__PURE__ */ jsx21(
3763
+ children: /* @__PURE__ */ jsx22(
3583
3764
  Component.render,
3584
3765
  __spreadProps(__spreadValues({}, item.props), {
3585
3766
  puck: { renderDropZone: DropZoneRender2 }
@@ -3595,11 +3776,11 @@ var DropZoneRender = forwardRef3(
3595
3776
  );
3596
3777
  var DropZone = forwardRef3(
3597
3778
  function DropZone2(props, ref) {
3598
- const ctx = useContext3(dropZoneContext);
3779
+ const ctx = useContext6(dropZoneContext);
3599
3780
  if ((ctx == null ? void 0 : ctx.mode) === "edit") {
3600
- return /* @__PURE__ */ jsx21(Fragment6, { children: /* @__PURE__ */ jsx21(DropZoneEdit, __spreadProps(__spreadValues({}, props), { ref })) });
3781
+ return /* @__PURE__ */ jsx22(Fragment6, { children: /* @__PURE__ */ jsx22(DropZoneEdit, __spreadProps(__spreadValues({}, props), { ref })) });
3601
3782
  }
3602
- return /* @__PURE__ */ jsx21(Fragment6, { children: /* @__PURE__ */ jsx21(DropZoneRender, __spreadProps(__spreadValues({}, props), { ref })) });
3783
+ return /* @__PURE__ */ jsx22(Fragment6, { children: /* @__PURE__ */ jsx22(DropZoneRender, __spreadProps(__spreadValues({}, props), { ref })) });
3603
3784
  }
3604
3785
  );
3605
3786
 
@@ -3615,7 +3796,7 @@ var getZoneId = (zoneCompound) => {
3615
3796
  return [rootDroppableId, zoneCompound];
3616
3797
  };
3617
3798
 
3618
- // components/DragDropContext/NestedDroppablePlugin.ts
3799
+ // lib/dnd/NestedDroppablePlugin.ts
3619
3800
  init_react_import();
3620
3801
  import { Plugin } from "@dnd-kit/abstract";
3621
3802
  import { effects } from "@dnd-kit/state";
@@ -3657,7 +3838,7 @@ var getFrame = () => {
3657
3838
  return (frameEl == null ? void 0 : frameEl.ownerDocument) || document;
3658
3839
  };
3659
3840
 
3660
- // components/DragDropContext/NestedDroppablePlugin.ts
3841
+ // lib/dnd/NestedDroppablePlugin.ts
3661
3842
  var depthSort = (candidates) => {
3662
3843
  return candidates.sort((a, b) => {
3663
3844
  const aData = a.data;
@@ -3772,9 +3953,7 @@ var findDeepestCandidate = (position, manager, ownerDocument) => {
3772
3953
  area: null
3773
3954
  };
3774
3955
  };
3775
- var createNestedDroppablePlugin = ({
3776
- onChange
3777
- }) => class NestedDroppablePlugin extends Plugin {
3956
+ var createNestedDroppablePlugin = ({ onChange }, id) => class NestedDroppablePlugin extends Plugin {
3778
3957
  constructor(manager, options) {
3779
3958
  super(manager);
3780
3959
  if (typeof window === "undefined") {
@@ -3788,10 +3967,17 @@ var createNestedDroppablePlugin = ({
3788
3967
  };
3789
3968
  const target = event.originalTarget || event.target;
3790
3969
  const ownerDocument = target == null ? void 0 : target.ownerDocument;
3791
- onChange(
3792
- findDeepestCandidate(position, manager, ownerDocument),
3793
- manager
3970
+ const elements = document.elementsFromPoint(
3971
+ event.clientX,
3972
+ event.clientY
3794
3973
  );
3974
+ const overEl = elements.some((el) => el.id === id);
3975
+ if (overEl) {
3976
+ onChange(
3977
+ findDeepestCandidate(position, manager, ownerDocument),
3978
+ manager
3979
+ );
3980
+ }
3795
3981
  };
3796
3982
  const handleMoveThrottled = throttle(handleMove, 50);
3797
3983
  const handlePointerMove = (event) => {
@@ -4208,7 +4394,7 @@ var insertComponent = (componentType, zone, index, {
4208
4394
  import { useDebouncedCallback as useDebouncedCallback2 } from "use-debounce";
4209
4395
  import { isElement as isElement2 } from "@dnd-kit/dom/utilities";
4210
4396
 
4211
- // components/DragDropContext/PointerSensor.ts
4397
+ // lib/dnd/PointerSensor.ts
4212
4398
  init_react_import();
4213
4399
  import { batch, effect } from "@dnd-kit/state";
4214
4400
  import { Sensor, configurator } from "@dnd-kit/abstract";
@@ -4479,13 +4665,15 @@ function patchWindow(window2) {
4479
4665
  }
4480
4666
 
4481
4667
  // components/DragDropContext/index.tsx
4482
- import { jsx as jsx22 } from "react/jsx-runtime";
4483
- var dragListenerContext = createContext3({
4668
+ import { createStore as createStore3 } from "zustand";
4669
+ import { jsx as jsx23 } from "react/jsx-runtime";
4670
+ var DEBUG3 = false;
4671
+ var dragListenerContext = createContext4({
4484
4672
  dragListeners: {}
4485
4673
  });
4486
4674
  function useDragListener(type, fn, deps = []) {
4487
- const { setDragListeners } = useContext4(dragListenerContext);
4488
- useEffect14(() => {
4675
+ const { setDragListeners } = useContext7(dragListenerContext);
4676
+ useEffect15(() => {
4489
4677
  if (setDragListeners) {
4490
4678
  setDragListeners((old) => __spreadProps(__spreadValues({}, old), {
4491
4679
  [type]: [...old[type] || [], fn]
@@ -4493,78 +4681,145 @@ function useDragListener(type, fn, deps = []) {
4493
4681
  }
4494
4682
  }, deps);
4495
4683
  }
4496
- var previewContext = createContext3(null);
4497
4684
  var AREA_CHANGE_DEBOUNCE_MS = 100;
4685
+ var useTempDisableFallback = (timeout3) => {
4686
+ const lastFallbackDisable = useRef4(null);
4687
+ return useCallback11((manager) => {
4688
+ collisionStore.setState({ fallbackEnabled: false });
4689
+ const fallbackId = generateId();
4690
+ lastFallbackDisable.current = fallbackId;
4691
+ setTimeout(() => {
4692
+ if (lastFallbackDisable.current === fallbackId) {
4693
+ collisionStore.setState({ fallbackEnabled: true });
4694
+ manager.collisionObserver.forceUpdate(true);
4695
+ }
4696
+ }, timeout3);
4697
+ }, []);
4698
+ };
4498
4699
  var DragDropContextClient = ({
4499
4700
  children,
4500
4701
  disableAutoScroll
4501
4702
  }) => {
4502
4703
  const { state, config, dispatch, resolveData } = useAppContext();
4503
- const [preview, setPreview] = useState17(null);
4504
- const previewRef = useRef5(null);
4704
+ const id = useId();
4505
4705
  const { data } = state;
4506
- const [deepest, setDeepest] = useState17(null);
4507
- const [nextDeepest, setNextDeepest] = useState17(null);
4508
- const deepestRef = useRef5(deepest);
4509
- const debouncedParamsRef = useRef5(null);
4510
- const setDeepestAndCollide = useCallback9(
4706
+ const debouncedParamsRef = useRef4(null);
4707
+ const tempDisableFallback = useTempDisableFallback(100);
4708
+ const [zoneStore] = useState17(
4709
+ () => createStore3(() => ({
4710
+ zoneDepthIndex: {},
4711
+ nextZoneDepthIndex: {},
4712
+ areaDepthIndex: {},
4713
+ nextAreaDepthIndex: {},
4714
+ draggedItem: null,
4715
+ previewIndex: {}
4716
+ }))
4717
+ );
4718
+ const getChanged2 = useCallback11(
4719
+ (params, id2) => {
4720
+ const { zoneDepthIndex = {}, areaDepthIndex = {} } = zoneStore.getState() || {};
4721
+ const stateHasZone = Object.keys(zoneDepthIndex).length > 0;
4722
+ const stateHasArea = Object.keys(areaDepthIndex).length > 0;
4723
+ let zoneChanged = false;
4724
+ let areaChanged = false;
4725
+ if (params.zone && !zoneDepthIndex[params.zone]) {
4726
+ zoneChanged = true;
4727
+ } else if (!params.zone && stateHasZone) {
4728
+ zoneChanged = true;
4729
+ }
4730
+ if (params.area && !areaDepthIndex[params.area]) {
4731
+ areaChanged = true;
4732
+ } else if (!params.area && stateHasArea) {
4733
+ areaChanged = true;
4734
+ }
4735
+ return { zoneChanged, areaChanged };
4736
+ },
4737
+ [zoneStore]
4738
+ );
4739
+ const setDeepestAndCollide = useCallback11(
4511
4740
  (params, manager) => {
4512
- setDeepest(params);
4741
+ const { zoneChanged, areaChanged } = getChanged2(params, id);
4742
+ if (!zoneChanged && !areaChanged) return;
4743
+ zoneStore.setState({
4744
+ zoneDepthIndex: params.zone ? { [params.zone]: true } : {},
4745
+ areaDepthIndex: params.area ? { [params.area]: true } : {}
4746
+ });
4747
+ tempDisableFallback(manager);
4513
4748
  setTimeout(() => {
4514
4749
  manager.collisionObserver.forceUpdate(true);
4515
4750
  }, 50);
4516
4751
  debouncedParamsRef.current = null;
4517
4752
  },
4518
- []
4753
+ [zoneStore]
4519
4754
  );
4520
4755
  const setDeepestDb = useDebouncedCallback2(
4521
4756
  setDeepestAndCollide,
4522
4757
  AREA_CHANGE_DEBOUNCE_MS
4523
4758
  );
4524
- useEffect14(() => {
4525
- deepestRef.current = deepest;
4526
- }, [deepest]);
4527
4759
  const cancelDb = () => {
4528
4760
  setDeepestDb.cancel();
4529
4761
  debouncedParamsRef.current = null;
4530
4762
  };
4763
+ useEffect15(() => {
4764
+ if (DEBUG3) {
4765
+ zoneStore.subscribe(
4766
+ (s) => {
4767
+ var _a, _b;
4768
+ return console.log(
4769
+ s.previewIndex,
4770
+ (_a = Object.entries(s.zoneDepthIndex || {})[0]) == null ? void 0 : _a[0],
4771
+ (_b = Object.entries(s.areaDepthIndex || {})[0]) == null ? void 0 : _b[0]
4772
+ );
4773
+ }
4774
+ );
4775
+ }
4776
+ }, []);
4531
4777
  const [plugins] = useState17(() => [
4532
4778
  ...disableAutoScroll ? defaultPreset.plugins.filter((plugin) => plugin !== AutoScroller) : defaultPreset.plugins,
4533
- createNestedDroppablePlugin({
4534
- onChange: (params, manager) => {
4535
- const lastParams = deepestRef.current;
4536
- const areaChanged = params.area !== (lastParams == null ? void 0 : lastParams.area);
4537
- const zoneChanged = params.zone !== (lastParams == null ? void 0 : lastParams.zone);
4538
- const isDragging = manager.dragOperation.status.dragging;
4539
- if (areaChanged || zoneChanged) {
4540
- setNextDeepest(params);
4541
- }
4542
- if (params.zone !== "void" && (lastParams == null ? void 0 : lastParams.zone) === "void") {
4543
- setDeepest(params);
4544
- manager.collisionObserver.forceUpdate(true);
4545
- return;
4546
- }
4547
- if (areaChanged) {
4548
- if (isDragging) {
4549
- const debouncedParams = debouncedParamsRef.current;
4550
- const isSameParams = debouncedParams && debouncedParams.area === params.area && debouncedParams.zone === params.zone;
4551
- if (!isSameParams) {
4779
+ createNestedDroppablePlugin(
4780
+ {
4781
+ onChange: (params, manager) => {
4782
+ const state2 = zoneStore.getState();
4783
+ const { zoneChanged, areaChanged } = getChanged2(params, id);
4784
+ const isDragging = manager.dragOperation.status.dragging;
4785
+ if (areaChanged || zoneChanged) {
4786
+ let nextZoneDepthIndex = {};
4787
+ let nextAreaDepthIndex = {};
4788
+ if (params.zone) {
4789
+ nextZoneDepthIndex = { [params.zone]: true };
4790
+ }
4791
+ if (params.area) {
4792
+ nextAreaDepthIndex = { [params.area]: true };
4793
+ }
4794
+ zoneStore.setState({ nextZoneDepthIndex, nextAreaDepthIndex });
4795
+ }
4796
+ if (params.zone !== "void" && (state2 == null ? void 0 : state2.zoneDepthIndex["void"])) {
4797
+ setDeepestAndCollide(params, manager);
4798
+ return;
4799
+ }
4800
+ if (areaChanged) {
4801
+ if (isDragging) {
4802
+ const debouncedParams = debouncedParamsRef.current;
4803
+ const isSameParams = debouncedParams && debouncedParams.area === params.area && debouncedParams.zone === params.zone;
4804
+ if (!isSameParams) {
4805
+ cancelDb();
4806
+ setDeepestDb(params, manager);
4807
+ debouncedParamsRef.current = params;
4808
+ }
4809
+ } else {
4552
4810
  cancelDb();
4553
- setDeepestDb(params, manager);
4554
- debouncedParamsRef.current = params;
4811
+ setDeepestAndCollide(params, manager);
4555
4812
  }
4556
- } else {
4557
- cancelDb();
4813
+ return;
4814
+ }
4815
+ if (zoneChanged) {
4558
4816
  setDeepestAndCollide(params, manager);
4559
4817
  }
4560
- return;
4818
+ cancelDb();
4561
4819
  }
4562
- if (zoneChanged) {
4563
- setDeepestAndCollide(params, manager);
4564
- }
4565
- cancelDb();
4566
- }
4567
- })
4820
+ },
4821
+ id
4822
+ )
4568
4823
  ]);
4569
4824
  const [sensors] = useState17(() => [
4570
4825
  PointerSensor.configure({
@@ -4585,11 +4840,10 @@ var DragDropContextClient = ({
4585
4840
  }
4586
4841
  })
4587
4842
  ]);
4588
- const [draggedItem, setDraggedItem] = useState17();
4589
4843
  const [dragListeners, setDragListeners] = useState17({});
4590
4844
  const [pathData, setPathData] = useState17();
4591
- const dragMode = useRef5(null);
4592
- const registerPath = useCallback9(
4845
+ const dragMode = useRef4(null);
4846
+ const registerPath = useCallback11(
4593
4847
  (selector) => {
4594
4848
  const item = getItem(selector, data);
4595
4849
  if (!item) {
@@ -4611,41 +4865,41 @@ var DragDropContextClient = ({
4611
4865
  },
4612
4866
  [data, setPathData]
4613
4867
  );
4614
- const initialSelector = useRef5(void 0);
4615
- return /* @__PURE__ */ jsx22(
4868
+ const initialSelector = useRef4(void 0);
4869
+ return /* @__PURE__ */ jsx23("div", { id, children: /* @__PURE__ */ jsx23(
4616
4870
  dragListenerContext.Provider,
4617
4871
  {
4618
4872
  value: {
4619
4873
  dragListeners,
4620
4874
  setDragListeners
4621
4875
  },
4622
- children: /* @__PURE__ */ jsx22(previewContext.Provider, { value: preview, children: /* @__PURE__ */ jsx22(
4876
+ children: /* @__PURE__ */ jsx23(
4623
4877
  DragDropProvider2,
4624
4878
  {
4625
4879
  plugins,
4626
4880
  sensors,
4627
4881
  onDragEnd: (event, manager) => {
4882
+ var _a;
4628
4883
  const { source, target } = event.operation;
4629
- deepestRef.current = null;
4630
4884
  if (!source) {
4631
- setDraggedItem(null);
4885
+ zoneStore.setState({ draggedItem: null });
4632
4886
  return;
4633
4887
  }
4634
4888
  const { zone, index } = source.data;
4635
- const thisPreview = previewRef.current ? __spreadValues({}, previewRef.current) : null;
4636
- previewRef.current = null;
4889
+ const { previewIndex = {} } = zoneStore.getState() || {};
4890
+ const thisPreview = ((_a = previewIndex[zone]) == null ? void 0 : _a.props.id) === source.id ? previewIndex[zone] : null;
4637
4891
  setTimeout(() => {
4638
- var _a, _b;
4639
- setDraggedItem(null);
4892
+ var _a2, _b;
4893
+ zoneStore.setState({ draggedItem: null });
4640
4894
  if (event.canceled || (target == null ? void 0 : target.type) === "void") {
4641
- setPreview(null);
4642
- (_a = dragListeners.dragend) == null ? void 0 : _a.forEach((fn) => {
4895
+ zoneStore.setState({ previewIndex: {} });
4896
+ (_a2 = dragListeners.dragend) == null ? void 0 : _a2.forEach((fn) => {
4643
4897
  fn(event, manager);
4644
4898
  });
4645
4899
  return;
4646
4900
  }
4647
4901
  if (thisPreview) {
4648
- setPreview(null);
4902
+ zoneStore.setState({ previewIndex: {} });
4649
4903
  if (thisPreview.type === "insert") {
4650
4904
  insertComponent(
4651
4905
  thisPreview.componentType,
@@ -4680,8 +4934,9 @@ var DragDropContextClient = ({
4680
4934
  }, 250);
4681
4935
  },
4682
4936
  onDragOver: (event, manager) => {
4683
- var _a, _b, _c, _d;
4937
+ var _a, _b, _c, _d, _e;
4684
4938
  event.preventDefault();
4939
+ const draggedItem = (_a = zoneStore.getState()) == null ? void 0 : _a.draggedItem;
4685
4940
  if (!draggedItem) return;
4686
4941
  cancelDb();
4687
4942
  const { source, target } = event.operation;
@@ -4697,7 +4952,7 @@ var DragDropContextClient = ({
4697
4952
  const targetData = target.data;
4698
4953
  targetZone = targetData.zone;
4699
4954
  targetIndex = targetData.index;
4700
- const collisionData = (_b = (_a = manager.dragOperation.data) == null ? void 0 : _a.collisionMap) == null ? void 0 : _b[targetId];
4955
+ const collisionData = (_c = (_b = manager.dragOperation.data) == null ? void 0 : _b.collisionMap) == null ? void 0 : _c[targetId];
4701
4956
  const collisionPosition = (collisionData == null ? void 0 : collisionData.direction) === "up" || (collisionData == null ? void 0 : collisionData.direction) === "left" ? "before" : "after";
4702
4957
  if (targetIndex >= sourceIndex && sourceZone === targetZone) {
4703
4958
  targetIndex = targetIndex - 1;
@@ -4709,23 +4964,26 @@ var DragDropContextClient = ({
4709
4964
  targetZone = target.id.toString();
4710
4965
  targetIndex = 0;
4711
4966
  }
4712
- if (targetId === sourceId || ((_c = pathData == null ? void 0 : pathData[target.id]) == null ? void 0 : _c.path.find((path) => {
4967
+ if (targetId === sourceId || ((_d = pathData == null ? void 0 : pathData[target.id]) == null ? void 0 : _d.path.find((path) => {
4713
4968
  const [pathId] = path.split(":");
4714
4969
  return pathId === sourceId;
4715
4970
  }))) {
4716
4971
  return;
4717
4972
  }
4718
4973
  if (dragMode.current === "new") {
4719
- previewRef.current = {
4720
- componentType: sourceData.componentType,
4721
- type: "insert",
4722
- index: targetIndex,
4723
- zone: targetZone,
4724
- props: {
4725
- id: source.id.toString()
4974
+ zoneStore.setState({
4975
+ previewIndex: {
4976
+ [targetZone]: {
4977
+ componentType: sourceData.componentType,
4978
+ type: "insert",
4979
+ index: targetIndex,
4980
+ zone: targetZone,
4981
+ props: {
4982
+ id: source.id.toString()
4983
+ }
4984
+ }
4726
4985
  }
4727
- };
4728
- setPreview(previewRef.current);
4986
+ });
4729
4987
  } else {
4730
4988
  if (!initialSelector.current) {
4731
4989
  initialSelector.current = {
@@ -4735,17 +4993,20 @@ var DragDropContextClient = ({
4735
4993
  }
4736
4994
  const item = getItem(initialSelector.current, data);
4737
4995
  if (item) {
4738
- previewRef.current = {
4739
- componentType: sourceData.componentType,
4740
- type: "move",
4741
- index: targetIndex,
4742
- zone: targetZone,
4743
- props: item.props
4744
- };
4745
- setPreview(previewRef.current);
4996
+ zoneStore.setState({
4997
+ previewIndex: {
4998
+ [targetZone]: {
4999
+ componentType: sourceData.componentType,
5000
+ type: "move",
5001
+ index: targetIndex,
5002
+ zone: targetZone,
5003
+ props: item.props
5004
+ }
5005
+ }
5006
+ });
4746
5007
  }
4747
5008
  }
4748
- (_d = dragListeners.dragover) == null ? void 0 : _d.forEach((fn) => {
5009
+ (_e = dragListeners.dragover) == null ? void 0 : _e.forEach((fn) => {
4749
5010
  fn(event, manager);
4750
5011
  });
4751
5012
  },
@@ -4755,46 +5016,61 @@ var DragDropContextClient = ({
4755
5016
  type: "setUi",
4756
5017
  ui: { itemSelector: null, isDragging: true }
4757
5018
  });
5019
+ const { source } = event.operation;
5020
+ if (source && source.type !== "void") {
5021
+ const sourceData = source.data;
5022
+ const item = getItem(
5023
+ {
5024
+ zone: sourceData.zone,
5025
+ index: sourceData.index
5026
+ },
5027
+ data
5028
+ );
5029
+ if (item) {
5030
+ zoneStore.setState({
5031
+ previewIndex: {
5032
+ [sourceData.zone]: {
5033
+ componentType: sourceData.componentType,
5034
+ type: "move",
5035
+ index: sourceData.index,
5036
+ zone: sourceData.zone,
5037
+ props: item.props
5038
+ }
5039
+ }
5040
+ });
5041
+ }
5042
+ }
4758
5043
  (_a = dragListeners.dragstart) == null ? void 0 : _a.forEach((fn) => {
4759
5044
  fn(event, manager);
4760
5045
  });
4761
5046
  },
4762
5047
  onBeforeDragStart: (event) => {
4763
5048
  var _a;
4764
- if (draggedItem) {
4765
- console.warn("New drag started before previous drag cleaned up");
4766
- }
4767
5049
  const isNewComponent = ((_a = event.operation.source) == null ? void 0 : _a.data.type) === "drawer";
4768
5050
  dragMode.current = isNewComponent ? "new" : "existing";
4769
5051
  initialSelector.current = void 0;
4770
- setDraggedItem(event.operation.source);
5052
+ zoneStore.setState({ draggedItem: event.operation.source });
4771
5053
  },
4772
- children: /* @__PURE__ */ jsx22(
5054
+ children: /* @__PURE__ */ jsx23(ZoneStoreProvider, { store: zoneStore, children: /* @__PURE__ */ jsx23(
4773
5055
  DropZoneProvider,
4774
5056
  {
4775
5057
  value: {
4776
5058
  data,
4777
5059
  config,
4778
- dispatch,
4779
- draggedItem,
4780
5060
  mode: "edit",
4781
5061
  areaId: "root",
4782
5062
  depth: 0,
4783
5063
  registerPath,
4784
5064
  pathData,
4785
- deepestZone: deepest == null ? void 0 : deepest.zone,
4786
- deepestArea: deepest == null ? void 0 : deepest.area,
4787
- nextDeepestZone: nextDeepest == null ? void 0 : nextDeepest.zone,
4788
- nextDeepestArea: nextDeepest == null ? void 0 : nextDeepest.area,
4789
5065
  path: []
4790
5066
  },
4791
5067
  children
4792
5068
  }
4793
- )
5069
+ ) })
4794
5070
  }
4795
- ) })
5071
+ )
4796
5072
  }
4797
- );
5073
+ ) });
4798
5074
  };
4799
5075
  var DragDropContext = ({
4800
5076
  children,
@@ -4804,11 +5080,11 @@ var DragDropContext = ({
4804
5080
  if (status === "LOADING") {
4805
5081
  return children;
4806
5082
  }
4807
- return /* @__PURE__ */ jsx22(DragDropContextClient, { disableAutoScroll, children });
5083
+ return /* @__PURE__ */ jsx23(DragDropContextClient, { disableAutoScroll, children });
4808
5084
  };
4809
5085
 
4810
5086
  // components/Drawer/index.tsx
4811
- import { jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
5087
+ import { jsx as jsx24, jsxs as jsxs11 } from "react/jsx-runtime";
4812
5088
  var getClassName18 = get_class_name_factory_default("Drawer", styles_module_default10);
4813
5089
  var getClassNameItem2 = get_class_name_factory_default("DrawerItem", styles_module_default10);
4814
5090
  var DrawerItemInner = ({
@@ -4818,11 +5094,11 @@ var DrawerItemInner = ({
4818
5094
  dragRef,
4819
5095
  isDragDisabled
4820
5096
  }) => {
4821
- const CustomInner = useMemo8(
4822
- () => children || (({ children: children2 }) => /* @__PURE__ */ jsx23("div", { className: getClassNameItem2("default"), children: children2 })),
5097
+ const CustomInner = useMemo9(
5098
+ () => children || (({ children: children2 }) => /* @__PURE__ */ jsx24("div", { className: getClassNameItem2("default"), children: children2 })),
4823
5099
  [children]
4824
5100
  );
4825
- return /* @__PURE__ */ jsx23(
5101
+ return /* @__PURE__ */ jsx24(
4826
5102
  "div",
4827
5103
  {
4828
5104
  className: getClassNameItem2({ disabled: isDragDisabled }),
@@ -4830,9 +5106,9 @@ var DrawerItemInner = ({
4830
5106
  onMouseDown: (e) => e.preventDefault(),
4831
5107
  "data-testid": dragRef ? `drawer-item:${name}` : "",
4832
5108
  "data-puck-drawer-item": true,
4833
- children: /* @__PURE__ */ jsx23(CustomInner, { name, children: /* @__PURE__ */ jsx23("div", { className: getClassNameItem2("draggableWrapper"), children: /* @__PURE__ */ jsxs11("div", { className: getClassNameItem2("draggable"), children: [
4834
- /* @__PURE__ */ jsx23("div", { className: getClassNameItem2("name"), children: label != null ? label : name }),
4835
- /* @__PURE__ */ jsx23("div", { className: getClassNameItem2("icon"), children: /* @__PURE__ */ jsx23(DragIcon, {}) })
5109
+ children: /* @__PURE__ */ jsx24(CustomInner, { name, children: /* @__PURE__ */ jsx24("div", { className: getClassNameItem2("draggableWrapper"), children: /* @__PURE__ */ jsxs11("div", { className: getClassNameItem2("draggable"), children: [
5110
+ /* @__PURE__ */ jsx24("div", { className: getClassNameItem2("name"), children: label != null ? label : name }),
5111
+ /* @__PURE__ */ jsx24("div", { className: getClassNameItem2("icon"), children: /* @__PURE__ */ jsx24(DragIcon, {}) })
4836
5112
  ] }) }) })
4837
5113
  }
4838
5114
  );
@@ -4850,8 +5126,8 @@ var DrawerItemDraggable = ({
4850
5126
  disabled: isDragDisabled
4851
5127
  });
4852
5128
  return /* @__PURE__ */ jsxs11("div", { className: getClassName18("draggable"), children: [
4853
- /* @__PURE__ */ jsx23("div", { className: getClassName18("draggableBg"), children: /* @__PURE__ */ jsx23(DrawerItemInner, { name, label, children }) }),
4854
- /* @__PURE__ */ jsx23("div", { className: getClassName18("draggableFg"), children: /* @__PURE__ */ jsx23(
5129
+ /* @__PURE__ */ jsx24("div", { className: getClassName18("draggableBg"), children: /* @__PURE__ */ jsx24(DrawerItemInner, { name, label, children }) }),
5130
+ /* @__PURE__ */ jsx24("div", { className: getClassName18("draggableFg"), children: /* @__PURE__ */ jsx24(
4855
5131
  DrawerItemInner,
4856
5132
  {
4857
5133
  name,
@@ -4885,7 +5161,7 @@ var DrawerItem = ({
4885
5161
  },
4886
5162
  [resolvedId]
4887
5163
  );
4888
- return /* @__PURE__ */ jsx23("div", { children: /* @__PURE__ */ jsx23(
5164
+ return /* @__PURE__ */ jsx24("div", { children: /* @__PURE__ */ jsx24(
4889
5165
  DrawerItemDraggable,
4890
5166
  {
4891
5167
  name,
@@ -4918,7 +5194,7 @@ var Drawer = ({
4918
5194
  collisionPriority: 0
4919
5195
  // Never collide with this, but we use it so NestedDroppablePlugin respects the Drawer
4920
5196
  });
4921
- return /* @__PURE__ */ jsx23(
5197
+ return /* @__PURE__ */ jsx24(
4922
5198
  "div",
4923
5199
  {
4924
5200
  className: getClassName18(),
@@ -4934,9 +5210,9 @@ Drawer.Item = DrawerItem;
4934
5210
  // components/Puck/index.tsx
4935
5211
  init_react_import();
4936
5212
  import {
4937
- useCallback as useCallback14,
4938
- useEffect as useEffect22,
4939
- useMemo as useMemo17,
5213
+ useCallback as useCallback17,
5214
+ useEffect as useEffect23,
5215
+ useMemo as useMemo18,
4940
5216
  useReducer,
4941
5217
  useState as useState26
4942
5218
  } from "react";
@@ -4950,7 +5226,7 @@ var styles_module_default13 = { "SidebarSection": "_SidebarSection_125qe_1", "Si
4950
5226
 
4951
5227
  // lib/use-breadcrumbs.ts
4952
5228
  init_react_import();
4953
- import { useContext as useContext5, useMemo as useMemo9 } from "react";
5229
+ import { useContext as useContext8, useMemo as useMemo10 } from "react";
4954
5230
  var convertPathDataToBreadcrumbs = (selectedItem, pathData, data) => {
4955
5231
  const id = selectedItem ? selectedItem == null ? void 0 : selectedItem.props.id : "";
4956
5232
  const currentPathData = pathData && id && pathData[id] ? __spreadValues({}, pathData[id]) : { label: "Page", path: [] };
@@ -5000,8 +5276,8 @@ var useBreadcrumbs = (renderCount) => {
5000
5276
  state: { data },
5001
5277
  selectedItem
5002
5278
  } = useAppContext();
5003
- const dzContext = useContext5(dropZoneContext);
5004
- return useMemo9(() => {
5279
+ const dzContext = useContext8(dropZoneContext);
5280
+ return useMemo10(() => {
5005
5281
  const breadcrumbs = convertPathDataToBreadcrumbs(
5006
5282
  selectedItem,
5007
5283
  dzContext == null ? void 0 : dzContext.pathData,
@@ -5015,7 +5291,7 @@ var useBreadcrumbs = (renderCount) => {
5015
5291
  };
5016
5292
 
5017
5293
  // components/SidebarSection/index.tsx
5018
- import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
5294
+ import { jsx as jsx25, jsxs as jsxs12 } from "react/jsx-runtime";
5019
5295
  var getClassName19 = get_class_name_factory_default("SidebarSection", styles_module_default13);
5020
5296
  var SidebarSection = ({
5021
5297
  children,
@@ -5034,9 +5310,9 @@ var SidebarSection = ({
5034
5310
  className: getClassName19({ noBorderTop, noPadding }),
5035
5311
  style: { background },
5036
5312
  children: [
5037
- /* @__PURE__ */ jsx24("div", { className: getClassName19("title"), children: /* @__PURE__ */ jsxs12("div", { className: getClassName19("breadcrumbs"), children: [
5313
+ /* @__PURE__ */ jsx25("div", { className: getClassName19("title"), children: /* @__PURE__ */ jsxs12("div", { className: getClassName19("breadcrumbs"), children: [
5038
5314
  showBreadcrumbs ? breadcrumbs.map((breadcrumb, i) => /* @__PURE__ */ jsxs12("div", { className: getClassName19("breadcrumb"), children: [
5039
- /* @__PURE__ */ jsx24(
5315
+ /* @__PURE__ */ jsx25(
5040
5316
  "button",
5041
5317
  {
5042
5318
  type: "button",
@@ -5045,12 +5321,12 @@ var SidebarSection = ({
5045
5321
  children: breadcrumb.label
5046
5322
  }
5047
5323
  ),
5048
- /* @__PURE__ */ jsx24(ChevronRight, { size: 16 })
5324
+ /* @__PURE__ */ jsx25(ChevronRight, { size: 16 })
5049
5325
  ] }, i)) : null,
5050
- /* @__PURE__ */ jsx24("div", { className: getClassName19("heading"), children: /* @__PURE__ */ jsx24(Heading, { rank: "2", size: "xs", children: title }) })
5326
+ /* @__PURE__ */ jsx25("div", { className: getClassName19("heading"), children: /* @__PURE__ */ jsx25(Heading, { rank: "2", size: "xs", children: title }) })
5051
5327
  ] }) }),
5052
- /* @__PURE__ */ jsx24("div", { className: getClassName19("content"), children }),
5053
- isLoading && /* @__PURE__ */ jsx24("div", { className: getClassName19("loadingOverlay"), children: /* @__PURE__ */ jsx24(Loader, { size: 32 }) })
5328
+ /* @__PURE__ */ jsx25("div", { className: getClassName19("content"), children }),
5329
+ isLoading && /* @__PURE__ */ jsx25("div", { className: getClassName19("loadingOverlay"), children: /* @__PURE__ */ jsx25(Loader, { size: 32 }) })
5054
5330
  ]
5055
5331
  }
5056
5332
  );
@@ -5081,7 +5357,7 @@ init_react_import();
5081
5357
  var styles_module_default14 = { "MenuBar": "_MenuBar_8pf8c_1", "MenuBar--menuOpen": "_MenuBar--menuOpen_8pf8c_14", "MenuBar-inner": "_MenuBar-inner_8pf8c_29", "MenuBar-history": "_MenuBar-history_8pf8c_45" };
5082
5358
 
5083
5359
  // components/MenuBar/index.tsx
5084
- import { Fragment as Fragment7, jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
5360
+ import { Fragment as Fragment7, jsx as jsx26, jsxs as jsxs13 } from "react/jsx-runtime";
5085
5361
  var getClassName20 = get_class_name_factory_default("MenuBar", styles_module_default14);
5086
5362
  function MenuBar({
5087
5363
  appState,
@@ -5095,7 +5371,7 @@ function MenuBar({
5095
5371
  history: { back, forward, historyStore }
5096
5372
  } = useAppContext();
5097
5373
  const { hasFuture = false, hasPast = false } = historyStore || {};
5098
- return /* @__PURE__ */ jsx25(
5374
+ return /* @__PURE__ */ jsx26(
5099
5375
  "div",
5100
5376
  {
5101
5377
  className: getClassName20({ menuOpen }),
@@ -5111,10 +5387,10 @@ function MenuBar({
5111
5387
  },
5112
5388
  children: /* @__PURE__ */ jsxs13("div", { className: getClassName20("inner"), children: [
5113
5389
  /* @__PURE__ */ jsxs13("div", { className: getClassName20("history"), children: [
5114
- /* @__PURE__ */ jsx25(IconButton, { title: "undo", disabled: !hasPast, onClick: back, children: /* @__PURE__ */ jsx25(Undo2, { size: 21 }) }),
5115
- /* @__PURE__ */ jsx25(IconButton, { title: "redo", disabled: !hasFuture, onClick: forward, children: /* @__PURE__ */ jsx25(Redo2, { size: 21 }) })
5390
+ /* @__PURE__ */ jsx26(IconButton, { title: "undo", disabled: !hasPast, onClick: back, children: /* @__PURE__ */ jsx26(Undo2, { size: 21 }) }),
5391
+ /* @__PURE__ */ jsx26(IconButton, { title: "redo", disabled: !hasFuture, onClick: forward, children: /* @__PURE__ */ jsx26(Redo2, { size: 21 }) })
5116
5392
  ] }),
5117
- /* @__PURE__ */ jsx25(Fragment7, { children: renderHeaderActions && renderHeaderActions({
5393
+ /* @__PURE__ */ jsx26(Fragment7, { children: renderHeaderActions && renderHeaderActions({
5118
5394
  state: appState,
5119
5395
  dispatch
5120
5396
  }) })
@@ -5125,7 +5401,7 @@ function MenuBar({
5125
5401
 
5126
5402
  // css-module:/home/runner/work/puck/puck/packages/core/components/Puck/styles.module.css#css-module
5127
5403
  init_react_import();
5128
- var styles_module_default15 = { "Puck": "_Puck_1g88c_19", "Puck-portal": "_Puck-portal_1g88c_24", "PuckLayout": "_PuckLayout_1g88c_31", "PuckLayout-inner": "_PuckLayout-inner_1g88c_39", "PuckLayout--mounted": "_PuckLayout--mounted_1g88c_51", "PuckLayout--leftSideBarVisible": "_PuckLayout--leftSideBarVisible_1g88c_55", "PuckLayout--rightSideBarVisible": "_PuckLayout--rightSideBarVisible_1g88c_61", "PuckLayout-mounted": "_PuckLayout-mounted_1g88c_75", "PuckLayout-header": "_PuckLayout-header_1g88c_116", "PuckLayout-headerInner": "_PuckLayout-headerInner_1g88c_125", "PuckLayout-headerToggle": "_PuckLayout-headerToggle_1g88c_135", "PuckLayout-rightSideBarToggle": "_PuckLayout-rightSideBarToggle_1g88c_142", "PuckLayout-leftSideBarToggle": "_PuckLayout-leftSideBarToggle_1g88c_143", "PuckLayout-headerTitle": "_PuckLayout-headerTitle_1g88c_147", "PuckLayout-headerPath": "_PuckLayout-headerPath_1g88c_151", "PuckLayout-headerTools": "_PuckLayout-headerTools_1g88c_158", "PuckLayout-menuButton": "_PuckLayout-menuButton_1g88c_164", "PuckLayout--menuOpen": "_PuckLayout--menuOpen_1g88c_169", "PuckLayout-leftSideBar": "_PuckLayout-leftSideBar_1g88c_143", "PuckLayout-rightSideBar": "_PuckLayout-rightSideBar_1g88c_142" };
5404
+ var styles_module_default15 = { "Puck": "_Puck_12s9r_19", "Puck-portal": "_Puck-portal_12s9r_24", "PuckLayout-inner": "_PuckLayout-inner_12s9r_31", "PuckLayout--mounted": "_PuckLayout--mounted_12s9r_43", "PuckLayout--leftSideBarVisible": "_PuckLayout--leftSideBarVisible_12s9r_47", "PuckLayout--rightSideBarVisible": "_PuckLayout--rightSideBarVisible_12s9r_53", "PuckLayout-mounted": "_PuckLayout-mounted_12s9r_67", "PuckLayout": "_PuckLayout_12s9r_31", "PuckLayout-header": "_PuckLayout-header_12s9r_108", "PuckLayout-headerInner": "_PuckLayout-headerInner_12s9r_117", "PuckLayout-headerToggle": "_PuckLayout-headerToggle_12s9r_127", "PuckLayout-rightSideBarToggle": "_PuckLayout-rightSideBarToggle_12s9r_134", "PuckLayout-leftSideBarToggle": "_PuckLayout-leftSideBarToggle_12s9r_135", "PuckLayout-headerTitle": "_PuckLayout-headerTitle_12s9r_139", "PuckLayout-headerPath": "_PuckLayout-headerPath_12s9r_143", "PuckLayout-headerTools": "_PuckLayout-headerTools_12s9r_150", "PuckLayout-menuButton": "_PuckLayout-menuButton_12s9r_156", "PuckLayout--menuOpen": "_PuckLayout--menuOpen_12s9r_161", "PuckLayout-leftSideBar": "_PuckLayout-leftSideBar_12s9r_135", "PuckLayout-rightSideBar": "_PuckLayout-rightSideBar_12s9r_134" };
5129
5405
 
5130
5406
  // components/Puck/components/Fields/index.tsx
5131
5407
  init_react_import();
@@ -5135,15 +5411,15 @@ init_react_import();
5135
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" };
5136
5412
 
5137
5413
  // components/Puck/components/Fields/index.tsx
5138
- import { useCallback as useCallback10, useEffect as useEffect15, useMemo as useMemo10, useState as useState19 } from "react";
5414
+ import { useCallback as useCallback12, useEffect as useEffect16, useMemo as useMemo11, useState as useState19 } from "react";
5139
5415
 
5140
5416
  // lib/use-parent.ts
5141
5417
  init_react_import();
5142
- import { useContext as useContext6 } from "react";
5418
+ import { useContext as useContext9 } from "react";
5143
5419
  var useParent = (itemSelector) => {
5144
5420
  var _a;
5145
5421
  const { selectedItem, state } = useAppContext();
5146
- const { pathData } = useContext6(dropZoneContext) || {};
5422
+ const { pathData } = useContext9(dropZoneContext) || {};
5147
5423
  const item = itemSelector ? getItem(itemSelector, state.data) : selectedItem;
5148
5424
  const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, state.data);
5149
5425
  const lastItem = breadcrumbs[breadcrumbs.length - 1];
@@ -5152,7 +5428,7 @@ var useParent = (itemSelector) => {
5152
5428
  };
5153
5429
 
5154
5430
  // components/Puck/components/Fields/index.tsx
5155
- import { Fragment as Fragment8, jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
5431
+ import { Fragment as Fragment8, jsx as jsx27, jsxs as jsxs14 } from "react/jsx-runtime";
5156
5432
  var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
5157
5433
  var defaultPageFields = {
5158
5434
  title: { type: "text" }
@@ -5160,7 +5436,7 @@ var defaultPageFields = {
5160
5436
  var DefaultFields = ({
5161
5437
  children
5162
5438
  }) => {
5163
- return /* @__PURE__ */ jsx26(Fragment8, { children });
5439
+ return /* @__PURE__ */ jsx27(Fragment8, { children });
5164
5440
  };
5165
5441
  var useResolvedFields = () => {
5166
5442
  var _a, _b;
@@ -5169,7 +5445,7 @@ var useResolvedFields = () => {
5169
5445
  const { data } = state;
5170
5446
  const rootFields = ((_a = config.root) == null ? void 0 : _a.fields) || defaultPageFields;
5171
5447
  const componentConfig = selectedItem ? config.components[selectedItem.type] : null;
5172
- const defaultFields = useMemo10(
5448
+ const defaultFields = useMemo11(
5173
5449
  () => (selectedItem ? componentConfig == null ? void 0 : componentConfig.fields : rootFields) || {},
5174
5450
  [selectedItem, rootFields, componentConfig == null ? void 0 : componentConfig.fields]
5175
5451
  );
@@ -5182,7 +5458,7 @@ var useResolvedFields = () => {
5182
5458
  const hasComponentResolver = selectedItem && (componentConfig == null ? void 0 : componentConfig.resolveFields);
5183
5459
  const hasRootResolver = !selectedItem && ((_b = config.root) == null ? void 0 : _b.resolveFields);
5184
5460
  const hasResolver = hasComponentResolver || hasRootResolver;
5185
- const resolveFields = useCallback10(
5461
+ const resolveFields = useCallback12(
5186
5462
  (..._0) => __async(void 0, [..._0], function* (fields = {}) {
5187
5463
  var _a2;
5188
5464
  const lastData = ((_a2 = lastSelectedData.props) == null ? void 0 : _a2.id) === componentData.props.id ? lastSelectedData : null;
@@ -5220,7 +5496,7 @@ var useResolvedFields = () => {
5220
5496
  }),
5221
5497
  [data, config, componentData, selectedItem, resolvedFields, state]
5222
5498
  );
5223
- useEffect15(() => {
5499
+ useEffect16(() => {
5224
5500
  if (hasResolver) {
5225
5501
  setFieldsLoading(true);
5226
5502
  resolveFields(defaultFields).then((fields) => {
@@ -5251,7 +5527,7 @@ var Fields = () => {
5251
5527
  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;
5252
5528
  const isLoading = fieldsResolving || componentResolving;
5253
5529
  const rootProps = data.root.props || data.root;
5254
- const Wrapper = useMemo10(() => overrides.fields || DefaultFields, [overrides]);
5530
+ const Wrapper = useMemo11(() => overrides.fields || DefaultFields, [overrides]);
5255
5531
  return /* @__PURE__ */ jsxs14(
5256
5532
  "form",
5257
5533
  {
@@ -5260,7 +5536,7 @@ var Fields = () => {
5260
5536
  e.preventDefault();
5261
5537
  },
5262
5538
  children: [
5263
- /* @__PURE__ */ jsx26(Wrapper, { isLoading, itemSelector, children: Object.keys(fields).map((fieldName) => {
5539
+ /* @__PURE__ */ jsx27(Wrapper, { isLoading, itemSelector, children: Object.keys(fields).map((fieldName) => {
5264
5540
  const field = fields[fieldName];
5265
5541
  if (!(field == null ? void 0 : field.type)) return null;
5266
5542
  const onChange = (value, updatedUi) => {
@@ -5331,7 +5607,7 @@ var Fields = () => {
5331
5607
  item: selectedItem
5332
5608
  });
5333
5609
  const id = `${selectedItem.props.id}_${field.type}_${fieldName}`;
5334
- return /* @__PURE__ */ jsx26(
5610
+ return /* @__PURE__ */ jsx27(
5335
5611
  AutoFieldPrivate,
5336
5612
  {
5337
5613
  field,
@@ -5349,7 +5625,7 @@ var Fields = () => {
5349
5625
  root: true
5350
5626
  });
5351
5627
  const id = `root_${field.type}_${fieldName}`;
5352
- return /* @__PURE__ */ jsx26(
5628
+ return /* @__PURE__ */ jsx27(
5353
5629
  AutoFieldPrivate,
5354
5630
  {
5355
5631
  field,
@@ -5363,7 +5639,7 @@ var Fields = () => {
5363
5639
  );
5364
5640
  }
5365
5641
  }) }),
5366
- isLoading && /* @__PURE__ */ jsx26("div", { className: getClassName21("loadingOverlay"), children: /* @__PURE__ */ jsx26("div", { className: getClassName21("loadingOverlayInner"), children: /* @__PURE__ */ jsx26(Loader, { size: 16 }) }) })
5642
+ isLoading && /* @__PURE__ */ jsx27("div", { className: getClassName21("loadingOverlay"), children: /* @__PURE__ */ jsx27("div", { className: getClassName21("loadingOverlayInner"), children: /* @__PURE__ */ jsx27(Loader, { size: 16 }) }) })
5367
5643
  ]
5368
5644
  }
5369
5645
  );
@@ -5374,7 +5650,7 @@ init_react_import();
5374
5650
 
5375
5651
  // lib/use-component-list.tsx
5376
5652
  init_react_import();
5377
- import { useEffect as useEffect16, useState as useState20 } from "react";
5653
+ import { useEffect as useEffect17, useState as useState20 } from "react";
5378
5654
 
5379
5655
  // components/ComponentList/index.tsx
5380
5656
  init_react_import();
@@ -5384,7 +5660,7 @@ init_react_import();
5384
5660
  var styles_module_default17 = { "ComponentList": "_ComponentList_odh9d_1", "ComponentList--isExpanded": "_ComponentList--isExpanded_odh9d_5", "ComponentList-content": "_ComponentList-content_odh9d_9", "ComponentList-title": "_ComponentList-title_odh9d_17", "ComponentList-titleIcon": "_ComponentList-titleIcon_odh9d_53" };
5385
5661
 
5386
5662
  // components/ComponentList/index.tsx
5387
- import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
5663
+ import { jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
5388
5664
  var getClassName22 = get_class_name_factory_default("ComponentList", styles_module_default17);
5389
5665
  var ComponentListItem = ({
5390
5666
  name,
@@ -5394,7 +5670,7 @@ var ComponentListItem = ({
5394
5670
  const canInsert = getPermissions({
5395
5671
  type: name
5396
5672
  }).insert;
5397
- return /* @__PURE__ */ jsx27(Drawer.Item, { label, name, isDragDisabled: !canInsert, children: overrides.componentItem });
5673
+ return /* @__PURE__ */ jsx28(Drawer.Item, { label, name, isDragDisabled: !canInsert, children: overrides.componentItem });
5398
5674
  };
5399
5675
  var ComponentList = ({
5400
5676
  children,
@@ -5418,14 +5694,14 @@ var ComponentList = ({
5418
5694
  }),
5419
5695
  title: expanded ? `Collapse${title ? ` ${title}` : ""}` : `Expand${title ? ` ${title}` : ""}`,
5420
5696
  children: [
5421
- /* @__PURE__ */ jsx27("div", { children: title }),
5422
- /* @__PURE__ */ jsx27("div", { className: getClassName22("titleIcon"), children: expanded ? /* @__PURE__ */ jsx27(ChevronUp, { size: 12 }) : /* @__PURE__ */ jsx27(ChevronDown, { size: 12 }) })
5697
+ /* @__PURE__ */ jsx28("div", { children: title }),
5698
+ /* @__PURE__ */ jsx28("div", { className: getClassName22("titleIcon"), children: expanded ? /* @__PURE__ */ jsx28(ChevronUp, { size: 12 }) : /* @__PURE__ */ jsx28(ChevronDown, { size: 12 }) })
5423
5699
  ]
5424
5700
  }
5425
5701
  ),
5426
- /* @__PURE__ */ jsx27("div", { className: getClassName22("content"), children: /* @__PURE__ */ jsx27(Drawer, { children: children || Object.keys(config.components).map((componentKey) => {
5702
+ /* @__PURE__ */ jsx28("div", { className: getClassName22("content"), children: /* @__PURE__ */ jsx28(Drawer, { children: children || Object.keys(config.components).map((componentKey) => {
5427
5703
  var _a;
5428
- return /* @__PURE__ */ jsx27(
5704
+ return /* @__PURE__ */ jsx28(
5429
5705
  ComponentListItem,
5430
5706
  {
5431
5707
  label: (_a = config.components[componentKey]["label"]) != null ? _a : componentKey,
@@ -5439,10 +5715,10 @@ var ComponentList = ({
5439
5715
  ComponentList.Item = ComponentListItem;
5440
5716
 
5441
5717
  // lib/use-component-list.tsx
5442
- import { jsx as jsx28 } from "react/jsx-runtime";
5718
+ import { jsx as jsx29 } from "react/jsx-runtime";
5443
5719
  var useComponentList = (config, ui) => {
5444
5720
  const [componentList, setComponentList] = useState20();
5445
- useEffect16(() => {
5721
+ useEffect17(() => {
5446
5722
  var _a, _b, _c;
5447
5723
  if (Object.keys(ui.componentList).length > 0) {
5448
5724
  const matchedComponents = [];
@@ -5452,7 +5728,7 @@ var useComponentList = (config, ui) => {
5452
5728
  if (category.visible === false || !category.components) {
5453
5729
  return null;
5454
5730
  }
5455
- return /* @__PURE__ */ jsx28(
5731
+ return /* @__PURE__ */ jsx29(
5456
5732
  ComponentList,
5457
5733
  {
5458
5734
  id: categoryKey,
@@ -5461,7 +5737,7 @@ var useComponentList = (config, ui) => {
5461
5737
  var _a2;
5462
5738
  matchedComponents.push(componentName);
5463
5739
  const componentConf = config.components[componentName] || {};
5464
- return /* @__PURE__ */ jsx28(
5740
+ return /* @__PURE__ */ jsx29(
5465
5741
  ComponentList.Item,
5466
5742
  {
5467
5743
  label: (_a2 = componentConf["label"]) != null ? _a2 : componentName,
@@ -5481,7 +5757,7 @@ var useComponentList = (config, ui) => {
5481
5757
  );
5482
5758
  if (remainingComponents.length > 0 && !((_a = ui.componentList.other) == null ? void 0 : _a.components) && ((_b = ui.componentList.other) == null ? void 0 : _b.visible) !== false) {
5483
5759
  _componentList.push(
5484
- /* @__PURE__ */ jsx28(
5760
+ /* @__PURE__ */ jsx29(
5485
5761
  ComponentList,
5486
5762
  {
5487
5763
  id: "other",
@@ -5489,7 +5765,7 @@ var useComponentList = (config, ui) => {
5489
5765
  children: remainingComponents.map((componentName, i) => {
5490
5766
  var _a2;
5491
5767
  const componentConf = config.components[componentName] || {};
5492
- return /* @__PURE__ */ jsx28(
5768
+ return /* @__PURE__ */ jsx29(
5493
5769
  ComponentList.Item,
5494
5770
  {
5495
5771
  name: componentName,
@@ -5511,30 +5787,30 @@ var useComponentList = (config, ui) => {
5511
5787
  };
5512
5788
 
5513
5789
  // components/Puck/components/Components/index.tsx
5514
- import { useMemo as useMemo11 } from "react";
5515
- import { jsx as jsx29 } from "react/jsx-runtime";
5790
+ import { useMemo as useMemo12 } from "react";
5791
+ import { jsx as jsx30 } from "react/jsx-runtime";
5516
5792
  var Components = () => {
5517
5793
  const { config, state, overrides } = useAppContext();
5518
5794
  const componentList = useComponentList(config, state.ui);
5519
- const Wrapper = useMemo11(() => overrides.components || "div", [overrides]);
5520
- return /* @__PURE__ */ jsx29(Wrapper, { children: componentList ? componentList : /* @__PURE__ */ jsx29(ComponentList, { id: "all" }) });
5795
+ const Wrapper = useMemo12(() => overrides.components || "div", [overrides]);
5796
+ return /* @__PURE__ */ jsx30(Wrapper, { children: componentList ? componentList : /* @__PURE__ */ jsx30(ComponentList, { id: "all" }) });
5521
5797
  };
5522
5798
 
5523
5799
  // components/Puck/components/Preview/index.tsx
5524
5800
  init_react_import();
5525
- import { useCallback as useCallback11, useEffect as useEffect18, useRef as useRef7, useMemo as useMemo12 } from "react";
5801
+ import { useCallback as useCallback13, useEffect as useEffect19, useRef as useRef6, useMemo as useMemo13 } from "react";
5526
5802
 
5527
5803
  // components/AutoFrame/index.tsx
5528
5804
  init_react_import();
5529
5805
  import {
5530
- createContext as createContext4,
5531
- useContext as useContext7,
5532
- useEffect as useEffect17,
5806
+ createContext as createContext5,
5807
+ useContext as useContext10,
5808
+ useEffect as useEffect18,
5533
5809
  useState as useState21
5534
5810
  } from "react";
5535
5811
  import hash from "object-hash";
5536
5812
  import { createPortal as createPortal3 } from "react-dom";
5537
- import { Fragment as Fragment9, jsx as jsx30 } from "react/jsx-runtime";
5813
+ import { Fragment as Fragment9, jsx as jsx31 } from "react/jsx-runtime";
5538
5814
  var styleSelector = 'style, link[rel="stylesheet"]';
5539
5815
  var collectStyles = (doc) => {
5540
5816
  const collected = [];
@@ -5577,7 +5853,7 @@ var CopyHostStyles = ({
5577
5853
  onStylesLoaded = () => null
5578
5854
  }) => {
5579
5855
  const { document: doc, window: win } = useFrame();
5580
- useEffect17(() => {
5856
+ useEffect18(() => {
5581
5857
  if (!win || !doc) {
5582
5858
  return () => {
5583
5859
  };
@@ -5734,10 +6010,10 @@ var CopyHostStyles = ({
5734
6010
  observer.disconnect();
5735
6011
  };
5736
6012
  }, []);
5737
- return /* @__PURE__ */ jsx30(Fragment9, { children });
6013
+ return /* @__PURE__ */ jsx31(Fragment9, { children });
5738
6014
  };
5739
- var autoFrameContext = createContext4({});
5740
- var useFrame = () => useContext7(autoFrameContext);
6015
+ var autoFrameContext = createContext5({});
6016
+ var useFrame = () => useContext10(autoFrameContext);
5741
6017
  function AutoFrame(_a) {
5742
6018
  var _b = _a, {
5743
6019
  children,
@@ -5757,7 +6033,7 @@ function AutoFrame(_a) {
5757
6033
  const [loaded, setLoaded] = useState21(false);
5758
6034
  const [ctx, setCtx] = useState21({});
5759
6035
  const [mountTarget, setMountTarget] = useState21();
5760
- useEffect17(() => {
6036
+ useEffect18(() => {
5761
6037
  var _a2;
5762
6038
  if (frameRef.current) {
5763
6039
  setCtx({
@@ -5769,7 +6045,7 @@ function AutoFrame(_a) {
5769
6045
  );
5770
6046
  }
5771
6047
  }, [frameRef, loaded]);
5772
- return /* @__PURE__ */ jsx30(
6048
+ return /* @__PURE__ */ jsx31(
5773
6049
  "iframe",
5774
6050
  __spreadProps(__spreadValues({}, props), {
5775
6051
  className,
@@ -5779,7 +6055,7 @@ function AutoFrame(_a) {
5779
6055
  onLoad: () => {
5780
6056
  setLoaded(true);
5781
6057
  },
5782
- children: /* @__PURE__ */ jsx30(autoFrameContext.Provider, { value: ctx, children: loaded && mountTarget && /* @__PURE__ */ jsx30(CopyHostStyles, { debug, onStylesLoaded, children: createPortal3(children, mountTarget) }) })
6058
+ children: /* @__PURE__ */ jsx31(autoFrameContext.Provider, { value: ctx, children: loaded && mountTarget && /* @__PURE__ */ jsx31(CopyHostStyles, { debug, onStylesLoaded, children: createPortal3(children, mountTarget) }) })
5783
6059
  })
5784
6060
  );
5785
6061
  }
@@ -5790,12 +6066,68 @@ var AutoFrame_default = AutoFrame;
5790
6066
  init_react_import();
5791
6067
  var styles_module_default18 = { "PuckPreview": "_PuckPreview_z2rgu_1", "PuckPreview-frame": "_PuckPreview-frame_z2rgu_6" };
5792
6068
 
6069
+ // components/Render/index.tsx
6070
+ init_react_import();
6071
+ import { jsx as jsx32 } from "react/jsx-runtime";
6072
+ function Render({
6073
+ config,
6074
+ data
6075
+ }) {
6076
+ var _a;
6077
+ const defaultedData = __spreadProps(__spreadValues({}, data), {
6078
+ root: data.root || {},
6079
+ content: data.content || []
6080
+ });
6081
+ const rootProps = defaultedData.root.props || defaultedData.root;
6082
+ const title = (rootProps == null ? void 0 : rootProps.title) || "";
6083
+ if ((_a = config.root) == null ? void 0 : _a.render) {
6084
+ return /* @__PURE__ */ jsx32(
6085
+ DropZoneProvider,
6086
+ {
6087
+ value: {
6088
+ data: defaultedData,
6089
+ config,
6090
+ mode: "render",
6091
+ depth: 0,
6092
+ path: []
6093
+ },
6094
+ children: /* @__PURE__ */ jsx32(
6095
+ config.root.render,
6096
+ __spreadProps(__spreadValues({}, rootProps), {
6097
+ puck: {
6098
+ renderDropZone: DropZone,
6099
+ isEditing: false
6100
+ },
6101
+ title,
6102
+ editMode: false,
6103
+ id: "puck-root",
6104
+ children: /* @__PURE__ */ jsx32(DropZone, { zone: rootDroppableId })
6105
+ })
6106
+ )
6107
+ }
6108
+ );
6109
+ }
6110
+ return /* @__PURE__ */ jsx32(
6111
+ DropZoneProvider,
6112
+ {
6113
+ value: {
6114
+ data: defaultedData,
6115
+ config,
6116
+ mode: "render",
6117
+ depth: 0,
6118
+ path: []
6119
+ },
6120
+ children: /* @__PURE__ */ jsx32(DropZone, { zone: rootDroppableId })
6121
+ }
6122
+ );
6123
+ }
6124
+
5793
6125
  // components/Puck/components/Preview/index.tsx
5794
- import { Fragment as Fragment10, jsx as jsx31 } from "react/jsx-runtime";
6126
+ import { Fragment as Fragment10, jsx as jsx33 } from "react/jsx-runtime";
5795
6127
  var getClassName23 = get_class_name_factory_default("PuckPreview", styles_module_default18);
5796
6128
  var useBubbleIframeEvents = (ref) => {
5797
6129
  const { status } = useAppContext();
5798
- useEffect18(() => {
6130
+ useEffect19(() => {
5799
6131
  var _a;
5800
6132
  if (ref.current && status === "READY") {
5801
6133
  const iframe = ref.current;
@@ -5832,22 +6164,34 @@ var useBubbleIframeEvents = (ref) => {
5832
6164
  }
5833
6165
  }, [status]);
5834
6166
  };
5835
- var Preview = ({ id = "puck-preview" }) => {
6167
+ var Preview2 = ({ id = "puck-preview" }) => {
5836
6168
  const { config, dispatch, state, setStatus, iframe, overrides } = useAppContext();
5837
- const Page = useCallback11(
6169
+ const Page = useCallback13(
5838
6170
  (pageProps) => {
5839
6171
  var _a, _b;
5840
6172
  return ((_a = config.root) == null ? void 0 : _a.render) ? (_b = config.root) == null ? void 0 : _b.render(__spreadValues({
5841
6173
  id: "puck-root"
5842
- }, pageProps)) : /* @__PURE__ */ jsx31(Fragment10, { children: pageProps.children });
6174
+ }, pageProps)) : /* @__PURE__ */ jsx33(Fragment10, { children: pageProps.children });
5843
6175
  },
5844
6176
  [config.root]
5845
6177
  );
5846
- const Frame = useMemo12(() => overrides.iframe, [overrides]);
6178
+ const Frame = useMemo13(() => overrides.iframe, [overrides]);
5847
6179
  const rootProps = state.data.root.props || state.data.root;
5848
- const ref = useRef7(null);
6180
+ const ref = useRef6(null);
5849
6181
  useBubbleIframeEvents(ref);
5850
- return /* @__PURE__ */ jsx31(
6182
+ const inner = state.ui.previewMode === "edit" ? /* @__PURE__ */ jsx33(
6183
+ Page,
6184
+ __spreadProps(__spreadValues({}, rootProps), {
6185
+ puck: {
6186
+ renderDropZone: DropZone,
6187
+ isEditing: true,
6188
+ dragRef: null
6189
+ },
6190
+ editMode: true,
6191
+ children: /* @__PURE__ */ jsx33(DropZone, { zone: rootDroppableId })
6192
+ })
6193
+ ) : /* @__PURE__ */ jsx33(Render, { data: state.data, config });
6194
+ return /* @__PURE__ */ jsx33(
5851
6195
  "div",
5852
6196
  {
5853
6197
  className: getClassName23(),
@@ -5856,7 +6200,7 @@ var Preview = ({ id = "puck-preview" }) => {
5856
6200
  onClick: () => {
5857
6201
  dispatch({ type: "setUi", ui: __spreadProps(__spreadValues({}, state.ui), { itemSelector: null }) });
5858
6202
  },
5859
- children: iframe.enabled ? /* @__PURE__ */ jsx31(
6203
+ children: iframe.enabled ? /* @__PURE__ */ jsx33(
5860
6204
  AutoFrame_default,
5861
6205
  {
5862
6206
  id: "preview-frame",
@@ -5866,40 +6210,21 @@ var Preview = ({ id = "puck-preview" }) => {
5866
6210
  setStatus("READY");
5867
6211
  },
5868
6212
  frameRef: ref,
5869
- children: /* @__PURE__ */ jsx31(autoFrameContext.Consumer, { children: ({ document: document2 }) => {
5870
- const inner = /* @__PURE__ */ jsx31(
5871
- Page,
5872
- __spreadProps(__spreadValues({}, rootProps), {
5873
- puck: {
5874
- renderDropZone: DropZone,
5875
- isEditing: true,
5876
- dragRef: null
5877
- },
5878
- editMode: true,
5879
- children: /* @__PURE__ */ jsx31(DropZone, { zone: rootDroppableId })
5880
- })
5881
- );
6213
+ children: /* @__PURE__ */ jsx33(autoFrameContext.Consumer, { children: ({ document: document2 }) => {
5882
6214
  if (Frame) {
5883
- return /* @__PURE__ */ jsx31(Frame, { document: document2, children: inner });
6215
+ return /* @__PURE__ */ jsx33(Frame, { document: document2, children: inner });
5884
6216
  }
5885
6217
  return inner;
5886
6218
  } })
5887
6219
  }
5888
- ) : /* @__PURE__ */ jsx31(
6220
+ ) : /* @__PURE__ */ jsx33(
5889
6221
  "div",
5890
6222
  {
5891
6223
  id: "preview-frame",
5892
6224
  className: getClassName23("frame"),
5893
6225
  ref,
5894
6226
  "data-puck-entry": true,
5895
- children: /* @__PURE__ */ jsx31(
5896
- Page,
5897
- __spreadProps(__spreadValues({}, rootProps), {
5898
- puck: { renderDropZone: DropZone, isEditing: true, dragRef: null },
5899
- editMode: true,
5900
- children: /* @__PURE__ */ jsx31(DropZone, { zone: rootDroppableId })
5901
- })
5902
- )
6227
+ children: inner
5903
6228
  }
5904
6229
  )
5905
6230
  }
@@ -5949,7 +6274,7 @@ var scrollIntoView = (el) => {
5949
6274
  };
5950
6275
 
5951
6276
  // components/LayerTree/index.tsx
5952
- import { useContext as useContext8 } from "react";
6277
+ import { useContext as useContext11 } from "react";
5953
6278
 
5954
6279
  // lib/is-child-of-zone.ts
5955
6280
  init_react_import();
@@ -5982,7 +6307,7 @@ var onScrollEnd = (frame, cb) => {
5982
6307
  };
5983
6308
 
5984
6309
  // components/LayerTree/index.tsx
5985
- import { Fragment as Fragment11, jsx as jsx32, jsxs as jsxs16 } from "react/jsx-runtime";
6310
+ import { Fragment as Fragment11, jsx as jsx34, jsxs as jsxs16 } from "react/jsx-runtime";
5986
6311
  var getClassName24 = get_class_name_factory_default("LayerTree", styles_module_default19);
5987
6312
  var getClassNameLayer = get_class_name_factory_default("Layer", styles_module_default19);
5988
6313
  var LayerTree = ({
@@ -5995,15 +6320,15 @@ var LayerTree = ({
5995
6320
  label
5996
6321
  }) => {
5997
6322
  const zones = data.zones || {};
5998
- const ctx = useContext8(dropZoneContext);
6323
+ const ctx = useContext11(dropZoneContext);
5999
6324
  return /* @__PURE__ */ jsxs16(Fragment11, { children: [
6000
6325
  label && /* @__PURE__ */ jsxs16("div", { className: getClassName24("zoneTitle"), children: [
6001
- /* @__PURE__ */ jsx32("div", { className: getClassName24("zoneIcon"), children: /* @__PURE__ */ jsx32(Layers, { size: "16" }) }),
6326
+ /* @__PURE__ */ jsx34("div", { className: getClassName24("zoneIcon"), children: /* @__PURE__ */ jsx34(Layers, { size: "16" }) }),
6002
6327
  " ",
6003
6328
  label
6004
6329
  ] }),
6005
6330
  /* @__PURE__ */ jsxs16("ul", { className: getClassName24(), children: [
6006
- zoneContent.length === 0 && /* @__PURE__ */ jsx32("div", { className: getClassName24("helper"), children: "No items" }),
6331
+ zoneContent.length === 0 && /* @__PURE__ */ jsx34("div", { className: getClassName24("helper"), children: "No items" }),
6007
6332
  zoneContent.map((item, i) => {
6008
6333
  var _a;
6009
6334
  const isSelected = (itemSelector == null ? void 0 : itemSelector.index) === i && (itemSelector.zone === zone || itemSelector.zone === rootDroppableId && !zone);
@@ -6026,7 +6351,7 @@ var LayerTree = ({
6026
6351
  childIsSelected
6027
6352
  }),
6028
6353
  children: [
6029
- /* @__PURE__ */ jsx32("div", { className: getClassNameLayer("inner"), children: /* @__PURE__ */ jsxs16(
6354
+ /* @__PURE__ */ jsx34("div", { className: getClassNameLayer("inner"), children: /* @__PURE__ */ jsxs16(
6030
6355
  "button",
6031
6356
  {
6032
6357
  type: "button",
@@ -6065,22 +6390,22 @@ var LayerTree = ({
6065
6390
  setHoveringComponent(null);
6066
6391
  },
6067
6392
  children: [
6068
- containsZone && /* @__PURE__ */ jsx32(
6393
+ containsZone && /* @__PURE__ */ jsx34(
6069
6394
  "div",
6070
6395
  {
6071
6396
  className: getClassNameLayer("chevron"),
6072
6397
  title: isSelected ? "Collapse" : "Expand",
6073
- children: /* @__PURE__ */ jsx32(ChevronDown, { size: "12" })
6398
+ children: /* @__PURE__ */ jsx34(ChevronDown, { size: "12" })
6074
6399
  }
6075
6400
  ),
6076
6401
  /* @__PURE__ */ jsxs16("div", { className: getClassNameLayer("title"), children: [
6077
- /* @__PURE__ */ jsx32("div", { className: getClassNameLayer("icon"), children: item.type === "Text" || item.type === "Heading" ? /* @__PURE__ */ jsx32(Type, { size: "16" }) : /* @__PURE__ */ jsx32(LayoutGrid, { size: "16" }) }),
6078
- /* @__PURE__ */ jsx32("div", { className: getClassNameLayer("name"), children: label2 })
6402
+ /* @__PURE__ */ jsx34("div", { className: getClassNameLayer("icon"), children: item.type === "Text" || item.type === "Heading" ? /* @__PURE__ */ jsx34(Type, { size: "16" }) : /* @__PURE__ */ jsx34(LayoutGrid, { size: "16" }) }),
6403
+ /* @__PURE__ */ jsx34("div", { className: getClassNameLayer("name"), children: label2 })
6079
6404
  ] })
6080
6405
  ]
6081
6406
  }
6082
6407
  ) }),
6083
- containsZone && Object.keys(zonesForItem).map((zoneKey, idx) => /* @__PURE__ */ jsx32("div", { className: getClassNameLayer("zones"), children: /* @__PURE__ */ jsx32(
6408
+ containsZone && Object.keys(zonesForItem).map((zoneKey, idx) => /* @__PURE__ */ jsx34("div", { className: getClassNameLayer("zones"), children: /* @__PURE__ */ jsx34(
6084
6409
  LayerTree,
6085
6410
  {
6086
6411
  config,
@@ -6102,13 +6427,13 @@ var LayerTree = ({
6102
6427
  };
6103
6428
 
6104
6429
  // components/Puck/components/Outline/index.tsx
6105
- import { useCallback as useCallback12, useMemo as useMemo13 } from "react";
6106
- import { Fragment as Fragment12, jsx as jsx33, jsxs as jsxs17 } from "react/jsx-runtime";
6430
+ import { useCallback as useCallback14, useMemo as useMemo14 } from "react";
6431
+ import { Fragment as Fragment12, jsx as jsx35, jsxs as jsxs17 } from "react/jsx-runtime";
6107
6432
  var Outline = () => {
6108
6433
  const { dispatch, state, overrides, config } = useAppContext();
6109
6434
  const { data, ui } = state;
6110
6435
  const { itemSelector } = ui;
6111
- const setItemSelector = useCallback12(
6436
+ const setItemSelector = useCallback14(
6112
6437
  (newItemSelector) => {
6113
6438
  dispatch({
6114
6439
  type: "setUi",
@@ -6117,9 +6442,9 @@ var Outline = () => {
6117
6442
  },
6118
6443
  []
6119
6444
  );
6120
- const Wrapper = useMemo13(() => overrides.outline || "div", [overrides]);
6121
- return /* @__PURE__ */ jsx33(Wrapper, { children: /* @__PURE__ */ jsx33(dropZoneContext.Consumer, { children: (ctx) => /* @__PURE__ */ jsxs17(Fragment12, { children: [
6122
- (ctx == null ? void 0 : ctx.activeZones) && (ctx == null ? void 0 : ctx.activeZones[rootDroppableId]) && /* @__PURE__ */ jsx33(
6445
+ const Wrapper = useMemo14(() => overrides.outline || "div", [overrides]);
6446
+ return /* @__PURE__ */ jsx35(Wrapper, { children: /* @__PURE__ */ jsx35(dropZoneContext.Consumer, { children: (ctx) => /* @__PURE__ */ jsxs17(Fragment12, { children: [
6447
+ (ctx == null ? void 0 : ctx.activeZones) && (ctx == null ? void 0 : ctx.activeZones[rootDroppableId]) && /* @__PURE__ */ jsx35(
6123
6448
  LayerTree,
6124
6449
  {
6125
6450
  config,
@@ -6132,7 +6457,7 @@ var Outline = () => {
6132
6457
  ),
6133
6458
  Object.entries(findZonesForArea(data, "root")).map(
6134
6459
  ([zoneKey, zone]) => {
6135
- return /* @__PURE__ */ jsx33(
6460
+ return /* @__PURE__ */ jsx35(
6136
6461
  LayerTree,
6137
6462
  {
6138
6463
  config,
@@ -6404,27 +6729,27 @@ var getBox = function getBox2(el) {
6404
6729
 
6405
6730
  // components/Puck/components/Canvas/index.tsx
6406
6731
  import {
6407
- useCallback as useCallback13,
6408
- useEffect as useEffect20,
6409
- useMemo as useMemo15,
6410
- useRef as useRef8,
6732
+ useCallback as useCallback15,
6733
+ useEffect as useEffect21,
6734
+ useMemo as useMemo16,
6735
+ useRef as useRef7,
6411
6736
  useState as useState24
6412
6737
  } from "react";
6413
6738
 
6414
6739
  // components/ViewportControls/index.tsx
6415
6740
  init_react_import();
6416
- import { useEffect as useEffect19, useMemo as useMemo14, useState as useState23 } from "react";
6741
+ import { useEffect as useEffect20, useMemo as useMemo15, useState as useState23 } from "react";
6417
6742
 
6418
6743
  // css-module:/home/runner/work/puck/puck/packages/core/components/ViewportControls/styles.module.css#css-module
6419
6744
  init_react_import();
6420
6745
  var styles_module_default20 = { "ViewportControls": "_ViewportControls_g1wgg_1", "ViewportControls-divider": "_ViewportControls-divider_g1wgg_15", "ViewportControls-zoomSelect": "_ViewportControls-zoomSelect_g1wgg_21", "ViewportButton--isActive": "_ViewportButton--isActive_g1wgg_34", "ViewportButton-inner": "_ViewportButton-inner_g1wgg_34" };
6421
6746
 
6422
6747
  // components/ViewportControls/index.tsx
6423
- import { jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
6748
+ import { jsx as jsx36, jsxs as jsxs18 } from "react/jsx-runtime";
6424
6749
  var icons = {
6425
- Smartphone: /* @__PURE__ */ jsx34(Smartphone, { size: 16 }),
6426
- Tablet: /* @__PURE__ */ jsx34(Tablet, { size: 16 }),
6427
- Monitor: /* @__PURE__ */ jsx34(Monitor, { size: 16 })
6750
+ Smartphone: /* @__PURE__ */ jsx36(Smartphone, { size: 16 }),
6751
+ Tablet: /* @__PURE__ */ jsx36(Tablet, { size: 16 }),
6752
+ Monitor: /* @__PURE__ */ jsx36(Monitor, { size: 16 })
6428
6753
  };
6429
6754
  var getClassName25 = get_class_name_factory_default("ViewportControls", styles_module_default20);
6430
6755
  var getClassNameButton = get_class_name_factory_default("ViewportButton", styles_module_default20);
@@ -6437,10 +6762,10 @@ var ViewportButton = ({
6437
6762
  }) => {
6438
6763
  const { state } = useAppContext();
6439
6764
  const [isActive, setIsActive] = useState23(false);
6440
- useEffect19(() => {
6765
+ useEffect20(() => {
6441
6766
  setIsActive(width === state.ui.viewports.current.width);
6442
6767
  }, [width, state.ui.viewports.current.width]);
6443
- return /* @__PURE__ */ jsx34("span", { className: getClassNameButton({ isActive }), children: /* @__PURE__ */ jsx34(
6768
+ return /* @__PURE__ */ jsx36("span", { className: getClassNameButton({ isActive }), children: /* @__PURE__ */ jsx36(
6444
6769
  IconButton,
6445
6770
  {
6446
6771
  title,
@@ -6449,7 +6774,7 @@ var ViewportButton = ({
6449
6774
  e.stopPropagation();
6450
6775
  onClick({ width, height });
6451
6776
  },
6452
- children: /* @__PURE__ */ jsx34("span", { className: getClassNameButton("inner"), children })
6777
+ children: /* @__PURE__ */ jsx36("span", { className: getClassNameButton("inner"), children })
6453
6778
  }
6454
6779
  ) });
6455
6780
  };
@@ -6473,7 +6798,7 @@ var ViewportControls = ({
6473
6798
  const defaultsContainAutoZoom = defaultZoomOptions.find(
6474
6799
  (option) => option.value === autoZoom
6475
6800
  );
6476
- const zoomOptions = useMemo14(
6801
+ const zoomOptions = useMemo15(
6477
6802
  () => [
6478
6803
  ...defaultZoomOptions,
6479
6804
  ...defaultsContainAutoZoom ? [] : [
@@ -6486,7 +6811,7 @@ var ViewportControls = ({
6486
6811
  [autoZoom]
6487
6812
  );
6488
6813
  return /* @__PURE__ */ jsxs18("div", { className: getClassName25(), children: [
6489
- viewports.map((viewport, i) => /* @__PURE__ */ jsx34(
6814
+ viewports.map((viewport, i) => /* @__PURE__ */ jsx36(
6490
6815
  ViewportButton,
6491
6816
  {
6492
6817
  height: viewport.height,
@@ -6497,8 +6822,8 @@ var ViewportControls = ({
6497
6822
  },
6498
6823
  i
6499
6824
  )),
6500
- /* @__PURE__ */ jsx34("div", { className: getClassName25("divider") }),
6501
- /* @__PURE__ */ jsx34(
6825
+ /* @__PURE__ */ jsx36("div", { className: getClassName25("divider") }),
6826
+ /* @__PURE__ */ jsx36(
6502
6827
  IconButton,
6503
6828
  {
6504
6829
  title: "Zoom viewport out",
@@ -6512,10 +6837,10 @@ var ViewportControls = ({
6512
6837
  )].value
6513
6838
  );
6514
6839
  },
6515
- children: /* @__PURE__ */ jsx34(ZoomOut, { size: 16 })
6840
+ children: /* @__PURE__ */ jsx36(ZoomOut, { size: 16 })
6516
6841
  }
6517
6842
  ),
6518
- /* @__PURE__ */ jsx34(
6843
+ /* @__PURE__ */ jsx36(
6519
6844
  IconButton,
6520
6845
  {
6521
6846
  title: "Zoom viewport in",
@@ -6529,11 +6854,11 @@ var ViewportControls = ({
6529
6854
  )].value
6530
6855
  );
6531
6856
  },
6532
- children: /* @__PURE__ */ jsx34(ZoomIn, { size: 16 })
6857
+ children: /* @__PURE__ */ jsx36(ZoomIn, { size: 16 })
6533
6858
  }
6534
6859
  ),
6535
- /* @__PURE__ */ jsx34("div", { className: getClassName25("divider") }),
6536
- /* @__PURE__ */ jsx34(
6860
+ /* @__PURE__ */ jsx36("div", { className: getClassName25("divider") }),
6861
+ /* @__PURE__ */ jsx36(
6537
6862
  "select",
6538
6863
  {
6539
6864
  className: getClassName25("zoomSelect"),
@@ -6541,7 +6866,7 @@ var ViewportControls = ({
6541
6866
  onChange: (e) => {
6542
6867
  onZoom(parseFloat(e.currentTarget.value));
6543
6868
  },
6544
- children: zoomOptions.map((option) => /* @__PURE__ */ jsx34(
6869
+ children: zoomOptions.map((option) => /* @__PURE__ */ jsx36(
6545
6870
  "option",
6546
6871
  {
6547
6872
  value: option.value,
@@ -6589,24 +6914,24 @@ var getZoomConfig = (uiViewport, frame, zoom) => {
6589
6914
  };
6590
6915
 
6591
6916
  // components/Puck/components/Canvas/index.tsx
6592
- import { Fragment as Fragment13, jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
6917
+ import { Fragment as Fragment13, jsx as jsx37, jsxs as jsxs19 } from "react/jsx-runtime";
6593
6918
  var getClassName26 = get_class_name_factory_default("PuckCanvas", styles_module_default21);
6594
6919
  var ZOOM_ON_CHANGE = true;
6595
6920
  var Canvas = () => {
6596
6921
  const { status, iframe } = useAppContext();
6597
6922
  const { dispatch, state, overrides, setUi, zoomConfig, setZoomConfig } = useAppContext();
6598
6923
  const { ui } = state;
6599
- const frameRef = useRef8(null);
6924
+ const frameRef = useRef7(null);
6600
6925
  const [showTransition, setShowTransition] = useState24(false);
6601
- const defaultRender = useMemo15(() => {
6602
- const PuckDefault = ({ children }) => /* @__PURE__ */ jsx35(Fragment13, { children });
6926
+ const defaultRender = useMemo16(() => {
6927
+ const PuckDefault = ({ children }) => /* @__PURE__ */ jsx37(Fragment13, { children });
6603
6928
  return PuckDefault;
6604
6929
  }, []);
6605
- const CustomPreview = useMemo15(
6930
+ const CustomPreview = useMemo16(
6606
6931
  () => overrides.preview || defaultRender,
6607
6932
  [overrides]
6608
6933
  );
6609
- const getFrameDimensions = useCallback13(() => {
6934
+ const getFrameDimensions = useCallback15(() => {
6610
6935
  if (frameRef.current) {
6611
6936
  const frame = frameRef.current;
6612
6937
  const box = getBox(frame);
@@ -6614,7 +6939,7 @@ var Canvas = () => {
6614
6939
  }
6615
6940
  return { width: 0, height: 0 };
6616
6941
  }, [frameRef]);
6617
- const resetAutoZoom = useCallback13(
6942
+ const resetAutoZoom = useCallback15(
6618
6943
  (ui2 = state.ui) => {
6619
6944
  if (frameRef.current) {
6620
6945
  setZoomConfig(
@@ -6624,11 +6949,11 @@ var Canvas = () => {
6624
6949
  },
6625
6950
  [frameRef, zoomConfig, state.ui]
6626
6951
  );
6627
- useEffect20(() => {
6952
+ useEffect21(() => {
6628
6953
  setShowTransition(false);
6629
6954
  resetAutoZoom();
6630
6955
  }, [frameRef, ui.leftSideBarVisible, ui.rightSideBarVisible]);
6631
- useEffect20(() => {
6956
+ useEffect21(() => {
6632
6957
  const { height: frameHeight } = getFrameDimensions();
6633
6958
  if (ui.viewports.current.height === "auto") {
6634
6959
  setZoomConfig(__spreadProps(__spreadValues({}, zoomConfig), {
@@ -6636,13 +6961,13 @@ var Canvas = () => {
6636
6961
  }));
6637
6962
  }
6638
6963
  }, [zoomConfig.zoom]);
6639
- useEffect20(() => {
6964
+ useEffect21(() => {
6640
6965
  if (ZOOM_ON_CHANGE) {
6641
6966
  setShowTransition(true);
6642
6967
  resetAutoZoom(ui);
6643
6968
  }
6644
6969
  }, [ui.viewports.current.width]);
6645
- useEffect20(() => {
6970
+ useEffect21(() => {
6646
6971
  const cb = () => {
6647
6972
  setShowTransition(false);
6648
6973
  resetAutoZoom();
@@ -6653,7 +6978,7 @@ var Canvas = () => {
6653
6978
  };
6654
6979
  }, []);
6655
6980
  const [showLoader, setShowLoader] = useState24(false);
6656
- useEffect20(() => {
6981
+ useEffect21(() => {
6657
6982
  setTimeout(() => {
6658
6983
  setShowLoader(true);
6659
6984
  }, 500);
@@ -6671,7 +6996,7 @@ var Canvas = () => {
6671
6996
  recordHistory: true
6672
6997
  }),
6673
6998
  children: [
6674
- ui.viewports.controlsVisible && iframe.enabled && /* @__PURE__ */ jsx35("div", { className: getClassName26("controls"), children: /* @__PURE__ */ jsx35(
6999
+ ui.viewports.controlsVisible && iframe.enabled && /* @__PURE__ */ jsx37("div", { className: getClassName26("controls"), children: /* @__PURE__ */ jsx37(
6675
7000
  ViewportControls,
6676
7001
  {
6677
7002
  autoZoom: zoomConfig.autoZoom,
@@ -6698,7 +7023,7 @@ var Canvas = () => {
6698
7023
  }
6699
7024
  ) }),
6700
7025
  /* @__PURE__ */ jsxs19("div", { className: getClassName26("inner"), ref: frameRef, children: [
6701
- /* @__PURE__ */ jsx35(
7026
+ /* @__PURE__ */ jsx37(
6702
7027
  "div",
6703
7028
  {
6704
7029
  className: getClassName26("root"),
@@ -6719,10 +7044,10 @@ var Canvas = () => {
6719
7044
  })
6720
7045
  );
6721
7046
  },
6722
- children: /* @__PURE__ */ jsx35(CustomPreview, { children: /* @__PURE__ */ jsx35(Preview, {}) })
7047
+ children: /* @__PURE__ */ jsx37(CustomPreview, { children: /* @__PURE__ */ jsx37(Preview2, {}) })
6723
7048
  }
6724
7049
  ),
6725
- /* @__PURE__ */ jsx35("div", { className: getClassName26("loader"), children: /* @__PURE__ */ jsx35(Loader, { size: 24 }) })
7050
+ /* @__PURE__ */ jsx37("div", { className: getClassName26("loader"), children: /* @__PURE__ */ jsx37(Loader, { size: 24 }) })
6726
7051
  ] })
6727
7052
  ]
6728
7053
  }
@@ -6731,7 +7056,7 @@ var Canvas = () => {
6731
7056
 
6732
7057
  // lib/use-loaded-overrides.ts
6733
7058
  init_react_import();
6734
- import { useMemo as useMemo16 } from "react";
7059
+ import { useMemo as useMemo17 } from "react";
6735
7060
 
6736
7061
  // lib/load-overrides.ts
6737
7062
  init_react_import();
@@ -6770,29 +7095,26 @@ var useLoadedOverrides = ({
6770
7095
  overrides,
6771
7096
  plugins
6772
7097
  }) => {
6773
- return useMemo16(() => {
7098
+ return useMemo17(() => {
6774
7099
  return loadOverrides({ overrides, plugins });
6775
7100
  }, [plugins, overrides]);
6776
7101
  };
6777
7102
 
6778
7103
  // components/DefaultOverride/index.tsx
6779
7104
  init_react_import();
6780
- import { Fragment as Fragment14, jsx as jsx36 } from "react/jsx-runtime";
6781
- var DefaultOverride = ({ children }) => /* @__PURE__ */ jsx36(Fragment14, { children });
6782
-
6783
- // components/Puck/index.tsx
6784
- import { DragDropManager as DragDropManager2, Feedback } from "@dnd-kit/dom";
7105
+ import { Fragment as Fragment14, jsx as jsx38 } from "react/jsx-runtime";
7106
+ var DefaultOverride = ({ children }) => /* @__PURE__ */ jsx38(Fragment14, { children });
6785
7107
 
6786
7108
  // lib/use-inject-css.ts
6787
7109
  init_react_import();
6788
- import { useEffect as useEffect21, useState as useState25 } from "react";
7110
+ import { useEffect as useEffect22, useState as useState25 } from "react";
6789
7111
  var styles = ``;
6790
7112
  var useInjectStyleSheet = (initialStyles, iframeEnabled) => {
6791
7113
  const [el, setEl] = useState25();
6792
- useEffect21(() => {
7114
+ useEffect22(() => {
6793
7115
  setEl(document.createElement("style"));
6794
7116
  }, []);
6795
- useEffect21(() => {
7117
+ useEffect22(() => {
6796
7118
  var _a;
6797
7119
  if (!el || typeof window === "undefined") {
6798
7120
  return;
@@ -6810,8 +7132,35 @@ var useInjectGlobalCss = (iframeEnabled) => {
6810
7132
  return useInjectStyleSheet(styles, iframeEnabled);
6811
7133
  };
6812
7134
 
7135
+ // lib/use-preview-mode-hotkeys.ts
7136
+ init_react_import();
7137
+ import { useCallback as useCallback16 } from "react";
7138
+ import { useHotkeys as useHotkeys2 } from "react-hotkeys-hook";
7139
+ var usePreviewModeHotkeys = (dispatch, iframeEnabled) => {
7140
+ const toggleInteractive = useCallback16(() => {
7141
+ dispatch({
7142
+ type: "setUi",
7143
+ ui: (ui) => ({
7144
+ previewMode: ui.previewMode === "edit" ? "interactive" : "edit"
7145
+ })
7146
+ });
7147
+ }, [dispatch]);
7148
+ const toggleInteractiveIframe = () => {
7149
+ if (iframeEnabled) {
7150
+ toggleInteractive();
7151
+ }
7152
+ };
7153
+ const frame = getFrame();
7154
+ const resolvedFrame = typeof window !== "undefined" && frame !== document ? frame : void 0;
7155
+ useHotkeys2("meta+i", toggleInteractive, { preventDefault: true });
7156
+ useHotkeys2("meta+i", toggleInteractiveIframe, {
7157
+ preventDefault: true,
7158
+ document: resolvedFrame
7159
+ });
7160
+ };
7161
+
6813
7162
  // components/Puck/index.tsx
6814
- import { Fragment as Fragment15, jsx as jsx37, jsxs as jsxs20 } from "react/jsx-runtime";
7163
+ import { Fragment as Fragment15, jsx as jsx39, jsxs as jsxs20 } from "react/jsx-runtime";
6815
7164
  var getClassName27 = get_class_name_factory_default("Puck", styles_module_default15);
6816
7165
  var getLayoutClassName = get_class_name_factory_default("PuckLayout", styles_module_default15);
6817
7166
  function Puck({
@@ -6933,11 +7282,11 @@ function Puck({
6933
7282
  const [menuOpen, setMenuOpen] = useState26(false);
6934
7283
  const { itemSelector, leftSideBarVisible, rightSideBarVisible } = ui;
6935
7284
  const selectedItem = itemSelector ? getItem(itemSelector, data) : null;
6936
- useEffect22(() => {
7285
+ useEffect23(() => {
6937
7286
  if (onChange) onChange(data);
6938
7287
  }, [data]);
6939
7288
  const rootProps = data.root.props || data.root;
6940
- const toggleSidebars = useCallback14(
7289
+ const toggleSidebars = useCallback17(
6941
7290
  (sidebar) => {
6942
7291
  const widerViewport = window.matchMedia("(min-width: 638px)").matches;
6943
7292
  const sideBarVisible = sidebar === "left" ? leftSideBarVisible : rightSideBarVisible;
@@ -6951,7 +7300,7 @@ function Puck({
6951
7300
  },
6952
7301
  [dispatch, leftSideBarVisible, rightSideBarVisible]
6953
7302
  );
6954
- useEffect22(() => {
7303
+ useEffect23(() => {
6955
7304
  if (!window.matchMedia("(min-width: 638px)").matches) {
6956
7305
  dispatch({
6957
7306
  type: "setUi",
@@ -6974,7 +7323,7 @@ function Puck({
6974
7323
  window.removeEventListener("resize", handleResize);
6975
7324
  };
6976
7325
  }, []);
6977
- const defaultHeaderRender = useMemo17(() => {
7326
+ const defaultHeaderRender = useMemo18(() => {
6978
7327
  if (renderHeader) {
6979
7328
  console.warn(
6980
7329
  "`renderHeader` is deprecated. Please use `overrides.header` and the `usePuck` hook instead"
@@ -6982,20 +7331,20 @@ function Puck({
6982
7331
  const RenderHeader = (_a2) => {
6983
7332
  var _b2 = _a2, { actions } = _b2, props = __objRest(_b2, ["actions"]);
6984
7333
  const Comp = renderHeader;
6985
- return /* @__PURE__ */ jsx37(Comp, __spreadProps(__spreadValues({}, props), { dispatch, state: appState, children: actions }));
7334
+ return /* @__PURE__ */ jsx39(Comp, __spreadProps(__spreadValues({}, props), { dispatch, state: appState, children: actions }));
6986
7335
  };
6987
7336
  return RenderHeader;
6988
7337
  }
6989
7338
  return DefaultOverride;
6990
7339
  }, [renderHeader]);
6991
- const defaultHeaderActionsRender = useMemo17(() => {
7340
+ const defaultHeaderActionsRender = useMemo18(() => {
6992
7341
  if (renderHeaderActions) {
6993
7342
  console.warn(
6994
7343
  "`renderHeaderActions` is deprecated. Please use `overrides.headerActions` and the `usePuck` hook instead."
6995
7344
  );
6996
7345
  const RenderHeader = (props) => {
6997
7346
  const Comp = renderHeaderActions;
6998
- return /* @__PURE__ */ jsx37(Comp, __spreadProps(__spreadValues({}, props), { dispatch, state: appState }));
7347
+ return /* @__PURE__ */ jsx39(Comp, __spreadProps(__spreadValues({}, props), { dispatch, state: appState }));
6999
7348
  };
7000
7349
  return RenderHeader;
7001
7350
  }
@@ -7005,27 +7354,27 @@ function Puck({
7005
7354
  overrides,
7006
7355
  plugins
7007
7356
  });
7008
- const CustomPuck = useMemo17(
7357
+ const CustomPuck = useMemo18(
7009
7358
  () => loadedOverrides.puck || DefaultOverride,
7010
7359
  [loadedOverrides]
7011
7360
  );
7012
- const CustomHeader = useMemo17(
7361
+ const CustomHeader = useMemo18(
7013
7362
  () => loadedOverrides.header || defaultHeaderRender,
7014
7363
  [loadedOverrides]
7015
7364
  );
7016
- const CustomHeaderActions = useMemo17(
7365
+ const CustomHeaderActions = useMemo18(
7017
7366
  () => loadedOverrides.headerActions || defaultHeaderActionsRender,
7018
7367
  [loadedOverrides]
7019
7368
  );
7020
7369
  const [mounted, setMounted] = useState26(false);
7021
- useEffect22(() => {
7370
+ useEffect23(() => {
7022
7371
  setMounted(true);
7023
7372
  }, []);
7024
7373
  const selectedComponentConfig = selectedItem && config.components[selectedItem.type];
7025
7374
  const selectedComponentLabel = selectedItem ? (_b = selectedComponentConfig == null ? void 0 : selectedComponentConfig["label"]) != null ? _b : selectedItem.type.toString() : "";
7026
- const [manager] = useState26(new DragDropManager2({ plugins: [Feedback] }));
7375
+ usePreviewModeHotkeys(dispatch, iframe.enabled);
7027
7376
  return /* @__PURE__ */ jsxs20("div", { className: `Puck ${getClassName27()}`, children: [
7028
- /* @__PURE__ */ jsx37(
7377
+ /* @__PURE__ */ jsx39(
7029
7378
  AppProvider,
7030
7379
  {
7031
7380
  value: {
@@ -7047,7 +7396,7 @@ function Puck({
7047
7396
  getPermissions: () => ({}),
7048
7397
  refreshPermissions: () => null
7049
7398
  },
7050
- children: /* @__PURE__ */ jsx37(DragDropContext, { disableAutoScroll: dnd == null ? void 0 : dnd.disableAutoScroll, children: /* @__PURE__ */ jsx37(CustomPuck, { children: children || /* @__PURE__ */ jsx37(
7399
+ children: /* @__PURE__ */ jsx39(DragDropContext, { disableAutoScroll: dnd == null ? void 0 : dnd.disableAutoScroll, children: /* @__PURE__ */ jsx39(CustomPuck, { children: children || /* @__PURE__ */ jsx39(
7051
7400
  "div",
7052
7401
  {
7053
7402
  className: getLayoutClassName({
@@ -7057,59 +7406,59 @@ function Puck({
7057
7406
  rightSideBarVisible
7058
7407
  }),
7059
7408
  children: /* @__PURE__ */ jsxs20("div", { className: getLayoutClassName("inner"), children: [
7060
- /* @__PURE__ */ jsx37(
7409
+ /* @__PURE__ */ jsx39(
7061
7410
  CustomHeader,
7062
7411
  {
7063
- actions: /* @__PURE__ */ jsx37(Fragment15, { children: /* @__PURE__ */ jsx37(CustomHeaderActions, { children: /* @__PURE__ */ jsx37(
7412
+ actions: /* @__PURE__ */ jsx39(Fragment15, { children: /* @__PURE__ */ jsx39(CustomHeaderActions, { children: /* @__PURE__ */ jsx39(
7064
7413
  Button,
7065
7414
  {
7066
7415
  onClick: () => {
7067
7416
  onPublish && onPublish(data);
7068
7417
  },
7069
- icon: /* @__PURE__ */ jsx37(Globe, { size: "14px" }),
7418
+ icon: /* @__PURE__ */ jsx39(Globe, { size: "14px" }),
7070
7419
  children: "Publish"
7071
7420
  }
7072
7421
  ) }) }),
7073
- children: /* @__PURE__ */ jsx37("header", { className: getLayoutClassName("header"), children: /* @__PURE__ */ jsxs20("div", { className: getLayoutClassName("headerInner"), children: [
7422
+ children: /* @__PURE__ */ jsx39("header", { className: getLayoutClassName("header"), children: /* @__PURE__ */ jsxs20("div", { className: getLayoutClassName("headerInner"), children: [
7074
7423
  /* @__PURE__ */ jsxs20("div", { className: getLayoutClassName("headerToggle"), children: [
7075
- /* @__PURE__ */ jsx37(
7424
+ /* @__PURE__ */ jsx39(
7076
7425
  "div",
7077
7426
  {
7078
7427
  className: getLayoutClassName("leftSideBarToggle"),
7079
- children: /* @__PURE__ */ jsx37(
7428
+ children: /* @__PURE__ */ jsx39(
7080
7429
  IconButton,
7081
7430
  {
7082
7431
  onClick: () => {
7083
7432
  toggleSidebars("left");
7084
7433
  },
7085
7434
  title: "Toggle left sidebar",
7086
- children: /* @__PURE__ */ jsx37(PanelLeft, { focusable: "false" })
7435
+ children: /* @__PURE__ */ jsx39(PanelLeft, { focusable: "false" })
7087
7436
  }
7088
7437
  )
7089
7438
  }
7090
7439
  ),
7091
- /* @__PURE__ */ jsx37(
7440
+ /* @__PURE__ */ jsx39(
7092
7441
  "div",
7093
7442
  {
7094
7443
  className: getLayoutClassName("rightSideBarToggle"),
7095
- children: /* @__PURE__ */ jsx37(
7444
+ children: /* @__PURE__ */ jsx39(
7096
7445
  IconButton,
7097
7446
  {
7098
7447
  onClick: () => {
7099
7448
  toggleSidebars("right");
7100
7449
  },
7101
7450
  title: "Toggle right sidebar",
7102
- children: /* @__PURE__ */ jsx37(PanelRight, { focusable: "false" })
7451
+ children: /* @__PURE__ */ jsx39(PanelRight, { focusable: "false" })
7103
7452
  }
7104
7453
  )
7105
7454
  }
7106
7455
  )
7107
7456
  ] }),
7108
- /* @__PURE__ */ jsx37("div", { className: getLayoutClassName("headerTitle"), children: /* @__PURE__ */ jsxs20(Heading, { rank: "2", size: "xs", children: [
7457
+ /* @__PURE__ */ jsx39("div", { className: getLayoutClassName("headerTitle"), children: /* @__PURE__ */ jsxs20(Heading, { rank: "2", size: "xs", children: [
7109
7458
  headerTitle || rootProps.title || "Page",
7110
7459
  headerPath && /* @__PURE__ */ jsxs20(Fragment15, { children: [
7111
7460
  " ",
7112
- /* @__PURE__ */ jsx37(
7461
+ /* @__PURE__ */ jsx39(
7113
7462
  "code",
7114
7463
  {
7115
7464
  className: getLayoutClassName("headerPath"),
@@ -7119,30 +7468,30 @@ function Puck({
7119
7468
  ] })
7120
7469
  ] }) }),
7121
7470
  /* @__PURE__ */ jsxs20("div", { className: getLayoutClassName("headerTools"), children: [
7122
- /* @__PURE__ */ jsx37("div", { className: getLayoutClassName("menuButton"), children: /* @__PURE__ */ jsx37(
7471
+ /* @__PURE__ */ jsx39("div", { className: getLayoutClassName("menuButton"), children: /* @__PURE__ */ jsx39(
7123
7472
  IconButton,
7124
7473
  {
7125
7474
  onClick: () => {
7126
7475
  return setMenuOpen(!menuOpen);
7127
7476
  },
7128
7477
  title: "Toggle menu bar",
7129
- children: menuOpen ? /* @__PURE__ */ jsx37(ChevronUp, { focusable: "false" }) : /* @__PURE__ */ jsx37(ChevronDown, { focusable: "false" })
7478
+ children: menuOpen ? /* @__PURE__ */ jsx39(ChevronUp, { focusable: "false" }) : /* @__PURE__ */ jsx39(ChevronDown, { focusable: "false" })
7130
7479
  }
7131
7480
  ) }),
7132
- /* @__PURE__ */ jsx37(
7481
+ /* @__PURE__ */ jsx39(
7133
7482
  MenuBar,
7134
7483
  {
7135
7484
  appState,
7136
7485
  dispatch,
7137
7486
  onPublish,
7138
7487
  menuOpen,
7139
- renderHeaderActions: () => /* @__PURE__ */ jsx37(CustomHeaderActions, { children: /* @__PURE__ */ jsx37(
7488
+ renderHeaderActions: () => /* @__PURE__ */ jsx39(CustomHeaderActions, { children: /* @__PURE__ */ jsx39(
7140
7489
  Button,
7141
7490
  {
7142
7491
  onClick: () => {
7143
7492
  onPublish && onPublish(data);
7144
7493
  },
7145
- icon: /* @__PURE__ */ jsx37(Globe, { size: "14px" }),
7494
+ icon: /* @__PURE__ */ jsx39(Globe, { size: "14px" }),
7146
7495
  children: "Publish"
7147
7496
  }
7148
7497
  ) }),
@@ -7154,18 +7503,18 @@ function Puck({
7154
7503
  }
7155
7504
  ),
7156
7505
  /* @__PURE__ */ jsxs20("div", { className: getLayoutClassName("leftSideBar"), children: [
7157
- /* @__PURE__ */ jsx37(SidebarSection, { title: "Components", noBorderTop: true, children: /* @__PURE__ */ jsx37(Components, {}) }),
7158
- /* @__PURE__ */ jsx37(SidebarSection, { title: "Outline", children: /* @__PURE__ */ jsx37(Outline, {}) })
7506
+ /* @__PURE__ */ jsx39(SidebarSection, { title: "Components", noBorderTop: true, children: /* @__PURE__ */ jsx39(Components, {}) }),
7507
+ /* @__PURE__ */ jsx39(SidebarSection, { title: "Outline", children: /* @__PURE__ */ jsx39(Outline, {}) })
7159
7508
  ] }),
7160
- /* @__PURE__ */ jsx37(Canvas, {}),
7161
- /* @__PURE__ */ jsx37("div", { className: getLayoutClassName("rightSideBar"), children: /* @__PURE__ */ jsx37(
7509
+ /* @__PURE__ */ jsx39(Canvas, {}),
7510
+ /* @__PURE__ */ jsx39("div", { className: getLayoutClassName("rightSideBar"), children: /* @__PURE__ */ jsx39(
7162
7511
  SidebarSection,
7163
7512
  {
7164
7513
  noPadding: true,
7165
7514
  noBorderTop: true,
7166
7515
  showBreadcrumbs: true,
7167
7516
  title: selectedItem ? selectedComponentLabel : "Page",
7168
- children: /* @__PURE__ */ jsx37(Fields, {})
7517
+ children: /* @__PURE__ */ jsx39(Fields, {})
7169
7518
  }
7170
7519
  ) })
7171
7520
  ] })
@@ -7173,69 +7522,13 @@ function Puck({
7173
7522
  ) }) })
7174
7523
  }
7175
7524
  ),
7176
- /* @__PURE__ */ jsx37("div", { id: "puck-portal-root", className: getClassName27("portal") })
7525
+ /* @__PURE__ */ jsx39("div", { id: "puck-portal-root", className: getClassName27("portal") })
7177
7526
  ] });
7178
7527
  }
7179
7528
  Puck.Components = Components;
7180
7529
  Puck.Fields = Fields;
7181
7530
  Puck.Outline = Outline;
7182
- Puck.Preview = Preview;
7183
-
7184
- // components/Render/index.tsx
7185
- init_react_import();
7186
- import { jsx as jsx38 } from "react/jsx-runtime";
7187
- function Render({
7188
- config,
7189
- data
7190
- }) {
7191
- var _a;
7192
- const defaultedData = __spreadProps(__spreadValues({}, data), {
7193
- root: data.root || {},
7194
- content: data.content || []
7195
- });
7196
- const rootProps = defaultedData.root.props || defaultedData.root;
7197
- const title = (rootProps == null ? void 0 : rootProps.title) || "";
7198
- if ((_a = config.root) == null ? void 0 : _a.render) {
7199
- return /* @__PURE__ */ jsx38(
7200
- DropZoneProvider,
7201
- {
7202
- value: {
7203
- data: defaultedData,
7204
- config,
7205
- mode: "render",
7206
- depth: 0,
7207
- path: []
7208
- },
7209
- children: /* @__PURE__ */ jsx38(
7210
- config.root.render,
7211
- __spreadProps(__spreadValues({}, rootProps), {
7212
- puck: {
7213
- renderDropZone: DropZone,
7214
- isEditing: false
7215
- },
7216
- title,
7217
- editMode: false,
7218
- id: "puck-root",
7219
- children: /* @__PURE__ */ jsx38(DropZone, { zone: rootDroppableId })
7220
- })
7221
- )
7222
- }
7223
- );
7224
- }
7225
- return /* @__PURE__ */ jsx38(
7226
- DropZoneProvider,
7227
- {
7228
- value: {
7229
- data: defaultedData,
7230
- config,
7231
- mode: "render",
7232
- depth: 0,
7233
- path: []
7234
- },
7235
- children: /* @__PURE__ */ jsx38(DropZone, { zone: rootDroppableId })
7236
- }
7237
- );
7238
- }
7531
+ Puck.Preview = Preview2;
7239
7532
 
7240
7533
  // lib/migrate.ts
7241
7534
  init_react_import();