@measured/puck 0.17.0-canary.35170f8 → 0.17.0-canary.8959ff1

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
@@ -1,5 +1,5 @@
1
- import { F as FieldProps, a as Field, C as Config, D as Data, I as ItemSelector, P as PuckAction, b as DropZoneProps, U as UserGenerics, c as UiState, O as OnAction, d as Permissions, e as Plugin, f as Overrides, V as Viewports, g as IframeConfig, h as InitialHistory, i as DefaultComponentProps, j as DefaultRootFieldProps, H as History, A as AppState, E as ExtractPropsFromConfig, k as ExtractRootPropsFromConfig, l as ComponentDataMap } from './resolve-all-data-Ch-Pcasj.mjs';
2
- export { L as Adaptor, J as ArrayField, r as ArrayState, a2 as AsFieldProps, B as BaseData, y as BaseField, t as ComponentConfig, w as ComponentData, x as Content, X as CustomField, $ as DefaultRootProps, _ as DefaultRootRenderProps, W as ExternalField, Q as ExternalFieldWithAdaptor, p as FieldRenderFunctions, Y as Fields, q as ItemWithId, M as MappedItem, N as NumberField, K as ObjectField, n as OverrideKey, s as PuckComponent, Z as PuckContext, G as RadioField, v as RootData, R as RootDataWithProps, u as RootDataWithoutProps, S as SelectField, T as TextField, z as TextareaField, m as Viewport, a3 as WithChildren, a0 as WithId, a1 as WithPuckProps, o as overrideKeys, a4 as resolveAllData } from './resolve-all-data-Ch-Pcasj.mjs';
1
+ import { F as FieldProps, a as Field, C as Config, D as Data, I as ItemSelector, P as PuckAction, b as DropZoneProps, U as UserGenerics, c as UiState, O as OnAction, d as Permissions, e as Plugin, f as Overrides, V as Viewports, g as IframeConfig, h as InitialHistory, i as DefaultComponentProps, j as DefaultRootFieldProps, H as History, A as AppState, E as ExtractPropsFromConfig, k as ExtractRootPropsFromConfig, l as ComponentDataMap } from './resolve-all-data-C7aAQCY3.mjs';
2
+ export { L as Adaptor, J as ArrayField, r as ArrayState, a2 as AsFieldProps, B as BaseData, y as BaseField, t as ComponentConfig, w as ComponentData, x as Content, X as CustomField, $ as DefaultRootProps, _ as DefaultRootRenderProps, W as ExternalField, Q as ExternalFieldWithAdaptor, p as FieldRenderFunctions, Y as Fields, q as ItemWithId, M as MappedItem, N as NumberField, K as ObjectField, n as OverrideKey, s as PuckComponent, Z as PuckContext, G as RadioField, v as RootData, R as RootDataWithProps, u as RootDataWithoutProps, S as SelectField, T as TextField, z as TextareaField, m as Viewport, a3 as WithChildren, a0 as WithId, a1 as WithPuckProps, o as overrideKeys, a4 as resolveAllData } from './resolve-all-data-C7aAQCY3.mjs';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as react from 'react';
5
5
  import { ReactNode, SyntheticEvent, ReactElement, CSSProperties } from 'react';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FieldProps, a as Field, C as Config, D as Data, I as ItemSelector, P as PuckAction, b as DropZoneProps, U as UserGenerics, c as UiState, O as OnAction, d as Permissions, e as Plugin, f as Overrides, V as Viewports, g as IframeConfig, h as InitialHistory, i as DefaultComponentProps, j as DefaultRootFieldProps, H as History, A as AppState, E as ExtractPropsFromConfig, k as ExtractRootPropsFromConfig, l as ComponentDataMap } from './resolve-all-data-Ch-Pcasj.js';
2
- export { L as Adaptor, J as ArrayField, r as ArrayState, a2 as AsFieldProps, B as BaseData, y as BaseField, t as ComponentConfig, w as ComponentData, x as Content, X as CustomField, $ as DefaultRootProps, _ as DefaultRootRenderProps, W as ExternalField, Q as ExternalFieldWithAdaptor, p as FieldRenderFunctions, Y as Fields, q as ItemWithId, M as MappedItem, N as NumberField, K as ObjectField, n as OverrideKey, s as PuckComponent, Z as PuckContext, G as RadioField, v as RootData, R as RootDataWithProps, u as RootDataWithoutProps, S as SelectField, T as TextField, z as TextareaField, m as Viewport, a3 as WithChildren, a0 as WithId, a1 as WithPuckProps, o as overrideKeys, a4 as resolveAllData } from './resolve-all-data-Ch-Pcasj.js';
1
+ import { F as FieldProps, a as Field, C as Config, D as Data, I as ItemSelector, P as PuckAction, b as DropZoneProps, U as UserGenerics, c as UiState, O as OnAction, d as Permissions, e as Plugin, f as Overrides, V as Viewports, g as IframeConfig, h as InitialHistory, i as DefaultComponentProps, j as DefaultRootFieldProps, H as History, A as AppState, E as ExtractPropsFromConfig, k as ExtractRootPropsFromConfig, l as ComponentDataMap } from './resolve-all-data-C7aAQCY3.js';
2
+ export { L as Adaptor, J as ArrayField, r as ArrayState, a2 as AsFieldProps, B as BaseData, y as BaseField, t as ComponentConfig, w as ComponentData, x as Content, X as CustomField, $ as DefaultRootProps, _ as DefaultRootRenderProps, W as ExternalField, Q as ExternalFieldWithAdaptor, p as FieldRenderFunctions, Y as Fields, q as ItemWithId, M as MappedItem, N as NumberField, K as ObjectField, n as OverrideKey, s as PuckComponent, Z as PuckContext, G as RadioField, v as RootData, R as RootDataWithProps, u as RootDataWithoutProps, S as SelectField, T as TextField, z as TextareaField, m as Viewport, a3 as WithChildren, a0 as WithId, a1 as WithPuckProps, o as overrideKeys, a4 as resolveAllData } from './resolve-all-data-C7aAQCY3.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as react from 'react';
5
5
  import { ReactNode, SyntheticEvent, ReactElement, CSSProperties } from 'react';
package/dist/index.js CHANGED
@@ -3128,7 +3128,7 @@ function DropZone(props) {
3128
3128
 
3129
3129
  // components/Puck/index.tsx
3130
3130
  init_react_import();
3131
- var import_react32 = require("react");
3131
+ var import_react33 = require("react");
3132
3132
 
3133
3133
  // lib/use-placeholder-style.ts
3134
3134
  init_react_import();
@@ -3735,7 +3735,23 @@ init_react_import();
3735
3735
  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" };
3736
3736
 
3737
3737
  // components/Puck/components/Fields/index.tsx
3738
+ var import_react22 = require("react");
3739
+
3740
+ // lib/use-parent.ts
3741
+ init_react_import();
3738
3742
  var import_react21 = require("react");
3743
+ var useParent = (itemSelector) => {
3744
+ var _a;
3745
+ const { selectedItem, state } = useAppContext();
3746
+ const { pathData } = (0, import_react21.useContext)(dropZoneContext) || {};
3747
+ const item = itemSelector ? getItem(itemSelector, state.data) : selectedItem;
3748
+ const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, state.data);
3749
+ const lastItem = breadcrumbs[breadcrumbs.length - 1];
3750
+ const parent = (lastItem == null ? void 0 : lastItem.selector) ? (_a = getItem(lastItem.selector, state.data)) != null ? _a : null : null;
3751
+ return parent || null;
3752
+ };
3753
+
3754
+ // components/Puck/components/Fields/index.tsx
3739
3755
  var import_jsx_runtime27 = require("react/jsx-runtime");
3740
3756
  var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
3741
3757
  var defaultPageFields = {
@@ -3749,23 +3765,24 @@ var DefaultFields = ({
3749
3765
  var useResolvedFields = () => {
3750
3766
  var _a, _b;
3751
3767
  const { selectedItem, state, config } = useAppContext();
3768
+ const parent = useParent();
3752
3769
  const { data } = state;
3753
3770
  const rootFields = ((_a = config.root) == null ? void 0 : _a.fields) || defaultPageFields;
3754
3771
  const componentConfig = selectedItem ? config.components[selectedItem.type] : null;
3755
- const defaultFields = (0, import_react21.useMemo)(
3772
+ const defaultFields = (0, import_react22.useMemo)(
3756
3773
  () => (selectedItem ? componentConfig == null ? void 0 : componentConfig.fields : rootFields) || {},
3757
3774
  [selectedItem, rootFields, componentConfig == null ? void 0 : componentConfig.fields]
3758
3775
  );
3759
3776
  const rootProps = data.root.props || data.root;
3760
- const [lastSelectedData, setLastSelectedData] = (0, import_react21.useState)({});
3761
- const [resolvedFields, setResolvedFields] = (0, import_react21.useState)(defaultFields);
3762
- const [fieldsLoading, setFieldsLoading] = (0, import_react21.useState)(false);
3777
+ const [lastSelectedData, setLastSelectedData] = (0, import_react22.useState)({});
3778
+ const [resolvedFields, setResolvedFields] = (0, import_react22.useState)(defaultFields);
3779
+ const [fieldsLoading, setFieldsLoading] = (0, import_react22.useState)(false);
3763
3780
  const defaultResolveFields = (_componentData, _params) => defaultFields;
3764
3781
  const componentData = selectedItem ? selectedItem : { props: rootProps, readOnly: data.root.readOnly };
3765
3782
  const hasComponentResolver = selectedItem && (componentConfig == null ? void 0 : componentConfig.resolveFields);
3766
3783
  const hasRootResolver = !selectedItem && ((_b = config.root) == null ? void 0 : _b.resolveFields);
3767
3784
  const hasResolver = hasComponentResolver || hasRootResolver;
3768
- const resolveFields = (0, import_react21.useCallback)(
3785
+ const resolveFields = (0, import_react22.useCallback)(
3769
3786
  (..._0) => __async(void 0, [..._0], function* (fields = {}) {
3770
3787
  var _a2;
3771
3788
  const lastData = ((_a2 = lastSelectedData.props) == null ? void 0 : _a2.id) === componentData.props.id ? lastSelectedData : null;
@@ -3779,7 +3796,8 @@ var useResolvedFields = () => {
3779
3796
  fields,
3780
3797
  lastFields: resolvedFields,
3781
3798
  lastData,
3782
- appState: state
3799
+ appState: state,
3800
+ parent
3783
3801
  }
3784
3802
  );
3785
3803
  }
@@ -3789,7 +3807,8 @@ var useResolvedFields = () => {
3789
3807
  fields,
3790
3808
  lastFields: resolvedFields,
3791
3809
  lastData,
3792
- appState: state
3810
+ appState: state,
3811
+ parent
3793
3812
  });
3794
3813
  }
3795
3814
  return defaultResolveFields(componentData, {
@@ -3801,7 +3820,7 @@ var useResolvedFields = () => {
3801
3820
  }),
3802
3821
  [data, config, componentData, selectedItem, resolvedFields, state]
3803
3822
  );
3804
- (0, import_react21.useEffect)(() => {
3823
+ (0, import_react22.useEffect)(() => {
3805
3824
  if (hasResolver) {
3806
3825
  setFieldsLoading(true);
3807
3826
  resolveFields(defaultFields).then((fields) => {
@@ -3811,7 +3830,7 @@ var useResolvedFields = () => {
3811
3830
  } else {
3812
3831
  setResolvedFields(defaultFields);
3813
3832
  }
3814
- }, [data, defaultFields, state.ui.itemSelector, hasResolver]);
3833
+ }, [data, defaultFields, selectedItem, hasResolver]);
3815
3834
  return [resolvedFields, fieldsLoading];
3816
3835
  };
3817
3836
  var Fields = () => {
@@ -3832,7 +3851,7 @@ var Fields = () => {
3832
3851
  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;
3833
3852
  const isLoading = fieldsResolving || componentResolving;
3834
3853
  const rootProps = data.root.props || data.root;
3835
- const Wrapper = (0, import_react21.useMemo)(() => overrides.fields || DefaultFields, [overrides]);
3854
+ const Wrapper = (0, import_react22.useMemo)(() => overrides.fields || DefaultFields, [overrides]);
3836
3855
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
3837
3856
  "form",
3838
3857
  {
@@ -3953,7 +3972,7 @@ init_react_import();
3953
3972
 
3954
3973
  // lib/use-component-list.tsx
3955
3974
  init_react_import();
3956
- var import_react22 = require("react");
3975
+ var import_react23 = require("react");
3957
3976
 
3958
3977
  // components/ComponentList/index.tsx
3959
3978
  init_react_import();
@@ -4031,8 +4050,8 @@ ComponentList.Item = ComponentListItem;
4031
4050
  // lib/use-component-list.tsx
4032
4051
  var import_jsx_runtime29 = require("react/jsx-runtime");
4033
4052
  var useComponentList = (config, ui) => {
4034
- const [componentList, setComponentList] = (0, import_react22.useState)();
4035
- (0, import_react22.useEffect)(() => {
4053
+ const [componentList, setComponentList] = (0, import_react23.useState)();
4054
+ (0, import_react23.useEffect)(() => {
4036
4055
  var _a, _b, _c;
4037
4056
  if (Object.keys(ui.componentList).length > 0) {
4038
4057
  const matchedComponents = [];
@@ -4101,22 +4120,22 @@ var useComponentList = (config, ui) => {
4101
4120
  };
4102
4121
 
4103
4122
  // components/Puck/components/Components/index.tsx
4104
- var import_react23 = require("react");
4123
+ var import_react24 = require("react");
4105
4124
  var import_jsx_runtime30 = require("react/jsx-runtime");
4106
4125
  var Components = () => {
4107
4126
  const { config, state, overrides } = useAppContext();
4108
4127
  const componentList = useComponentList(config, state.ui);
4109
- const Wrapper = (0, import_react23.useMemo)(() => overrides.components || "div", [overrides]);
4128
+ const Wrapper = (0, import_react24.useMemo)(() => overrides.components || "div", [overrides]);
4110
4129
  return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Wrapper, { children: componentList ? componentList : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ComponentList, { id: "all" }) });
4111
4130
  };
4112
4131
 
4113
4132
  // components/Puck/components/Preview/index.tsx
4114
4133
  init_react_import();
4115
- var import_react25 = require("react");
4134
+ var import_react26 = require("react");
4116
4135
 
4117
4136
  // components/AutoFrame/index.tsx
4118
4137
  init_react_import();
4119
- var import_react24 = require("react");
4138
+ var import_react25 = require("react");
4120
4139
  var import_object_hash = __toESM(require("object-hash"));
4121
4140
  var import_react_dom2 = require("react-dom");
4122
4141
  var import_jsx_runtime31 = require("react/jsx-runtime");
@@ -4162,7 +4181,7 @@ var CopyHostStyles = ({
4162
4181
  onStylesLoaded = () => null
4163
4182
  }) => {
4164
4183
  const { document: doc, window: win } = useFrame();
4165
- (0, import_react24.useEffect)(() => {
4184
+ (0, import_react25.useEffect)(() => {
4166
4185
  if (!win || !doc) {
4167
4186
  return () => {
4168
4187
  };
@@ -4321,8 +4340,8 @@ var CopyHostStyles = ({
4321
4340
  }, []);
4322
4341
  return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_jsx_runtime31.Fragment, { children });
4323
4342
  };
4324
- var autoFrameContext = (0, import_react24.createContext)({});
4325
- var useFrame = () => (0, import_react24.useContext)(autoFrameContext);
4343
+ var autoFrameContext = (0, import_react25.createContext)({});
4344
+ var useFrame = () => (0, import_react25.useContext)(autoFrameContext);
4326
4345
  function AutoFrame(_a) {
4327
4346
  var _b = _a, {
4328
4347
  children,
@@ -4337,11 +4356,11 @@ function AutoFrame(_a) {
4337
4356
  "id",
4338
4357
  "onStylesLoaded"
4339
4358
  ]);
4340
- const [loaded, setLoaded] = (0, import_react24.useState)(false);
4341
- const [ctx, setCtx] = (0, import_react24.useState)({});
4342
- const ref = (0, import_react24.useRef)(null);
4343
- const [mountTarget, setMountTarget] = (0, import_react24.useState)();
4344
- (0, import_react24.useEffect)(() => {
4359
+ const [loaded, setLoaded] = (0, import_react25.useState)(false);
4360
+ const [ctx, setCtx] = (0, import_react25.useState)({});
4361
+ const ref = (0, import_react25.useRef)(null);
4362
+ const [mountTarget, setMountTarget] = (0, import_react25.useState)();
4363
+ (0, import_react25.useEffect)(() => {
4345
4364
  var _a2;
4346
4365
  if (ref.current) {
4347
4366
  setCtx({
@@ -4377,7 +4396,7 @@ var import_jsx_runtime32 = require("react/jsx-runtime");
4377
4396
  var getClassName23 = get_class_name_factory_default("PuckPreview", styles_module_default18);
4378
4397
  var Preview = ({ id = "puck-preview" }) => {
4379
4398
  const { config, dispatch, state, setStatus, iframe, overrides } = useAppContext();
4380
- const Page = (0, import_react25.useCallback)(
4399
+ const Page = (0, import_react26.useCallback)(
4381
4400
  (pageProps) => {
4382
4401
  var _a, _b;
4383
4402
  return ((_a = config.root) == null ? void 0 : _a.render) ? (_b = config.root) == null ? void 0 : _b.render(__spreadValues({
@@ -4386,7 +4405,7 @@ var Preview = ({ id = "puck-preview" }) => {
4386
4405
  },
4387
4406
  [config.root]
4388
4407
  );
4389
- const Frame = (0, import_react25.useMemo)(() => overrides.iframe, [overrides]);
4408
+ const Frame = (0, import_react26.useMemo)(() => overrides.iframe, [overrides]);
4390
4409
  const rootProps = state.data.root.props || state.data.root;
4391
4410
  return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4392
4411
  "div",
@@ -4475,7 +4494,7 @@ var scrollIntoView = (el) => {
4475
4494
  };
4476
4495
 
4477
4496
  // components/LayerTree/index.tsx
4478
- var import_react26 = require("react");
4497
+ var import_react27 = require("react");
4479
4498
 
4480
4499
  // lib/is-child-of-zone.ts
4481
4500
  init_react_import();
@@ -4502,7 +4521,7 @@ var LayerTree = ({
4502
4521
  label
4503
4522
  }) => {
4504
4523
  const zones = data.zones || {};
4505
- const ctx = (0, import_react26.useContext)(dropZoneContext);
4524
+ const ctx = (0, import_react27.useContext)(dropZoneContext);
4506
4525
  return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
4507
4526
  label && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: getClassName24("zoneTitle"), children: [
4508
4527
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: getClassName24("zoneIcon"), children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Layers, { size: "16" }) }),
@@ -4608,13 +4627,13 @@ var LayerTree = ({
4608
4627
  };
4609
4628
 
4610
4629
  // components/Puck/components/Outline/index.tsx
4611
- var import_react27 = require("react");
4630
+ var import_react28 = require("react");
4612
4631
  var import_jsx_runtime34 = require("react/jsx-runtime");
4613
4632
  var Outline = () => {
4614
4633
  const { dispatch, state, overrides, config } = useAppContext();
4615
4634
  const { data, ui } = state;
4616
4635
  const { itemSelector } = ui;
4617
- const setItemSelector = (0, import_react27.useCallback)(
4636
+ const setItemSelector = (0, import_react28.useCallback)(
4618
4637
  (newItemSelector) => {
4619
4638
  dispatch({
4620
4639
  type: "setUi",
@@ -4623,7 +4642,7 @@ var Outline = () => {
4623
4642
  },
4624
4643
  []
4625
4644
  );
4626
- const Wrapper = (0, import_react27.useMemo)(() => overrides.outline || "div", [overrides]);
4645
+ const Wrapper = (0, import_react28.useMemo)(() => overrides.outline || "div", [overrides]);
4627
4646
  return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Wrapper, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(dropZoneContext.Consumer, { children: (ctx) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
4628
4647
  (ctx == null ? void 0 : ctx.activeZones) && (ctx == null ? void 0 : ctx.activeZones[rootDroppableId]) && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4629
4648
  LayerTree,
@@ -4712,19 +4731,19 @@ function usePuckHistory({
4712
4731
 
4713
4732
  // lib/use-history-store.ts
4714
4733
  init_react_import();
4715
- var import_react28 = require("react");
4734
+ var import_react29 = require("react");
4716
4735
  var import_use_debounce3 = require("use-debounce");
4717
4736
  var EMPTY_HISTORY_INDEX = 0;
4718
4737
  function useHistoryStore(initialHistory) {
4719
4738
  var _a, _b;
4720
- const [histories, setHistories] = (0, import_react28.useState)(
4739
+ const [histories, setHistories] = (0, import_react29.useState)(
4721
4740
  (_a = initialHistory == null ? void 0 : initialHistory.histories) != null ? _a : []
4722
4741
  );
4723
4742
  const updateHistories = (histories2) => {
4724
4743
  setHistories(histories2);
4725
4744
  setIndex(histories2.length - 1);
4726
4745
  };
4727
- const [index, setIndex] = (0, import_react28.useState)(
4746
+ const [index, setIndex] = (0, import_react29.useState)(
4728
4747
  (_b = initialHistory == null ? void 0 : initialHistory.index) != null ? _b : EMPTY_HISTORY_INDEX
4729
4748
  );
4730
4749
  const hasPast = index > EMPTY_HISTORY_INDEX;
@@ -4884,11 +4903,11 @@ var getBox = function getBox2(el) {
4884
4903
  };
4885
4904
 
4886
4905
  // components/Puck/components/Canvas/index.tsx
4887
- var import_react30 = require("react");
4906
+ var import_react31 = require("react");
4888
4907
 
4889
4908
  // components/ViewportControls/index.tsx
4890
4909
  init_react_import();
4891
- var import_react29 = require("react");
4910
+ var import_react30 = require("react");
4892
4911
 
4893
4912
  // css-module:/home/runner/work/puck/puck/packages/core/components/ViewportControls/styles.module.css#css-module
4894
4913
  init_react_import();
@@ -4911,8 +4930,8 @@ var ViewportButton = ({
4911
4930
  onClick
4912
4931
  }) => {
4913
4932
  const { state } = useAppContext();
4914
- const [isActive, setIsActive] = (0, import_react29.useState)(false);
4915
- (0, import_react29.useEffect)(() => {
4933
+ const [isActive, setIsActive] = (0, import_react30.useState)(false);
4934
+ (0, import_react30.useEffect)(() => {
4916
4935
  setIsActive(width === state.ui.viewports.current.width);
4917
4936
  }, [width, state.ui.viewports.current.width]);
4918
4937
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: getClassNameButton({ isActive }), children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
@@ -4948,7 +4967,7 @@ var ViewportControls = ({
4948
4967
  const defaultsContainAutoZoom = defaultZoomOptions.find(
4949
4968
  (option) => option.value === autoZoom
4950
4969
  );
4951
- const zoomOptions = (0, import_react29.useMemo)(
4970
+ const zoomOptions = (0, import_react30.useMemo)(
4952
4971
  () => [
4953
4972
  ...defaultZoomOptions,
4954
4973
  ...defaultsContainAutoZoom ? [] : [
@@ -5071,17 +5090,17 @@ var Canvas = () => {
5071
5090
  const { status, iframe } = useAppContext();
5072
5091
  const { dispatch, state, overrides, setUi, zoomConfig, setZoomConfig } = useAppContext();
5073
5092
  const { ui } = state;
5074
- const frameRef = (0, import_react30.useRef)(null);
5075
- const [showTransition, setShowTransition] = (0, import_react30.useState)(false);
5076
- const defaultRender = (0, import_react30.useMemo)(() => {
5093
+ const frameRef = (0, import_react31.useRef)(null);
5094
+ const [showTransition, setShowTransition] = (0, import_react31.useState)(false);
5095
+ const defaultRender = (0, import_react31.useMemo)(() => {
5077
5096
  const PuckDefault = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment, { children });
5078
5097
  return PuckDefault;
5079
5098
  }, []);
5080
- const CustomPreview = (0, import_react30.useMemo)(
5099
+ const CustomPreview = (0, import_react31.useMemo)(
5081
5100
  () => overrides.preview || defaultRender,
5082
5101
  [overrides]
5083
5102
  );
5084
- const getFrameDimensions = (0, import_react30.useCallback)(() => {
5103
+ const getFrameDimensions = (0, import_react31.useCallback)(() => {
5085
5104
  if (frameRef.current) {
5086
5105
  const frame = frameRef.current;
5087
5106
  const box = getBox(frame);
@@ -5089,7 +5108,7 @@ var Canvas = () => {
5089
5108
  }
5090
5109
  return { width: 0, height: 0 };
5091
5110
  }, [frameRef]);
5092
- const resetAutoZoom = (0, import_react30.useCallback)(
5111
+ const resetAutoZoom = (0, import_react31.useCallback)(
5093
5112
  (ui2 = state.ui) => {
5094
5113
  if (frameRef.current) {
5095
5114
  setZoomConfig(
@@ -5099,11 +5118,11 @@ var Canvas = () => {
5099
5118
  },
5100
5119
  [frameRef, zoomConfig, state.ui]
5101
5120
  );
5102
- (0, import_react30.useEffect)(() => {
5121
+ (0, import_react31.useEffect)(() => {
5103
5122
  setShowTransition(false);
5104
5123
  resetAutoZoom();
5105
5124
  }, [frameRef, ui.leftSideBarVisible, ui.rightSideBarVisible]);
5106
- (0, import_react30.useEffect)(() => {
5125
+ (0, import_react31.useEffect)(() => {
5107
5126
  const { height: frameHeight } = getFrameDimensions();
5108
5127
  if (ui.viewports.current.height === "auto") {
5109
5128
  setZoomConfig(__spreadProps(__spreadValues({}, zoomConfig), {
@@ -5111,13 +5130,13 @@ var Canvas = () => {
5111
5130
  }));
5112
5131
  }
5113
5132
  }, [zoomConfig.zoom]);
5114
- (0, import_react30.useEffect)(() => {
5133
+ (0, import_react31.useEffect)(() => {
5115
5134
  if (ZOOM_ON_CHANGE) {
5116
5135
  setShowTransition(true);
5117
5136
  resetAutoZoom(ui);
5118
5137
  }
5119
5138
  }, [ui.viewports.current.width]);
5120
- (0, import_react30.useEffect)(() => {
5139
+ (0, import_react31.useEffect)(() => {
5121
5140
  const observer = new ResizeObserver(() => {
5122
5141
  setShowTransition(false);
5123
5142
  resetAutoZoom();
@@ -5129,8 +5148,8 @@ var Canvas = () => {
5129
5148
  observer.disconnect();
5130
5149
  };
5131
5150
  }, []);
5132
- const [showLoader, setShowLoader] = (0, import_react30.useState)(false);
5133
- (0, import_react30.useEffect)(() => {
5151
+ const [showLoader, setShowLoader] = (0, import_react31.useState)(false);
5152
+ (0, import_react31.useEffect)(() => {
5134
5153
  setTimeout(() => {
5135
5154
  setShowLoader(true);
5136
5155
  }, 500);
@@ -5233,7 +5252,7 @@ var insertComponent = (componentType, zone, index, {
5233
5252
 
5234
5253
  // lib/use-loaded-overrides.ts
5235
5254
  init_react_import();
5236
- var import_react31 = require("react");
5255
+ var import_react32 = require("react");
5237
5256
 
5238
5257
  // lib/load-overrides.ts
5239
5258
  init_react_import();
@@ -5272,7 +5291,7 @@ var useLoadedOverrides = ({
5272
5291
  overrides,
5273
5292
  plugins
5274
5293
  }) => {
5275
- return (0, import_react31.useMemo)(() => {
5294
+ return (0, import_react32.useMemo)(() => {
5276
5295
  return loadOverrides({ overrides, plugins });
5277
5296
  }, [plugins, overrides]);
5278
5297
  };
@@ -5311,7 +5330,7 @@ function Puck({
5311
5330
  enabled: true,
5312
5331
  waitForStyles: true
5313
5332
  }, _iframe);
5314
- const [generatedAppState] = (0, import_react32.useState)(() => {
5333
+ const [generatedAppState] = (0, import_react33.useState)(() => {
5315
5334
  var _a2, _b, _c, _d, _e, _f, _g, _h, _i;
5316
5335
  const initial = __spreadValues(__spreadValues({}, defaultAppState.ui), initialUi);
5317
5336
  let clientUiState = {};
@@ -5383,22 +5402,22 @@ function Puck({
5383
5402
  histories,
5384
5403
  index: initialHistoryIndex
5385
5404
  });
5386
- const [reducer] = (0, import_react32.useState)(
5405
+ const [reducer] = (0, import_react33.useState)(
5387
5406
  () => createReducer({
5388
5407
  config,
5389
5408
  record: historyStore.record,
5390
5409
  onAction
5391
5410
  })
5392
5411
  );
5393
- const [appState, dispatch] = (0, import_react32.useReducer)(
5412
+ const [appState, dispatch] = (0, import_react33.useReducer)(
5394
5413
  reducer,
5395
5414
  flushZones(initialAppState)
5396
5415
  );
5397
5416
  const { data, ui } = appState;
5398
5417
  const history = usePuckHistory({ dispatch, initialAppState, historyStore });
5399
- const [menuOpen, setMenuOpen] = (0, import_react32.useState)(false);
5418
+ const [menuOpen, setMenuOpen] = (0, import_react33.useState)(false);
5400
5419
  const { itemSelector, leftSideBarVisible, rightSideBarVisible } = ui;
5401
- const setItemSelector = (0, import_react32.useCallback)(
5420
+ const setItemSelector = (0, import_react33.useCallback)(
5402
5421
  (newItemSelector) => {
5403
5422
  if (newItemSelector === itemSelector) return;
5404
5423
  dispatch({
@@ -5410,13 +5429,13 @@ function Puck({
5410
5429
  [itemSelector]
5411
5430
  );
5412
5431
  const selectedItem = itemSelector ? getItem(itemSelector, data) : null;
5413
- (0, import_react32.useEffect)(() => {
5432
+ (0, import_react33.useEffect)(() => {
5414
5433
  if (onChange) onChange(data);
5415
5434
  }, [data]);
5416
5435
  const { onDragStartOrUpdate, placeholderStyle } = usePlaceholderStyle();
5417
- const [draggedItem, setDraggedItem] = (0, import_react32.useState)();
5436
+ const [draggedItem, setDraggedItem] = (0, import_react33.useState)();
5418
5437
  const rootProps = data.root.props || data.root;
5419
- const toggleSidebars = (0, import_react32.useCallback)(
5438
+ const toggleSidebars = (0, import_react33.useCallback)(
5420
5439
  (sidebar) => {
5421
5440
  const widerViewport = window.matchMedia("(min-width: 638px)").matches;
5422
5441
  const sideBarVisible = sidebar === "left" ? leftSideBarVisible : rightSideBarVisible;
@@ -5430,7 +5449,7 @@ function Puck({
5430
5449
  },
5431
5450
  [dispatch, leftSideBarVisible, rightSideBarVisible]
5432
5451
  );
5433
- (0, import_react32.useEffect)(() => {
5452
+ (0, import_react33.useEffect)(() => {
5434
5453
  if (!window.matchMedia("(min-width: 638px)").matches) {
5435
5454
  dispatch({
5436
5455
  type: "setUi",
@@ -5453,7 +5472,7 @@ function Puck({
5453
5472
  window.removeEventListener("resize", handleResize);
5454
5473
  };
5455
5474
  }, []);
5456
- const defaultHeaderRender = (0, import_react32.useMemo)(() => {
5475
+ const defaultHeaderRender = (0, import_react33.useMemo)(() => {
5457
5476
  if (renderHeader) {
5458
5477
  console.warn(
5459
5478
  "`renderHeader` is deprecated. Please use `overrides.header` and the `usePuck` hook instead"
@@ -5467,7 +5486,7 @@ function Puck({
5467
5486
  }
5468
5487
  return DefaultOverride;
5469
5488
  }, [renderHeader]);
5470
- const defaultHeaderActionsRender = (0, import_react32.useMemo)(() => {
5489
+ const defaultHeaderActionsRender = (0, import_react33.useMemo)(() => {
5471
5490
  if (renderHeaderActions) {
5472
5491
  console.warn(
5473
5492
  "`renderHeaderActions` is deprecated. Please use `overrides.headerActions` and the `usePuck` hook instead."
@@ -5484,20 +5503,20 @@ function Puck({
5484
5503
  overrides,
5485
5504
  plugins
5486
5505
  });
5487
- const CustomPuck = (0, import_react32.useMemo)(
5506
+ const CustomPuck = (0, import_react33.useMemo)(
5488
5507
  () => loadedOverrides.puck || DefaultOverride,
5489
5508
  [loadedOverrides]
5490
5509
  );
5491
- const CustomHeader = (0, import_react32.useMemo)(
5510
+ const CustomHeader = (0, import_react33.useMemo)(
5492
5511
  () => loadedOverrides.header || defaultHeaderRender,
5493
5512
  [loadedOverrides]
5494
5513
  );
5495
- const CustomHeaderActions = (0, import_react32.useMemo)(
5514
+ const CustomHeaderActions = (0, import_react33.useMemo)(
5496
5515
  () => loadedOverrides.headerActions || defaultHeaderActionsRender,
5497
5516
  [loadedOverrides]
5498
5517
  );
5499
- const [mounted, setMounted] = (0, import_react32.useState)(false);
5500
- (0, import_react32.useEffect)(() => {
5518
+ const [mounted, setMounted] = (0, import_react33.useState)(false);
5519
+ (0, import_react33.useEffect)(() => {
5501
5520
  setMounted(true);
5502
5521
  }, []);
5503
5522
  const selectedComponentConfig = selectedItem && config.components[selectedItem.type];
package/dist/index.mjs CHANGED
@@ -3572,6 +3572,22 @@ var styles_module_default16 = { "PuckFields": "_PuckFields_jp3lw_1", "PuckFields
3572
3572
 
3573
3573
  // components/Puck/components/Fields/index.tsx
3574
3574
  import { useCallback as useCallback7, useEffect as useEffect13, useMemo as useMemo6, useState as useState15 } from "react";
3575
+
3576
+ // lib/use-parent.ts
3577
+ init_react_import();
3578
+ import { useContext as useContext5 } from "react";
3579
+ var useParent = (itemSelector) => {
3580
+ var _a;
3581
+ const { selectedItem, state } = useAppContext();
3582
+ const { pathData } = useContext5(dropZoneContext) || {};
3583
+ const item = itemSelector ? getItem(itemSelector, state.data) : selectedItem;
3584
+ const breadcrumbs = convertPathDataToBreadcrumbs(item, pathData, state.data);
3585
+ const lastItem = breadcrumbs[breadcrumbs.length - 1];
3586
+ const parent = (lastItem == null ? void 0 : lastItem.selector) ? (_a = getItem(lastItem.selector, state.data)) != null ? _a : null : null;
3587
+ return parent || null;
3588
+ };
3589
+
3590
+ // components/Puck/components/Fields/index.tsx
3575
3591
  import { Fragment as Fragment12, jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
3576
3592
  var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
3577
3593
  var defaultPageFields = {
@@ -3585,6 +3601,7 @@ var DefaultFields = ({
3585
3601
  var useResolvedFields = () => {
3586
3602
  var _a, _b;
3587
3603
  const { selectedItem, state, config } = useAppContext();
3604
+ const parent = useParent();
3588
3605
  const { data } = state;
3589
3606
  const rootFields = ((_a = config.root) == null ? void 0 : _a.fields) || defaultPageFields;
3590
3607
  const componentConfig = selectedItem ? config.components[selectedItem.type] : null;
@@ -3615,7 +3632,8 @@ var useResolvedFields = () => {
3615
3632
  fields,
3616
3633
  lastFields: resolvedFields,
3617
3634
  lastData,
3618
- appState: state
3635
+ appState: state,
3636
+ parent
3619
3637
  }
3620
3638
  );
3621
3639
  }
@@ -3625,7 +3643,8 @@ var useResolvedFields = () => {
3625
3643
  fields,
3626
3644
  lastFields: resolvedFields,
3627
3645
  lastData,
3628
- appState: state
3646
+ appState: state,
3647
+ parent
3629
3648
  });
3630
3649
  }
3631
3650
  return defaultResolveFields(componentData, {
@@ -3647,7 +3666,7 @@ var useResolvedFields = () => {
3647
3666
  } else {
3648
3667
  setResolvedFields(defaultFields);
3649
3668
  }
3650
- }, [data, defaultFields, state.ui.itemSelector, hasResolver]);
3669
+ }, [data, defaultFields, selectedItem, hasResolver]);
3651
3670
  return [resolvedFields, fieldsLoading];
3652
3671
  };
3653
3672
  var Fields = () => {
@@ -3954,7 +3973,7 @@ import { useCallback as useCallback8, useMemo as useMemo8 } from "react";
3954
3973
  init_react_import();
3955
3974
  import {
3956
3975
  createContext as createContext4,
3957
- useContext as useContext5,
3976
+ useContext as useContext6,
3958
3977
  useEffect as useEffect15,
3959
3978
  useRef as useRef3,
3960
3979
  useState as useState17
@@ -4164,7 +4183,7 @@ var CopyHostStyles = ({
4164
4183
  return /* @__PURE__ */ jsx31(Fragment13, { children });
4165
4184
  };
4166
4185
  var autoFrameContext = createContext4({});
4167
- var useFrame = () => useContext5(autoFrameContext);
4186
+ var useFrame = () => useContext6(autoFrameContext);
4168
4187
  function AutoFrame(_a) {
4169
4188
  var _b = _a, {
4170
4189
  children,
@@ -4317,7 +4336,7 @@ var scrollIntoView = (el) => {
4317
4336
  };
4318
4337
 
4319
4338
  // components/LayerTree/index.tsx
4320
- import { useContext as useContext6 } from "react";
4339
+ import { useContext as useContext7 } from "react";
4321
4340
 
4322
4341
  // lib/is-child-of-zone.ts
4323
4342
  init_react_import();
@@ -4344,7 +4363,7 @@ var LayerTree = ({
4344
4363
  label
4345
4364
  }) => {
4346
4365
  const zones = data.zones || {};
4347
- const ctx = useContext6(dropZoneContext);
4366
+ const ctx = useContext7(dropZoneContext);
4348
4367
  return /* @__PURE__ */ jsxs17(Fragment15, { children: [
4349
4368
  label && /* @__PURE__ */ jsxs17("div", { className: getClassName24("zoneTitle"), children: [
4350
4369
  /* @__PURE__ */ jsx33("div", { className: getClassName24("zoneIcon"), children: /* @__PURE__ */ jsx33(Layers, { size: "16" }) }),
@@ -145,6 +145,7 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
145
145
  lastFields: Fields<FieldProps>;
146
146
  lastData: DataShape | null;
147
147
  appState: AppState;
148
+ parent: ComponentData | null;
148
149
  }) => Promise<Fields<FieldProps>> | Fields<FieldProps>;
149
150
  resolveData?: (data: DataShape, params: {
150
151
  changed: Partial<Record<keyof FieldProps, boolean>>;
@@ -145,6 +145,7 @@ type ComponentConfig<RenderProps extends DefaultComponentProps = DefaultComponen
145
145
  lastFields: Fields<FieldProps>;
146
146
  lastData: DataShape | null;
147
147
  appState: AppState;
148
+ parent: ComponentData | null;
148
149
  }) => Promise<Fields<FieldProps>> | Fields<FieldProps>;
149
150
  resolveData?: (data: DataShape, params: {
150
151
  changed: Partial<Record<keyof FieldProps, boolean>>;
package/dist/rsc.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as Config, D as Data } from './resolve-all-data-Ch-Pcasj.mjs';
3
- export { a4 as resolveAllData } from './resolve-all-data-Ch-Pcasj.mjs';
2
+ import { C as Config, D as Data } from './resolve-all-data-C7aAQCY3.mjs';
3
+ export { a4 as resolveAllData } from './resolve-all-data-C7aAQCY3.mjs';
4
4
  import 'react';
5
5
 
6
6
  declare function Render<UserConfig extends Config = Config>({ config, data, }: {
package/dist/rsc.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as Config, D as Data } from './resolve-all-data-Ch-Pcasj.js';
3
- export { a4 as resolveAllData } from './resolve-all-data-Ch-Pcasj.js';
2
+ import { C as Config, D as Data } from './resolve-all-data-C7aAQCY3.js';
3
+ export { a4 as resolveAllData } from './resolve-all-data-C7aAQCY3.js';
4
4
  import 'react';
5
5
 
6
6
  declare function Render<UserConfig extends Config = Config>({ config, data, }: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@measured/puck",
3
- "version": "0.17.0-canary.35170f8",
3
+ "version": "0.17.0-canary.8959ff1",
4
4
  "author": "Measured Corporation Ltd <hello@measured.co>",
5
5
  "repository": "measuredco/puck",
6
6
  "bugs": "https://github.com/measuredco/puck/issues",