@measured/puck 0.16.0-canary.96ee704 → 0.16.0-canary.9e7d06f

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.js CHANGED
@@ -161,6 +161,7 @@ __export(core_exports, {
161
161
  Render: () => Render,
162
162
  dropZoneContext: () => dropZoneContext,
163
163
  migrate: () => migrate,
164
+ overrideKeys: () => overrideKeys,
164
165
  resolveAllData: () => resolveAllData,
165
166
  transformProps: () => transformProps,
166
167
  usePuck: () => usePuck
@@ -168,46 +169,73 @@ __export(core_exports, {
168
169
  module.exports = __toCommonJS(core_exports);
169
170
  init_react_import();
170
171
 
172
+ // types/API/index.ts
173
+ init_react_import();
174
+
175
+ // types/API/Viewports.ts
176
+ init_react_import();
177
+
178
+ // types/index.ts
179
+ init_react_import();
180
+
181
+ // types/API/Overrides.ts
182
+ init_react_import();
183
+ var overrideKeys = [
184
+ "header",
185
+ "headerActions",
186
+ "fields",
187
+ "fieldLabel",
188
+ "components",
189
+ "componentItem",
190
+ "outline",
191
+ "puck",
192
+ "preview"
193
+ ];
194
+
195
+ // types/AppState.tsx
196
+ init_react_import();
197
+
171
198
  // types/Config.tsx
172
199
  init_react_import();
173
200
 
174
- // types/Plugin.ts
201
+ // types/Data.tsx
175
202
  init_react_import();
176
203
 
177
204
  // types/Fields.ts
178
205
  init_react_import();
179
206
 
207
+ // types/Props.tsx
208
+ init_react_import();
209
+
210
+ // types/Utils.tsx
211
+ init_react_import();
212
+
180
213
  // components/ActionBar/index.tsx
181
214
  init_react_import();
182
215
 
183
216
  // lib/get-class-name-factory.ts
184
217
  init_react_import();
185
218
  var import_classnames = __toESM(require_classnames());
186
- var getClassNameFactory = (rootClass, styles, { baseClass = "" } = {}) => (options = {}) => {
187
- let descendant = false;
188
- let modifiers = false;
219
+ var getClassNameFactory = (rootClass, styles, config = { baseClass: "" }) => (options = {}) => {
189
220
  if (typeof options === "string") {
190
- descendant = options;
191
- } else if (typeof options === "object") {
192
- modifiers = options;
193
- }
194
- if (descendant) {
221
+ const descendant = options;
195
222
  const style = styles[`${rootClass}-${descendant}`];
196
223
  if (style) {
197
- return baseClass + styles[`${rootClass}-${descendant}`] || "";
224
+ return config.baseClass + styles[`${rootClass}-${descendant}`] || "";
198
225
  }
199
226
  return "";
200
- } else if (modifiers) {
227
+ } else if (typeof options === "object") {
228
+ const modifiers = options;
201
229
  const prefixedModifiers = {};
202
230
  for (let modifier in modifiers) {
203
231
  prefixedModifiers[styles[`${rootClass}--${modifier}`]] = modifiers[modifier];
204
232
  }
205
233
  const c = styles[rootClass];
206
- return baseClass + (0, import_classnames.default)(__spreadValues({
234
+ return config.baseClass + (0, import_classnames.default)(__spreadValues({
207
235
  [c]: !!c
208
236
  }, prefixedModifiers));
209
237
  } else {
210
- return baseClass + styles[rootClass] || "";
238
+ return config.baseClass + styles[rootClass] || "";
211
239
  }
212
240
  };
213
241
  var get_class_name_factory_default = getClassNameFactory;
@@ -230,7 +258,16 @@ var Action = ({
230
258
  children,
231
259
  label,
232
260
  onClick
233
- }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: getClassName("action"), onClick, title: label, children });
261
+ }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
262
+ "button",
263
+ {
264
+ type: "button",
265
+ className: getClassName("action"),
266
+ onClick,
267
+ title: label,
268
+ children
269
+ }
270
+ );
234
271
  ActionBar.Action = Action;
235
272
 
236
273
  // components/AutoField/index.tsx
@@ -664,21 +701,22 @@ var setupZone = (data, zoneKey) => {
664
701
  if (zoneKey === rootDroppableId) {
665
702
  return data;
666
703
  }
667
- const newData = __spreadValues({}, data);
668
- newData.zones = data.zones || {};
704
+ const newData = __spreadProps(__spreadValues({}, data), {
705
+ zones: data.zones || {}
706
+ });
669
707
  newData.zones[zoneKey] = newData.zones[zoneKey] || [];
670
708
  return newData;
671
709
  };
672
710
 
673
711
  // lib/get-item.ts
674
- var getItem = (selector, data, dynamicProps = {}) => {
712
+ function getItem(selector, data, dynamicProps = {}) {
675
713
  if (!selector.zone || selector.zone === rootDroppableId) {
676
714
  const item2 = data.content[selector.index];
677
715
  return (item2 == null ? void 0 : item2.props) ? __spreadProps(__spreadValues({}, item2), { props: dynamicProps[item2.props.id] || item2.props }) : void 0;
678
716
  }
679
717
  const item = setupZone(data, selector.zone).zones[selector.zone][selector.index];
680
718
  return (item == null ? void 0 : item.props) ? __spreadProps(__spreadValues({}, item), { props: dynamicProps[item.props.id] || item.props }) : void 0;
681
- };
719
+ }
682
720
 
683
721
  // components/ViewportControls/default-viewports.ts
684
722
  init_react_import();
@@ -692,7 +730,7 @@ var defaultViewports = [
692
730
  var import_ua_parser_js = require("ua-parser-js");
693
731
  var import_jsx_runtime4 = require("react/jsx-runtime");
694
732
  var defaultAppState = {
695
- data: { content: [], root: { props: {} } },
733
+ data: { content: [], root: {} },
696
734
  ui: {
697
735
  leftSideBarVisible: true,
698
736
  rightSideBarVisible: true,
@@ -1427,6 +1465,7 @@ var ExternalInput = ({
1427
1465
  value && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1428
1466
  "button",
1429
1467
  {
1468
+ type: "button",
1430
1469
  className: getClassName10("detachButton"),
1431
1470
  onClick: () => {
1432
1471
  onChange(null);
@@ -1483,7 +1522,7 @@ var ExternalInput = ({
1483
1522
  }
1484
1523
  ) })
1485
1524
  ] })
1486
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Heading, { rank: 2, size: "xs", children: field.placeholder || "Select data" }) }),
1525
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Heading, { rank: "2", size: "xs", children: field.placeholder || "Select data" }) }),
1487
1526
  /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: getClassNameModal("grid"), children: [
1488
1527
  hasFilterFields && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: getClassNameModal("filters"), children: hasFilterFields && Object.keys(filterFields).map((fieldName) => {
1489
1528
  const filterField = filterFields[fieldName];
@@ -2898,6 +2937,7 @@ var SidebarSection = ({
2898
2937
  /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2899
2938
  "button",
2900
2939
  {
2940
+ type: "button",
2901
2941
  className: getClassName19("breadcrumbLabel"),
2902
2942
  onClick: () => setUi({ itemSelector: breadcrumb.selector }),
2903
2943
  children: breadcrumb.label
@@ -2905,7 +2945,7 @@ var SidebarSection = ({
2905
2945
  ),
2906
2946
  /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ChevronRight, { size: 16 })
2907
2947
  ] }, i)) : null,
2908
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: getClassName19("heading"), children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Heading, { rank: 2, size: "xs", children: title }) })
2948
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: getClassName19("heading"), children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Heading, { rank: "2", size: "xs", children: title }) })
2909
2949
  ] }) }),
2910
2950
  /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: getClassName19("content"), children }),
2911
2951
  isLoading && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: getClassName19("loadingOverlay"), children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Loader, { size: 32 }) })
@@ -2938,7 +2978,7 @@ var remove = (list, index) => {
2938
2978
 
2939
2979
  // lib/reduce-related-zones.ts
2940
2980
  init_react_import();
2941
- var reduceRelatedZones = (item, data, fn) => {
2981
+ function reduceRelatedZones(item, data, fn) {
2942
2982
  return __spreadProps(__spreadValues({}, data), {
2943
2983
  zones: Object.keys(data.zones || {}).reduce(
2944
2984
  (acc, key) => {
@@ -2952,28 +2992,34 @@ var reduceRelatedZones = (item, data, fn) => {
2952
2992
  {}
2953
2993
  )
2954
2994
  });
2955
- };
2995
+ }
2956
2996
  var findRelatedByZoneId = (zoneId, data) => {
2957
2997
  const [zoneParentId] = getZoneId(zoneId);
2958
- return (data.zones[zoneId] || []).reduce((acc, zoneItem) => {
2959
- const related = findRelatedByItem(zoneItem, data);
2960
- if (zoneItem.props.id === zoneParentId) {
2961
- return __spreadProps(__spreadValues(__spreadValues({}, acc), related), { [zoneId]: zoneItem });
2962
- }
2963
- return __spreadValues(__spreadValues({}, acc), related);
2964
- }, {});
2998
+ return (data.zones[zoneId] || []).reduce(
2999
+ (acc, zoneItem) => {
3000
+ const related = findRelatedByItem(zoneItem, data);
3001
+ if (zoneItem.props.id === zoneParentId) {
3002
+ return __spreadProps(__spreadValues(__spreadValues({}, acc), related), { [zoneId]: zoneItem });
3003
+ }
3004
+ return __spreadValues(__spreadValues({}, acc), related);
3005
+ },
3006
+ {}
3007
+ );
2965
3008
  };
2966
3009
  var findRelatedByItem = (item, data) => {
2967
- return Object.keys(data.zones || {}).reduce((acc, zoneId) => {
2968
- const [zoneParentId] = getZoneId(zoneId);
2969
- if (item.props.id === zoneParentId) {
2970
- const related = findRelatedByZoneId(zoneId, data);
2971
- return __spreadProps(__spreadValues(__spreadValues({}, acc), related), {
2972
- [zoneId]: data.zones[zoneId]
2973
- });
2974
- }
2975
- return acc;
2976
- }, {});
3010
+ return Object.keys(data.zones || {}).reduce(
3011
+ (acc, zoneId) => {
3012
+ const [zoneParentId] = getZoneId(zoneId);
3013
+ if (item.props.id === zoneParentId) {
3014
+ const related = findRelatedByZoneId(zoneId, data);
3015
+ return __spreadProps(__spreadValues(__spreadValues({}, acc), related), {
3016
+ [zoneId]: data.zones[zoneId]
3017
+ });
3018
+ }
3019
+ return acc;
3020
+ },
3021
+ {}
3022
+ );
2977
3023
  };
2978
3024
  var removeRelatedZones = (item, data) => {
2979
3025
  const newData = __spreadValues({}, data);
@@ -2983,7 +3029,7 @@ var removeRelatedZones = (item, data) => {
2983
3029
  });
2984
3030
  return newData;
2985
3031
  };
2986
- var duplicateRelatedZones = (item, data, newId) => {
3032
+ function duplicateRelatedZones(item, data, newId) {
2987
3033
  return reduceRelatedZones(item, data, (acc, key, zone) => {
2988
3034
  const dupedZone = zone.map((zoneItem) => __spreadProps(__spreadValues({}, zoneItem), {
2989
3035
  props: __spreadProps(__spreadValues({}, zoneItem.props), { id: generateId(zoneItem.type) })
@@ -2998,7 +3044,7 @@ var duplicateRelatedZones = (item, data, newId) => {
2998
3044
  [`${newId}:${zoneId}`]: dupedZone
2999
3045
  });
3000
3046
  });
3001
- };
3047
+ }
3002
3048
 
3003
3049
  // reducer/data.ts
3004
3050
  var zoneCache = {};
@@ -3022,7 +3068,7 @@ var replaceAction = (data, action) => {
3022
3068
  })
3023
3069
  });
3024
3070
  };
3025
- var insertAction = (data, action, config) => {
3071
+ function insertAction(data, action, config) {
3026
3072
  const emptyComponentData = {
3027
3073
  type: action.componentType,
3028
3074
  props: __spreadProps(__spreadValues({}, config.components[action.componentType].defaultProps || {}), {
@@ -3048,8 +3094,8 @@ var insertAction = (data, action, config) => {
3048
3094
  )
3049
3095
  })
3050
3096
  });
3051
- };
3052
- var reduceData = (data, action, config) => {
3097
+ }
3098
+ function reduceData(data, action, config) {
3053
3099
  if (action.type === "insert") {
3054
3100
  return insertAction(data, action, config);
3055
3101
  }
@@ -3198,7 +3244,7 @@ var reduceData = (data, action, config) => {
3198
3244
  return __spreadValues(__spreadValues({}, data), action.data(data));
3199
3245
  }
3200
3246
  return data;
3201
- };
3247
+ }
3202
3248
 
3203
3249
  // reducer/state.ts
3204
3250
  init_react_import();
@@ -3216,7 +3262,7 @@ var reduceUi = (ui, action) => {
3216
3262
  init_react_import();
3217
3263
 
3218
3264
  // reducer/index.ts
3219
- var storeInterceptor = (reducer, record, onAction) => {
3265
+ function storeInterceptor(reducer, record, onAction) {
3220
3266
  return (state, action) => {
3221
3267
  const newAppState = reducer(state, action);
3222
3268
  const isValidType = ![
@@ -3232,7 +3278,7 @@ var storeInterceptor = (reducer, record, onAction) => {
3232
3278
  onAction == null ? void 0 : onAction(action, newAppState, state);
3233
3279
  return newAppState;
3234
3280
  };
3235
- };
3281
+ }
3236
3282
  var setAction = (state, action) => {
3237
3283
  if (typeof action.state === "object") {
3238
3284
  return __spreadValues(__spreadValues({}, state), action.state);
@@ -3347,28 +3393,30 @@ var applyDynamicProps = (data, dynamicProps, rootData) => {
3347
3393
  // lib/resolve-root-data.ts
3348
3394
  init_react_import();
3349
3395
  var cache3 = {};
3350
- var resolveRootData = (data, config) => __async(void 0, null, function* () {
3351
- var _a, _b, _c, _d, _e;
3352
- if (((_a = config.root) == null ? void 0 : _a.resolveData) && data.root.props) {
3353
- if (((_b = cache3.lastChange) == null ? void 0 : _b.original) === data.root) {
3354
- return cache3.lastChange.resolved;
3396
+ function resolveRootData(data, config) {
3397
+ return __async(this, null, function* () {
3398
+ var _a, _b, _c, _d, _e;
3399
+ if (((_a = config.root) == null ? void 0 : _a.resolveData) && data.root.props) {
3400
+ if (((_b = cache3.lastChange) == null ? void 0 : _b.original) === data.root) {
3401
+ return cache3.lastChange.resolved;
3402
+ }
3403
+ const changed = getChanged(data.root, (_c = cache3.lastChange) == null ? void 0 : _c.original);
3404
+ const rootWithProps = data.root;
3405
+ const resolvedRoot = yield (_e = config.root) == null ? void 0 : _e.resolveData(rootWithProps, {
3406
+ changed,
3407
+ lastData: ((_d = cache3.lastChange) == null ? void 0 : _d.original) || {}
3408
+ });
3409
+ cache3.lastChange = {
3410
+ original: data.root,
3411
+ resolved: resolvedRoot
3412
+ };
3413
+ return __spreadProps(__spreadValues(__spreadValues({}, data.root), resolvedRoot), {
3414
+ props: __spreadValues(__spreadValues({}, data.root.props), resolvedRoot.props)
3415
+ });
3355
3416
  }
3356
- const changed = getChanged(data.root, (_c = cache3.lastChange) == null ? void 0 : _c.original);
3357
- const rootWithProps = data.root;
3358
- const resolvedRoot = yield (_e = config.root) == null ? void 0 : _e.resolveData(rootWithProps, {
3359
- changed,
3360
- lastData: ((_d = cache3.lastChange) == null ? void 0 : _d.original) || {}
3361
- });
3362
- cache3.lastChange = {
3363
- original: data.root,
3364
- resolved: resolvedRoot
3365
- };
3366
- return __spreadProps(__spreadValues(__spreadValues({}, data.root), resolvedRoot), {
3367
- props: __spreadValues(__spreadValues({}, data.root.props), resolvedRoot.props)
3368
- });
3369
- }
3370
- return data.root;
3371
- });
3417
+ return data.root;
3418
+ });
3419
+ }
3372
3420
 
3373
3421
  // lib/use-resolved-data.ts
3374
3422
  var useResolvedData = (appState, config, dispatch) => {
@@ -3473,15 +3521,14 @@ var styles_module_default14 = { "MenuBar": "_MenuBar_8pf8c_1", "MenuBar--menuOpe
3473
3521
  // components/MenuBar/index.tsx
3474
3522
  var import_jsx_runtime27 = require("react/jsx-runtime");
3475
3523
  var getClassName20 = get_class_name_factory_default("MenuBar", styles_module_default14);
3476
- var MenuBar = ({
3524
+ function MenuBar({
3477
3525
  appState,
3478
- data = { content: [], root: {} },
3479
3526
  dispatch,
3480
3527
  menuOpen = false,
3481
3528
  onPublish,
3482
3529
  renderHeaderActions,
3483
3530
  setMenuOpen
3484
- }) => {
3531
+ }) {
3485
3532
  const {
3486
3533
  history: { back, forward, historyStore }
3487
3534
  } = useAppContext();
@@ -3512,7 +3559,7 @@ var MenuBar = ({
3512
3559
  ] })
3513
3560
  }
3514
3561
  );
3515
- };
3562
+ }
3516
3563
 
3517
3564
  // css-module:/home/runner/work/puck/puck/packages/core/components/Puck/styles.module.css#css-module
3518
3565
  init_react_import();
@@ -3545,9 +3592,7 @@ var useResolvedFields = () => {
3545
3592
  const componentConfig = selectedItem ? config.components[selectedItem.type] : null;
3546
3593
  const defaultFields = selectedItem ? componentConfig == null ? void 0 : componentConfig.fields : rootFields;
3547
3594
  const rootProps = data.root.props || data.root;
3548
- const [lastSelectedData, setLastSelectedData] = (0, import_react20.useState)(
3549
- {}
3550
- );
3595
+ const [lastSelectedData, setLastSelectedData] = (0, import_react20.useState)({});
3551
3596
  const [resolvedFields, setResolvedFields] = (0, import_react20.useState)(defaultFields || {});
3552
3597
  const [fieldsLoading, setFieldsLoading] = (0, import_react20.useState)(false);
3553
3598
  const defaultResolveFields = (_componentData, _params) => defaultFields;
@@ -3710,7 +3755,7 @@ var Fields = () => {
3710
3755
  `${selectedItem.props.id}_${fieldName}`
3711
3756
  );
3712
3757
  } else {
3713
- const { readOnly = {} } = data.root;
3758
+ const readOnly = data.root.readOnly || {};
3714
3759
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3715
3760
  AutoFieldPrivate,
3716
3761
  {
@@ -3782,6 +3827,7 @@ var ComponentList = ({
3782
3827
  title && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
3783
3828
  "button",
3784
3829
  {
3830
+ type: "button",
3785
3831
  className: getClassName22("title"),
3786
3832
  onClick: () => setUi({
3787
3833
  componentList: __spreadProps(__spreadValues({}, state.ui.componentList), {
@@ -4165,13 +4211,9 @@ var Preview = ({ id = "puck-preview" }) => {
4165
4211
  const Page = (0, import_react24.useCallback)(
4166
4212
  (pageProps) => {
4167
4213
  var _a, _b;
4168
- return ((_a = config.root) == null ? void 0 : _a.render) ? (_b = config.root) == null ? void 0 : _b.render(__spreadProps(__spreadValues({
4214
+ return ((_a = config.root) == null ? void 0 : _a.render) ? (_b = config.root) == null ? void 0 : _b.render(__spreadValues({
4169
4215
  id: "puck-root"
4170
- }, pageProps), {
4171
- editMode: true,
4172
- // DEPRECATED
4173
- puck: { renderDropZone: DropZone, isEditing: true }
4174
- })) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_jsx_runtime33.Fragment, { children: pageProps.children });
4216
+ }, pageProps)) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_jsx_runtime33.Fragment, { children: pageProps.children });
4175
4217
  },
4176
4218
  [config.root]
4177
4219
  );
@@ -4195,14 +4237,28 @@ var Preview = ({ id = "puck-preview" }) => {
4195
4237
  setStatus("READY");
4196
4238
  },
4197
4239
  children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(autoFrameContext.Consumer, { children: ({ document: document2 }) => {
4198
- const inner = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Page, __spreadProps(__spreadValues({ dispatch, state }, rootProps), { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(DropZone, { zone: rootDroppableId }) }));
4240
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4241
+ Page,
4242
+ __spreadProps(__spreadValues({}, rootProps), {
4243
+ puck: { renderDropZone: DropZone, isEditing: true },
4244
+ editMode: true,
4245
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(DropZone, { zone: rootDroppableId })
4246
+ })
4247
+ );
4199
4248
  if (Frame) {
4200
4249
  return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Frame, { document: document2, children: inner });
4201
4250
  }
4202
4251
  return inner;
4203
4252
  } })
4204
4253
  }
4205
- ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { id: "preview-frame", className: getClassName23("frame"), children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Page, __spreadProps(__spreadValues({ dispatch, state }, rootProps), { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(DropZone, { zone: rootDroppableId }) })) })
4254
+ ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { id: "preview-frame", className: getClassName23("frame"), children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4255
+ Page,
4256
+ __spreadProps(__spreadValues({}, rootProps), {
4257
+ puck: { renderDropZone: DropZone, isEditing: true },
4258
+ editMode: true,
4259
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(DropZone, { zone: rootDroppableId })
4260
+ })
4261
+ ) })
4206
4262
  }
4207
4263
  );
4208
4264
  };
@@ -4316,6 +4372,7 @@ var LayerTree = ({
4316
4372
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: getClassNameLayer("inner"), children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
4317
4373
  "button",
4318
4374
  {
4375
+ type: "button",
4319
4376
  className: getClassNameLayer("clickable"),
4320
4377
  onClick: () => {
4321
4378
  if (isSelected) {
@@ -4443,14 +4500,14 @@ function usePuckHistory({
4443
4500
  if (historyStore.hasPast) {
4444
4501
  dispatch({
4445
4502
  type: "set",
4446
- state: ((_a = historyStore.prevHistory) == null ? void 0 : _a.data) || initialAppState
4503
+ state: ((_a = historyStore.prevHistory) == null ? void 0 : _a.state) || initialAppState
4447
4504
  });
4448
4505
  historyStore.back();
4449
4506
  }
4450
4507
  };
4451
4508
  const forward = () => {
4452
4509
  if (historyStore.nextHistory) {
4453
- dispatch({ type: "set", state: historyStore.nextHistory.data });
4510
+ dispatch({ type: "set", state: historyStore.nextHistory.state });
4454
4511
  historyStore.forward();
4455
4512
  }
4456
4513
  };
@@ -4458,7 +4515,7 @@ function usePuckHistory({
4458
4515
  var _a;
4459
4516
  dispatch({
4460
4517
  type: "set",
4461
- state: ((_a = histories[histories.length - 1]) == null ? void 0 : _a.data) || initialAppState
4518
+ state: ((_a = histories[histories.length - 1]) == null ? void 0 : _a.state) || initialAppState
4462
4519
  });
4463
4520
  historyStore.setHistories(histories);
4464
4521
  };
@@ -4467,7 +4524,7 @@ function usePuckHistory({
4467
4524
  if (historyStore.histories.length > index) {
4468
4525
  dispatch({
4469
4526
  type: "set",
4470
- state: ((_a = historyStore.histories[index]) == null ? void 0 : _a.data) || initialAppState
4527
+ state: ((_a = historyStore.histories[index]) == null ? void 0 : _a.state) || initialAppState
4471
4528
  });
4472
4529
  historyStore.setHistoryIndex(index);
4473
4530
  }
@@ -4488,7 +4545,7 @@ function usePuckHistory({
4488
4545
  init_react_import();
4489
4546
  var import_react27 = require("react");
4490
4547
  var import_use_debounce3 = require("use-debounce");
4491
- var EMPTY_HISTORY_INDEX = -1;
4548
+ var EMPTY_HISTORY_INDEX = 0;
4492
4549
  function useHistoryStore(initialHistory) {
4493
4550
  var _a, _b;
4494
4551
  const [histories, setHistories] = (0, import_react27.useState)(
@@ -4506,9 +4563,9 @@ function useHistoryStore(initialHistory) {
4506
4563
  const currentHistory = histories[index];
4507
4564
  const nextHistory = hasFuture ? histories[index + 1] : null;
4508
4565
  const prevHistory = hasPast ? histories[index - 1] : null;
4509
- const record = (0, import_use_debounce3.useDebouncedCallback)((data) => {
4566
+ const record = (0, import_use_debounce3.useDebouncedCallback)((state) => {
4510
4567
  const history = {
4511
- data,
4568
+ state,
4512
4569
  id: generateId("history")
4513
4570
  };
4514
4571
  updateHistories([...histories.slice(0, index + 1), history]);
@@ -4805,7 +4862,7 @@ var ViewportControls = ({
4805
4862
 
4806
4863
  // css-module:/home/runner/work/puck/puck/packages/core/components/Puck/components/Canvas/styles.module.css#css-module
4807
4864
  init_react_import();
4808
- var styles_module_default21 = { "PuckCanvas": "_PuckCanvas_6zd4y_1", "PuckCanvas-controls": "_PuckCanvas-controls_6zd4y_16", "PuckCanvas-inner": "_PuckCanvas-inner_6zd4y_21", "PuckCanvas-root": "_PuckCanvas-root_6zd4y_32", "PuckCanvas--ready": "_PuckCanvas--ready_6zd4y_56" };
4865
+ var styles_module_default21 = { "PuckCanvas": "_PuckCanvas_esbg1_1", "PuckCanvas-controls": "_PuckCanvas-controls_esbg1_16", "PuckCanvas-inner": "_PuckCanvas-inner_esbg1_21", "PuckCanvas-root": "_PuckCanvas-root_esbg1_32", "PuckCanvas--ready": "_PuckCanvas--ready_esbg1_56", "PuckCanvas-loader": "_PuckCanvas-loader_esbg1_60", "PuckCanvas--showLoader": "_PuckCanvas--showLoader_esbg1_70" };
4809
4866
 
4810
4867
  // lib/get-zoom-config.ts
4811
4868
  init_react_import();
@@ -4885,6 +4942,12 @@ var Canvas = () => {
4885
4942
  }));
4886
4943
  }
4887
4944
  }, [zoomConfig.zoom]);
4945
+ (0, import_react29.useEffect)(() => {
4946
+ if (ZOOM_ON_CHANGE) {
4947
+ setShowTransition(true);
4948
+ resetAutoZoom(ui);
4949
+ }
4950
+ }, [ui.viewports.current.width]);
4888
4951
  (0, import_react29.useEffect)(() => {
4889
4952
  const observer = new ResizeObserver(() => {
4890
4953
  setShowTransition(false);
@@ -4897,11 +4960,18 @@ var Canvas = () => {
4897
4960
  observer.disconnect();
4898
4961
  };
4899
4962
  }, []);
4963
+ const [showLoader, setShowLoader] = (0, import_react29.useState)(false);
4964
+ (0, import_react29.useEffect)(() => {
4965
+ setTimeout(() => {
4966
+ setShowLoader(true);
4967
+ }, 500);
4968
+ }, []);
4900
4969
  return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
4901
4970
  "div",
4902
4971
  {
4903
4972
  className: getClassName26({
4904
- ready: status === "READY" || !iframe.enabled
4973
+ ready: status === "READY" || !iframe.enabled,
4974
+ showLoader
4905
4975
  }),
4906
4976
  onClick: () => dispatch({
4907
4977
  type: "setUi",
@@ -4934,21 +5004,24 @@ var Canvas = () => {
4934
5004
  }
4935
5005
  }
4936
5006
  ) }),
4937
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: getClassName26("inner"), ref: frameRef, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4938
- "div",
4939
- {
4940
- className: getClassName26("root"),
4941
- style: {
4942
- width: iframe.enabled ? ui.viewports.current.width : "100%",
4943
- height: zoomConfig.rootHeight,
4944
- transform: iframe.enabled ? `scale(${zoomConfig.zoom})` : void 0,
4945
- transition: showTransition ? "width 150ms ease-out, height 150ms ease-out, transform 150ms ease-out" : "",
4946
- overflow: iframe.enabled ? void 0 : "auto"
4947
- },
4948
- suppressHydrationWarning: true,
4949
- children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CustomPreview, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Preview, {}) })
4950
- }
4951
- ) })
5007
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: getClassName26("inner"), ref: frameRef, children: [
5008
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5009
+ "div",
5010
+ {
5011
+ className: getClassName26("root"),
5012
+ style: {
5013
+ width: iframe.enabled ? ui.viewports.current.width : "100%",
5014
+ height: zoomConfig.rootHeight,
5015
+ transform: iframe.enabled ? `scale(${zoomConfig.zoom})` : void 0,
5016
+ transition: showTransition ? "width 150ms ease-out, height 150ms ease-out, transform 150ms ease-out" : "",
5017
+ overflow: iframe.enabled ? void 0 : "auto"
5018
+ },
5019
+ suppressHydrationWarning: true,
5020
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CustomPreview, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Preview, {}) })
5021
+ }
5022
+ ),
5023
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: getClassName26("loader"), children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Loader, { size: 24 }) })
5024
+ ] })
4952
5025
  ]
4953
5026
  }
4954
5027
  );
@@ -4973,7 +5046,10 @@ var insertComponent = (componentType, zone, index, {
4973
5046
  const insertedData = insertAction(state.data, insertActionData, config);
4974
5047
  dispatch(__spreadProps(__spreadValues({}, insertActionData), {
4975
5048
  // Dispatch insert rather set, as user's may rely on this via onAction
4976
- recordHistory: false
5049
+ // We must always record history here so the insert is added to user history
5050
+ // If the user has defined a resolveData method, they will end up with 2 history
5051
+ // entries on insert - one for the initial insert, and one when the data resolves
5052
+ recordHistory: true
4977
5053
  }));
4978
5054
  const itemSelector = {
4979
5055
  index,
@@ -4998,7 +5074,8 @@ var loadOverrides = ({
4998
5074
  }) => {
4999
5075
  const collected = __spreadValues({}, overrides);
5000
5076
  plugins == null ? void 0 : plugins.forEach((plugin) => {
5001
- Object.keys(plugin.overrides).forEach((overridesType) => {
5077
+ Object.keys(plugin.overrides).forEach((_overridesType) => {
5078
+ const overridesType = _overridesType;
5002
5079
  if (overridesType === "fieldTypes") {
5003
5080
  const fieldTypes = plugin.overrides.fieldTypes;
5004
5081
  Object.keys(fieldTypes).forEach((fieldType) => {
@@ -5038,7 +5115,7 @@ var getLayoutClassName = get_class_name_factory_default("PuckLayout", styles_mod
5038
5115
  function Puck({
5039
5116
  children,
5040
5117
  config,
5041
- data: initialData = { content: [], root: {} },
5118
+ data: initialData,
5042
5119
  ui: initialUi,
5043
5120
  onChange,
5044
5121
  onPublish,
@@ -5055,15 +5132,11 @@ function Puck({
5055
5132
  enabled: true
5056
5133
  },
5057
5134
  dnd,
5058
- initialHistory
5135
+ initialHistory: _initialHistory
5059
5136
  }) {
5060
5137
  var _a;
5061
- const historyStore = useHistoryStore(initialHistory);
5062
- const [reducer] = (0, import_react31.useState)(
5063
- () => createReducer({ config, record: historyStore.record, onAction })
5064
- );
5065
- const [initialAppState] = (0, import_react31.useState)(() => {
5066
- var _a2, _b, _c, _d, _e, _f, _g;
5138
+ const [generatedAppState] = (0, import_react31.useState)(() => {
5139
+ var _a2, _b, _c, _d, _e, _f, _g, _h, _i;
5067
5140
  const initial = __spreadValues(__spreadValues({}, defaultAppState.ui), initialUi);
5068
5141
  let clientUiState = {};
5069
5142
  if (typeof window !== "undefined") {
@@ -5083,20 +5156,20 @@ function Puck({
5083
5156
  clientUiState = {
5084
5157
  viewports: __spreadProps(__spreadValues({}, initial.viewports), {
5085
5158
  current: __spreadProps(__spreadValues({}, initial.viewports.current), {
5086
- height: ((_b = (_a2 = initialUi == null ? void 0 : initialUi.viewports) == null ? void 0 : _a2.current) == null ? void 0 : _b.height) || viewports[closestViewport].height || "auto",
5087
- width: ((_d = (_c = initialUi == null ? void 0 : initialUi.viewports) == null ? void 0 : _c.current) == null ? void 0 : _d.width) || viewports[closestViewport].width
5159
+ height: ((_b = (_a2 = initialUi == null ? void 0 : initialUi.viewports) == null ? void 0 : _a2.current) == null ? void 0 : _b.height) || ((_c = viewports[closestViewport]) == null ? void 0 : _c.height) || "auto",
5160
+ width: ((_e = (_d = initialUi == null ? void 0 : initialUi.viewports) == null ? void 0 : _d.current) == null ? void 0 : _e.width) || ((_f = viewports[closestViewport]) == null ? void 0 : _f.width)
5088
5161
  })
5089
5162
  })
5090
5163
  };
5091
5164
  }
5092
5165
  }
5093
- if (Object.keys((initialData == null ? void 0 : initialData.root) || {}).length > 0 && !((_e = initialData == null ? void 0 : initialData.root) == null ? void 0 : _e.props)) {
5166
+ if (Object.keys((initialData == null ? void 0 : initialData.root) || {}).length > 0 && !((_g = initialData == null ? void 0 : initialData.root) == null ? void 0 : _g.props)) {
5094
5167
  console.error(
5095
5168
  "Warning: Defining props on `root` is deprecated. Please use `root.props`, or republish this page to migrate automatically."
5096
5169
  );
5097
5170
  }
5098
- const rootProps2 = ((_f = initialData == null ? void 0 : initialData.root) == null ? void 0 : _f.props) || (initialData == null ? void 0 : initialData.root) || {};
5099
- const defaultedRootProps = __spreadValues(__spreadValues({}, (_g = config.root) == null ? void 0 : _g.defaultProps), rootProps2);
5171
+ const rootProps2 = ((_h = initialData == null ? void 0 : initialData.root) == null ? void 0 : _h.props) || (initialData == null ? void 0 : initialData.root) || {};
5172
+ const defaultedRootProps = __spreadValues(__spreadValues({}, (_i = config.root) == null ? void 0 : _i.defaultProps), rootProps2);
5100
5173
  return __spreadProps(__spreadValues({}, defaultAppState), {
5101
5174
  data: __spreadProps(__spreadValues({}, initialData), {
5102
5175
  root: __spreadProps(__spreadValues({}, initialData == null ? void 0 : initialData.root), { props: defaultedRootProps }),
@@ -5120,6 +5193,27 @@ function Puck({
5120
5193
  })
5121
5194
  });
5122
5195
  });
5196
+ const { appendData = true } = _initialHistory || {};
5197
+ const histories = [
5198
+ ...(_initialHistory == null ? void 0 : _initialHistory.histories) || [],
5199
+ ...appendData ? [{ state: generatedAppState }] : []
5200
+ ].map((history2) => __spreadProps(__spreadValues({}, history2), {
5201
+ // Inject default data to enable partial history injections
5202
+ state: __spreadValues(__spreadValues({}, generatedAppState), history2.state)
5203
+ }));
5204
+ const initialHistoryIndex = (_initialHistory == null ? void 0 : _initialHistory.index) || histories.length - 1;
5205
+ const initialAppState = histories[initialHistoryIndex].state;
5206
+ const historyStore = useHistoryStore({
5207
+ histories,
5208
+ index: initialHistoryIndex
5209
+ });
5210
+ const [reducer] = (0, import_react31.useState)(
5211
+ () => createReducer({
5212
+ config,
5213
+ record: historyStore.record,
5214
+ onAction
5215
+ })
5216
+ );
5123
5217
  const [appState, dispatch] = (0, import_react31.useReducer)(
5124
5218
  reducer,
5125
5219
  flushZones(initialAppState)
@@ -5388,7 +5482,7 @@ function Puck({
5388
5482
  }
5389
5483
  )
5390
5484
  ] }),
5391
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: getLayoutClassName("headerTitle"), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(Heading, { rank: 2, size: "xs", children: [
5485
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: getLayoutClassName("headerTitle"), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(Heading, { rank: "2", size: "xs", children: [
5392
5486
  headerTitle || rootProps.title || "Page",
5393
5487
  headerPath && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
5394
5488
  " ",
@@ -5416,7 +5510,6 @@ function Puck({
5416
5510
  MenuBar,
5417
5511
  {
5418
5512
  appState,
5419
- data,
5420
5513
  dispatch,
5421
5514
  onPublish,
5422
5515
  menuOpen,
@@ -5472,10 +5565,7 @@ Puck.Preview = Preview;
5472
5565
  // components/Render/index.tsx
5473
5566
  init_react_import();
5474
5567
  var import_jsx_runtime39 = require("react/jsx-runtime");
5475
- function Render({
5476
- config,
5477
- data
5478
- }) {
5568
+ function Render({ config, data }) {
5479
5569
  var _a;
5480
5570
  const defaultedData = __spreadProps(__spreadValues({}, data), {
5481
5571
  root: data.root || {},
@@ -5656,6 +5746,7 @@ var usePuck = () => {
5656
5746
  Render,
5657
5747
  dropZoneContext,
5658
5748
  migrate,
5749
+ overrideKeys,
5659
5750
  resolveAllData,
5660
5751
  transformProps,
5661
5752
  usePuck