@measured/puck 0.17.4-canary.18f0d46 → 0.17.4-canary.5c60d6a

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.d.mts CHANGED
@@ -156,7 +156,9 @@ declare function Puck<UserConfig extends Config = Config, G extends UserGenerics
156
156
  }): react_jsx_runtime.JSX.Element;
157
157
  declare namespace Puck {
158
158
  var Components: () => react_jsx_runtime.JSX.Element;
159
- var Fields: () => react_jsx_runtime.JSX.Element;
159
+ var Fields: ({ wrapFields }: {
160
+ wrapFields?: boolean;
161
+ }) => react_jsx_runtime.JSX.Element;
160
162
  var Outline: () => react_jsx_runtime.JSX.Element;
161
163
  var Preview: ({ id }: {
162
164
  id?: string;
package/dist/index.d.ts CHANGED
@@ -156,7 +156,9 @@ declare function Puck<UserConfig extends Config = Config, G extends UserGenerics
156
156
  }): react_jsx_runtime.JSX.Element;
157
157
  declare namespace Puck {
158
158
  var Components: () => react_jsx_runtime.JSX.Element;
159
- var Fields: () => react_jsx_runtime.JSX.Element;
159
+ var Fields: ({ wrapFields }: {
160
+ wrapFields?: boolean;
161
+ }) => react_jsx_runtime.JSX.Element;
160
162
  var Outline: () => react_jsx_runtime.JSX.Element;
161
163
  var Preview: ({ id }: {
162
164
  id?: string;
package/dist/index.js CHANGED
@@ -3345,7 +3345,7 @@ function DropZone(props) {
3345
3345
 
3346
3346
  // components/Puck/index.tsx
3347
3347
  init_react_import();
3348
- var import_react37 = require("react");
3348
+ var import_react39 = require("react");
3349
3349
 
3350
3350
  // lib/use-placeholder-style.ts
3351
3351
  init_react_import();
@@ -3956,33 +3956,58 @@ init_react_import();
3956
3956
  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" };
3957
3957
 
3958
3958
  // components/Puck/components/Fields/index.tsx
3959
- var import_react26 = require("react");
3959
+ var import_react28 = require("react");
3960
+
3961
+ // lib/use-resolved-fields.ts
3962
+ init_react_import();
3963
+ var import_react27 = require("react");
3960
3964
 
3961
3965
  // lib/use-parent.ts
3962
3966
  init_react_import();
3963
3967
  var import_react25 = require("react");
3964
- var useParent = (itemSelector) => {
3968
+ var getParent = (itemSelector, pathData, data) => {
3965
3969
  var _a;
3966
- const { selectedItem, state } = useAppContext();
3967
- const { pathData } = (0, import_react25.useContext)(dropZoneContext) || {};
3968
- const item = itemSelector ? getItem(itemSelector, state.data) : selectedItem;
3969
- const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, state.data);
3970
+ if (!itemSelector) return null;
3971
+ const item = getItem(itemSelector, data);
3972
+ const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, data);
3970
3973
  const lastItem = breadcrumbs[breadcrumbs.length - 1];
3971
- const parent = (lastItem == null ? void 0 : lastItem.selector) ? (_a = getItem(lastItem.selector, state.data)) != null ? _a : null : null;
3974
+ const parent = (lastItem == null ? void 0 : lastItem.selector) ? (_a = getItem(lastItem.selector, data)) != null ? _a : null : null;
3972
3975
  return parent || null;
3973
3976
  };
3977
+ var useGetParent = () => {
3978
+ const { state } = useAppContext();
3979
+ const { pathData } = (0, import_react25.useContext)(dropZoneContext) || {};
3980
+ return (0, import_react25.useCallback)(
3981
+ () => getParent(state.ui.itemSelector, pathData, state.data),
3982
+ [state.ui.itemSelector, pathData, state.data]
3983
+ );
3984
+ };
3985
+ var useParent = () => {
3986
+ return useGetParent()();
3987
+ };
3974
3988
 
3975
- // components/Puck/components/Fields/index.tsx
3976
- var import_jsx_runtime28 = require("react/jsx-runtime");
3977
- var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
3989
+ // lib/use-on-value-change.ts
3990
+ init_react_import();
3991
+ var import_react26 = require("react");
3992
+ function useOnValueChange(value, onChange, compare = Object.is, deps = []) {
3993
+ const tracked = (0, import_react26.useRef)(value);
3994
+ (0, import_react26.useEffect)(() => {
3995
+ const oldValue = tracked.current;
3996
+ if (!compare(value, oldValue)) {
3997
+ tracked.current = value;
3998
+ onChange(value, oldValue);
3999
+ }
4000
+ }, [onChange, compare, value, ...deps]);
4001
+ }
4002
+
4003
+ // lib/selector-is.ts
4004
+ init_react_import();
4005
+ var selectorIs = (a, b) => (a == null ? void 0 : a.zone) === (b == null ? void 0 : b.zone) && (a == null ? void 0 : a.index) === (b == null ? void 0 : b.index);
4006
+
4007
+ // lib/use-resolved-fields.ts
3978
4008
  var defaultPageFields = {
3979
4009
  title: { type: "text" }
3980
4010
  };
3981
- var DefaultFields = ({
3982
- children
3983
- }) => {
3984
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_jsx_runtime28.Fragment, { children });
3985
- };
3986
4011
  var useResolvedFields = () => {
3987
4012
  var _a, _b;
3988
4013
  const { selectedItem, state, config } = useAppContext();
@@ -3990,20 +4015,21 @@ var useResolvedFields = () => {
3990
4015
  const { data } = state;
3991
4016
  const rootFields = ((_a = config.root) == null ? void 0 : _a.fields) || defaultPageFields;
3992
4017
  const componentConfig = selectedItem ? config.components[selectedItem.type] : null;
3993
- const defaultFields = (0, import_react26.useMemo)(
4018
+ const defaultFields = (0, import_react27.useMemo)(
3994
4019
  () => (selectedItem ? componentConfig == null ? void 0 : componentConfig.fields : rootFields) || {},
3995
4020
  [selectedItem, rootFields, componentConfig == null ? void 0 : componentConfig.fields]
3996
4021
  );
3997
4022
  const rootProps = data.root.props || data.root;
3998
- const [lastSelectedData, setLastSelectedData] = (0, import_react26.useState)({});
3999
- const [resolvedFields, setResolvedFields] = (0, import_react26.useState)(defaultFields);
4000
- const [fieldsLoading, setFieldsLoading] = (0, import_react26.useState)(false);
4023
+ const [lastSelectedData, setLastSelectedData] = (0, import_react27.useState)({});
4024
+ const [resolvedFields, setResolvedFields] = (0, import_react27.useState)(defaultFields);
4025
+ const [fieldsLoading, setFieldsLoading] = (0, import_react27.useState)(false);
4026
+ const lastFields = (0, import_react27.useRef)(defaultFields);
4001
4027
  const defaultResolveFields = (_componentData, _params) => defaultFields;
4002
4028
  const componentData = selectedItem ? selectedItem : { props: rootProps, readOnly: data.root.readOnly };
4003
4029
  const hasComponentResolver = selectedItem && (componentConfig == null ? void 0 : componentConfig.resolveFields);
4004
4030
  const hasRootResolver = !selectedItem && ((_b = config.root) == null ? void 0 : _b.resolveFields);
4005
4031
  const hasResolver = hasComponentResolver || hasRootResolver;
4006
- const resolveFields = (0, import_react26.useCallback)(
4032
+ const resolveFields = (0, import_react27.useCallback)(
4007
4033
  (..._0) => __async(void 0, [..._0], function* (fields = {}) {
4008
4034
  var _a2;
4009
4035
  const lastData = ((_a2 = lastSelectedData.props) == null ? void 0 : _a2.id) === componentData.props.id ? lastSelectedData : null;
@@ -4015,7 +4041,7 @@ var useResolvedFields = () => {
4015
4041
  {
4016
4042
  changed,
4017
4043
  fields,
4018
- lastFields: resolvedFields,
4044
+ lastFields: lastFields.current,
4019
4045
  lastData,
4020
4046
  appState: state,
4021
4047
  parent
@@ -4026,7 +4052,7 @@ var useResolvedFields = () => {
4026
4052
  return yield config.root.resolveFields(componentData, {
4027
4053
  changed,
4028
4054
  fields,
4029
- lastFields: resolvedFields,
4055
+ lastFields: lastFields.current,
4030
4056
  lastData,
4031
4057
  appState: state,
4032
4058
  parent
@@ -4035,40 +4061,56 @@ var useResolvedFields = () => {
4035
4061
  return defaultResolveFields(componentData, {
4036
4062
  changed,
4037
4063
  fields,
4038
- lastFields: resolvedFields,
4064
+ lastFields: lastFields.current,
4039
4065
  lastData
4040
4066
  });
4041
4067
  }),
4042
- [data, config, componentData, selectedItem, resolvedFields, state, parent]
4068
+ [data, config, componentData, selectedItem, state, parent]
4043
4069
  );
4044
- const [hasParent, setHasParent] = (0, import_react26.useState)(false);
4045
- (0, import_react26.useEffect)(() => {
4046
- setHasParent(!!parent);
4047
- }, [parent]);
4048
- (0, import_react26.useEffect)(() => {
4070
+ const triggerResolver = (0, import_react27.useCallback)(() => {
4049
4071
  var _a2, _b2;
4050
- if (!((_a2 = state.ui.itemSelector) == null ? void 0 : _a2.zone) || ((_b2 = state.ui.itemSelector) == null ? void 0 : _b2.zone) === "default-zone" || hasParent) {
4072
+ if (!((_a2 = state.ui.itemSelector) == null ? void 0 : _a2.zone) || ((_b2 = state.ui.itemSelector) == null ? void 0 : _b2.zone) === "default-zone" || parent) {
4051
4073
  if (hasResolver) {
4052
4074
  setFieldsLoading(true);
4053
4075
  resolveFields(defaultFields).then((fields) => {
4054
4076
  setResolvedFields(fields || {});
4077
+ lastFields.current = fields;
4055
4078
  setFieldsLoading(false);
4056
4079
  });
4057
4080
  return;
4058
4081
  }
4059
4082
  }
4060
4083
  setResolvedFields(defaultFields);
4061
- }, [
4062
- data,
4063
- defaultFields,
4084
+ }, [defaultFields, state.ui.itemSelector, hasResolver, parent]);
4085
+ useOnValueChange(
4064
4086
  state.ui.itemSelector,
4065
- selectedItem,
4066
- hasResolver,
4067
- hasParent
4068
- ]);
4087
+ () => {
4088
+ lastFields.current = defaultFields;
4089
+ },
4090
+ selectorIs
4091
+ );
4092
+ useOnValueChange(
4093
+ { data, parent, itemSelector: state.ui.itemSelector },
4094
+ () => {
4095
+ triggerResolver();
4096
+ },
4097
+ (a, b) => JSON.stringify(a) === JSON.stringify(b)
4098
+ );
4099
+ (0, import_react27.useEffect)(() => {
4100
+ triggerResolver();
4101
+ }, []);
4069
4102
  return [resolvedFields, fieldsLoading];
4070
4103
  };
4071
- var Fields = () => {
4104
+
4105
+ // components/Puck/components/Fields/index.tsx
4106
+ var import_jsx_runtime28 = require("react/jsx-runtime");
4107
+ var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
4108
+ var DefaultFields = ({
4109
+ children
4110
+ }) => {
4111
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_jsx_runtime28.Fragment, { children });
4112
+ };
4113
+ var Fields = ({ wrapFields = true }) => {
4072
4114
  var _a, _b;
4073
4115
  const {
4074
4116
  selectedItem,
@@ -4086,7 +4128,7 @@ var Fields = () => {
4086
4128
  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;
4087
4129
  const isLoading = fieldsResolving || componentResolving;
4088
4130
  const rootProps = data.root.props || data.root;
4089
- const Wrapper = (0, import_react26.useMemo)(() => overrides.fields || DefaultFields, [overrides]);
4131
+ const Wrapper = (0, import_react28.useMemo)(() => overrides.fields || DefaultFields, [overrides]);
4090
4132
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
4091
4133
  "form",
4092
4134
  {
@@ -4209,7 +4251,7 @@ init_react_import();
4209
4251
 
4210
4252
  // lib/use-component-list.tsx
4211
4253
  init_react_import();
4212
- var import_react27 = require("react");
4254
+ var import_react29 = require("react");
4213
4255
 
4214
4256
  // components/ComponentList/index.tsx
4215
4257
  init_react_import();
@@ -4287,8 +4329,8 @@ ComponentList.Item = ComponentListItem;
4287
4329
  // lib/use-component-list.tsx
4288
4330
  var import_jsx_runtime30 = require("react/jsx-runtime");
4289
4331
  var useComponentList = (config, ui) => {
4290
- const [componentList, setComponentList] = (0, import_react27.useState)();
4291
- (0, import_react27.useEffect)(() => {
4332
+ const [componentList, setComponentList] = (0, import_react29.useState)();
4333
+ (0, import_react29.useEffect)(() => {
4292
4334
  var _a, _b, _c;
4293
4335
  if (Object.keys(ui.componentList).length > 0) {
4294
4336
  const matchedComponents = [];
@@ -4357,22 +4399,22 @@ var useComponentList = (config, ui) => {
4357
4399
  };
4358
4400
 
4359
4401
  // components/Puck/components/Components/index.tsx
4360
- var import_react28 = require("react");
4402
+ var import_react30 = require("react");
4361
4403
  var import_jsx_runtime31 = require("react/jsx-runtime");
4362
4404
  var Components = () => {
4363
4405
  const { config, state, overrides } = useAppContext();
4364
4406
  const componentList = useComponentList(config, state.ui);
4365
- const Wrapper = (0, import_react28.useMemo)(() => overrides.components || "div", [overrides]);
4407
+ const Wrapper = (0, import_react30.useMemo)(() => overrides.components || "div", [overrides]);
4366
4408
  return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Wrapper, { children: componentList ? componentList : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ComponentList, { id: "all" }) });
4367
4409
  };
4368
4410
 
4369
4411
  // components/Puck/components/Preview/index.tsx
4370
4412
  init_react_import();
4371
- var import_react30 = require("react");
4413
+ var import_react32 = require("react");
4372
4414
 
4373
4415
  // components/AutoFrame/index.tsx
4374
4416
  init_react_import();
4375
- var import_react29 = require("react");
4417
+ var import_react31 = require("react");
4376
4418
  var import_object_hash = __toESM(require("object-hash"));
4377
4419
  var import_react_dom2 = require("react-dom");
4378
4420
  var import_jsx_runtime32 = require("react/jsx-runtime");
@@ -4418,7 +4460,7 @@ var CopyHostStyles = ({
4418
4460
  onStylesLoaded = () => null
4419
4461
  }) => {
4420
4462
  const { document: doc, window: win } = useFrame();
4421
- (0, import_react29.useEffect)(() => {
4463
+ (0, import_react31.useEffect)(() => {
4422
4464
  if (!win || !doc) {
4423
4465
  return () => {
4424
4466
  };
@@ -4577,8 +4619,8 @@ var CopyHostStyles = ({
4577
4619
  }, []);
4578
4620
  return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, { children });
4579
4621
  };
4580
- var autoFrameContext = (0, import_react29.createContext)({});
4581
- var useFrame = () => (0, import_react29.useContext)(autoFrameContext);
4622
+ var autoFrameContext = (0, import_react31.createContext)({});
4623
+ var useFrame = () => (0, import_react31.useContext)(autoFrameContext);
4582
4624
  function AutoFrame(_a) {
4583
4625
  var _b = _a, {
4584
4626
  children,
@@ -4593,11 +4635,11 @@ function AutoFrame(_a) {
4593
4635
  "id",
4594
4636
  "onStylesLoaded"
4595
4637
  ]);
4596
- const [loaded, setLoaded] = (0, import_react29.useState)(false);
4597
- const [ctx, setCtx] = (0, import_react29.useState)({});
4598
- const ref = (0, import_react29.useRef)(null);
4599
- const [mountTarget, setMountTarget] = (0, import_react29.useState)();
4600
- (0, import_react29.useEffect)(() => {
4638
+ const [loaded, setLoaded] = (0, import_react31.useState)(false);
4639
+ const [ctx, setCtx] = (0, import_react31.useState)({});
4640
+ const ref = (0, import_react31.useRef)(null);
4641
+ const [mountTarget, setMountTarget] = (0, import_react31.useState)();
4642
+ (0, import_react31.useEffect)(() => {
4601
4643
  var _a2;
4602
4644
  if (ref.current) {
4603
4645
  setCtx({
@@ -4633,7 +4675,7 @@ var import_jsx_runtime33 = require("react/jsx-runtime");
4633
4675
  var getClassName23 = get_class_name_factory_default("PuckPreview", styles_module_default18);
4634
4676
  var Preview = ({ id = "puck-preview" }) => {
4635
4677
  const { config, dispatch, state, setStatus, iframe, overrides } = useAppContext();
4636
- const Page = (0, import_react30.useCallback)(
4678
+ const Page = (0, import_react32.useCallback)(
4637
4679
  (pageProps) => {
4638
4680
  var _a, _b;
4639
4681
  return ((_a = config.root) == null ? void 0 : _a.render) ? (_b = config.root) == null ? void 0 : _b.render(__spreadValues({
@@ -4642,7 +4684,7 @@ var Preview = ({ id = "puck-preview" }) => {
4642
4684
  },
4643
4685
  [config.root]
4644
4686
  );
4645
- const Frame = (0, import_react30.useMemo)(() => overrides.iframe, [overrides]);
4687
+ const Frame = (0, import_react32.useMemo)(() => overrides.iframe, [overrides]);
4646
4688
  const rootProps = state.data.root.props || state.data.root;
4647
4689
  return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4648
4690
  "div",
@@ -4731,7 +4773,7 @@ var scrollIntoView = (el) => {
4731
4773
  };
4732
4774
 
4733
4775
  // components/LayerTree/index.tsx
4734
- var import_react31 = require("react");
4776
+ var import_react33 = require("react");
4735
4777
 
4736
4778
  // lib/is-child-of-zone.ts
4737
4779
  init_react_import();
@@ -4758,7 +4800,7 @@ var LayerTree = ({
4758
4800
  label
4759
4801
  }) => {
4760
4802
  const zones = data.zones || {};
4761
- const ctx = (0, import_react31.useContext)(dropZoneContext);
4803
+ const ctx = (0, import_react33.useContext)(dropZoneContext);
4762
4804
  return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
4763
4805
  label && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: getClassName24("zoneTitle"), children: [
4764
4806
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: getClassName24("zoneIcon"), children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Layers, { size: "16" }) }),
@@ -4864,13 +4906,13 @@ var LayerTree = ({
4864
4906
  };
4865
4907
 
4866
4908
  // components/Puck/components/Outline/index.tsx
4867
- var import_react32 = require("react");
4909
+ var import_react34 = require("react");
4868
4910
  var import_jsx_runtime35 = require("react/jsx-runtime");
4869
4911
  var Outline = () => {
4870
4912
  const { dispatch, state, overrides, config } = useAppContext();
4871
4913
  const { data, ui } = state;
4872
4914
  const { itemSelector } = ui;
4873
- const setItemSelector = (0, import_react32.useCallback)(
4915
+ const setItemSelector = (0, import_react34.useCallback)(
4874
4916
  (newItemSelector) => {
4875
4917
  dispatch({
4876
4918
  type: "setUi",
@@ -4879,7 +4921,7 @@ var Outline = () => {
4879
4921
  },
4880
4922
  []
4881
4923
  );
4882
- const Wrapper = (0, import_react32.useMemo)(() => overrides.outline || "div", [overrides]);
4924
+ const Wrapper = (0, import_react34.useMemo)(() => overrides.outline || "div", [overrides]);
4883
4925
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Wrapper, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(dropZoneContext.Consumer, { children: (ctx) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
4884
4926
  (ctx == null ? void 0 : ctx.activeZones) && (ctx == null ? void 0 : ctx.activeZones[rootDroppableId]) && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4885
4927
  LayerTree,
@@ -4993,19 +5035,19 @@ function usePuckHistory({
4993
5035
 
4994
5036
  // lib/use-history-store.ts
4995
5037
  init_react_import();
4996
- var import_react33 = require("react");
5038
+ var import_react35 = require("react");
4997
5039
  var import_use_debounce3 = require("use-debounce");
4998
5040
  var EMPTY_HISTORY_INDEX = 0;
4999
5041
  function useHistoryStore(initialHistory) {
5000
5042
  var _a, _b;
5001
- const [histories, setHistories] = (0, import_react33.useState)(
5043
+ const [histories, setHistories] = (0, import_react35.useState)(
5002
5044
  (_a = initialHistory == null ? void 0 : initialHistory.histories) != null ? _a : []
5003
5045
  );
5004
5046
  const updateHistories = (histories2) => {
5005
5047
  setHistories(histories2);
5006
5048
  setIndex(histories2.length - 1);
5007
5049
  };
5008
- const [index, setIndex] = (0, import_react33.useState)(
5050
+ const [index, setIndex] = (0, import_react35.useState)(
5009
5051
  (_b = initialHistory == null ? void 0 : initialHistory.index) != null ? _b : EMPTY_HISTORY_INDEX
5010
5052
  );
5011
5053
  const hasPast = index > EMPTY_HISTORY_INDEX;
@@ -5165,11 +5207,11 @@ var getBox = function getBox2(el) {
5165
5207
  };
5166
5208
 
5167
5209
  // components/Puck/components/Canvas/index.tsx
5168
- var import_react35 = require("react");
5210
+ var import_react37 = require("react");
5169
5211
 
5170
5212
  // components/ViewportControls/index.tsx
5171
5213
  init_react_import();
5172
- var import_react34 = require("react");
5214
+ var import_react36 = require("react");
5173
5215
 
5174
5216
  // css-module:/home/runner/work/puck/puck/packages/core/components/ViewportControls/styles.module.css#css-module
5175
5217
  init_react_import();
@@ -5192,8 +5234,8 @@ var ViewportButton = ({
5192
5234
  onClick
5193
5235
  }) => {
5194
5236
  const { state } = useAppContext();
5195
- const [isActive, setIsActive] = (0, import_react34.useState)(false);
5196
- (0, import_react34.useEffect)(() => {
5237
+ const [isActive, setIsActive] = (0, import_react36.useState)(false);
5238
+ (0, import_react36.useEffect)(() => {
5197
5239
  setIsActive(width === state.ui.viewports.current.width);
5198
5240
  }, [width, state.ui.viewports.current.width]);
5199
5241
  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: getClassNameButton({ isActive }), children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
@@ -5229,7 +5271,7 @@ var ViewportControls = ({
5229
5271
  const defaultsContainAutoZoom = defaultZoomOptions.find(
5230
5272
  (option) => option.value === autoZoom
5231
5273
  );
5232
- const zoomOptions = (0, import_react34.useMemo)(
5274
+ const zoomOptions = (0, import_react36.useMemo)(
5233
5275
  () => [
5234
5276
  ...defaultZoomOptions,
5235
5277
  ...defaultsContainAutoZoom ? [] : [
@@ -5352,17 +5394,17 @@ var Canvas = () => {
5352
5394
  const { status, iframe } = useAppContext();
5353
5395
  const { dispatch, state, overrides, setUi, zoomConfig, setZoomConfig } = useAppContext();
5354
5396
  const { ui } = state;
5355
- const frameRef = (0, import_react35.useRef)(null);
5356
- const [showTransition, setShowTransition] = (0, import_react35.useState)(false);
5357
- const defaultRender = (0, import_react35.useMemo)(() => {
5397
+ const frameRef = (0, import_react37.useRef)(null);
5398
+ const [showTransition, setShowTransition] = (0, import_react37.useState)(false);
5399
+ const defaultRender = (0, import_react37.useMemo)(() => {
5358
5400
  const PuckDefault = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children });
5359
5401
  return PuckDefault;
5360
5402
  }, []);
5361
- const CustomPreview = (0, import_react35.useMemo)(
5403
+ const CustomPreview = (0, import_react37.useMemo)(
5362
5404
  () => overrides.preview || defaultRender,
5363
5405
  [overrides]
5364
5406
  );
5365
- const getFrameDimensions = (0, import_react35.useCallback)(() => {
5407
+ const getFrameDimensions = (0, import_react37.useCallback)(() => {
5366
5408
  if (frameRef.current) {
5367
5409
  const frame = frameRef.current;
5368
5410
  const box = getBox(frame);
@@ -5370,7 +5412,7 @@ var Canvas = () => {
5370
5412
  }
5371
5413
  return { width: 0, height: 0 };
5372
5414
  }, [frameRef]);
5373
- const resetAutoZoom = (0, import_react35.useCallback)(
5415
+ const resetAutoZoom = (0, import_react37.useCallback)(
5374
5416
  (ui2 = state.ui) => {
5375
5417
  if (frameRef.current) {
5376
5418
  setZoomConfig(
@@ -5380,11 +5422,11 @@ var Canvas = () => {
5380
5422
  },
5381
5423
  [frameRef, zoomConfig, state.ui]
5382
5424
  );
5383
- (0, import_react35.useEffect)(() => {
5425
+ (0, import_react37.useEffect)(() => {
5384
5426
  setShowTransition(false);
5385
5427
  resetAutoZoom();
5386
5428
  }, [frameRef, ui.leftSideBarVisible, ui.rightSideBarVisible]);
5387
- (0, import_react35.useEffect)(() => {
5429
+ (0, import_react37.useEffect)(() => {
5388
5430
  const { height: frameHeight } = getFrameDimensions();
5389
5431
  if (ui.viewports.current.height === "auto") {
5390
5432
  setZoomConfig(__spreadProps(__spreadValues({}, zoomConfig), {
@@ -5392,13 +5434,13 @@ var Canvas = () => {
5392
5434
  }));
5393
5435
  }
5394
5436
  }, [zoomConfig.zoom]);
5395
- (0, import_react35.useEffect)(() => {
5437
+ (0, import_react37.useEffect)(() => {
5396
5438
  if (ZOOM_ON_CHANGE) {
5397
5439
  setShowTransition(true);
5398
5440
  resetAutoZoom(ui);
5399
5441
  }
5400
5442
  }, [ui.viewports.current.width]);
5401
- (0, import_react35.useEffect)(() => {
5443
+ (0, import_react37.useEffect)(() => {
5402
5444
  const observer = new ResizeObserver(() => {
5403
5445
  setShowTransition(false);
5404
5446
  resetAutoZoom();
@@ -5410,8 +5452,8 @@ var Canvas = () => {
5410
5452
  observer.disconnect();
5411
5453
  };
5412
5454
  }, []);
5413
- const [showLoader, setShowLoader] = (0, import_react35.useState)(false);
5414
- (0, import_react35.useEffect)(() => {
5455
+ const [showLoader, setShowLoader] = (0, import_react37.useState)(false);
5456
+ (0, import_react37.useEffect)(() => {
5415
5457
  setTimeout(() => {
5416
5458
  setShowLoader(true);
5417
5459
  }, 500);
@@ -5514,7 +5556,7 @@ var insertComponent = (componentType, zone, index, {
5514
5556
 
5515
5557
  // lib/use-loaded-overrides.ts
5516
5558
  init_react_import();
5517
- var import_react36 = require("react");
5559
+ var import_react38 = require("react");
5518
5560
 
5519
5561
  // lib/load-overrides.ts
5520
5562
  init_react_import();
@@ -5553,7 +5595,7 @@ var useLoadedOverrides = ({
5553
5595
  overrides,
5554
5596
  plugins
5555
5597
  }) => {
5556
- return (0, import_react36.useMemo)(() => {
5598
+ return (0, import_react38.useMemo)(() => {
5557
5599
  return loadOverrides({ overrides, plugins });
5558
5600
  }, [plugins, overrides]);
5559
5601
  };
@@ -5592,7 +5634,7 @@ function Puck({
5592
5634
  enabled: true,
5593
5635
  waitForStyles: true
5594
5636
  }, _iframe);
5595
- const [generatedAppState] = (0, import_react37.useState)(() => {
5637
+ const [generatedAppState] = (0, import_react39.useState)(() => {
5596
5638
  var _a2, _b2, _c, _d, _e, _f, _g, _h, _i;
5597
5639
  const initial = __spreadValues(__spreadValues({}, defaultAppState.ui), initialUi);
5598
5640
  let clientUiState = {};
@@ -5664,14 +5706,14 @@ function Puck({
5664
5706
  histories,
5665
5707
  index: initialHistoryIndex
5666
5708
  });
5667
- const [reducer] = (0, import_react37.useState)(
5709
+ const [reducer] = (0, import_react39.useState)(
5668
5710
  () => createReducer({
5669
5711
  config,
5670
5712
  record: historyStore.record,
5671
5713
  onAction
5672
5714
  })
5673
5715
  );
5674
- const [appState, dispatch] = (0, import_react37.useReducer)(
5716
+ const [appState, dispatch] = (0, import_react39.useReducer)(
5675
5717
  reducer,
5676
5718
  flushZones(initialAppState)
5677
5719
  );
@@ -5682,9 +5724,9 @@ function Puck({
5682
5724
  historyStore,
5683
5725
  iframeEnabled: (_a = _iframe == null ? void 0 : _iframe.enabled) != null ? _a : true
5684
5726
  });
5685
- const [menuOpen, setMenuOpen] = (0, import_react37.useState)(false);
5727
+ const [menuOpen, setMenuOpen] = (0, import_react39.useState)(false);
5686
5728
  const { itemSelector, leftSideBarVisible, rightSideBarVisible } = ui;
5687
- const setItemSelector = (0, import_react37.useCallback)(
5729
+ const setItemSelector = (0, import_react39.useCallback)(
5688
5730
  (newItemSelector) => {
5689
5731
  if (newItemSelector === itemSelector) return;
5690
5732
  dispatch({
@@ -5696,13 +5738,13 @@ function Puck({
5696
5738
  [itemSelector]
5697
5739
  );
5698
5740
  const selectedItem = itemSelector ? getItem(itemSelector, data) : null;
5699
- (0, import_react37.useEffect)(() => {
5741
+ (0, import_react39.useEffect)(() => {
5700
5742
  if (onChange) onChange(data);
5701
5743
  }, [data]);
5702
5744
  const { onDragStartOrUpdate, placeholderStyle } = usePlaceholderStyle();
5703
- const [draggedItem, setDraggedItem] = (0, import_react37.useState)();
5745
+ const [draggedItem, setDraggedItem] = (0, import_react39.useState)();
5704
5746
  const rootProps = data.root.props || data.root;
5705
- const toggleSidebars = (0, import_react37.useCallback)(
5747
+ const toggleSidebars = (0, import_react39.useCallback)(
5706
5748
  (sidebar) => {
5707
5749
  const widerViewport = window.matchMedia("(min-width: 638px)").matches;
5708
5750
  const sideBarVisible = sidebar === "left" ? leftSideBarVisible : rightSideBarVisible;
@@ -5716,7 +5758,7 @@ function Puck({
5716
5758
  },
5717
5759
  [dispatch, leftSideBarVisible, rightSideBarVisible]
5718
5760
  );
5719
- (0, import_react37.useEffect)(() => {
5761
+ (0, import_react39.useEffect)(() => {
5720
5762
  if (!window.matchMedia("(min-width: 638px)").matches) {
5721
5763
  dispatch({
5722
5764
  type: "setUi",
@@ -5739,7 +5781,7 @@ function Puck({
5739
5781
  window.removeEventListener("resize", handleResize);
5740
5782
  };
5741
5783
  }, []);
5742
- const defaultHeaderRender = (0, import_react37.useMemo)(() => {
5784
+ const defaultHeaderRender = (0, import_react39.useMemo)(() => {
5743
5785
  if (renderHeader) {
5744
5786
  console.warn(
5745
5787
  "`renderHeader` is deprecated. Please use `overrides.header` and the `usePuck` hook instead"
@@ -5753,7 +5795,7 @@ function Puck({
5753
5795
  }
5754
5796
  return DefaultOverride;
5755
5797
  }, [renderHeader]);
5756
- const defaultHeaderActionsRender = (0, import_react37.useMemo)(() => {
5798
+ const defaultHeaderActionsRender = (0, import_react39.useMemo)(() => {
5757
5799
  if (renderHeaderActions) {
5758
5800
  console.warn(
5759
5801
  "`renderHeaderActions` is deprecated. Please use `overrides.headerActions` and the `usePuck` hook instead."
@@ -5770,20 +5812,20 @@ function Puck({
5770
5812
  overrides,
5771
5813
  plugins
5772
5814
  });
5773
- const CustomPuck = (0, import_react37.useMemo)(
5815
+ const CustomPuck = (0, import_react39.useMemo)(
5774
5816
  () => loadedOverrides.puck || DefaultOverride,
5775
5817
  [loadedOverrides]
5776
5818
  );
5777
- const CustomHeader = (0, import_react37.useMemo)(
5819
+ const CustomHeader = (0, import_react39.useMemo)(
5778
5820
  () => loadedOverrides.header || defaultHeaderRender,
5779
5821
  [loadedOverrides]
5780
5822
  );
5781
- const CustomHeaderActions = (0, import_react37.useMemo)(
5823
+ const CustomHeaderActions = (0, import_react39.useMemo)(
5782
5824
  () => loadedOverrides.headerActions || defaultHeaderActionsRender,
5783
5825
  [loadedOverrides]
5784
5826
  );
5785
- const [mounted, setMounted] = (0, import_react37.useState)(false);
5786
- (0, import_react37.useEffect)(() => {
5827
+ const [mounted, setMounted] = (0, import_react39.useState)(false);
5828
+ (0, import_react39.useEffect)(() => {
5787
5829
  setMounted(true);
5788
5830
  }, []);
5789
5831
  const selectedComponentConfig = selectedItem && config.components[selectedItem.type];
package/dist/index.mjs CHANGED
@@ -3179,9 +3179,9 @@ function DropZone(props) {
3179
3179
  // components/Puck/index.tsx
3180
3180
  init_react_import();
3181
3181
  import {
3182
- useCallback as useCallback11,
3183
- useEffect as useEffect18,
3184
- useMemo as useMemo16,
3182
+ useCallback as useCallback12,
3183
+ useEffect as useEffect19,
3184
+ useMemo as useMemo17,
3185
3185
  useReducer,
3186
3186
  useState as useState21
3187
3187
  } from "react";
@@ -3795,33 +3795,58 @@ init_react_import();
3795
3795
  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" };
3796
3796
 
3797
3797
  // components/Puck/components/Fields/index.tsx
3798
- import { useCallback as useCallback7, useEffect as useEffect13, useMemo as useMemo9, useState as useState15 } from "react";
3798
+ import { useMemo as useMemo10 } from "react";
3799
+
3800
+ // lib/use-resolved-fields.ts
3801
+ init_react_import();
3802
+ import { useCallback as useCallback8, useEffect as useEffect14, useMemo as useMemo9, useRef as useRef3, useState as useState15 } from "react";
3799
3803
 
3800
3804
  // lib/use-parent.ts
3801
3805
  init_react_import();
3802
- import { useContext as useContext7 } from "react";
3803
- var useParent = (itemSelector) => {
3806
+ import { useCallback as useCallback7, useContext as useContext7 } from "react";
3807
+ var getParent = (itemSelector, pathData, data) => {
3804
3808
  var _a;
3805
- const { selectedItem, state } = useAppContext();
3806
- const { pathData } = useContext7(dropZoneContext) || {};
3807
- const item = itemSelector ? getItem(itemSelector, state.data) : selectedItem;
3808
- const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, state.data);
3809
+ if (!itemSelector) return null;
3810
+ const item = getItem(itemSelector, data);
3811
+ const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, data);
3809
3812
  const lastItem = breadcrumbs[breadcrumbs.length - 1];
3810
- const parent = (lastItem == null ? void 0 : lastItem.selector) ? (_a = getItem(lastItem.selector, state.data)) != null ? _a : null : null;
3813
+ const parent = (lastItem == null ? void 0 : lastItem.selector) ? (_a = getItem(lastItem.selector, data)) != null ? _a : null : null;
3811
3814
  return parent || null;
3812
3815
  };
3816
+ var useGetParent = () => {
3817
+ const { state } = useAppContext();
3818
+ const { pathData } = useContext7(dropZoneContext) || {};
3819
+ return useCallback7(
3820
+ () => getParent(state.ui.itemSelector, pathData, state.data),
3821
+ [state.ui.itemSelector, pathData, state.data]
3822
+ );
3823
+ };
3824
+ var useParent = () => {
3825
+ return useGetParent()();
3826
+ };
3813
3827
 
3814
- // components/Puck/components/Fields/index.tsx
3815
- import { Fragment as Fragment12, jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
3816
- var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
3828
+ // lib/use-on-value-change.ts
3829
+ init_react_import();
3830
+ import { useRef as useRef2, useEffect as useEffect13 } from "react";
3831
+ function useOnValueChange(value, onChange, compare = Object.is, deps = []) {
3832
+ const tracked = useRef2(value);
3833
+ useEffect13(() => {
3834
+ const oldValue = tracked.current;
3835
+ if (!compare(value, oldValue)) {
3836
+ tracked.current = value;
3837
+ onChange(value, oldValue);
3838
+ }
3839
+ }, [onChange, compare, value, ...deps]);
3840
+ }
3841
+
3842
+ // lib/selector-is.ts
3843
+ init_react_import();
3844
+ var selectorIs = (a, b) => (a == null ? void 0 : a.zone) === (b == null ? void 0 : b.zone) && (a == null ? void 0 : a.index) === (b == null ? void 0 : b.index);
3845
+
3846
+ // lib/use-resolved-fields.ts
3817
3847
  var defaultPageFields = {
3818
3848
  title: { type: "text" }
3819
3849
  };
3820
- var DefaultFields = ({
3821
- children
3822
- }) => {
3823
- return /* @__PURE__ */ jsx28(Fragment12, { children });
3824
- };
3825
3850
  var useResolvedFields = () => {
3826
3851
  var _a, _b;
3827
3852
  const { selectedItem, state, config } = useAppContext();
@@ -3837,12 +3862,13 @@ var useResolvedFields = () => {
3837
3862
  const [lastSelectedData, setLastSelectedData] = useState15({});
3838
3863
  const [resolvedFields, setResolvedFields] = useState15(defaultFields);
3839
3864
  const [fieldsLoading, setFieldsLoading] = useState15(false);
3865
+ const lastFields = useRef3(defaultFields);
3840
3866
  const defaultResolveFields = (_componentData, _params) => defaultFields;
3841
3867
  const componentData = selectedItem ? selectedItem : { props: rootProps, readOnly: data.root.readOnly };
3842
3868
  const hasComponentResolver = selectedItem && (componentConfig == null ? void 0 : componentConfig.resolveFields);
3843
3869
  const hasRootResolver = !selectedItem && ((_b = config.root) == null ? void 0 : _b.resolveFields);
3844
3870
  const hasResolver = hasComponentResolver || hasRootResolver;
3845
- const resolveFields = useCallback7(
3871
+ const resolveFields = useCallback8(
3846
3872
  (..._0) => __async(void 0, [..._0], function* (fields = {}) {
3847
3873
  var _a2;
3848
3874
  const lastData = ((_a2 = lastSelectedData.props) == null ? void 0 : _a2.id) === componentData.props.id ? lastSelectedData : null;
@@ -3854,7 +3880,7 @@ var useResolvedFields = () => {
3854
3880
  {
3855
3881
  changed,
3856
3882
  fields,
3857
- lastFields: resolvedFields,
3883
+ lastFields: lastFields.current,
3858
3884
  lastData,
3859
3885
  appState: state,
3860
3886
  parent
@@ -3865,7 +3891,7 @@ var useResolvedFields = () => {
3865
3891
  return yield config.root.resolveFields(componentData, {
3866
3892
  changed,
3867
3893
  fields,
3868
- lastFields: resolvedFields,
3894
+ lastFields: lastFields.current,
3869
3895
  lastData,
3870
3896
  appState: state,
3871
3897
  parent
@@ -3874,40 +3900,56 @@ var useResolvedFields = () => {
3874
3900
  return defaultResolveFields(componentData, {
3875
3901
  changed,
3876
3902
  fields,
3877
- lastFields: resolvedFields,
3903
+ lastFields: lastFields.current,
3878
3904
  lastData
3879
3905
  });
3880
3906
  }),
3881
- [data, config, componentData, selectedItem, resolvedFields, state, parent]
3907
+ [data, config, componentData, selectedItem, state, parent]
3882
3908
  );
3883
- const [hasParent, setHasParent] = useState15(false);
3884
- useEffect13(() => {
3885
- setHasParent(!!parent);
3886
- }, [parent]);
3887
- useEffect13(() => {
3909
+ const triggerResolver = useCallback8(() => {
3888
3910
  var _a2, _b2;
3889
- if (!((_a2 = state.ui.itemSelector) == null ? void 0 : _a2.zone) || ((_b2 = state.ui.itemSelector) == null ? void 0 : _b2.zone) === "default-zone" || hasParent) {
3911
+ if (!((_a2 = state.ui.itemSelector) == null ? void 0 : _a2.zone) || ((_b2 = state.ui.itemSelector) == null ? void 0 : _b2.zone) === "default-zone" || parent) {
3890
3912
  if (hasResolver) {
3891
3913
  setFieldsLoading(true);
3892
3914
  resolveFields(defaultFields).then((fields) => {
3893
3915
  setResolvedFields(fields || {});
3916
+ lastFields.current = fields;
3894
3917
  setFieldsLoading(false);
3895
3918
  });
3896
3919
  return;
3897
3920
  }
3898
3921
  }
3899
3922
  setResolvedFields(defaultFields);
3900
- }, [
3901
- data,
3902
- defaultFields,
3923
+ }, [defaultFields, state.ui.itemSelector, hasResolver, parent]);
3924
+ useOnValueChange(
3903
3925
  state.ui.itemSelector,
3904
- selectedItem,
3905
- hasResolver,
3906
- hasParent
3907
- ]);
3926
+ () => {
3927
+ lastFields.current = defaultFields;
3928
+ },
3929
+ selectorIs
3930
+ );
3931
+ useOnValueChange(
3932
+ { data, parent, itemSelector: state.ui.itemSelector },
3933
+ () => {
3934
+ triggerResolver();
3935
+ },
3936
+ (a, b) => JSON.stringify(a) === JSON.stringify(b)
3937
+ );
3938
+ useEffect14(() => {
3939
+ triggerResolver();
3940
+ }, []);
3908
3941
  return [resolvedFields, fieldsLoading];
3909
3942
  };
3910
- var Fields = () => {
3943
+
3944
+ // components/Puck/components/Fields/index.tsx
3945
+ import { Fragment as Fragment12, jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
3946
+ var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
3947
+ var DefaultFields = ({
3948
+ children
3949
+ }) => {
3950
+ return /* @__PURE__ */ jsx28(Fragment12, { children });
3951
+ };
3952
+ var Fields = ({ wrapFields = true }) => {
3911
3953
  var _a, _b;
3912
3954
  const {
3913
3955
  selectedItem,
@@ -3925,7 +3967,7 @@ var Fields = () => {
3925
3967
  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;
3926
3968
  const isLoading = fieldsResolving || componentResolving;
3927
3969
  const rootProps = data.root.props || data.root;
3928
- const Wrapper = useMemo9(() => overrides.fields || DefaultFields, [overrides]);
3970
+ const Wrapper = useMemo10(() => overrides.fields || DefaultFields, [overrides]);
3929
3971
  return /* @__PURE__ */ jsxs15(
3930
3972
  "form",
3931
3973
  {
@@ -4048,7 +4090,7 @@ init_react_import();
4048
4090
 
4049
4091
  // lib/use-component-list.tsx
4050
4092
  init_react_import();
4051
- import { useEffect as useEffect14, useState as useState16 } from "react";
4093
+ import { useEffect as useEffect15, useState as useState16 } from "react";
4052
4094
 
4053
4095
  // components/ComponentList/index.tsx
4054
4096
  init_react_import();
@@ -4127,7 +4169,7 @@ ComponentList.Item = ComponentListItem;
4127
4169
  import { jsx as jsx30 } from "react/jsx-runtime";
4128
4170
  var useComponentList = (config, ui) => {
4129
4171
  const [componentList, setComponentList] = useState16();
4130
- useEffect14(() => {
4172
+ useEffect15(() => {
4131
4173
  var _a, _b, _c;
4132
4174
  if (Object.keys(ui.componentList).length > 0) {
4133
4175
  const matchedComponents = [];
@@ -4196,26 +4238,26 @@ var useComponentList = (config, ui) => {
4196
4238
  };
4197
4239
 
4198
4240
  // components/Puck/components/Components/index.tsx
4199
- import { useMemo as useMemo10 } from "react";
4241
+ import { useMemo as useMemo11 } from "react";
4200
4242
  import { jsx as jsx31 } from "react/jsx-runtime";
4201
4243
  var Components = () => {
4202
4244
  const { config, state, overrides } = useAppContext();
4203
4245
  const componentList = useComponentList(config, state.ui);
4204
- const Wrapper = useMemo10(() => overrides.components || "div", [overrides]);
4246
+ const Wrapper = useMemo11(() => overrides.components || "div", [overrides]);
4205
4247
  return /* @__PURE__ */ jsx31(Wrapper, { children: componentList ? componentList : /* @__PURE__ */ jsx31(ComponentList, { id: "all" }) });
4206
4248
  };
4207
4249
 
4208
4250
  // components/Puck/components/Preview/index.tsx
4209
4251
  init_react_import();
4210
- import { useCallback as useCallback8, useMemo as useMemo11 } from "react";
4252
+ import { useCallback as useCallback9, useMemo as useMemo12 } from "react";
4211
4253
 
4212
4254
  // components/AutoFrame/index.tsx
4213
4255
  init_react_import();
4214
4256
  import {
4215
4257
  createContext as createContext5,
4216
4258
  useContext as useContext8,
4217
- useEffect as useEffect15,
4218
- useRef as useRef2,
4259
+ useEffect as useEffect16,
4260
+ useRef as useRef4,
4219
4261
  useState as useState17
4220
4262
  } from "react";
4221
4263
  import hash from "object-hash";
@@ -4263,7 +4305,7 @@ var CopyHostStyles = ({
4263
4305
  onStylesLoaded = () => null
4264
4306
  }) => {
4265
4307
  const { document: doc, window: win } = useFrame();
4266
- useEffect15(() => {
4308
+ useEffect16(() => {
4267
4309
  if (!win || !doc) {
4268
4310
  return () => {
4269
4311
  };
@@ -4440,9 +4482,9 @@ function AutoFrame(_a) {
4440
4482
  ]);
4441
4483
  const [loaded, setLoaded] = useState17(false);
4442
4484
  const [ctx, setCtx] = useState17({});
4443
- const ref = useRef2(null);
4485
+ const ref = useRef4(null);
4444
4486
  const [mountTarget, setMountTarget] = useState17();
4445
- useEffect15(() => {
4487
+ useEffect16(() => {
4446
4488
  var _a2;
4447
4489
  if (ref.current) {
4448
4490
  setCtx({
@@ -4478,7 +4520,7 @@ import { Fragment as Fragment14, jsx as jsx33 } from "react/jsx-runtime";
4478
4520
  var getClassName23 = get_class_name_factory_default("PuckPreview", styles_module_default18);
4479
4521
  var Preview = ({ id = "puck-preview" }) => {
4480
4522
  const { config, dispatch, state, setStatus, iframe, overrides } = useAppContext();
4481
- const Page = useCallback8(
4523
+ const Page = useCallback9(
4482
4524
  (pageProps) => {
4483
4525
  var _a, _b;
4484
4526
  return ((_a = config.root) == null ? void 0 : _a.render) ? (_b = config.root) == null ? void 0 : _b.render(__spreadValues({
@@ -4487,7 +4529,7 @@ var Preview = ({ id = "puck-preview" }) => {
4487
4529
  },
4488
4530
  [config.root]
4489
4531
  );
4490
- const Frame = useMemo11(() => overrides.iframe, [overrides]);
4532
+ const Frame = useMemo12(() => overrides.iframe, [overrides]);
4491
4533
  const rootProps = state.data.root.props || state.data.root;
4492
4534
  return /* @__PURE__ */ jsx33(
4493
4535
  "div",
@@ -4709,13 +4751,13 @@ var LayerTree = ({
4709
4751
  };
4710
4752
 
4711
4753
  // components/Puck/components/Outline/index.tsx
4712
- import { useCallback as useCallback9, useMemo as useMemo12 } from "react";
4754
+ import { useCallback as useCallback10, useMemo as useMemo13 } from "react";
4713
4755
  import { Fragment as Fragment16, jsx as jsx35, jsxs as jsxs18 } from "react/jsx-runtime";
4714
4756
  var Outline = () => {
4715
4757
  const { dispatch, state, overrides, config } = useAppContext();
4716
4758
  const { data, ui } = state;
4717
4759
  const { itemSelector } = ui;
4718
- const setItemSelector = useCallback9(
4760
+ const setItemSelector = useCallback10(
4719
4761
  (newItemSelector) => {
4720
4762
  dispatch({
4721
4763
  type: "setUi",
@@ -4724,7 +4766,7 @@ var Outline = () => {
4724
4766
  },
4725
4767
  []
4726
4768
  );
4727
- const Wrapper = useMemo12(() => overrides.outline || "div", [overrides]);
4769
+ const Wrapper = useMemo13(() => overrides.outline || "div", [overrides]);
4728
4770
  return /* @__PURE__ */ jsx35(Wrapper, { children: /* @__PURE__ */ jsx35(dropZoneContext.Consumer, { children: (ctx) => /* @__PURE__ */ jsxs18(Fragment16, { children: [
4729
4771
  (ctx == null ? void 0 : ctx.activeZones) && (ctx == null ? void 0 : ctx.activeZones[rootDroppableId]) && /* @__PURE__ */ jsx35(
4730
4772
  LayerTree,
@@ -5011,16 +5053,16 @@ var getBox = function getBox2(el) {
5011
5053
 
5012
5054
  // components/Puck/components/Canvas/index.tsx
5013
5055
  import {
5014
- useCallback as useCallback10,
5015
- useEffect as useEffect17,
5016
- useMemo as useMemo14,
5017
- useRef as useRef3,
5056
+ useCallback as useCallback11,
5057
+ useEffect as useEffect18,
5058
+ useMemo as useMemo15,
5059
+ useRef as useRef5,
5018
5060
  useState as useState20
5019
5061
  } from "react";
5020
5062
 
5021
5063
  // components/ViewportControls/index.tsx
5022
5064
  init_react_import();
5023
- import { useEffect as useEffect16, useMemo as useMemo13, useState as useState19 } from "react";
5065
+ import { useEffect as useEffect17, useMemo as useMemo14, useState as useState19 } from "react";
5024
5066
 
5025
5067
  // css-module:/home/runner/work/puck/puck/packages/core/components/ViewportControls/styles.module.css#css-module
5026
5068
  init_react_import();
@@ -5044,7 +5086,7 @@ var ViewportButton = ({
5044
5086
  }) => {
5045
5087
  const { state } = useAppContext();
5046
5088
  const [isActive, setIsActive] = useState19(false);
5047
- useEffect16(() => {
5089
+ useEffect17(() => {
5048
5090
  setIsActive(width === state.ui.viewports.current.width);
5049
5091
  }, [width, state.ui.viewports.current.width]);
5050
5092
  return /* @__PURE__ */ jsx36("span", { className: getClassNameButton({ isActive }), children: /* @__PURE__ */ jsx36(
@@ -5080,7 +5122,7 @@ var ViewportControls = ({
5080
5122
  const defaultsContainAutoZoom = defaultZoomOptions.find(
5081
5123
  (option) => option.value === autoZoom
5082
5124
  );
5083
- const zoomOptions = useMemo13(
5125
+ const zoomOptions = useMemo14(
5084
5126
  () => [
5085
5127
  ...defaultZoomOptions,
5086
5128
  ...defaultsContainAutoZoom ? [] : [
@@ -5203,17 +5245,17 @@ var Canvas = () => {
5203
5245
  const { status, iframe } = useAppContext();
5204
5246
  const { dispatch, state, overrides, setUi, zoomConfig, setZoomConfig } = useAppContext();
5205
5247
  const { ui } = state;
5206
- const frameRef = useRef3(null);
5248
+ const frameRef = useRef5(null);
5207
5249
  const [showTransition, setShowTransition] = useState20(false);
5208
- const defaultRender = useMemo14(() => {
5250
+ const defaultRender = useMemo15(() => {
5209
5251
  const PuckDefault = ({ children }) => /* @__PURE__ */ jsx37(Fragment17, { children });
5210
5252
  return PuckDefault;
5211
5253
  }, []);
5212
- const CustomPreview = useMemo14(
5254
+ const CustomPreview = useMemo15(
5213
5255
  () => overrides.preview || defaultRender,
5214
5256
  [overrides]
5215
5257
  );
5216
- const getFrameDimensions = useCallback10(() => {
5258
+ const getFrameDimensions = useCallback11(() => {
5217
5259
  if (frameRef.current) {
5218
5260
  const frame = frameRef.current;
5219
5261
  const box = getBox(frame);
@@ -5221,7 +5263,7 @@ var Canvas = () => {
5221
5263
  }
5222
5264
  return { width: 0, height: 0 };
5223
5265
  }, [frameRef]);
5224
- const resetAutoZoom = useCallback10(
5266
+ const resetAutoZoom = useCallback11(
5225
5267
  (ui2 = state.ui) => {
5226
5268
  if (frameRef.current) {
5227
5269
  setZoomConfig(
@@ -5231,11 +5273,11 @@ var Canvas = () => {
5231
5273
  },
5232
5274
  [frameRef, zoomConfig, state.ui]
5233
5275
  );
5234
- useEffect17(() => {
5276
+ useEffect18(() => {
5235
5277
  setShowTransition(false);
5236
5278
  resetAutoZoom();
5237
5279
  }, [frameRef, ui.leftSideBarVisible, ui.rightSideBarVisible]);
5238
- useEffect17(() => {
5280
+ useEffect18(() => {
5239
5281
  const { height: frameHeight } = getFrameDimensions();
5240
5282
  if (ui.viewports.current.height === "auto") {
5241
5283
  setZoomConfig(__spreadProps(__spreadValues({}, zoomConfig), {
@@ -5243,13 +5285,13 @@ var Canvas = () => {
5243
5285
  }));
5244
5286
  }
5245
5287
  }, [zoomConfig.zoom]);
5246
- useEffect17(() => {
5288
+ useEffect18(() => {
5247
5289
  if (ZOOM_ON_CHANGE) {
5248
5290
  setShowTransition(true);
5249
5291
  resetAutoZoom(ui);
5250
5292
  }
5251
5293
  }, [ui.viewports.current.width]);
5252
- useEffect17(() => {
5294
+ useEffect18(() => {
5253
5295
  const observer = new ResizeObserver(() => {
5254
5296
  setShowTransition(false);
5255
5297
  resetAutoZoom();
@@ -5262,7 +5304,7 @@ var Canvas = () => {
5262
5304
  };
5263
5305
  }, []);
5264
5306
  const [showLoader, setShowLoader] = useState20(false);
5265
- useEffect17(() => {
5307
+ useEffect18(() => {
5266
5308
  setTimeout(() => {
5267
5309
  setShowLoader(true);
5268
5310
  }, 500);
@@ -5365,7 +5407,7 @@ var insertComponent = (componentType, zone, index, {
5365
5407
 
5366
5408
  // lib/use-loaded-overrides.ts
5367
5409
  init_react_import();
5368
- import { useMemo as useMemo15 } from "react";
5410
+ import { useMemo as useMemo16 } from "react";
5369
5411
 
5370
5412
  // lib/load-overrides.ts
5371
5413
  init_react_import();
@@ -5404,7 +5446,7 @@ var useLoadedOverrides = ({
5404
5446
  overrides,
5405
5447
  plugins
5406
5448
  }) => {
5407
- return useMemo15(() => {
5449
+ return useMemo16(() => {
5408
5450
  return loadOverrides({ overrides, plugins });
5409
5451
  }, [plugins, overrides]);
5410
5452
  };
@@ -5535,7 +5577,7 @@ function Puck({
5535
5577
  });
5536
5578
  const [menuOpen, setMenuOpen] = useState21(false);
5537
5579
  const { itemSelector, leftSideBarVisible, rightSideBarVisible } = ui;
5538
- const setItemSelector = useCallback11(
5580
+ const setItemSelector = useCallback12(
5539
5581
  (newItemSelector) => {
5540
5582
  if (newItemSelector === itemSelector) return;
5541
5583
  dispatch({
@@ -5547,13 +5589,13 @@ function Puck({
5547
5589
  [itemSelector]
5548
5590
  );
5549
5591
  const selectedItem = itemSelector ? getItem(itemSelector, data) : null;
5550
- useEffect18(() => {
5592
+ useEffect19(() => {
5551
5593
  if (onChange) onChange(data);
5552
5594
  }, [data]);
5553
5595
  const { onDragStartOrUpdate, placeholderStyle } = usePlaceholderStyle();
5554
5596
  const [draggedItem, setDraggedItem] = useState21();
5555
5597
  const rootProps = data.root.props || data.root;
5556
- const toggleSidebars = useCallback11(
5598
+ const toggleSidebars = useCallback12(
5557
5599
  (sidebar) => {
5558
5600
  const widerViewport = window.matchMedia("(min-width: 638px)").matches;
5559
5601
  const sideBarVisible = sidebar === "left" ? leftSideBarVisible : rightSideBarVisible;
@@ -5567,7 +5609,7 @@ function Puck({
5567
5609
  },
5568
5610
  [dispatch, leftSideBarVisible, rightSideBarVisible]
5569
5611
  );
5570
- useEffect18(() => {
5612
+ useEffect19(() => {
5571
5613
  if (!window.matchMedia("(min-width: 638px)").matches) {
5572
5614
  dispatch({
5573
5615
  type: "setUi",
@@ -5590,7 +5632,7 @@ function Puck({
5590
5632
  window.removeEventListener("resize", handleResize);
5591
5633
  };
5592
5634
  }, []);
5593
- const defaultHeaderRender = useMemo16(() => {
5635
+ const defaultHeaderRender = useMemo17(() => {
5594
5636
  if (renderHeader) {
5595
5637
  console.warn(
5596
5638
  "`renderHeader` is deprecated. Please use `overrides.header` and the `usePuck` hook instead"
@@ -5604,7 +5646,7 @@ function Puck({
5604
5646
  }
5605
5647
  return DefaultOverride;
5606
5648
  }, [renderHeader]);
5607
- const defaultHeaderActionsRender = useMemo16(() => {
5649
+ const defaultHeaderActionsRender = useMemo17(() => {
5608
5650
  if (renderHeaderActions) {
5609
5651
  console.warn(
5610
5652
  "`renderHeaderActions` is deprecated. Please use `overrides.headerActions` and the `usePuck` hook instead."
@@ -5621,20 +5663,20 @@ function Puck({
5621
5663
  overrides,
5622
5664
  plugins
5623
5665
  });
5624
- const CustomPuck = useMemo16(
5666
+ const CustomPuck = useMemo17(
5625
5667
  () => loadedOverrides.puck || DefaultOverride,
5626
5668
  [loadedOverrides]
5627
5669
  );
5628
- const CustomHeader = useMemo16(
5670
+ const CustomHeader = useMemo17(
5629
5671
  () => loadedOverrides.header || defaultHeaderRender,
5630
5672
  [loadedOverrides]
5631
5673
  );
5632
- const CustomHeaderActions = useMemo16(
5674
+ const CustomHeaderActions = useMemo17(
5633
5675
  () => loadedOverrides.headerActions || defaultHeaderActionsRender,
5634
5676
  [loadedOverrides]
5635
5677
  );
5636
5678
  const [mounted, setMounted] = useState21(false);
5637
- useEffect18(() => {
5679
+ useEffect19(() => {
5638
5680
  setMounted(true);
5639
5681
  }, []);
5640
5682
  const selectedComponentConfig = selectedItem && config.components[selectedItem.type];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@measured/puck",
3
- "version": "0.17.4-canary.18f0d46",
3
+ "version": "0.17.4-canary.5c60d6a",
4
4
  "author": "Measured Corporation Ltd <hello@measured.co>",
5
5
  "repository": "measuredco/puck",
6
6
  "bugs": "https://github.com/measuredco/puck/issues",