@measured/puck 0.16.0-canary.f761e5f → 0.16.0-canary.fc564d7

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js CHANGED
@@ -156,6 +156,7 @@ __export(core_exports, {
156
156
  DropZoneProvider: () => DropZoneProvider,
157
157
  FieldLabel: () => FieldLabel,
158
158
  FieldLabelInternal: () => FieldLabelInternal2,
159
+ Group: () => Group,
159
160
  IconButton: () => IconButton,
160
161
  Puck: () => Puck,
161
162
  Render: () => Render,
@@ -242,11 +243,11 @@ var get_class_name_factory_default = getClassNameFactory;
242
243
 
243
244
  // css-module:/home/runner/work/puck/puck/packages/core/components/ActionBar/styles.module.css#css-module
244
245
  init_react_import();
245
- var styles_module_default = { "ActionBarComponent": "_ActionBarComponent_8nyey_1", "ActionBarComponent-actionsLabel": "_ActionBarComponent-actionsLabel_8nyey_15", "ActionBarComponent-action": "_ActionBarComponent-action_8nyey_15" };
246
+ var styles_module_default = { "ActionBar": "_ActionBar_fp58q_1", "ActionBar-actionsLabel": "_ActionBar-actionsLabel_fp58q_16", "ActionBar-group": "_ActionBar-group_fp58q_29", "ActionBar-action": "_ActionBar-action_fp58q_16" };
246
247
 
247
248
  // components/ActionBar/index.tsx
248
249
  var import_jsx_runtime = require("react/jsx-runtime");
249
- var getClassName = get_class_name_factory_default("ActionBarComponent", styles_module_default);
250
+ var getClassName = get_class_name_factory_default("ActionBar", styles_module_default);
250
251
  var ActionBar = ({
251
252
  label,
252
253
  children
@@ -268,7 +269,9 @@ var Action = ({
268
269
  children
269
270
  }
270
271
  );
272
+ var Group = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: getClassName("group"), children });
271
273
  ActionBar.Action = Action;
274
+ ActionBar.Group = Group;
272
275
 
273
276
  // components/AutoField/index.tsx
274
277
  init_react_import();
@@ -278,7 +281,7 @@ init_react_import();
278
281
  var styles_module_default2 = { "Input": "_Input_3pq3z_1", "Input-label": "_Input-label_3pq3z_26", "Input-labelIcon": "_Input-labelIcon_3pq3z_35", "Input-disabledIcon": "_Input-disabledIcon_3pq3z_42", "Input-input": "_Input-input_3pq3z_47", "Input--readOnly": "_Input--readOnly_3pq3z_91", "Input-radioGroupItems": "_Input-radioGroupItems_3pq3z_102", "Input-radio": "_Input-radio_3pq3z_102", "Input-radioInner": "_Input-radioInner_3pq3z_119", "Input-radioInput": "_Input-radioInput_3pq3z_164" };
279
282
 
280
283
  // components/AutoField/index.tsx
281
- var import_react11 = require("react");
284
+ var import_react13 = require("react");
282
285
 
283
286
  // components/AutoField/fields/index.tsx
284
287
  init_react_import();
@@ -686,7 +689,7 @@ var import_dnd = require("@measured/dnd");
686
689
 
687
690
  // components/Puck/context.tsx
688
691
  init_react_import();
689
- var import_react4 = require("react");
692
+ var import_react6 = require("react");
690
693
 
691
694
  // lib/get-item.ts
692
695
  init_react_import();
@@ -728,6 +731,332 @@ var defaultViewports = [
728
731
 
729
732
  // components/Puck/context.tsx
730
733
  var import_ua_parser_js = require("ua-parser-js");
734
+
735
+ // lib/use-resolved-permissions.ts
736
+ init_react_import();
737
+ var import_react4 = require("react");
738
+
739
+ // lib/flatten-data.ts
740
+ init_react_import();
741
+ var flattenData = (data) => {
742
+ return Object.keys(data.zones || {}).reduce(
743
+ (acc, zone) => [...acc, ...data.zones[zone]],
744
+ data.content
745
+ );
746
+ };
747
+
748
+ // lib/get-changed.ts
749
+ init_react_import();
750
+ var getChanged = (newItem, oldItem) => {
751
+ return newItem ? Object.keys(newItem.props || {}).reduce((acc, item) => {
752
+ const newItemProps = (newItem == null ? void 0 : newItem.props) || {};
753
+ const oldItemProps = (oldItem == null ? void 0 : oldItem.props) || {};
754
+ return __spreadProps(__spreadValues({}, acc), {
755
+ [item]: oldItemProps[item] !== newItemProps[item]
756
+ });
757
+ }, {}) : {};
758
+ };
759
+
760
+ // lib/use-resolved-permissions.ts
761
+ var useResolvedPermissions = (config, appState, globalPermissions, setComponentLoading, unsetComponentLoading) => {
762
+ const [cache3, setCache] = (0, import_react4.useState)({});
763
+ const [resolvedPermissions, setResolvedPermissions] = (0, import_react4.useState)({});
764
+ const resolveDataForItem = (0, import_react4.useCallback)(
765
+ (item, force = false) => __async(void 0, null, function* () {
766
+ var _a, _b, _c;
767
+ setComponentLoading == null ? void 0 : setComponentLoading(item.props.id);
768
+ const componentConfig = item.type === "root" ? config.root : config.components[item.type];
769
+ if (!componentConfig) {
770
+ unsetComponentLoading == null ? void 0 : unsetComponentLoading(item.props.id);
771
+ return;
772
+ }
773
+ const initialPermissions = __spreadValues(__spreadValues({}, globalPermissions), componentConfig.permissions);
774
+ if (componentConfig.resolvePermissions) {
775
+ const changed = getChanged(item, (_a = cache3[item.props.id]) == null ? void 0 : _a.lastData);
776
+ if (Object.values(changed).some((el) => el === true) || force) {
777
+ const resolvedPermissions2 = yield componentConfig.resolvePermissions(
778
+ item,
779
+ {
780
+ changed,
781
+ lastPermissions: ((_b = cache3[item.props.id]) == null ? void 0 : _b.lastPermissions) || null,
782
+ permissions: initialPermissions,
783
+ appState,
784
+ lastData: ((_c = cache3[item.props.id]) == null ? void 0 : _c.lastData) || null
785
+ }
786
+ );
787
+ setCache((_cache) => __spreadProps(__spreadValues({}, _cache), {
788
+ [item.props.id]: {
789
+ lastData: item,
790
+ lastPermissions: resolvedPermissions2
791
+ }
792
+ }));
793
+ setResolvedPermissions((p) => __spreadProps(__spreadValues({}, p), {
794
+ [item.props.id]: resolvedPermissions2
795
+ }));
796
+ }
797
+ }
798
+ unsetComponentLoading == null ? void 0 : unsetComponentLoading(item.props.id);
799
+ }),
800
+ [config, globalPermissions, appState, cache3]
801
+ );
802
+ const resolveDataForRoot = (force = false) => {
803
+ resolveDataForItem(
804
+ // Shim the root data in by conforming to component data shape
805
+ {
806
+ type: "root",
807
+ props: __spreadProps(__spreadValues({}, appState.data.root.props), { id: "puck-root" })
808
+ },
809
+ force
810
+ );
811
+ };
812
+ const resolvePermissions = (0, import_react4.useCallback)(
813
+ (..._0) => __async(void 0, [..._0], function* ({ item, type, root } = {}, force = false) {
814
+ if (item) {
815
+ yield resolveDataForItem(item, force);
816
+ } else if (type) {
817
+ flattenData(appState.data).filter((item2) => item2.type === type).map((item2) => __async(void 0, null, function* () {
818
+ yield resolveDataForItem(item2, force);
819
+ }));
820
+ } else if (root) {
821
+ resolveDataForRoot(force);
822
+ } else {
823
+ resolveDataForRoot(force);
824
+ flattenData(appState.data).map((item2) => __async(void 0, null, function* () {
825
+ yield resolveDataForItem(item2, force);
826
+ }));
827
+ }
828
+ }),
829
+ [config, appState]
830
+ );
831
+ const refreshPermissions = (0, import_react4.useCallback)(
832
+ (params) => __async(void 0, null, function* () {
833
+ resolvePermissions(params, true);
834
+ }),
835
+ [config, appState]
836
+ );
837
+ (0, import_react4.useEffect)(() => {
838
+ resolvePermissions();
839
+ }, [config, appState.data]);
840
+ const getPermissions = (0, import_react4.useCallback)(
841
+ ({ item, type, root } = {}) => {
842
+ if (item) {
843
+ const componentConfig = config.components[item.type];
844
+ const initialPermissions = __spreadValues(__spreadValues({}, globalPermissions), componentConfig.permissions);
845
+ const resolvedForItem = resolvedPermissions[item.props.id];
846
+ return resolvedForItem ? __spreadValues(__spreadValues({}, globalPermissions), resolvedForItem) : initialPermissions;
847
+ } else if (type) {
848
+ const componentConfig = config.components[type];
849
+ return __spreadValues(__spreadValues({}, globalPermissions), componentConfig.permissions);
850
+ } else if (root) {
851
+ const rootConfig = config.root;
852
+ const initialPermissions = __spreadValues(__spreadValues({}, globalPermissions), rootConfig == null ? void 0 : rootConfig.permissions);
853
+ const resolvedForItem = resolvedPermissions["puck-root"];
854
+ return resolvedForItem ? __spreadValues(__spreadValues({}, globalPermissions), resolvedForItem) : initialPermissions;
855
+ }
856
+ return globalPermissions;
857
+ },
858
+ [config, resolvedPermissions]
859
+ );
860
+ return {
861
+ getPermissions,
862
+ refreshPermissions
863
+ };
864
+ };
865
+
866
+ // lib/use-resolved-data.ts
867
+ init_react_import();
868
+ var import_react5 = require("react");
869
+
870
+ // lib/resolve-component-data.ts
871
+ init_react_import();
872
+ var cache = { lastChange: {} };
873
+ var resolveAllComponentData = (content, config, onResolveStart, onResolveEnd) => __async(void 0, null, function* () {
874
+ return yield Promise.all(
875
+ content.map((item) => __async(void 0, null, function* () {
876
+ return yield resolveComponentData(
877
+ item,
878
+ config,
879
+ onResolveStart,
880
+ onResolveEnd
881
+ );
882
+ }))
883
+ );
884
+ });
885
+ var resolveComponentData = (item, config, onResolveStart, onResolveEnd) => __async(void 0, null, function* () {
886
+ const configForItem = config.components[item.type];
887
+ if (configForItem.resolveData) {
888
+ const { item: oldItem = null, resolved = {} } = cache.lastChange[item.props.id] || {};
889
+ if (item && item === oldItem) {
890
+ return resolved;
891
+ }
892
+ const changed = getChanged(item, oldItem);
893
+ if (onResolveStart) {
894
+ onResolveStart(item);
895
+ }
896
+ const { props: resolvedProps, readOnly = {} } = yield configForItem.resolveData(item, { changed, lastData: oldItem });
897
+ const { readOnly: existingReadOnly = {} } = item || {};
898
+ const newReadOnly = __spreadValues(__spreadValues({}, existingReadOnly), readOnly);
899
+ const resolvedItem = __spreadProps(__spreadValues({}, item), {
900
+ props: __spreadValues(__spreadValues({}, item.props), resolvedProps)
901
+ });
902
+ if (Object.keys(newReadOnly).length) {
903
+ resolvedItem.readOnly = newReadOnly;
904
+ }
905
+ cache.lastChange[item.props.id] = {
906
+ item,
907
+ resolved: resolvedItem
908
+ };
909
+ if (onResolveEnd) {
910
+ onResolveEnd(resolvedItem);
911
+ }
912
+ return resolvedItem;
913
+ }
914
+ return item;
915
+ });
916
+
917
+ // lib/apply-dynamic-props.ts
918
+ init_react_import();
919
+ var applyDynamicProps = (data, dynamicProps, rootData) => {
920
+ return __spreadProps(__spreadValues({}, data), {
921
+ root: __spreadValues(__spreadValues({}, data.root), rootData ? rootData : {}),
922
+ content: data.content.map((item) => {
923
+ return dynamicProps[item.props.id] ? __spreadValues(__spreadValues({}, item), dynamicProps[item.props.id]) : item;
924
+ }),
925
+ zones: Object.keys(data.zones || {}).reduce((acc, zoneKey) => {
926
+ return __spreadProps(__spreadValues({}, acc), {
927
+ [zoneKey]: data.zones[zoneKey].map((item) => {
928
+ return dynamicProps[item.props.id] ? __spreadValues(__spreadValues({}, item), dynamicProps[item.props.id]) : item;
929
+ })
930
+ });
931
+ }, {})
932
+ });
933
+ };
934
+
935
+ // lib/resolve-root-data.ts
936
+ init_react_import();
937
+ var cache2 = {};
938
+ function resolveRootData(data, config) {
939
+ return __async(this, null, function* () {
940
+ var _a, _b, _c, _d, _e;
941
+ if (((_a = config.root) == null ? void 0 : _a.resolveData) && data.root.props) {
942
+ if (((_b = cache2.lastChange) == null ? void 0 : _b.original) === data.root) {
943
+ return cache2.lastChange.resolved;
944
+ }
945
+ const changed = getChanged(data.root, (_c = cache2.lastChange) == null ? void 0 : _c.original);
946
+ const rootWithProps = data.root;
947
+ const resolvedRoot = yield (_e = config.root) == null ? void 0 : _e.resolveData(rootWithProps, {
948
+ changed,
949
+ lastData: ((_d = cache2.lastChange) == null ? void 0 : _d.original) || {}
950
+ });
951
+ cache2.lastChange = {
952
+ original: data.root,
953
+ resolved: resolvedRoot
954
+ };
955
+ return __spreadProps(__spreadValues(__spreadValues({}, data.root), resolvedRoot), {
956
+ props: __spreadValues(__spreadValues({}, data.root.props), resolvedRoot.props)
957
+ });
958
+ }
959
+ return data.root;
960
+ });
961
+ }
962
+
963
+ // lib/use-resolved-data.ts
964
+ var useResolvedData = (appState, config, dispatch, setComponentLoading, unsetComponentLoading, refreshPermissions) => {
965
+ const [{ resolverKey, newAppState }, setResolverState] = (0, import_react5.useState)({
966
+ resolverKey: 0,
967
+ newAppState: appState
968
+ });
969
+ const deferredSetStates = {};
970
+ const _setComponentLoading = (0, import_react5.useCallback)(
971
+ (id, loading, defer2 = 0) => {
972
+ if (deferredSetStates[id]) {
973
+ clearTimeout(deferredSetStates[id]);
974
+ delete deferredSetStates[id];
975
+ }
976
+ deferredSetStates[id] = setTimeout(() => {
977
+ if (loading) {
978
+ setComponentLoading(id);
979
+ } else {
980
+ unsetComponentLoading(id);
981
+ }
982
+ delete deferredSetStates[id];
983
+ }, defer2);
984
+ },
985
+ []
986
+ );
987
+ const runResolvers = () => __async(void 0, null, function* () {
988
+ const newData = newAppState.data;
989
+ const flatContent = flattenData(newData).filter(
990
+ (item) => {
991
+ var _a;
992
+ return !!((_a = config.components[item.type]) == null ? void 0 : _a.resolveData);
993
+ }
994
+ );
995
+ const applyIfChange = (dynamicDataMap, dynamicRoot) => {
996
+ const processed = applyDynamicProps(
997
+ appState.data,
998
+ dynamicDataMap,
999
+ dynamicRoot
1000
+ );
1001
+ const processedAppState = __spreadProps(__spreadValues({}, appState), { data: processed });
1002
+ const containsChanges = JSON.stringify(appState) !== JSON.stringify(processedAppState);
1003
+ if (containsChanges) {
1004
+ dispatch({
1005
+ type: "set",
1006
+ state: (prev) => __spreadProps(__spreadValues({}, prev), {
1007
+ data: applyDynamicProps(prev.data, dynamicDataMap, dynamicRoot),
1008
+ ui: resolverKey > 0 ? __spreadValues(__spreadValues({}, prev.ui), newAppState.ui) : prev.ui
1009
+ }),
1010
+ recordHistory: resolverKey > 0
1011
+ });
1012
+ }
1013
+ };
1014
+ const promises = [];
1015
+ promises.push(
1016
+ (() => __async(void 0, null, function* () {
1017
+ _setComponentLoading("puck-root", true, 50);
1018
+ const dynamicRoot = yield resolveRootData(newData, config);
1019
+ applyIfChange({}, dynamicRoot);
1020
+ _setComponentLoading("puck-root", false);
1021
+ }))()
1022
+ );
1023
+ flatContent.forEach((item) => {
1024
+ promises.push(
1025
+ (() => __async(void 0, null, function* () {
1026
+ refreshPermissions({ item });
1027
+ const dynamicData = yield resolveComponentData(
1028
+ item,
1029
+ config,
1030
+ (item2) => {
1031
+ _setComponentLoading(item2.props.id, true, 50);
1032
+ },
1033
+ (item2) => {
1034
+ deferredSetStates[item2.props.id];
1035
+ _setComponentLoading(item2.props.id, false);
1036
+ }
1037
+ );
1038
+ const dynamicDataMap = { [item.props.id]: dynamicData };
1039
+ applyIfChange(dynamicDataMap);
1040
+ }))()
1041
+ );
1042
+ });
1043
+ yield Promise.all(promises);
1044
+ });
1045
+ (0, import_react5.useEffect)(() => {
1046
+ runResolvers();
1047
+ }, [resolverKey]);
1048
+ const resolveData = (0, import_react5.useCallback)((newAppState2 = appState) => {
1049
+ setResolverState((curr) => ({
1050
+ resolverKey: curr.resolverKey + 1,
1051
+ newAppState: newAppState2
1052
+ }));
1053
+ }, []);
1054
+ return {
1055
+ resolveData
1056
+ };
1057
+ };
1058
+
1059
+ // components/Puck/context.tsx
731
1060
  var import_jsx_runtime4 = require("react/jsx-runtime");
732
1061
  var defaultAppState = {
733
1062
  data: { content: [], root: {} },
@@ -753,6 +1082,8 @@ var defaultContext = {
753
1082
  dispatch: () => null,
754
1083
  config: { components: {} },
755
1084
  componentState: {},
1085
+ setComponentState: () => {
1086
+ },
756
1087
  resolveData: () => {
757
1088
  },
758
1089
  plugins: [],
@@ -769,20 +1100,22 @@ var defaultContext = {
769
1100
  setStatus: () => null,
770
1101
  iframe: {},
771
1102
  safariFallbackMode: false,
772
- globalPermissions: {}
1103
+ globalPermissions: {},
1104
+ getPermissions: () => ({}),
1105
+ refreshPermissions: () => null
773
1106
  };
774
- var appContext = (0, import_react4.createContext)(defaultContext);
1107
+ var appContext = (0, import_react6.createContext)(defaultContext);
775
1108
  var AppProvider = ({
776
1109
  children,
777
1110
  value
778
1111
  }) => {
779
- const [zoomConfig, setZoomConfig] = (0, import_react4.useState)(defaultContext.zoomConfig);
780
- const [status, setStatus] = (0, import_react4.useState)("LOADING");
781
- (0, import_react4.useEffect)(() => {
1112
+ const [zoomConfig, setZoomConfig] = (0, import_react6.useState)(defaultContext.zoomConfig);
1113
+ const [status, setStatus] = (0, import_react6.useState)("LOADING");
1114
+ (0, import_react6.useEffect)(() => {
782
1115
  setStatus("MOUNTED");
783
1116
  }, []);
784
- const [safariFallbackMode, setSafariFallbackMode] = (0, import_react4.useState)(false);
785
- (0, import_react4.useEffect)(() => {
1117
+ const [safariFallbackMode, setSafariFallbackMode] = (0, import_react6.useState)(false);
1118
+ (0, import_react6.useEffect)(() => {
786
1119
  var _a, _b, _c;
787
1120
  const ua = new import_ua_parser_js.UAParser(navigator.userAgent);
788
1121
  const { browser } = ua.getResult();
@@ -799,26 +1132,67 @@ See https://github.com/measuredco/puck/issues/411 for more information. This mes
799
1132
  setSafariFallbackMode(true);
800
1133
  }
801
1134
  }, []);
1135
+ const selectedItem = value.state.ui.itemSelector ? getItem(value.state.ui.itemSelector, value.state.data) : void 0;
1136
+ const [componentState, setComponentState] = (0, import_react6.useState)({});
1137
+ const setComponentLoading = (id) => {
1138
+ setComponentState((prev) => {
1139
+ var _a;
1140
+ return __spreadProps(__spreadValues({}, prev), {
1141
+ [id]: __spreadProps(__spreadValues({}, prev[id]), {
1142
+ loadingCount: (((_a = prev[id]) == null ? void 0 : _a.loadingCount) || 0) + 1
1143
+ })
1144
+ });
1145
+ });
1146
+ };
1147
+ const unsetComponentLoading = (id) => {
1148
+ setComponentState((prev) => {
1149
+ var _a;
1150
+ return __spreadProps(__spreadValues({}, prev), {
1151
+ [id]: __spreadProps(__spreadValues({}, prev[id]), {
1152
+ loadingCount: Math.max((((_a = prev[id]) == null ? void 0 : _a.loadingCount) || 0) - 1, 0)
1153
+ })
1154
+ });
1155
+ });
1156
+ };
1157
+ const { getPermissions, refreshPermissions } = useResolvedPermissions(
1158
+ value.config,
1159
+ value.state,
1160
+ value.globalPermissions || {},
1161
+ setComponentLoading,
1162
+ unsetComponentLoading
1163
+ );
1164
+ const { resolveData } = useResolvedData(
1165
+ value.state,
1166
+ value.config,
1167
+ value.dispatch,
1168
+ setComponentLoading,
1169
+ unsetComponentLoading,
1170
+ refreshPermissions
1171
+ );
802
1172
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
803
1173
  appContext.Provider,
804
1174
  {
805
1175
  value: __spreadProps(__spreadValues({}, value), {
1176
+ selectedItem,
806
1177
  zoomConfig,
807
1178
  setZoomConfig,
808
1179
  status,
809
1180
  setStatus,
810
- safariFallbackMode
1181
+ safariFallbackMode,
1182
+ getPermissions,
1183
+ refreshPermissions,
1184
+ componentState,
1185
+ setComponentState,
1186
+ resolveData
811
1187
  }),
812
1188
  children
813
1189
  }
814
1190
  );
815
1191
  };
816
1192
  function useAppContext() {
817
- const mainContext = (0, import_react4.useContext)(appContext);
818
- const selectedItem = mainContext.state.ui.itemSelector ? getItem(mainContext.state.ui.itemSelector, mainContext.state.data) : void 0;
1193
+ const mainContext = (0, import_react6.useContext)(appContext);
819
1194
  return __spreadProps(__spreadValues({}, mainContext), {
820
1195
  // Helpers
821
- selectedItem,
822
1196
  setUi: (ui, recordHistory) => {
823
1197
  return mainContext.dispatch({
824
1198
  type: "setUi",
@@ -920,7 +1294,7 @@ var Draggable = ({
920
1294
  };
921
1295
 
922
1296
  // components/AutoField/fields/ArrayField/index.tsx
923
- var import_react5 = require("react");
1297
+ var import_react7 = require("react");
924
1298
 
925
1299
  // components/DragIcon/index.tsx
926
1300
  init_react_import();
@@ -959,7 +1333,7 @@ var ArrayField = ({
959
1333
  id,
960
1334
  Label = (props) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", __spreadValues({}, props))
961
1335
  }) => {
962
- const { state, setUi, selectedItem } = useAppContext();
1336
+ const { state, setUi, selectedItem, getPermissions } = useAppContext();
963
1337
  const readOnlyFields = (selectedItem == null ? void 0 : selectedItem.readOnly) || {};
964
1338
  const value = _value;
965
1339
  const arrayState = state.ui.arrayState[id] || {
@@ -971,11 +1345,11 @@ var ArrayField = ({
971
1345
  }),
972
1346
  openId: ""
973
1347
  };
974
- const [localState, setLocalState] = (0, import_react5.useState)({ arrayState, value });
975
- (0, import_react5.useEffect)(() => {
1348
+ const [localState, setLocalState] = (0, import_react7.useState)({ arrayState, value });
1349
+ (0, import_react7.useEffect)(() => {
976
1350
  setLocalState({ arrayState, value });
977
1351
  }, [value, state.ui.arrayState[id]]);
978
- const mapArrayStateToUi = (0, import_react5.useCallback)(
1352
+ const mapArrayStateToUi = (0, import_react7.useCallback)(
979
1353
  (partialArrayState) => {
980
1354
  return {
981
1355
  arrayState: __spreadProps(__spreadValues({}, state.ui.arrayState), {
@@ -985,13 +1359,13 @@ var ArrayField = ({
985
1359
  },
986
1360
  [arrayState]
987
1361
  );
988
- const getHighestIndex = (0, import_react5.useCallback)(() => {
1362
+ const getHighestIndex = (0, import_react7.useCallback)(() => {
989
1363
  return arrayState.items.reduce(
990
1364
  (acc, item) => item._originalIndex > acc ? item._originalIndex : acc,
991
1365
  -1
992
1366
  );
993
1367
  }, [arrayState]);
994
- const regenerateArrayState = (0, import_react5.useCallback)(
1368
+ const regenerateArrayState = (0, import_react7.useCallback)(
995
1369
  (value2) => {
996
1370
  let highestIndex = getHighestIndex();
997
1371
  const newItems = Array.from(value2 || []).map((item, idx) => {
@@ -1010,12 +1384,13 @@ var ArrayField = ({
1010
1384
  },
1011
1385
  [arrayState]
1012
1386
  );
1013
- (0, import_react5.useEffect)(() => {
1387
+ (0, import_react7.useEffect)(() => {
1014
1388
  if (arrayState.items.length > 0) {
1015
1389
  setUi(mapArrayStateToUi(arrayState));
1016
1390
  }
1017
1391
  }, []);
1018
- const [hovering, setHovering] = (0, import_react5.useState)(false);
1392
+ const [hovering, setHovering] = (0, import_react7.useState)(false);
1393
+ const forceReadOnly = getPermissions({ item: selectedItem }).edit === false;
1019
1394
  if (field.type !== "array" || !field.arrayFields) {
1020
1395
  return null;
1021
1396
  }
@@ -1146,13 +1521,14 @@ var ArrayField = ({
1146
1521
  const subField = field.arrayFields[fieldName];
1147
1522
  const subFieldName = `${name}[${i}].${fieldName}`;
1148
1523
  const wildcardFieldName = `${name}[*].${fieldName}`;
1524
+ const subReadOnly = forceReadOnly ? forceReadOnly : typeof readOnlyFields[subFieldName] !== "undefined" ? readOnlyFields[subFieldName] : readOnlyFields[wildcardFieldName];
1149
1525
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1150
1526
  AutoFieldPrivate,
1151
1527
  {
1152
1528
  name: subFieldName,
1153
1529
  label: subField.label || fieldName,
1154
1530
  id: `${_arrayId}_${fieldName}`,
1155
- readOnly: typeof readOnlyFields[subFieldName] !== "undefined" ? readOnlyFields[subFieldName] : readOnlyFields[wildcardFieldName],
1531
+ readOnly: subReadOnly,
1156
1532
  field: subField,
1157
1533
  value: data[fieldName],
1158
1534
  onChange: (val, ui) => {
@@ -1252,19 +1628,19 @@ var DefaultField = ({
1252
1628
 
1253
1629
  // components/AutoField/fields/ExternalField/index.tsx
1254
1630
  init_react_import();
1255
- var import_react9 = require("react");
1631
+ var import_react11 = require("react");
1256
1632
 
1257
1633
  // components/ExternalInput/index.tsx
1258
1634
  init_react_import();
1259
- var import_react8 = require("react");
1635
+ var import_react10 = require("react");
1260
1636
 
1261
1637
  // css-module:/home/runner/work/puck/puck/packages/core/components/ExternalInput/styles.module.css#css-module
1262
1638
  init_react_import();
1263
- var styles_module_default6 = { "ExternalInput-actions": "_ExternalInput-actions_19obq_1", "ExternalInput-button": "_ExternalInput-button_19obq_5", "ExternalInput--dataSelected": "_ExternalInput--dataSelected_19obq_25", "ExternalInput-detachButton": "_ExternalInput-detachButton_19obq_32", "ExternalInputModal": "_ExternalInputModal_19obq_74", "ExternalInputModal-grid": "_ExternalInputModal-grid_19obq_84", "ExternalInputModal--filtersToggled": "_ExternalInputModal--filtersToggled_19obq_95", "ExternalInputModal-filters": "_ExternalInputModal-filters_19obq_100", "ExternalInputModal-masthead": "_ExternalInputModal-masthead_19obq_119", "ExternalInputModal-tableWrapper": "_ExternalInputModal-tableWrapper_19obq_128", "ExternalInputModal-table": "_ExternalInputModal-table_19obq_128", "ExternalInputModal-thead": "_ExternalInputModal-thead_19obq_144", "ExternalInputModal-th": "_ExternalInputModal-th_19obq_144", "ExternalInputModal-td": "_ExternalInputModal-td_19obq_159", "ExternalInputModal-tr": "_ExternalInputModal-tr_19obq_164", "ExternalInputModal-tbody": "_ExternalInputModal-tbody_19obq_171", "ExternalInputModal--hasData": "_ExternalInputModal--hasData_19obq_197", "ExternalInputModal-loadingBanner": "_ExternalInputModal-loadingBanner_19obq_201", "ExternalInputModal--isLoading": "_ExternalInputModal--isLoading_19obq_218", "ExternalInputModal-searchForm": "_ExternalInputModal-searchForm_19obq_222", "ExternalInputModal-search": "_ExternalInputModal-search_19obq_222", "ExternalInputModal-searchIcon": "_ExternalInputModal-searchIcon_19obq_259", "ExternalInputModal-searchIconText": "_ExternalInputModal-searchIconText_19obq_284", "ExternalInputModal-searchInput": "_ExternalInputModal-searchInput_19obq_294", "ExternalInputModal-searchActions": "_ExternalInputModal-searchActions_19obq_308", "ExternalInputModal-searchActionIcon": "_ExternalInputModal-searchActionIcon_19obq_321", "ExternalInputModal-footer": "_ExternalInputModal-footer_19obq_325" };
1639
+ var styles_module_default6 = { "ExternalInput-actions": "_ExternalInput-actions_wprq3_1", "ExternalInput-button": "_ExternalInput-button_wprq3_5", "ExternalInput--dataSelected": "_ExternalInput--dataSelected_wprq3_24", "ExternalInput--readOnly": "_ExternalInput--readOnly_wprq3_31", "ExternalInput-detachButton": "_ExternalInput-detachButton_wprq3_35", "ExternalInput": "_ExternalInput_wprq3_1", "ExternalInputModal": "_ExternalInputModal_wprq3_79", "ExternalInputModal-grid": "_ExternalInputModal-grid_wprq3_89", "ExternalInputModal--filtersToggled": "_ExternalInputModal--filtersToggled_wprq3_100", "ExternalInputModal-filters": "_ExternalInputModal-filters_wprq3_105", "ExternalInputModal-masthead": "_ExternalInputModal-masthead_wprq3_124", "ExternalInputModal-tableWrapper": "_ExternalInputModal-tableWrapper_wprq3_133", "ExternalInputModal-table": "_ExternalInputModal-table_wprq3_133", "ExternalInputModal-thead": "_ExternalInputModal-thead_wprq3_149", "ExternalInputModal-th": "_ExternalInputModal-th_wprq3_149", "ExternalInputModal-td": "_ExternalInputModal-td_wprq3_164", "ExternalInputModal-tr": "_ExternalInputModal-tr_wprq3_169", "ExternalInputModal-tbody": "_ExternalInputModal-tbody_wprq3_176", "ExternalInputModal--hasData": "_ExternalInputModal--hasData_wprq3_202", "ExternalInputModal-loadingBanner": "_ExternalInputModal-loadingBanner_wprq3_206", "ExternalInputModal--isLoading": "_ExternalInputModal--isLoading_wprq3_223", "ExternalInputModal-searchForm": "_ExternalInputModal-searchForm_wprq3_227", "ExternalInputModal-search": "_ExternalInputModal-search_wprq3_227", "ExternalInputModal-searchIcon": "_ExternalInputModal-searchIcon_wprq3_264", "ExternalInputModal-searchIconText": "_ExternalInputModal-searchIconText_wprq3_289", "ExternalInputModal-searchInput": "_ExternalInputModal-searchInput_wprq3_299", "ExternalInputModal-searchActions": "_ExternalInputModal-searchActions_wprq3_313", "ExternalInputModal-searchActionIcon": "_ExternalInputModal-searchActionIcon_wprq3_326", "ExternalInputModal-footer": "_ExternalInputModal-footer_wprq3_330" };
1264
1640
 
1265
1641
  // components/Modal/index.tsx
1266
1642
  init_react_import();
1267
- var import_react6 = require("react");
1643
+ var import_react8 = require("react");
1268
1644
 
1269
1645
  // css-module:/home/runner/work/puck/puck/packages/core/components/Modal/styles.module.css#css-module
1270
1646
  init_react_import();
@@ -1279,8 +1655,8 @@ var Modal = ({
1279
1655
  onClose,
1280
1656
  isOpen
1281
1657
  }) => {
1282
- const [rootEl, setRootEl] = (0, import_react6.useState)(null);
1283
- (0, import_react6.useEffect)(() => {
1658
+ const [rootEl, setRootEl] = (0, import_react8.useState)(null);
1659
+ (0, import_react8.useEffect)(() => {
1284
1660
  setRootEl(document.getElementById("puck-portal-root"));
1285
1661
  }, []);
1286
1662
  if (!rootEl) {
@@ -1327,7 +1703,7 @@ init_react_import();
1327
1703
 
1328
1704
  // components/Button/Button.tsx
1329
1705
  init_react_import();
1330
- var import_react7 = require("react");
1706
+ var import_react9 = require("react");
1331
1707
 
1332
1708
  // css-module:/home/runner/work/puck/puck/packages/core/components/Button/Button.module.css#css-module
1333
1709
  init_react_import();
@@ -1350,8 +1726,8 @@ var Button = ({
1350
1726
  size = "medium",
1351
1727
  loading: loadingProp = false
1352
1728
  }) => {
1353
- const [loading, setLoading] = (0, import_react7.useState)(loadingProp);
1354
- (0, import_react7.useEffect)(() => setLoading(loadingProp), [loadingProp]);
1729
+ const [loading, setLoading] = (0, import_react9.useState)(loadingProp);
1730
+ (0, import_react9.useEffect)(() => setLoading(loadingProp), [loadingProp]);
1355
1731
  const ElementType = href ? "a" : type ? "button" : "span";
1356
1732
  const el = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1357
1733
  ElementType,
@@ -1396,23 +1772,24 @@ var ExternalInput = ({
1396
1772
  onChange,
1397
1773
  value = null,
1398
1774
  name,
1399
- id
1775
+ id,
1776
+ readOnly
1400
1777
  }) => {
1401
1778
  const {
1402
1779
  mapProp = (val) => val,
1403
1780
  mapRow = (val) => val,
1404
1781
  filterFields
1405
1782
  } = field || {};
1406
- const [data, setData] = (0, import_react8.useState)([]);
1407
- const [isOpen, setOpen] = (0, import_react8.useState)(false);
1408
- const [isLoading, setIsLoading] = (0, import_react8.useState)(true);
1783
+ const [data, setData] = (0, import_react10.useState)([]);
1784
+ const [isOpen, setOpen] = (0, import_react10.useState)(false);
1785
+ const [isLoading, setIsLoading] = (0, import_react10.useState)(true);
1409
1786
  const hasFilterFields = !!filterFields;
1410
- const [filters, setFilters] = (0, import_react8.useState)(field.initialFilters || {});
1411
- const [filtersToggled, setFiltersToggled] = (0, import_react8.useState)(hasFilterFields);
1412
- const mappedData = (0, import_react8.useMemo)(() => {
1787
+ const [filters, setFilters] = (0, import_react10.useState)(field.initialFilters || {});
1788
+ const [filtersToggled, setFiltersToggled] = (0, import_react10.useState)(hasFilterFields);
1789
+ const mappedData = (0, import_react10.useMemo)(() => {
1413
1790
  return data.map(mapRow);
1414
1791
  }, [data]);
1415
- const keys = (0, import_react8.useMemo)(() => {
1792
+ const keys = (0, import_react10.useMemo)(() => {
1416
1793
  const validKeys = /* @__PURE__ */ new Set();
1417
1794
  for (const item of mappedData) {
1418
1795
  for (const key of Object.keys(item)) {
@@ -1423,8 +1800,8 @@ var ExternalInput = ({
1423
1800
  }
1424
1801
  return Array.from(validKeys);
1425
1802
  }, [mappedData]);
1426
- const [searchQuery, setSearchQuery] = (0, import_react8.useState)(field.initialQuery || "");
1427
- const search = (0, import_react8.useCallback)(
1803
+ const [searchQuery, setSearchQuery] = (0, import_react10.useState)(field.initialQuery || "");
1804
+ const search = (0, import_react10.useCallback)(
1428
1805
  (query, filters2) => __async(void 0, null, function* () {
1429
1806
  setIsLoading(true);
1430
1807
  const cacheKey = `${id}-${query}-${JSON.stringify(filters2)}`;
@@ -1437,7 +1814,7 @@ var ExternalInput = ({
1437
1814
  }),
1438
1815
  [id, field]
1439
1816
  );
1440
- (0, import_react8.useEffect)(() => {
1817
+ (0, import_react10.useEffect)(() => {
1441
1818
  search(searchQuery, filters);
1442
1819
  }, []);
1443
1820
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
@@ -1445,7 +1822,8 @@ var ExternalInput = ({
1445
1822
  {
1446
1823
  className: getClassName10({
1447
1824
  dataSelected: !!value,
1448
- modalVisible: isOpen
1825
+ modalVisible: isOpen,
1826
+ readOnly
1449
1827
  }),
1450
1828
  id,
1451
1829
  children: [
@@ -1456,6 +1834,7 @@ var ExternalInput = ({
1456
1834
  type: "button",
1457
1835
  onClick: () => setOpen(true),
1458
1836
  className: getClassName10("button"),
1837
+ disabled: readOnly,
1459
1838
  children: value ? field.getItemSummary ? field.getItemSummary(value) : "External item" : /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1460
1839
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Link, { size: "16" }),
1461
1840
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: field.placeholder })
@@ -1470,6 +1849,7 @@ var ExternalInput = ({
1470
1849
  onClick: () => {
1471
1850
  onChange(null);
1472
1851
  },
1852
+ disabled: readOnly,
1473
1853
  children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Unlock, { size: 16 })
1474
1854
  }
1475
1855
  )
@@ -1595,12 +1975,13 @@ var ExternalField = ({
1595
1975
  name,
1596
1976
  label,
1597
1977
  Label,
1598
- id
1978
+ id,
1979
+ readOnly
1599
1980
  }) => {
1600
1981
  var _a, _b, _c;
1601
1982
  const validField = field;
1602
1983
  const deprecatedField = field;
1603
- (0, import_react9.useEffect)(() => {
1984
+ (0, import_react11.useEffect)(() => {
1604
1985
  if (deprecatedField.adaptor) {
1605
1986
  console.error(
1606
1987
  "Warning: The `adaptor` API is deprecated. Please use updated APIs on the `external` field instead. This will be a breaking change in a future release."
@@ -1627,7 +2008,8 @@ var ExternalField = ({
1627
2008
  }),
1628
2009
  onChange,
1629
2010
  value,
1630
- id
2011
+ id,
2012
+ readOnly
1631
2013
  }
1632
2014
  ) });
1633
2015
  };
@@ -1808,13 +2190,14 @@ var ObjectField = ({
1808
2190
  const subField = field.objectFields[fieldName];
1809
2191
  const subFieldName = `${name}.${fieldName}`;
1810
2192
  const wildcardFieldName = `${name}.${fieldName}`;
2193
+ const subReadOnly = readOnly ? readOnly : typeof readOnlyFields[subFieldName] !== "undefined" ? readOnlyFields[subFieldName] : readOnlyFields[wildcardFieldName];
1811
2194
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1812
2195
  AutoFieldPrivate,
1813
2196
  {
1814
2197
  name: subFieldName,
1815
2198
  label: subField.label || fieldName,
1816
2199
  id: `${id}_${fieldName}`,
1817
- readOnly: typeof readOnlyFields[subFieldName] !== "undefined" ? readOnlyFields[subFieldName] : readOnlyFields[wildcardFieldName],
2200
+ readOnly: subReadOnly,
1818
2201
  field: subField,
1819
2202
  value: data[fieldName],
1820
2203
  onChange: (val, ui) => {
@@ -1835,7 +2218,7 @@ var ObjectField = ({
1835
2218
 
1836
2219
  // lib/use-safe-id.ts
1837
2220
  init_react_import();
1838
- var import_react10 = __toESM(require("react"));
2221
+ var import_react12 = __toESM(require("react"));
1839
2222
 
1840
2223
  // lib/generate-id.ts
1841
2224
  init_react_import();
@@ -1844,10 +2227,10 @@ var generateId = (type) => type ? `${type}-${(0, import_uuid.v4)()}` : (0, impor
1844
2227
 
1845
2228
  // lib/use-safe-id.ts
1846
2229
  var useSafeId = () => {
1847
- if (typeof import_react10.default.useId !== "undefined") {
1848
- return import_react10.default.useId();
2230
+ if (typeof import_react12.default.useId !== "undefined") {
2231
+ return import_react12.default.useId();
1849
2232
  }
1850
- const [id] = (0, import_react10.useState)(generateId());
2233
+ const [id] = (0, import_react12.useState)(generateId());
1851
2234
  return id;
1852
2235
  };
1853
2236
 
@@ -1880,7 +2263,7 @@ var FieldLabelInternal2 = ({
1880
2263
  readOnly
1881
2264
  }) => {
1882
2265
  const { overrides } = useAppContext();
1883
- const Wrapper = (0, import_react11.useMemo)(
2266
+ const Wrapper = (0, import_react13.useMemo)(
1884
2267
  () => overrides.fieldLabel || FieldLabel,
1885
2268
  [overrides]
1886
2269
  );
@@ -1944,7 +2327,7 @@ function AutoFieldInternal(props) {
1944
2327
  }
1945
2328
  function AutoFieldPrivate(props) {
1946
2329
  const { value, onChange } = props;
1947
- const [localValue, setLocalValue] = (0, import_react11.useState)(value);
2330
+ const [localValue, setLocalValue] = (0, import_react13.useState)(value);
1948
2331
  const onChangeDb = (0, import_use_debounce.useDebouncedCallback)(
1949
2332
  (val, ui) => {
1950
2333
  onChange(val, ui);
@@ -1952,11 +2335,11 @@ function AutoFieldPrivate(props) {
1952
2335
  50,
1953
2336
  { leading: true }
1954
2337
  );
1955
- const onChangeLocal = (0, import_react11.useCallback)((val, ui) => {
2338
+ const onChangeLocal = (0, import_react13.useCallback)((val, ui) => {
1956
2339
  setLocalValue(val);
1957
2340
  onChangeDb(val, ui);
1958
2341
  }, []);
1959
- (0, import_react11.useEffect)(() => {
2342
+ (0, import_react13.useEffect)(() => {
1960
2343
  setLocalValue(value);
1961
2344
  }, [value]);
1962
2345
  const localProps = {
@@ -1975,14 +2358,14 @@ init_react_import();
1975
2358
 
1976
2359
  // css-module:/home/runner/work/puck/puck/packages/core/components/Drawer/styles.module.css#css-module
1977
2360
  init_react_import();
1978
- var styles_module_default10 = { "Drawer": "_Drawer_4yfqn_1", "DrawerItem--disabled": "_DrawerItem--disabled_4yfqn_5", "DrawerItem-default": "_DrawerItem-default_4yfqn_11", "DrawerItem-draggableWrapper": "_DrawerItem-draggableWrapper_4yfqn_11", "DrawerItem": "_DrawerItem_4yfqn_5", "DrawerItem-draggable": "_DrawerItem-draggable_4yfqn_11", "Drawer--isDraggingFrom": "_Drawer--isDraggingFrom_4yfqn_36", "DrawerItem-name": "_DrawerItem-name_4yfqn_54" };
2361
+ var styles_module_default10 = { "Drawer": "_Drawer_1oa7v_1", "DrawerItem--disabled": "_DrawerItem--disabled_1oa7v_5", "DrawerItem-draggable": "_DrawerItem-draggable_1oa7v_5", "DrawerItem-default": "_DrawerItem-default_1oa7v_11", "DrawerItem-draggableWrapper": "_DrawerItem-draggableWrapper_1oa7v_11", "DrawerItem": "_DrawerItem_1oa7v_5", "Drawer--isDraggingFrom": "_Drawer--isDraggingFrom_1oa7v_36", "DrawerItem-name": "_DrawerItem-name_1oa7v_54" };
1979
2362
 
1980
2363
  // components/Drawer/index.tsx
1981
- var import_react12 = require("react");
2364
+ var import_react14 = require("react");
1982
2365
  var import_jsx_runtime21 = require("react/jsx-runtime");
1983
2366
  var getClassName16 = get_class_name_factory_default("Drawer", styles_module_default10);
1984
2367
  var getClassNameItem2 = get_class_name_factory_default("DrawerItem", styles_module_default10);
1985
- var drawerContext = (0, import_react12.createContext)({
2368
+ var drawerContext = (0, import_react14.createContext)({
1986
2369
  droppableId: ""
1987
2370
  });
1988
2371
  var DrawerDraggable = ({
@@ -2013,9 +2396,9 @@ var DrawerItem = ({
2013
2396
  index,
2014
2397
  isDragDisabled
2015
2398
  }) => {
2016
- const ctx = (0, import_react12.useContext)(drawerContext);
2399
+ const ctx = (0, import_react14.useContext)(drawerContext);
2017
2400
  const resolvedId = `${ctx.droppableId}::${id || name}`;
2018
- const CustomInner = (0, import_react12.useMemo)(
2401
+ const CustomInner = (0, import_react14.useMemo)(
2019
2402
  () => children || (({ children: children2, name: name2 }) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: getClassNameItem2("default"), children: children2 })),
2020
2403
  [children]
2021
2404
  );
@@ -2056,11 +2439,11 @@ Drawer.Item = DrawerItem;
2056
2439
 
2057
2440
  // components/DropZone/index.tsx
2058
2441
  init_react_import();
2059
- var import_react16 = require("react");
2442
+ var import_react18 = require("react");
2060
2443
 
2061
2444
  // components/DraggableComponent/index.tsx
2062
2445
  init_react_import();
2063
- var import_react14 = require("react");
2446
+ var import_react16 = require("react");
2064
2447
  var import_dnd4 = require("@measured/dnd");
2065
2448
 
2066
2449
  // css-module:/home/runner/work/puck/puck/packages/core/components/DraggableComponent/styles.module.css#css-module
@@ -2069,10 +2452,10 @@ var styles_module_default11 = { "DraggableComponent": "_DraggableComponent_1bhad
2069
2452
 
2070
2453
  // lib/use-modifier-held.ts
2071
2454
  init_react_import();
2072
- var import_react13 = require("react");
2455
+ var import_react15 = require("react");
2073
2456
  var useModifierHeld = (modifier) => {
2074
- const [modifierHeld, setModifierHeld] = (0, import_react13.useState)(false);
2075
- (0, import_react13.useEffect)(() => {
2457
+ const [modifierHeld, setModifierHeld] = (0, import_react15.useState)(false);
2458
+ (0, import_react15.useEffect)(() => {
2076
2459
  function downHandler({ key }) {
2077
2460
  if (key === modifier) {
2078
2461
  setModifierHeld(true);
@@ -2110,90 +2493,6 @@ init_react_import();
2110
2493
  var import_jsx_runtime22 = require("react/jsx-runtime");
2111
2494
  var DefaultOverride = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_jsx_runtime22.Fragment, { children });
2112
2495
 
2113
- // lib/get-permissions.ts
2114
- init_react_import();
2115
-
2116
- // lib/get-changed.ts
2117
- init_react_import();
2118
- var getChanged = (newItem, oldItem) => {
2119
- return newItem ? Object.keys(newItem.props || {}).reduce((acc, item) => {
2120
- const newItemProps = (newItem == null ? void 0 : newItem.props) || {};
2121
- const oldItemProps = (oldItem == null ? void 0 : oldItem.props) || {};
2122
- return __spreadProps(__spreadValues({}, acc), {
2123
- [item]: oldItemProps[item] !== newItemProps[item]
2124
- });
2125
- }, {}) : {};
2126
- };
2127
-
2128
- // lib/resolve-permissions.ts
2129
- init_react_import();
2130
- var resolvePermissions = ({
2131
- selectedItem,
2132
- config,
2133
- changed,
2134
- lastPermissions,
2135
- initialPermissions,
2136
- appState
2137
- }) => {
2138
- const componentConfig = selectedItem ? config.components[selectedItem.type] : null;
2139
- if (selectedItem && (componentConfig == null ? void 0 : componentConfig.resolvePermissions)) {
2140
- return componentConfig.resolvePermissions(selectedItem, {
2141
- changed,
2142
- lastPermissions,
2143
- initialPermissions,
2144
- appState
2145
- });
2146
- }
2147
- return {};
2148
- };
2149
-
2150
- // lib/get-permissions.ts
2151
- var cache = { lastPermissions: {}, lastSelected: {} };
2152
- var getPermissions = ({
2153
- selectedItem,
2154
- type,
2155
- globalPermissions,
2156
- config,
2157
- appState
2158
- }) => {
2159
- const componentType = type || selectedItem && selectedItem.type || "";
2160
- const componentId = selectedItem && selectedItem.props.id || "";
2161
- let componentPermissions = getInitialPermissions({
2162
- componentType,
2163
- config,
2164
- globalPermissions
2165
- });
2166
- const changed = getChanged(selectedItem, cache.lastSelected);
2167
- if (Object.values(changed).some((el) => el === true)) {
2168
- const resolvedPermissions = resolvePermissions({
2169
- selectedItem,
2170
- config,
2171
- changed,
2172
- lastPermissions: cache.lastPermissions[componentId] || componentPermissions,
2173
- initialPermissions: componentPermissions,
2174
- appState
2175
- });
2176
- if (resolvedPermissions !== void 0) {
2177
- componentPermissions = __spreadValues(__spreadValues({}, componentPermissions), resolvedPermissions);
2178
- }
2179
- cache.lastSelected = selectedItem;
2180
- cache.lastPermissions[componentId] = componentPermissions;
2181
- return componentPermissions;
2182
- }
2183
- if (Object.keys(componentId && cache.lastPermissions[componentId]).length !== 0) {
2184
- componentPermissions = cache.lastPermissions[componentId];
2185
- }
2186
- return componentPermissions;
2187
- };
2188
- var getInitialPermissions = ({
2189
- componentType,
2190
- globalPermissions,
2191
- config
2192
- }) => {
2193
- var _a;
2194
- return __spreadValues(__spreadValues({}, globalPermissions), (_a = config.components[componentType]) == null ? void 0 : _a.permissions);
2195
- };
2196
-
2197
2496
  // components/DraggableComponent/index.tsx
2198
2497
  var import_jsx_runtime23 = require("react/jsx-runtime");
2199
2498
  var getClassName17 = get_class_name_factory_default("DraggableComponent", styles_module_default11);
@@ -2204,7 +2503,7 @@ var actionsRight = space;
2204
2503
  var DefaultActionBar = ({
2205
2504
  label,
2206
2505
  children
2207
- }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ActionBar, { label, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DefaultOverride, { children }) });
2506
+ }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ActionBar, { label, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ActionBar.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DefaultOverride, { children }) }) });
2208
2507
  var DraggableComponent = ({
2209
2508
  children,
2210
2509
  id,
@@ -2227,34 +2526,22 @@ var DraggableComponent = ({
2227
2526
  indicativeHover = false,
2228
2527
  style
2229
2528
  }) => {
2230
- const {
2231
- zoomConfig,
2232
- status,
2233
- overrides,
2234
- plugins,
2235
- selectedItem,
2236
- config,
2237
- globalPermissions,
2238
- state
2239
- } = useAppContext();
2529
+ const { zoomConfig, status, overrides, selectedItem, getPermissions } = useAppContext();
2240
2530
  const isModifierHeld = useModifierHeld("Alt");
2241
2531
  const El = status !== "LOADING" ? import_dnd4.Draggable : DefaultDraggable;
2242
- (0, import_react14.useEffect)(onMount, []);
2243
- const [disableSecondaryAnimation, setDisableSecondaryAnimation] = (0, import_react14.useState)(false);
2244
- (0, import_react14.useEffect)(() => {
2532
+ (0, import_react16.useEffect)(onMount, []);
2533
+ const [disableSecondaryAnimation, setDisableSecondaryAnimation] = (0, import_react16.useState)(false);
2534
+ (0, import_react16.useEffect)(() => {
2245
2535
  if (isIos()) {
2246
2536
  setDisableSecondaryAnimation(true);
2247
2537
  }
2248
2538
  }, []);
2249
- const CustomActionBar = (0, import_react14.useMemo)(
2539
+ const CustomActionBar = (0, import_react16.useMemo)(
2250
2540
  () => overrides.actionBar || DefaultActionBar,
2251
2541
  [overrides.actionBar]
2252
2542
  );
2253
- const permissions = selectedItem && getPermissions({
2254
- selectedItem,
2255
- globalPermissions: globalPermissions || {},
2256
- config,
2257
- appState: state
2543
+ const permissions = getPermissions({
2544
+ item: selectedItem
2258
2545
  });
2259
2546
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2260
2547
  El,
@@ -2277,7 +2564,7 @@ var DraggableComponent = ({
2277
2564
  indicativeHover
2278
2565
  }),
2279
2566
  style: __spreadProps(__spreadValues(__spreadValues({}, style), provided.draggableProps.style), {
2280
- cursor: isModifierHeld || isDragDisabled ? "initial" : "grab"
2567
+ cursor: isModifierHeld || isDragDisabled ? "pointer" : "grab"
2281
2568
  }),
2282
2569
  onMouseOver,
2283
2570
  onMouseOut,
@@ -2304,8 +2591,8 @@ var DraggableComponent = ({
2304
2591
  right: actionsRight / zoomConfig.zoom
2305
2592
  },
2306
2593
  children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(CustomActionBar, { label, children: [
2307
- permissions && permissions.duplicate && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ActionBar.Action, { onClick: onDuplicate, label: "Duplicate", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Copy, { size: 16 }) }),
2308
- permissions && permissions.delete && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ActionBar.Action, { onClick: onDelete, label: "Delete", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Trash, { size: 16 }) })
2594
+ permissions.duplicate && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ActionBar.Action, { onClick: onDuplicate, label: "Duplicate", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Copy, { size: 16 }) }),
2595
+ permissions.delete && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ActionBar.Action, { onClick: onDelete, label: "Delete", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Trash, { size: 16 }) })
2309
2596
  ] })
2310
2597
  }
2311
2598
  )
@@ -2327,7 +2614,7 @@ var styles_module_default12 = { "DropZone": "_DropZone_djoti_1", "DropZone-conte
2327
2614
 
2328
2615
  // components/DropZone/context.tsx
2329
2616
  init_react_import();
2330
- var import_react15 = require("react");
2617
+ var import_react17 = require("react");
2331
2618
  var import_use_debounce2 = require("use-debounce");
2332
2619
 
2333
2620
  // lib/get-zone-id.ts
@@ -2344,29 +2631,29 @@ var getZoneId = (zoneCompound) => {
2344
2631
 
2345
2632
  // components/DropZone/context.tsx
2346
2633
  var import_jsx_runtime24 = require("react/jsx-runtime");
2347
- var dropZoneContext = (0, import_react15.createContext)(null);
2634
+ var dropZoneContext = (0, import_react17.createContext)(null);
2348
2635
  var DropZoneProvider = ({
2349
2636
  children,
2350
2637
  value
2351
2638
  }) => {
2352
- const [hoveringArea, setHoveringArea] = (0, import_react15.useState)(null);
2353
- const [hoveringZone, setHoveringZone] = (0, import_react15.useState)(
2639
+ const [hoveringArea, setHoveringArea] = (0, import_react17.useState)(null);
2640
+ const [hoveringZone, setHoveringZone] = (0, import_react17.useState)(
2354
2641
  rootDroppableId
2355
2642
  );
2356
- const [hoveringComponent, setHoveringComponent] = (0, import_react15.useState)();
2643
+ const [hoveringComponent, setHoveringComponent] = (0, import_react17.useState)();
2357
2644
  const [hoveringAreaDb] = (0, import_use_debounce2.useDebounce)(hoveringArea, 75, { leading: false });
2358
- const [areasWithZones, setAreasWithZones] = (0, import_react15.useState)(
2645
+ const [areasWithZones, setAreasWithZones] = (0, import_react17.useState)(
2359
2646
  {}
2360
2647
  );
2361
- const [activeZones, setActiveZones] = (0, import_react15.useState)({});
2648
+ const [activeZones, setActiveZones] = (0, import_react17.useState)({});
2362
2649
  const { dispatch = null } = value ? value : {};
2363
- const registerZoneArea = (0, import_react15.useCallback)(
2650
+ const registerZoneArea = (0, import_react17.useCallback)(
2364
2651
  (area) => {
2365
2652
  setAreasWithZones((latest) => __spreadProps(__spreadValues({}, latest), { [area]: true }));
2366
2653
  },
2367
2654
  [setAreasWithZones]
2368
2655
  );
2369
- const registerZone = (0, import_react15.useCallback)(
2656
+ const registerZone = (0, import_react17.useCallback)(
2370
2657
  (zoneCompound) => {
2371
2658
  if (!dispatch) {
2372
2659
  return;
@@ -2379,7 +2666,7 @@ var DropZoneProvider = ({
2379
2666
  },
2380
2667
  [setActiveZones, dispatch]
2381
2668
  );
2382
- const unregisterZone = (0, import_react15.useCallback)(
2669
+ const unregisterZone = (0, import_react17.useCallback)(
2383
2670
  (zoneCompound) => {
2384
2671
  if (!dispatch) {
2385
2672
  return;
@@ -2394,8 +2681,8 @@ var DropZoneProvider = ({
2394
2681
  },
2395
2682
  [setActiveZones, dispatch]
2396
2683
  );
2397
- const [pathData, setPathData] = (0, import_react15.useState)();
2398
- const registerPath = (0, import_react15.useCallback)(
2684
+ const [pathData, setPathData] = (0, import_react17.useState)();
2685
+ const registerPath = (0, import_react17.useCallback)(
2399
2686
  (selector) => {
2400
2687
  if (!(value == null ? void 0 : value.data)) {
2401
2688
  return;
@@ -2420,7 +2707,7 @@ var DropZoneProvider = ({
2420
2707
  },
2421
2708
  [value, setPathData]
2422
2709
  );
2423
- const [zoneWillDrag, setZoneWillDrag] = (0, import_react15.useState)("");
2710
+ const [zoneWillDrag, setZoneWillDrag] = (0, import_react17.useState)("");
2424
2711
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, { children: value && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2425
2712
  dropZoneContext.Provider,
2426
2713
  {
@@ -2452,7 +2739,7 @@ var getClassName18 = get_class_name_factory_default("DropZone", styles_module_de
2452
2739
  function DropZoneEdit({ zone, allow, disallow, style }) {
2453
2740
  var _a;
2454
2741
  const appContext2 = useAppContext();
2455
- const ctx = (0, import_react16.useContext)(dropZoneContext);
2742
+ const ctx = (0, import_react18.useContext)(dropZoneContext);
2456
2743
  const {
2457
2744
  // These all need setting via context
2458
2745
  data,
@@ -2471,12 +2758,12 @@ function DropZoneEdit({ zone, allow, disallow, style }) {
2471
2758
  } = ctx || {};
2472
2759
  let content = data.content || [];
2473
2760
  let zoneCompound = rootDroppableId;
2474
- (0, import_react16.useEffect)(() => {
2761
+ (0, import_react18.useEffect)(() => {
2475
2762
  if (areaId && registerZoneArea) {
2476
2763
  registerZoneArea(areaId);
2477
2764
  }
2478
2765
  }, [areaId]);
2479
- (0, import_react16.useEffect)(() => {
2766
+ (0, import_react18.useEffect)(() => {
2480
2767
  if (ctx == null ? void 0 : ctx.registerZone) {
2481
2768
  ctx == null ? void 0 : ctx.registerZone(zoneCompound);
2482
2769
  }
@@ -2603,14 +2890,11 @@ function DropZoneEdit({ zone, allow, disallow, style }) {
2603
2890
  ] });
2604
2891
  const componentConfig = config.components[item.type];
2605
2892
  const label = (_b = componentConfig == null ? void 0 : componentConfig["label"]) != null ? _b : item.type.toString();
2606
- const canDrag = getPermissions({
2607
- selectedItem: getItem(
2893
+ const canDrag = appContext2.getPermissions({
2894
+ item: getItem(
2608
2895
  { index: i, zone: zoneCompound },
2609
2896
  appContext2.state.data
2610
- ),
2611
- config: appContext2.config,
2612
- globalPermissions: appContext2.globalPermissions || {},
2613
- appState: appContext2.state
2897
+ )
2614
2898
  }).drag;
2615
2899
  return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2616
2900
  "div",
@@ -2635,7 +2919,7 @@ function DropZoneEdit({ zone, allow, disallow, style }) {
2635
2919
  forceHover: hoveringComponent === componentId && !userIsDragging,
2636
2920
  isDragDisabled: !canDrag,
2637
2921
  indicativeHover: userIsDragging && containsZone && hoveringArea === componentId,
2638
- isLoading: (_c = appContext2.componentState[componentId]) == null ? void 0 : _c.loading,
2922
+ isLoading: ((_c = appContext2.componentState[componentId]) == null ? void 0 : _c.loadingCount) > 0,
2639
2923
  onMount: () => {
2640
2924
  ctx.registerPath({
2641
2925
  index: i,
@@ -2735,7 +3019,7 @@ function DropZoneEdit({ zone, allow, disallow, style }) {
2735
3019
  );
2736
3020
  }
2737
3021
  function DropZoneRender({ zone }) {
2738
- const ctx = (0, import_react16.useContext)(dropZoneContext);
3022
+ const ctx = (0, import_react18.useContext)(dropZoneContext);
2739
3023
  const { data, areaId = "root", config } = ctx || {};
2740
3024
  let zoneCompound = rootDroppableId;
2741
3025
  let content = (data == null ? void 0 : data.content) || [];
@@ -2767,7 +3051,7 @@ function DropZoneRender({ zone }) {
2767
3051
  }) });
2768
3052
  }
2769
3053
  function DropZone(props) {
2770
- const ctx = (0, import_react16.useContext)(dropZoneContext);
3054
+ const ctx = (0, import_react18.useContext)(dropZoneContext);
2771
3055
  if ((ctx == null ? void 0 : ctx.mode) === "edit") {
2772
3056
  return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropZoneEdit, __spreadValues({}, props));
2773
3057
  }
@@ -2776,11 +3060,11 @@ function DropZone(props) {
2776
3060
 
2777
3061
  // components/Puck/index.tsx
2778
3062
  init_react_import();
2779
- var import_react31 = require("react");
3063
+ var import_react32 = require("react");
2780
3064
 
2781
3065
  // lib/use-placeholder-style.ts
2782
3066
  init_react_import();
2783
- var import_react17 = require("react");
3067
+ var import_react19 = require("react");
2784
3068
 
2785
3069
  // lib/get-frame.ts
2786
3070
  init_react_import();
@@ -2795,7 +3079,7 @@ var getFrame = () => {
2795
3079
  // lib/use-placeholder-style.ts
2796
3080
  var usePlaceholderStyle = () => {
2797
3081
  const queryAttr = "data-rfd-drag-handle-draggable-id";
2798
- const [placeholderStyle, setPlaceholderStyle] = (0, import_react17.useState)();
3082
+ const [placeholderStyle, setPlaceholderStyle] = (0, import_react19.useState)();
2799
3083
  const onDragStartOrUpdate = (draggedItem) => {
2800
3084
  var _a;
2801
3085
  const draggableId = draggedItem.draggableId;
@@ -2848,7 +3132,7 @@ var styles_module_default13 = { "SidebarSection": "_SidebarSection_125qe_1", "Si
2848
3132
 
2849
3133
  // lib/use-breadcrumbs.ts
2850
3134
  init_react_import();
2851
- var import_react18 = require("react");
3135
+ var import_react20 = require("react");
2852
3136
  var convertPathDataToBreadcrumbs = (selectedItem, pathData, data) => {
2853
3137
  const id = selectedItem ? selectedItem == null ? void 0 : selectedItem.props.id : "";
2854
3138
  const currentPathData = pathData && id && pathData[id] ? __spreadValues({}, pathData[id]) : { label: "Page", path: [] };
@@ -2898,8 +3182,8 @@ var useBreadcrumbs = (renderCount) => {
2898
3182
  state: { data },
2899
3183
  selectedItem
2900
3184
  } = useAppContext();
2901
- const dzContext = (0, import_react18.useContext)(dropZoneContext);
2902
- return (0, import_react18.useMemo)(() => {
3185
+ const dzContext = (0, import_react20.useContext)(dropZoneContext);
3186
+ return (0, import_react20.useMemo)(() => {
2903
3187
  const breadcrumbs = convertPathDataToBreadcrumbs(
2904
3188
  selectedItem,
2905
3189
  dzContext == null ? void 0 : dzContext.pathData,
@@ -3245,270 +3529,80 @@ function reduceData(data, action, config) {
3245
3529
  }
3246
3530
  return data;
3247
3531
  }
3248
-
3249
- // reducer/state.ts
3250
- init_react_import();
3251
- var reduceUi = (ui, action) => {
3252
- if (action.type === "setUi") {
3253
- if (typeof action.ui === "object") {
3254
- return __spreadValues(__spreadValues({}, ui), action.ui);
3255
- }
3256
- return __spreadValues(__spreadValues({}, ui), action.ui(ui));
3257
- }
3258
- return ui;
3259
- };
3260
-
3261
- // reducer/actions.tsx
3262
- init_react_import();
3263
-
3264
- // reducer/index.ts
3265
- function storeInterceptor(reducer, record, onAction) {
3266
- return (state, action) => {
3267
- const newAppState = reducer(state, action);
3268
- const isValidType = ![
3269
- "registerZone",
3270
- "unregisterZone",
3271
- "setData",
3272
- "setUi",
3273
- "set"
3274
- ].includes(action.type);
3275
- if (typeof action.recordHistory !== "undefined" ? action.recordHistory : isValidType) {
3276
- if (record) record(newAppState);
3277
- }
3278
- onAction == null ? void 0 : onAction(action, newAppState, state);
3279
- return newAppState;
3280
- };
3281
- }
3282
- var setAction = (state, action) => {
3283
- if (typeof action.state === "object") {
3284
- return __spreadValues(__spreadValues({}, state), action.state);
3285
- }
3286
- return __spreadValues(__spreadValues({}, state), action.state(state));
3287
- };
3288
- function createReducer({
3289
- config,
3290
- record,
3291
- onAction
3292
- }) {
3293
- return storeInterceptor(
3294
- (state, action) => {
3295
- const data = reduceData(state.data, action, config);
3296
- const ui = reduceUi(state.ui, action);
3297
- if (action.type === "set") {
3298
- return setAction(state, action);
3299
- }
3300
- return { data, ui };
3301
- },
3302
- record,
3303
- onAction
3304
- );
3305
- }
3306
-
3307
- // lib/flush-zones.ts
3308
- init_react_import();
3309
- var flushZones = (appState) => {
3310
- const containsZones = typeof appState.data.zones !== "undefined";
3311
- if (containsZones) {
3312
- Object.keys(appState.data.zones || {}).forEach((zone) => {
3313
- addToZoneCache(zone, appState.data.zones[zone]);
3314
- });
3315
- return __spreadProps(__spreadValues({}, appState), {
3316
- data: __spreadProps(__spreadValues({}, appState.data), {
3317
- zones: {}
3318
- })
3319
- });
3320
- }
3321
- return appState;
3322
- };
3323
-
3324
- // lib/use-resolved-data.ts
3325
- init_react_import();
3326
- var import_react19 = require("react");
3327
-
3328
- // lib/resolve-component-data.ts
3329
- init_react_import();
3330
- var cache2 = { lastChange: {} };
3331
- var resolveAllComponentData = (content, config, onResolveStart, onResolveEnd) => __async(void 0, null, function* () {
3332
- return yield Promise.all(
3333
- content.map((item) => __async(void 0, null, function* () {
3334
- return yield resolveComponentData(
3335
- item,
3336
- config,
3337
- onResolveStart,
3338
- onResolveEnd
3339
- );
3340
- }))
3341
- );
3342
- });
3343
- var resolveComponentData = (item, config, onResolveStart, onResolveEnd) => __async(void 0, null, function* () {
3344
- const configForItem = config.components[item.type];
3345
- if (configForItem.resolveData) {
3346
- const { item: oldItem = {}, resolved = {} } = cache2.lastChange[item.props.id] || {};
3347
- if (item && item === oldItem) {
3348
- return resolved;
3349
- }
3350
- const changed = getChanged(item, oldItem);
3351
- if (onResolveStart) {
3352
- onResolveStart(item);
3353
- }
3354
- const { props: resolvedProps, readOnly = {} } = yield configForItem.resolveData(item, { changed, lastData: oldItem });
3355
- const { readOnly: existingReadOnly = {} } = item || {};
3356
- const newReadOnly = __spreadValues(__spreadValues({}, existingReadOnly), readOnly);
3357
- const resolvedItem = __spreadProps(__spreadValues({}, item), {
3358
- props: __spreadValues(__spreadValues({}, item.props), resolvedProps)
3359
- });
3360
- if (Object.keys(newReadOnly).length) {
3361
- resolvedItem.readOnly = newReadOnly;
3362
- }
3363
- cache2.lastChange[item.props.id] = {
3364
- item,
3365
- resolved: resolvedItem
3366
- };
3367
- if (onResolveEnd) {
3368
- onResolveEnd(resolvedItem);
3369
- }
3370
- return resolvedItem;
3371
- }
3372
- return item;
3373
- });
3374
-
3375
- // lib/apply-dynamic-props.ts
3376
- init_react_import();
3377
- var applyDynamicProps = (data, dynamicProps, rootData) => {
3378
- return __spreadProps(__spreadValues({}, data), {
3379
- root: __spreadValues(__spreadValues({}, data.root), rootData ? rootData : {}),
3380
- content: data.content.map((item) => {
3381
- return dynamicProps[item.props.id] ? __spreadValues(__spreadValues({}, item), dynamicProps[item.props.id]) : item;
3382
- }),
3383
- zones: Object.keys(data.zones || {}).reduce((acc, zoneKey) => {
3384
- return __spreadProps(__spreadValues({}, acc), {
3385
- [zoneKey]: data.zones[zoneKey].map((item) => {
3386
- return dynamicProps[item.props.id] ? __spreadValues(__spreadValues({}, item), dynamicProps[item.props.id]) : item;
3387
- })
3388
- });
3389
- }, {})
3390
- });
3532
+
3533
+ // reducer/state.ts
3534
+ init_react_import();
3535
+ var reduceUi = (ui, action) => {
3536
+ if (action.type === "setUi") {
3537
+ if (typeof action.ui === "object") {
3538
+ return __spreadValues(__spreadValues({}, ui), action.ui);
3539
+ }
3540
+ return __spreadValues(__spreadValues({}, ui), action.ui(ui));
3541
+ }
3542
+ return ui;
3391
3543
  };
3392
3544
 
3393
- // lib/resolve-root-data.ts
3545
+ // reducer/actions.tsx
3394
3546
  init_react_import();
3395
- var cache3 = {};
3396
- function resolveRootData(data, config) {
3397
- return __async(this, null, function* () {
3398
- var _a, _b, _c, _d, _e;
3399
- if (((_a = config.root) == null ? void 0 : _a.resolveData) && data.root.props) {
3400
- if (((_b = cache3.lastChange) == null ? void 0 : _b.original) === data.root) {
3401
- return cache3.lastChange.resolved;
3402
- }
3403
- const changed = getChanged(data.root, (_c = cache3.lastChange) == null ? void 0 : _c.original);
3404
- const rootWithProps = data.root;
3405
- const resolvedRoot = yield (_e = config.root) == null ? void 0 : _e.resolveData(rootWithProps, {
3406
- changed,
3407
- lastData: ((_d = cache3.lastChange) == null ? void 0 : _d.original) || {}
3408
- });
3409
- cache3.lastChange = {
3410
- original: data.root,
3411
- resolved: resolvedRoot
3412
- };
3413
- return __spreadProps(__spreadValues(__spreadValues({}, data.root), resolvedRoot), {
3414
- props: __spreadValues(__spreadValues({}, data.root.props), resolvedRoot.props)
3415
- });
3547
+
3548
+ // reducer/index.ts
3549
+ function storeInterceptor(reducer, record, onAction) {
3550
+ return (state, action) => {
3551
+ const newAppState = reducer(state, action);
3552
+ const isValidType = ![
3553
+ "registerZone",
3554
+ "unregisterZone",
3555
+ "setData",
3556
+ "setUi",
3557
+ "set"
3558
+ ].includes(action.type);
3559
+ if (typeof action.recordHistory !== "undefined" ? action.recordHistory : isValidType) {
3560
+ if (record) record(newAppState);
3416
3561
  }
3417
- return data.root;
3418
- });
3562
+ onAction == null ? void 0 : onAction(action, newAppState, state);
3563
+ return newAppState;
3564
+ };
3419
3565
  }
3420
-
3421
- // lib/use-resolved-data.ts
3422
- var useResolvedData = (appState, config, dispatch) => {
3423
- const [{ resolverKey, newAppState }, setResolverState] = (0, import_react19.useState)({
3424
- resolverKey: 0,
3425
- newAppState: appState
3426
- });
3427
- const [componentState, setComponentState] = (0, import_react19.useState)({});
3428
- const deferredSetStates = {};
3429
- const setComponentLoading = (0, import_react19.useCallback)(
3430
- (id, loading, defer2 = 0) => {
3431
- if (deferredSetStates[id]) {
3432
- clearTimeout(deferredSetStates[id]);
3433
- delete deferredSetStates[id];
3566
+ var setAction = (state, action) => {
3567
+ if (typeof action.state === "object") {
3568
+ return __spreadValues(__spreadValues({}, state), action.state);
3569
+ }
3570
+ return __spreadValues(__spreadValues({}, state), action.state(state));
3571
+ };
3572
+ function createReducer({
3573
+ config,
3574
+ record,
3575
+ onAction
3576
+ }) {
3577
+ return storeInterceptor(
3578
+ (state, action) => {
3579
+ const data = reduceData(state.data, action, config);
3580
+ const ui = reduceUi(state.ui, action);
3581
+ if (action.type === "set") {
3582
+ return setAction(state, action);
3434
3583
  }
3435
- deferredSetStates[id] = setTimeout(() => {
3436
- setComponentState((prev) => __spreadProps(__spreadValues({}, prev), {
3437
- [id]: __spreadProps(__spreadValues({}, prev[id]), { loading })
3438
- }));
3439
- delete deferredSetStates[id];
3440
- }, defer2);
3584
+ return { data, ui };
3441
3585
  },
3442
- []
3586
+ record,
3587
+ onAction
3443
3588
  );
3444
- const runResolvers = () => __async(void 0, null, function* () {
3445
- const newData = newAppState.data;
3446
- const flatContent = Object.keys(newData.zones || {}).reduce((acc, zone) => [...acc, ...newData.zones[zone]], newData.content).filter((item) => {
3447
- var _a;
3448
- return !!((_a = config.components[item.type]) == null ? void 0 : _a.resolveData);
3589
+ }
3590
+
3591
+ // lib/flush-zones.ts
3592
+ init_react_import();
3593
+ var flushZones = (appState) => {
3594
+ const containsZones = typeof appState.data.zones !== "undefined";
3595
+ if (containsZones) {
3596
+ Object.keys(appState.data.zones || {}).forEach((zone) => {
3597
+ addToZoneCache(zone, appState.data.zones[zone]);
3449
3598
  });
3450
- const applyIfChange = (dynamicDataMap, dynamicRoot) => {
3451
- const processed = applyDynamicProps(
3452
- appState.data,
3453
- dynamicDataMap,
3454
- dynamicRoot
3455
- );
3456
- const processedAppState = __spreadProps(__spreadValues({}, appState), { data: processed });
3457
- const containsChanges = JSON.stringify(appState) !== JSON.stringify(processedAppState);
3458
- if (containsChanges) {
3459
- dispatch({
3460
- type: "set",
3461
- state: (prev) => __spreadProps(__spreadValues({}, prev), {
3462
- data: applyDynamicProps(prev.data, dynamicDataMap, dynamicRoot),
3463
- ui: resolverKey > 0 ? __spreadValues(__spreadValues({}, prev.ui), newAppState.ui) : prev.ui
3464
- }),
3465
- recordHistory: resolverKey > 0
3466
- });
3467
- }
3468
- };
3469
- const promises = [];
3470
- promises.push(
3471
- (() => __async(void 0, null, function* () {
3472
- setComponentLoading("puck-root", true, 50);
3473
- const dynamicRoot = yield resolveRootData(newData, config);
3474
- applyIfChange({}, dynamicRoot);
3475
- setComponentLoading("puck-root", false);
3476
- }))()
3477
- );
3478
- flatContent.forEach((item) => {
3479
- promises.push(
3480
- (() => __async(void 0, null, function* () {
3481
- const dynamicData = yield resolveComponentData(
3482
- item,
3483
- config,
3484
- (item2) => {
3485
- setComponentLoading(item2.props.id, true, 50);
3486
- },
3487
- (item2) => {
3488
- deferredSetStates[item2.props.id];
3489
- setComponentLoading(item2.props.id, false);
3490
- }
3491
- );
3492
- const dynamicDataMap = { [item.props.id]: dynamicData };
3493
- applyIfChange(dynamicDataMap);
3494
- }))()
3495
- );
3599
+ return __spreadProps(__spreadValues({}, appState), {
3600
+ data: __spreadProps(__spreadValues({}, appState.data), {
3601
+ zones: {}
3602
+ })
3496
3603
  });
3497
- yield Promise.all(promises);
3498
- });
3499
- (0, import_react19.useEffect)(() => {
3500
- runResolvers();
3501
- }, [resolverKey]);
3502
- const resolveData = (0, import_react19.useCallback)((newAppState2 = appState) => {
3503
- setResolverState((curr) => ({
3504
- resolverKey: curr.resolverKey + 1,
3505
- newAppState: newAppState2
3506
- }));
3507
- }, []);
3508
- return {
3509
- resolveData,
3510
- componentState
3511
- };
3604
+ }
3605
+ return appState;
3512
3606
  };
3513
3607
 
3514
3608
  // components/MenuBar/index.tsx
@@ -3573,7 +3667,7 @@ init_react_import();
3573
3667
  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" };
3574
3668
 
3575
3669
  // components/Puck/components/Fields/index.tsx
3576
- var import_react20 = require("react");
3670
+ var import_react21 = require("react");
3577
3671
  var import_jsx_runtime28 = require("react/jsx-runtime");
3578
3672
  var getClassName21 = get_class_name_factory_default("PuckFields", styles_module_default16);
3579
3673
  var defaultPageFields = {
@@ -3592,15 +3686,15 @@ var useResolvedFields = () => {
3592
3686
  const componentConfig = selectedItem ? config.components[selectedItem.type] : null;
3593
3687
  const defaultFields = selectedItem ? componentConfig == null ? void 0 : componentConfig.fields : rootFields;
3594
3688
  const rootProps = data.root.props || data.root;
3595
- const [lastSelectedData, setLastSelectedData] = (0, import_react20.useState)({});
3596
- const [resolvedFields, setResolvedFields] = (0, import_react20.useState)(defaultFields || {});
3597
- const [fieldsLoading, setFieldsLoading] = (0, import_react20.useState)(false);
3689
+ const [lastSelectedData, setLastSelectedData] = (0, import_react21.useState)({});
3690
+ const [resolvedFields, setResolvedFields] = (0, import_react21.useState)(defaultFields || {});
3691
+ const [fieldsLoading, setFieldsLoading] = (0, import_react21.useState)(false);
3598
3692
  const defaultResolveFields = (_componentData, _params) => defaultFields;
3599
3693
  const componentData = selectedItem ? selectedItem : { props: rootProps, readOnly: data.root.readOnly };
3600
- const resolveFields = (0, import_react20.useCallback)(
3694
+ const resolveFields = (0, import_react21.useCallback)(
3601
3695
  (..._0) => __async(void 0, [..._0], function* (fields = {}) {
3602
3696
  var _a2, _b, _c;
3603
- const lastData = ((_a2 = lastSelectedData.props) == null ? void 0 : _a2.id) === componentData.props.id ? lastSelectedData : {};
3697
+ const lastData = ((_a2 = lastSelectedData.props) == null ? void 0 : _a2.id) === componentData.props.id ? lastSelectedData : null;
3604
3698
  const changed = getChanged(componentData, lastData);
3605
3699
  setLastSelectedData(componentData);
3606
3700
  if (selectedItem && (componentConfig == null ? void 0 : componentConfig.resolveFields)) {
@@ -3633,13 +3727,13 @@ var useResolvedFields = () => {
3633
3727
  }),
3634
3728
  [data, config, componentData, selectedItem, resolvedFields, state]
3635
3729
  );
3636
- (0, import_react20.useEffect)(() => {
3730
+ (0, import_react21.useEffect)(() => {
3637
3731
  setFieldsLoading(true);
3638
3732
  resolveFields(defaultFields).then((fields) => {
3639
3733
  setResolvedFields(fields || {});
3640
3734
  setFieldsLoading(false);
3641
3735
  });
3642
- }, [data, defaultFields]);
3736
+ }, [data, defaultFields, state.ui.itemSelector]);
3643
3737
  return [resolvedFields, fieldsLoading];
3644
3738
  };
3645
3739
  var Fields = () => {
@@ -3651,16 +3745,16 @@ var Fields = () => {
3651
3745
  config,
3652
3746
  resolveData,
3653
3747
  componentState,
3654
- overrides,
3655
- globalPermissions
3748
+ overrides
3656
3749
  } = useAppContext();
3657
3750
  const { data, ui } = state;
3658
3751
  const { itemSelector } = ui;
3659
3752
  const [fields, fieldsResolving] = useResolvedFields();
3660
- const componentResolving = selectedItem ? (_a = componentState[selectedItem == null ? void 0 : selectedItem.props.id]) == null ? void 0 : _a.loading : (_b = componentState["puck-root"]) == null ? void 0 : _b.loading;
3753
+ const { getPermissions } = useAppContext();
3754
+ 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;
3661
3755
  const isLoading = fieldsResolving || componentResolving;
3662
3756
  const rootProps = data.root.props || data.root;
3663
- const Wrapper = (0, import_react20.useMemo)(() => overrides.fields || DefaultFields, [overrides]);
3757
+ const Wrapper = (0, import_react21.useMemo)(() => overrides.fields || DefaultFields, [overrides]);
3664
3758
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
3665
3759
  "form",
3666
3760
  {
@@ -3737,10 +3831,7 @@ var Fields = () => {
3737
3831
  if (selectedItem && itemSelector) {
3738
3832
  const { readOnly = {} } = selectedItem;
3739
3833
  const { edit } = getPermissions({
3740
- selectedItem,
3741
- config,
3742
- globalPermissions: globalPermissions || {},
3743
- appState: state
3834
+ item: selectedItem
3744
3835
  });
3745
3836
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3746
3837
  AutoFieldPrivate,
@@ -3756,13 +3847,16 @@ var Fields = () => {
3756
3847
  );
3757
3848
  } else {
3758
3849
  const readOnly = data.root.readOnly || {};
3850
+ const { edit } = getPermissions({
3851
+ root: true
3852
+ });
3759
3853
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3760
3854
  AutoFieldPrivate,
3761
3855
  {
3762
3856
  field,
3763
3857
  name: fieldName,
3764
3858
  id: `root_${fieldName}`,
3765
- readOnly: readOnly[fieldName],
3859
+ readOnly: !edit || readOnly[fieldName],
3766
3860
  value: rootProps[fieldName],
3767
3861
  onChange
3768
3862
  },
@@ -3781,7 +3875,7 @@ init_react_import();
3781
3875
 
3782
3876
  // lib/use-component-list.tsx
3783
3877
  init_react_import();
3784
- var import_react21 = require("react");
3878
+ var import_react22 = require("react");
3785
3879
 
3786
3880
  // components/ComponentList/index.tsx
3787
3881
  init_react_import();
@@ -3798,12 +3892,9 @@ var ComponentListItem = ({
3798
3892
  label,
3799
3893
  index
3800
3894
  }) => {
3801
- const { overrides, config, globalPermissions, state } = useAppContext();
3895
+ const { overrides, getPermissions } = useAppContext();
3802
3896
  const canInsert = getPermissions({
3803
- type: name,
3804
- config,
3805
- globalPermissions: globalPermissions || {},
3806
- appState: state
3897
+ type: name
3807
3898
  }).insert;
3808
3899
  return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3809
3900
  Drawer.Item,
@@ -3862,8 +3953,8 @@ ComponentList.Item = ComponentListItem;
3862
3953
  // lib/use-component-list.tsx
3863
3954
  var import_jsx_runtime30 = require("react/jsx-runtime");
3864
3955
  var useComponentList = (config, ui) => {
3865
- const [componentList, setComponentList] = (0, import_react21.useState)();
3866
- (0, import_react21.useEffect)(() => {
3956
+ const [componentList, setComponentList] = (0, import_react22.useState)();
3957
+ (0, import_react22.useEffect)(() => {
3867
3958
  var _a, _b, _c;
3868
3959
  if (Object.keys(ui.componentList).length > 0) {
3869
3960
  const matchedComponents = [];
@@ -3932,22 +4023,22 @@ var useComponentList = (config, ui) => {
3932
4023
  };
3933
4024
 
3934
4025
  // components/Puck/components/Components/index.tsx
3935
- var import_react22 = require("react");
4026
+ var import_react23 = require("react");
3936
4027
  var import_jsx_runtime31 = require("react/jsx-runtime");
3937
4028
  var Components = () => {
3938
4029
  const { config, state, overrides } = useAppContext();
3939
4030
  const componentList = useComponentList(config, state.ui);
3940
- const Wrapper = (0, import_react22.useMemo)(() => overrides.components || "div", [overrides]);
4031
+ const Wrapper = (0, import_react23.useMemo)(() => overrides.components || "div", [overrides]);
3941
4032
  return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Wrapper, { children: componentList ? componentList : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ComponentList, { id: "all" }) });
3942
4033
  };
3943
4034
 
3944
4035
  // components/Puck/components/Preview/index.tsx
3945
4036
  init_react_import();
3946
- var import_react24 = require("react");
4037
+ var import_react25 = require("react");
3947
4038
 
3948
4039
  // components/AutoFrame/index.tsx
3949
4040
  init_react_import();
3950
- var import_react23 = require("react");
4041
+ var import_react24 = require("react");
3951
4042
  var import_object_hash = __toESM(require("object-hash"));
3952
4043
  var import_react_dom2 = require("react-dom");
3953
4044
  var import_jsx_runtime32 = require("react/jsx-runtime");
@@ -3993,7 +4084,7 @@ var CopyHostStyles = ({
3993
4084
  onStylesLoaded = () => null
3994
4085
  }) => {
3995
4086
  const { document: doc, window: win } = useFrame();
3996
- (0, import_react23.useEffect)(() => {
4087
+ (0, import_react24.useEffect)(() => {
3997
4088
  if (!win || !doc) {
3998
4089
  return () => {
3999
4090
  };
@@ -4152,8 +4243,8 @@ var CopyHostStyles = ({
4152
4243
  }, []);
4153
4244
  return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, { children });
4154
4245
  };
4155
- var autoFrameContext = (0, import_react23.createContext)({});
4156
- var useFrame = () => (0, import_react23.useContext)(autoFrameContext);
4246
+ var autoFrameContext = (0, import_react24.createContext)({});
4247
+ var useFrame = () => (0, import_react24.useContext)(autoFrameContext);
4157
4248
  function AutoFrame(_a) {
4158
4249
  var _b = _a, {
4159
4250
  children,
@@ -4168,11 +4259,11 @@ function AutoFrame(_a) {
4168
4259
  "id",
4169
4260
  "onStylesLoaded"
4170
4261
  ]);
4171
- const [loaded, setLoaded] = (0, import_react23.useState)(false);
4172
- const [ctx, setCtx] = (0, import_react23.useState)({});
4173
- const ref = (0, import_react23.useRef)(null);
4174
- const [mountTarget, setMountTarget] = (0, import_react23.useState)();
4175
- (0, import_react23.useEffect)(() => {
4262
+ const [loaded, setLoaded] = (0, import_react24.useState)(false);
4263
+ const [ctx, setCtx] = (0, import_react24.useState)({});
4264
+ const ref = (0, import_react24.useRef)(null);
4265
+ const [mountTarget, setMountTarget] = (0, import_react24.useState)();
4266
+ (0, import_react24.useEffect)(() => {
4176
4267
  var _a2;
4177
4268
  if (ref.current) {
4178
4269
  setCtx({
@@ -4208,7 +4299,7 @@ var import_jsx_runtime33 = require("react/jsx-runtime");
4208
4299
  var getClassName23 = get_class_name_factory_default("PuckPreview", styles_module_default18);
4209
4300
  var Preview = ({ id = "puck-preview" }) => {
4210
4301
  const { config, dispatch, state, setStatus, iframe, overrides } = useAppContext();
4211
- const Page = (0, import_react24.useCallback)(
4302
+ const Page = (0, import_react25.useCallback)(
4212
4303
  (pageProps) => {
4213
4304
  var _a, _b;
4214
4305
  return ((_a = config.root) == null ? void 0 : _a.render) ? (_b = config.root) == null ? void 0 : _b.render(__spreadValues({
@@ -4217,7 +4308,7 @@ var Preview = ({ id = "puck-preview" }) => {
4217
4308
  },
4218
4309
  [config.root]
4219
4310
  );
4220
- const Frame = (0, import_react24.useMemo)(() => overrides.iframe, [overrides]);
4311
+ const Frame = (0, import_react25.useMemo)(() => overrides.iframe, [overrides]);
4221
4312
  const rootProps = state.data.root.props || state.data.root;
4222
4313
  return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4223
4314
  "div",
@@ -4306,7 +4397,7 @@ var scrollIntoView = (el) => {
4306
4397
  };
4307
4398
 
4308
4399
  // components/LayerTree/index.tsx
4309
- var import_react25 = require("react");
4400
+ var import_react26 = require("react");
4310
4401
 
4311
4402
  // lib/is-child-of-zone.ts
4312
4403
  init_react_import();
@@ -4333,7 +4424,7 @@ var LayerTree = ({
4333
4424
  label
4334
4425
  }) => {
4335
4426
  const zones = data.zones || {};
4336
- const ctx = (0, import_react25.useContext)(dropZoneContext);
4427
+ const ctx = (0, import_react26.useContext)(dropZoneContext);
4337
4428
  return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
4338
4429
  label && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: getClassName24("zoneTitle"), children: [
4339
4430
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: getClassName24("zoneIcon"), children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Layers, { size: "16" }) }),
@@ -4439,13 +4530,13 @@ var LayerTree = ({
4439
4530
  };
4440
4531
 
4441
4532
  // components/Puck/components/Outline/index.tsx
4442
- var import_react26 = require("react");
4533
+ var import_react27 = require("react");
4443
4534
  var import_jsx_runtime35 = require("react/jsx-runtime");
4444
4535
  var Outline = () => {
4445
4536
  const { dispatch, state, overrides, config } = useAppContext();
4446
4537
  const { data, ui } = state;
4447
4538
  const { itemSelector } = ui;
4448
- const setItemSelector = (0, import_react26.useCallback)(
4539
+ const setItemSelector = (0, import_react27.useCallback)(
4449
4540
  (newItemSelector) => {
4450
4541
  dispatch({
4451
4542
  type: "setUi",
@@ -4454,7 +4545,7 @@ var Outline = () => {
4454
4545
  },
4455
4546
  []
4456
4547
  );
4457
- const Wrapper = (0, import_react26.useMemo)(() => overrides.outline || "div", [overrides]);
4548
+ const Wrapper = (0, import_react27.useMemo)(() => overrides.outline || "div", [overrides]);
4458
4549
  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: [
4459
4550
  (ctx == null ? void 0 : ctx.activeZones) && (ctx == null ? void 0 : ctx.activeZones[rootDroppableId]) && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4460
4551
  LayerTree,
@@ -4500,14 +4591,14 @@ function usePuckHistory({
4500
4591
  if (historyStore.hasPast) {
4501
4592
  dispatch({
4502
4593
  type: "set",
4503
- state: ((_a = historyStore.prevHistory) == null ? void 0 : _a.data) || initialAppState
4594
+ state: ((_a = historyStore.prevHistory) == null ? void 0 : _a.state) || initialAppState
4504
4595
  });
4505
4596
  historyStore.back();
4506
4597
  }
4507
4598
  };
4508
4599
  const forward = () => {
4509
4600
  if (historyStore.nextHistory) {
4510
- dispatch({ type: "set", state: historyStore.nextHistory.data });
4601
+ dispatch({ type: "set", state: historyStore.nextHistory.state });
4511
4602
  historyStore.forward();
4512
4603
  }
4513
4604
  };
@@ -4515,7 +4606,7 @@ function usePuckHistory({
4515
4606
  var _a;
4516
4607
  dispatch({
4517
4608
  type: "set",
4518
- state: ((_a = histories[histories.length - 1]) == null ? void 0 : _a.data) || initialAppState
4609
+ state: ((_a = histories[histories.length - 1]) == null ? void 0 : _a.state) || initialAppState
4519
4610
  });
4520
4611
  historyStore.setHistories(histories);
4521
4612
  };
@@ -4524,7 +4615,7 @@ function usePuckHistory({
4524
4615
  if (historyStore.histories.length > index) {
4525
4616
  dispatch({
4526
4617
  type: "set",
4527
- state: ((_a = historyStore.histories[index]) == null ? void 0 : _a.data) || initialAppState
4618
+ state: ((_a = historyStore.histories[index]) == null ? void 0 : _a.state) || initialAppState
4528
4619
  });
4529
4620
  historyStore.setHistoryIndex(index);
4530
4621
  }
@@ -4543,19 +4634,19 @@ function usePuckHistory({
4543
4634
 
4544
4635
  // lib/use-history-store.ts
4545
4636
  init_react_import();
4546
- var import_react27 = require("react");
4637
+ var import_react28 = require("react");
4547
4638
  var import_use_debounce3 = require("use-debounce");
4548
- var EMPTY_HISTORY_INDEX = -1;
4639
+ var EMPTY_HISTORY_INDEX = 0;
4549
4640
  function useHistoryStore(initialHistory) {
4550
4641
  var _a, _b;
4551
- const [histories, setHistories] = (0, import_react27.useState)(
4642
+ const [histories, setHistories] = (0, import_react28.useState)(
4552
4643
  (_a = initialHistory == null ? void 0 : initialHistory.histories) != null ? _a : []
4553
4644
  );
4554
4645
  const updateHistories = (histories2) => {
4555
4646
  setHistories(histories2);
4556
4647
  setIndex(histories2.length - 1);
4557
4648
  };
4558
- const [index, setIndex] = (0, import_react27.useState)(
4649
+ const [index, setIndex] = (0, import_react28.useState)(
4559
4650
  (_b = initialHistory == null ? void 0 : initialHistory.index) != null ? _b : EMPTY_HISTORY_INDEX
4560
4651
  );
4561
4652
  const hasPast = index > EMPTY_HISTORY_INDEX;
@@ -4563,9 +4654,9 @@ function useHistoryStore(initialHistory) {
4563
4654
  const currentHistory = histories[index];
4564
4655
  const nextHistory = hasFuture ? histories[index + 1] : null;
4565
4656
  const prevHistory = hasPast ? histories[index - 1] : null;
4566
- const record = (0, import_use_debounce3.useDebouncedCallback)((data) => {
4657
+ const record = (0, import_use_debounce3.useDebouncedCallback)((state) => {
4567
4658
  const history = {
4568
- data,
4659
+ state,
4569
4660
  id: generateId("history")
4570
4661
  };
4571
4662
  updateHistories([...histories.slice(0, index + 1), history]);
@@ -4715,11 +4806,11 @@ var getBox = function getBox2(el) {
4715
4806
  };
4716
4807
 
4717
4808
  // components/Puck/components/Canvas/index.tsx
4718
- var import_react29 = require("react");
4809
+ var import_react30 = require("react");
4719
4810
 
4720
4811
  // components/ViewportControls/index.tsx
4721
4812
  init_react_import();
4722
- var import_react28 = require("react");
4813
+ var import_react29 = require("react");
4723
4814
 
4724
4815
  // css-module:/home/runner/work/puck/puck/packages/core/components/ViewportControls/styles.module.css#css-module
4725
4816
  init_react_import();
@@ -4742,8 +4833,8 @@ var ViewportButton = ({
4742
4833
  onClick
4743
4834
  }) => {
4744
4835
  const { state } = useAppContext();
4745
- const [isActive, setIsActive] = (0, import_react28.useState)(false);
4746
- (0, import_react28.useEffect)(() => {
4836
+ const [isActive, setIsActive] = (0, import_react29.useState)(false);
4837
+ (0, import_react29.useEffect)(() => {
4747
4838
  setIsActive(width === state.ui.viewports.current.width);
4748
4839
  }, [width, state.ui.viewports.current.width]);
4749
4840
  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: getClassNameButton({ isActive }), children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
@@ -4779,7 +4870,7 @@ var ViewportControls = ({
4779
4870
  const defaultsContainAutoZoom = defaultZoomOptions.find(
4780
4871
  (option) => option.value === autoZoom
4781
4872
  );
4782
- const zoomOptions = (0, import_react28.useMemo)(
4873
+ const zoomOptions = (0, import_react29.useMemo)(
4783
4874
  () => [
4784
4875
  ...defaultZoomOptions,
4785
4876
  ...defaultsContainAutoZoom ? [] : [
@@ -4862,7 +4953,7 @@ var ViewportControls = ({
4862
4953
 
4863
4954
  // css-module:/home/runner/work/puck/puck/packages/core/components/Puck/components/Canvas/styles.module.css#css-module
4864
4955
  init_react_import();
4865
- var styles_module_default21 = { "PuckCanvas": "_PuckCanvas_6zd4y_1", "PuckCanvas-controls": "_PuckCanvas-controls_6zd4y_16", "PuckCanvas-inner": "_PuckCanvas-inner_6zd4y_21", "PuckCanvas-root": "_PuckCanvas-root_6zd4y_32", "PuckCanvas--ready": "_PuckCanvas--ready_6zd4y_56" };
4956
+ var styles_module_default21 = { "PuckCanvas": "_PuckCanvas_esbg1_1", "PuckCanvas-controls": "_PuckCanvas-controls_esbg1_16", "PuckCanvas-inner": "_PuckCanvas-inner_esbg1_21", "PuckCanvas-root": "_PuckCanvas-root_esbg1_32", "PuckCanvas--ready": "_PuckCanvas--ready_esbg1_56", "PuckCanvas-loader": "_PuckCanvas-loader_esbg1_60", "PuckCanvas--showLoader": "_PuckCanvas--showLoader_esbg1_70" };
4866
4957
 
4867
4958
  // lib/get-zoom-config.ts
4868
4959
  init_react_import();
@@ -4902,17 +4993,17 @@ var Canvas = () => {
4902
4993
  const { status, iframe } = useAppContext();
4903
4994
  const { dispatch, state, overrides, setUi, zoomConfig, setZoomConfig } = useAppContext();
4904
4995
  const { ui } = state;
4905
- const frameRef = (0, import_react29.useRef)(null);
4906
- const [showTransition, setShowTransition] = (0, import_react29.useState)(false);
4907
- const defaultRender = (0, import_react29.useMemo)(() => {
4996
+ const frameRef = (0, import_react30.useRef)(null);
4997
+ const [showTransition, setShowTransition] = (0, import_react30.useState)(false);
4998
+ const defaultRender = (0, import_react30.useMemo)(() => {
4908
4999
  const PuckDefault = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children });
4909
5000
  return PuckDefault;
4910
5001
  }, []);
4911
- const CustomPreview = (0, import_react29.useMemo)(
5002
+ const CustomPreview = (0, import_react30.useMemo)(
4912
5003
  () => overrides.preview || defaultRender,
4913
5004
  [overrides]
4914
5005
  );
4915
- const getFrameDimensions = (0, import_react29.useCallback)(() => {
5006
+ const getFrameDimensions = (0, import_react30.useCallback)(() => {
4916
5007
  if (frameRef.current) {
4917
5008
  const frame = frameRef.current;
4918
5009
  const box = getBox(frame);
@@ -4920,7 +5011,7 @@ var Canvas = () => {
4920
5011
  }
4921
5012
  return { width: 0, height: 0 };
4922
5013
  }, [frameRef]);
4923
- const resetAutoZoom = (0, import_react29.useCallback)(
5014
+ const resetAutoZoom = (0, import_react30.useCallback)(
4924
5015
  (ui2 = state.ui) => {
4925
5016
  if (frameRef.current) {
4926
5017
  setZoomConfig(
@@ -4930,11 +5021,11 @@ var Canvas = () => {
4930
5021
  },
4931
5022
  [frameRef, zoomConfig, state.ui]
4932
5023
  );
4933
- (0, import_react29.useEffect)(() => {
5024
+ (0, import_react30.useEffect)(() => {
4934
5025
  setShowTransition(false);
4935
5026
  resetAutoZoom();
4936
5027
  }, [frameRef, ui.leftSideBarVisible, ui.rightSideBarVisible]);
4937
- (0, import_react29.useEffect)(() => {
5028
+ (0, import_react30.useEffect)(() => {
4938
5029
  const { height: frameHeight } = getFrameDimensions();
4939
5030
  if (ui.viewports.current.height === "auto") {
4940
5031
  setZoomConfig(__spreadProps(__spreadValues({}, zoomConfig), {
@@ -4942,7 +5033,13 @@ var Canvas = () => {
4942
5033
  }));
4943
5034
  }
4944
5035
  }, [zoomConfig.zoom]);
4945
- (0, import_react29.useEffect)(() => {
5036
+ (0, import_react30.useEffect)(() => {
5037
+ if (ZOOM_ON_CHANGE) {
5038
+ setShowTransition(true);
5039
+ resetAutoZoom(ui);
5040
+ }
5041
+ }, [ui.viewports.current.width]);
5042
+ (0, import_react30.useEffect)(() => {
4946
5043
  const observer = new ResizeObserver(() => {
4947
5044
  setShowTransition(false);
4948
5045
  resetAutoZoom();
@@ -4954,11 +5051,18 @@ var Canvas = () => {
4954
5051
  observer.disconnect();
4955
5052
  };
4956
5053
  }, []);
5054
+ const [showLoader, setShowLoader] = (0, import_react30.useState)(false);
5055
+ (0, import_react30.useEffect)(() => {
5056
+ setTimeout(() => {
5057
+ setShowLoader(true);
5058
+ }, 500);
5059
+ }, []);
4957
5060
  return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
4958
5061
  "div",
4959
5062
  {
4960
5063
  className: getClassName26({
4961
- ready: status === "READY" || !iframe.enabled
5064
+ ready: status === "READY" || !iframe.enabled || !iframe.waitForStyles,
5065
+ showLoader
4962
5066
  }),
4963
5067
  onClick: () => dispatch({
4964
5068
  type: "setUi",
@@ -4991,21 +5095,24 @@ var Canvas = () => {
4991
5095
  }
4992
5096
  }
4993
5097
  ) }),
4994
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: getClassName26("inner"), ref: frameRef, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4995
- "div",
4996
- {
4997
- className: getClassName26("root"),
4998
- style: {
4999
- width: iframe.enabled ? ui.viewports.current.width : "100%",
5000
- height: zoomConfig.rootHeight,
5001
- transform: iframe.enabled ? `scale(${zoomConfig.zoom})` : void 0,
5002
- transition: showTransition ? "width 150ms ease-out, height 150ms ease-out, transform 150ms ease-out" : "",
5003
- overflow: iframe.enabled ? void 0 : "auto"
5004
- },
5005
- suppressHydrationWarning: true,
5006
- children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CustomPreview, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Preview, {}) })
5007
- }
5008
- ) })
5098
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: getClassName26("inner"), ref: frameRef, children: [
5099
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5100
+ "div",
5101
+ {
5102
+ className: getClassName26("root"),
5103
+ style: {
5104
+ width: iframe.enabled ? ui.viewports.current.width : "100%",
5105
+ height: zoomConfig.rootHeight,
5106
+ transform: iframe.enabled ? `scale(${zoomConfig.zoom})` : void 0,
5107
+ transition: showTransition ? "width 150ms ease-out, height 150ms ease-out, transform 150ms ease-out" : "",
5108
+ overflow: iframe.enabled ? void 0 : "auto"
5109
+ },
5110
+ suppressHydrationWarning: true,
5111
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CustomPreview, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Preview, {}) })
5112
+ }
5113
+ ),
5114
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: getClassName26("loader"), children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Loader, { size: 24 }) })
5115
+ ] })
5009
5116
  ]
5010
5117
  }
5011
5118
  );
@@ -5030,7 +5137,10 @@ var insertComponent = (componentType, zone, index, {
5030
5137
  const insertedData = insertAction(state.data, insertActionData, config);
5031
5138
  dispatch(__spreadProps(__spreadValues({}, insertActionData), {
5032
5139
  // Dispatch insert rather set, as user's may rely on this via onAction
5033
- recordHistory: false
5140
+ // We must always record history here so the insert is added to user history
5141
+ // If the user has defined a resolveData method, they will end up with 2 history
5142
+ // entries on insert - one for the initial insert, and one when the data resolves
5143
+ recordHistory: true
5034
5144
  }));
5035
5145
  const itemSelector = {
5036
5146
  index,
@@ -5045,7 +5155,7 @@ var insertComponent = (componentType, zone, index, {
5045
5155
 
5046
5156
  // lib/use-loaded-overrides.ts
5047
5157
  init_react_import();
5048
- var import_react30 = require("react");
5158
+ var import_react31 = require("react");
5049
5159
 
5050
5160
  // lib/load-overrides.ts
5051
5161
  init_react_import();
@@ -5084,7 +5194,7 @@ var useLoadedOverrides = ({
5084
5194
  overrides,
5085
5195
  plugins
5086
5196
  }) => {
5087
- return (0, import_react30.useMemo)(() => {
5197
+ return (0, import_react31.useMemo)(() => {
5088
5198
  return loadOverrides({ overrides, plugins });
5089
5199
  }, [plugins, overrides]);
5090
5200
  };
@@ -5109,22 +5219,16 @@ function Puck({
5109
5219
  headerTitle,
5110
5220
  headerPath,
5111
5221
  viewports = defaultViewports,
5112
- iframe = {
5113
- enabled: true
5114
- },
5222
+ iframe: _iframe,
5115
5223
  dnd,
5116
- initialHistory
5224
+ initialHistory: _initialHistory
5117
5225
  }) {
5118
5226
  var _a;
5119
- const historyStore = useHistoryStore(initialHistory);
5120
- const [reducer] = (0, import_react31.useState)(
5121
- () => createReducer({
5122
- config,
5123
- record: historyStore.record,
5124
- onAction
5125
- })
5126
- );
5127
- const [initialAppState] = (0, import_react31.useState)(() => {
5227
+ const iframe = __spreadValues({
5228
+ enabled: true,
5229
+ waitForStyles: true
5230
+ }, _iframe);
5231
+ const [generatedAppState] = (0, import_react32.useState)(() => {
5128
5232
  var _a2, _b, _c, _d, _e, _f, _g, _h, _i;
5129
5233
  const initial = __spreadValues(__spreadValues({}, defaultAppState.ui), initialUi);
5130
5234
  let clientUiState = {};
@@ -5142,14 +5246,14 @@ function Puck({
5142
5246
  })).sort((a, b) => a.diff > b.diff ? 1 : -1);
5143
5247
  const closestViewport = viewportDifferences[0].key;
5144
5248
  if (iframe.enabled) {
5145
- clientUiState = {
5249
+ clientUiState = __spreadProps(__spreadValues({}, clientUiState), {
5146
5250
  viewports: __spreadProps(__spreadValues({}, initial.viewports), {
5147
5251
  current: __spreadProps(__spreadValues({}, initial.viewports.current), {
5148
5252
  height: ((_b = (_a2 = initialUi == null ? void 0 : initialUi.viewports) == null ? void 0 : _a2.current) == null ? void 0 : _b.height) || ((_c = viewports[closestViewport]) == null ? void 0 : _c.height) || "auto",
5149
5253
  width: ((_e = (_d = initialUi == null ? void 0 : initialUi.viewports) == null ? void 0 : _d.current) == null ? void 0 : _e.width) || ((_f = viewports[closestViewport]) == null ? void 0 : _f.width)
5150
5254
  })
5151
5255
  })
5152
- };
5256
+ });
5153
5257
  }
5154
5258
  }
5155
5259
  if (Object.keys((initialData == null ? void 0 : initialData.root) || {}).length > 0 && !((_g = initialData == null ? void 0 : initialData.root) == null ? void 0 : _g.props)) {
@@ -5182,20 +5286,36 @@ function Puck({
5182
5286
  })
5183
5287
  });
5184
5288
  });
5185
- const [appState, dispatch] = (0, import_react31.useReducer)(
5289
+ const { appendData = true } = _initialHistory || {};
5290
+ const histories = [
5291
+ ...(_initialHistory == null ? void 0 : _initialHistory.histories) || [],
5292
+ ...appendData ? [{ state: generatedAppState }] : []
5293
+ ].map((history2) => __spreadProps(__spreadValues({}, history2), {
5294
+ // Inject default data to enable partial history injections
5295
+ state: __spreadValues(__spreadValues({}, generatedAppState), history2.state)
5296
+ }));
5297
+ const initialHistoryIndex = (_initialHistory == null ? void 0 : _initialHistory.index) || histories.length - 1;
5298
+ const initialAppState = histories[initialHistoryIndex].state;
5299
+ const historyStore = useHistoryStore({
5300
+ histories,
5301
+ index: initialHistoryIndex
5302
+ });
5303
+ const [reducer] = (0, import_react32.useState)(
5304
+ () => createReducer({
5305
+ config,
5306
+ record: historyStore.record,
5307
+ onAction
5308
+ })
5309
+ );
5310
+ const [appState, dispatch] = (0, import_react32.useReducer)(
5186
5311
  reducer,
5187
5312
  flushZones(initialAppState)
5188
5313
  );
5189
5314
  const { data, ui } = appState;
5190
5315
  const history = usePuckHistory({ dispatch, initialAppState, historyStore });
5191
- const { resolveData, componentState } = useResolvedData(
5192
- appState,
5193
- config,
5194
- dispatch
5195
- );
5196
- const [menuOpen, setMenuOpen] = (0, import_react31.useState)(false);
5316
+ const [menuOpen, setMenuOpen] = (0, import_react32.useState)(false);
5197
5317
  const { itemSelector, leftSideBarVisible, rightSideBarVisible } = ui;
5198
- const setItemSelector = (0, import_react31.useCallback)(
5318
+ const setItemSelector = (0, import_react32.useCallback)(
5199
5319
  (newItemSelector) => {
5200
5320
  if (newItemSelector === itemSelector) return;
5201
5321
  dispatch({
@@ -5207,13 +5327,13 @@ function Puck({
5207
5327
  [itemSelector]
5208
5328
  );
5209
5329
  const selectedItem = itemSelector ? getItem(itemSelector, data) : null;
5210
- (0, import_react31.useEffect)(() => {
5330
+ (0, import_react32.useEffect)(() => {
5211
5331
  if (onChange) onChange(data);
5212
5332
  }, [data]);
5213
5333
  const { onDragStartOrUpdate, placeholderStyle } = usePlaceholderStyle();
5214
- const [draggedItem, setDraggedItem] = (0, import_react31.useState)();
5334
+ const [draggedItem, setDraggedItem] = (0, import_react32.useState)();
5215
5335
  const rootProps = data.root.props || data.root;
5216
- const toggleSidebars = (0, import_react31.useCallback)(
5336
+ const toggleSidebars = (0, import_react32.useCallback)(
5217
5337
  (sidebar) => {
5218
5338
  const widerViewport = window.matchMedia("(min-width: 638px)").matches;
5219
5339
  const sideBarVisible = sidebar === "left" ? leftSideBarVisible : rightSideBarVisible;
@@ -5227,7 +5347,7 @@ function Puck({
5227
5347
  },
5228
5348
  [dispatch, leftSideBarVisible, rightSideBarVisible]
5229
5349
  );
5230
- (0, import_react31.useEffect)(() => {
5350
+ (0, import_react32.useEffect)(() => {
5231
5351
  if (!window.matchMedia("(min-width: 638px)").matches) {
5232
5352
  dispatch({
5233
5353
  type: "setUi",
@@ -5250,7 +5370,7 @@ function Puck({
5250
5370
  window.removeEventListener("resize", handleResize);
5251
5371
  };
5252
5372
  }, []);
5253
- const defaultHeaderRender = (0, import_react31.useMemo)(() => {
5373
+ const defaultHeaderRender = (0, import_react32.useMemo)(() => {
5254
5374
  if (renderHeader) {
5255
5375
  console.warn(
5256
5376
  "`renderHeader` is deprecated. Please use `overrides.header` and the `usePuck` hook instead"
@@ -5264,7 +5384,7 @@ function Puck({
5264
5384
  }
5265
5385
  return DefaultOverride;
5266
5386
  }, [renderHeader]);
5267
- const defaultHeaderActionsRender = (0, import_react31.useMemo)(() => {
5387
+ const defaultHeaderActionsRender = (0, import_react32.useMemo)(() => {
5268
5388
  if (renderHeaderActions) {
5269
5389
  console.warn(
5270
5390
  "`renderHeaderActions` is deprecated. Please use `overrides.headerActions` and the `usePuck` hook instead."
@@ -5281,20 +5401,20 @@ function Puck({
5281
5401
  overrides,
5282
5402
  plugins
5283
5403
  });
5284
- const CustomPuck = (0, import_react31.useMemo)(
5404
+ const CustomPuck = (0, import_react32.useMemo)(
5285
5405
  () => loadedOverrides.puck || DefaultOverride,
5286
5406
  [loadedOverrides]
5287
5407
  );
5288
- const CustomHeader = (0, import_react31.useMemo)(
5408
+ const CustomHeader = (0, import_react32.useMemo)(
5289
5409
  () => loadedOverrides.header || defaultHeaderRender,
5290
5410
  [loadedOverrides]
5291
5411
  );
5292
- const CustomHeaderActions = (0, import_react31.useMemo)(
5412
+ const CustomHeaderActions = (0, import_react32.useMemo)(
5293
5413
  () => loadedOverrides.headerActions || defaultHeaderActionsRender,
5294
5414
  [loadedOverrides]
5295
5415
  );
5296
- const [mounted, setMounted] = (0, import_react31.useState)(false);
5297
- (0, import_react31.useEffect)(() => {
5416
+ const [mounted, setMounted] = (0, import_react32.useState)(false);
5417
+ (0, import_react32.useEffect)(() => {
5298
5418
  setMounted(true);
5299
5419
  }, []);
5300
5420
  const selectedComponentConfig = selectedItem && config.components[selectedItem.type];
@@ -5307,8 +5427,6 @@ function Puck({
5307
5427
  state: appState,
5308
5428
  dispatch,
5309
5429
  config,
5310
- componentState,
5311
- resolveData,
5312
5430
  plugins: plugins || [],
5313
5431
  overrides: loadedOverrides,
5314
5432
  history,
@@ -5320,9 +5438,11 @@ function Puck({
5320
5438
  duplicate: true,
5321
5439
  insert: true,
5322
5440
  edit: true
5323
- }, permissions)
5441
+ }, permissions),
5442
+ getPermissions: () => ({}),
5443
+ refreshPermissions: () => null
5324
5444
  },
5325
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5445
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(appContext.Consumer, { children: ({ resolveData }) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5326
5446
  DragDropContext,
5327
5447
  {
5328
5448
  autoScrollerOptions: { disabled: dnd == null ? void 0 : dnd.disableAutoScroll },
@@ -5412,89 +5532,115 @@ function Puck({
5412
5532
  }
5413
5533
  ) }) }),
5414
5534
  children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("header", { className: getLayoutClassName("header"), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: getLayoutClassName("headerInner"), children: [
5415
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: getLayoutClassName("headerToggle"), children: [
5416
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5417
- "div",
5418
- {
5419
- className: getLayoutClassName(
5420
- "leftSideBarToggle"
5421
- ),
5422
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5423
- IconButton,
5535
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
5536
+ "div",
5537
+ {
5538
+ className: getLayoutClassName("headerToggle"),
5539
+ children: [
5540
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5541
+ "div",
5424
5542
  {
5425
- onClick: () => {
5426
- toggleSidebars("left");
5427
- },
5428
- title: "Toggle left sidebar",
5429
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PanelLeft, { focusable: "false" })
5543
+ className: getLayoutClassName(
5544
+ "leftSideBarToggle"
5545
+ ),
5546
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5547
+ IconButton,
5548
+ {
5549
+ onClick: () => {
5550
+ toggleSidebars("left");
5551
+ },
5552
+ title: "Toggle left sidebar",
5553
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PanelLeft, { focusable: "false" })
5554
+ }
5555
+ )
5430
5556
  }
5431
- )
5432
- }
5433
- ),
5434
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5435
- "div",
5436
- {
5437
- className: getLayoutClassName(
5438
- "rightSideBarToggle"
5439
5557
  ),
5440
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5441
- IconButton,
5558
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5559
+ "div",
5442
5560
  {
5443
- onClick: () => {
5444
- toggleSidebars("right");
5445
- },
5446
- title: "Toggle right sidebar",
5447
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PanelRight, { focusable: "false" })
5561
+ className: getLayoutClassName(
5562
+ "rightSideBarToggle"
5563
+ ),
5564
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5565
+ IconButton,
5566
+ {
5567
+ onClick: () => {
5568
+ toggleSidebars("right");
5569
+ },
5570
+ title: "Toggle right sidebar",
5571
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PanelRight, { focusable: "false" })
5572
+ }
5573
+ )
5448
5574
  }
5449
5575
  )
5450
- }
5451
- )
5452
- ] }),
5453
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: getLayoutClassName("headerTitle"), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(Heading, { rank: "2", size: "xs", children: [
5454
- headerTitle || rootProps.title || "Page",
5455
- headerPath && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
5456
- " ",
5457
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5458
- "code",
5459
- {
5460
- className: getLayoutClassName("headerPath"),
5461
- children: headerPath
5462
- }
5463
- )
5464
- ] })
5465
- ] }) }),
5466
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: getLayoutClassName("headerTools"), children: [
5467
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: getLayoutClassName("menuButton"), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5468
- IconButton,
5469
- {
5470
- onClick: () => {
5471
- return setMenuOpen(!menuOpen);
5472
- },
5473
- title: "Toggle menu bar",
5474
- children: menuOpen ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ChevronUp, { focusable: "false" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ChevronDown, { focusable: "false" })
5475
- }
5476
- ) }),
5477
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5478
- MenuBar,
5479
- {
5480
- appState,
5481
- dispatch,
5482
- onPublish,
5483
- menuOpen,
5484
- renderHeaderActions: () => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(CustomHeaderActions, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5485
- Button,
5576
+ ]
5577
+ }
5578
+ ),
5579
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5580
+ "div",
5581
+ {
5582
+ className: getLayoutClassName("headerTitle"),
5583
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(Heading, { rank: "2", size: "xs", children: [
5584
+ headerTitle || rootProps.title || "Page",
5585
+ headerPath && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
5586
+ " ",
5587
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5588
+ "code",
5589
+ {
5590
+ className: getLayoutClassName(
5591
+ "headerPath"
5592
+ ),
5593
+ children: headerPath
5594
+ }
5595
+ )
5596
+ ] })
5597
+ ] })
5598
+ }
5599
+ ),
5600
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
5601
+ "div",
5602
+ {
5603
+ className: getLayoutClassName("headerTools"),
5604
+ children: [
5605
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5606
+ "div",
5486
5607
  {
5487
- onClick: () => {
5488
- onPublish && onPublish(data);
5489
- },
5490
- icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Globe, { size: "14px" }),
5491
- children: "Publish"
5608
+ className: getLayoutClassName("menuButton"),
5609
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5610
+ IconButton,
5611
+ {
5612
+ onClick: () => {
5613
+ return setMenuOpen(!menuOpen);
5614
+ },
5615
+ title: "Toggle menu bar",
5616
+ children: menuOpen ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ChevronUp, { focusable: "false" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ChevronDown, { focusable: "false" })
5617
+ }
5618
+ )
5492
5619
  }
5493
- ) }),
5494
- setMenuOpen
5495
- }
5496
- )
5497
- ] })
5620
+ ),
5621
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5622
+ MenuBar,
5623
+ {
5624
+ appState,
5625
+ dispatch,
5626
+ onPublish,
5627
+ menuOpen,
5628
+ renderHeaderActions: () => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(CustomHeaderActions, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5629
+ Button,
5630
+ {
5631
+ onClick: () => {
5632
+ onPublish && onPublish(data);
5633
+ },
5634
+ icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Globe, { size: "14px" }),
5635
+ children: "Publish"
5636
+ }
5637
+ ) }),
5638
+ setMenuOpen
5639
+ }
5640
+ )
5641
+ ]
5642
+ }
5643
+ )
5498
5644
  ] }) })
5499
5645
  }
5500
5646
  ),
@@ -5519,7 +5665,7 @@ function Puck({
5519
5665
  }
5520
5666
  )
5521
5667
  }
5522
- )
5668
+ ) })
5523
5669
  }
5524
5670
  ),
5525
5671
  /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { id: "puck-portal-root", className: getClassName27("portal") })
@@ -5533,7 +5679,10 @@ Puck.Preview = Preview;
5533
5679
  // components/Render/index.tsx
5534
5680
  init_react_import();
5535
5681
  var import_jsx_runtime39 = require("react/jsx-runtime");
5536
- function Render({ config, data }) {
5682
+ function Render({
5683
+ config,
5684
+ data
5685
+ }) {
5537
5686
  var _a;
5538
5687
  const defaultedData = __spreadProps(__spreadValues({}, data), {
5539
5688
  root: data.root || {},
@@ -5665,24 +5814,15 @@ var usePuck = () => {
5665
5814
  history,
5666
5815
  dispatch,
5667
5816
  selectedItem: currentItem,
5668
- globalPermissions
5817
+ getPermissions,
5818
+ refreshPermissions
5669
5819
  } = useAppContext();
5670
5820
  return {
5671
5821
  appState,
5672
5822
  config,
5673
5823
  dispatch,
5674
- getPermissions: ({
5675
- item,
5676
- type
5677
- } = {}) => {
5678
- return getPermissions({
5679
- selectedItem: item || currentItem,
5680
- type,
5681
- globalPermissions: globalPermissions || {},
5682
- config,
5683
- appState
5684
- });
5685
- },
5824
+ getPermissions,
5825
+ refreshPermissions,
5686
5826
  history: {
5687
5827
  back: history.back,
5688
5828
  forward: history.forward,
@@ -5709,6 +5849,7 @@ var usePuck = () => {
5709
5849
  DropZoneProvider,
5710
5850
  FieldLabel,
5711
5851
  FieldLabelInternal,
5852
+ Group,
5712
5853
  IconButton,
5713
5854
  Puck,
5714
5855
  Render,