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

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.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",