@measured/puck 0.18.3-canary.9e8e47b → 0.19.0-canary.0a3e56e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -111,19 +111,20 @@ var getChanged = (newItem, oldItem) => {
111
111
 
112
112
  // lib/resolve-component-data.ts
113
113
  var cache = { lastChange: {} };
114
- var resolveAllComponentData = (content, config, onResolveStart, onResolveEnd) => __async(void 0, null, function* () {
114
+ var resolveAllComponentData = (_0, _1, ..._2) => __async(void 0, [_0, _1, ..._2], function* (content, config, metadata = {}, onResolveStart, onResolveEnd) {
115
115
  return yield Promise.all(
116
116
  content.map((item) => __async(void 0, null, function* () {
117
117
  return yield resolveComponentData(
118
118
  item,
119
119
  config,
120
+ metadata,
120
121
  onResolveStart,
121
122
  onResolveEnd
122
123
  );
123
124
  }))
124
125
  );
125
126
  });
126
- var resolveComponentData = (item, config, onResolveStart, onResolveEnd) => __async(void 0, null, function* () {
127
+ var resolveComponentData = (_0, _1, ..._2) => __async(void 0, [_0, _1, ..._2], function* (item, config, metadata = {}, onResolveStart, onResolveEnd) {
127
128
  const configForItem = config.components[item.type];
128
129
  if (configForItem.resolveData) {
129
130
  const { item: oldItem = null, resolved = {} } = cache.lastChange[item.props.id] || {};
@@ -134,7 +135,11 @@ var resolveComponentData = (item, config, onResolveStart, onResolveEnd) => __asy
134
135
  if (onResolveStart) {
135
136
  onResolveStart(item);
136
137
  }
137
- const { props: resolvedProps, readOnly = {} } = yield configForItem.resolveData(item, { changed, lastData: oldItem });
138
+ const { props: resolvedProps, readOnly = {} } = yield configForItem.resolveData(item, {
139
+ changed,
140
+ lastData: oldItem,
141
+ metadata
142
+ });
138
143
  const resolvedItem = __spreadProps(__spreadValues({}, item), {
139
144
  props: __spreadValues(__spreadValues({}, item.props), resolvedProps)
140
145
  });
@@ -156,7 +161,7 @@ var resolveComponentData = (item, config, onResolveStart, onResolveEnd) => __asy
156
161
  // lib/resolve-root-data.ts
157
162
  init_react_import();
158
163
  var cache2 = {};
159
- function resolveRootData(data, config) {
164
+ function resolveRootData(data, config, metadata) {
160
165
  return __async(this, null, function* () {
161
166
  var _a, _b, _c, _d, _e;
162
167
  if (((_a = config.root) == null ? void 0 : _a.resolveData) && data.root.props) {
@@ -167,7 +172,8 @@ function resolveRootData(data, config) {
167
172
  const rootWithProps = data.root;
168
173
  const resolvedRoot = yield (_e = config.root) == null ? void 0 : _e.resolveData(rootWithProps, {
169
174
  changed,
170
- lastData: ((_d = cache2.lastChange) == null ? void 0 : _d.original) || {}
175
+ lastData: ((_d = cache2.lastChange) == null ? void 0 : _d.original) || {},
176
+ metadata: metadata || {}
171
177
  });
172
178
  cache2.lastChange = {
173
179
  original: data.root,
@@ -189,10 +195,14 @@ var defaultData = (data) => __spreadProps(__spreadValues({}, data), {
189
195
  });
190
196
 
191
197
  // lib/resolve-all-data.ts
192
- function resolveAllData(data, config, onResolveStart, onResolveEnd) {
193
- return __async(this, null, function* () {
198
+ function resolveAllData(_0, _1) {
199
+ return __async(this, arguments, function* (data, config, metadata = {}, onResolveStart, onResolveEnd) {
194
200
  const defaultedData = defaultData(data);
195
- const dynamicRoot = yield resolveRootData(defaultedData, config);
201
+ const dynamicRoot = yield resolveRootData(
202
+ defaultedData,
203
+ config,
204
+ metadata
205
+ );
196
206
  const { zones = {} } = data;
197
207
  const zoneKeys = Object.keys(zones);
198
208
  const resolvedZones = {};
@@ -201,6 +211,7 @@ function resolveAllData(data, config, onResolveStart, onResolveEnd) {
201
211
  resolvedZones[zoneKey] = yield resolveAllComponentData(
202
212
  zones[zoneKey],
203
213
  config,
214
+ metadata,
204
215
  onResolveStart,
205
216
  onResolveEnd
206
217
  );
@@ -210,6 +221,7 @@ function resolveAllData(data, config, onResolveStart, onResolveEnd) {
210
221
  content: yield resolveAllComponentData(
211
222
  defaultedData.content,
212
223
  config,
224
+ metadata,
213
225
  onResolveStart,
214
226
  onResolveEnd
215
227
  ),
@@ -220,7 +232,9 @@ function resolveAllData(data, config, onResolveStart, onResolveEnd) {
220
232
 
221
233
  // lib/root-droppable-id.ts
222
234
  init_react_import();
223
- var rootDroppableId = "default-zone";
235
+ var rootAreaId = "root";
236
+ var rootZone = "default-zone";
237
+ var rootDroppableId = `${rootAreaId}:${rootZone}`;
224
238
 
225
239
  // lib/setup-zone.ts
226
240
  init_react_import();
@@ -246,6 +260,8 @@ export {
246
260
  __privateSet,
247
261
  __async,
248
262
  init_react_import,
263
+ rootAreaId,
264
+ rootZone,
249
265
  rootDroppableId,
250
266
  setupZone,
251
267
  getChanged,
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
- import { F as FieldProps, a as Field, D as DropZoneProps, C as Config, U as UserGenerics, b as Data, c as UiState, O as OnAction, P as Permissions, d as Plugin, e as Overrides, f as PuckAction, V as Viewports, I as IframeConfig, g as InitialHistory, h as DefaultComponentProps, i as DefaultRootFieldProps, H as History, A as AppState, E as ExtractPropsFromConfig, j as ExtractRootPropsFromConfig, k as ComponentDataMap } from './resolve-all-data-ppm982Jh.mjs';
2
- export { Q as Adaptor, K as ArrayField, s as ArrayState, a3 as AsFieldProps, B as BaseData, z as BaseField, u as ComponentConfig, x as ComponentData, y as Content, Y as CustomField, a0 as DefaultRootProps, $ as DefaultRootRenderProps, l as Direction, m as DragAxis, X as ExternalField, W as ExternalFieldWithAdaptor, q as FieldRenderFunctions, Z as Fields, r as ItemWithId, M as MappedItem, N as NumberField, L as ObjectField, p as OverrideKey, t as PuckComponent, _ as PuckContext, J as RadioField, w as RootData, R as RootDataWithProps, v as RootDataWithoutProps, S as SelectField, T as TextField, G as TextareaField, n as Viewport, a4 as WithChildren, a1 as WithId, a2 as WithPuckProps, o as overrideKeys, a5 as resolveAllData } from './resolve-all-data-ppm982Jh.mjs';
1
+ import { F as FieldProps, a as Field, D as DropZoneProps, C as Config, U as UserGenerics, b as Data, c as UiState, O as OnAction, P as Permissions, d as Plugin, e as Overrides, f as PuckAction, V as Viewports, I as IframeConfig, g as InitialHistory, M as Metadata, h as DefaultComponentProps, i as DefaultRootFieldProps, H as History, j as ComponentData, k as Fields, A as AppState, l as ComponentConfig } from './resolve-all-data-wwgDuTnC.mjs';
2
+ export { Q as Adaptor, K as ArrayField, t as ArrayState, a2 as AsFieldProps, B as BaseData, E as BaseField, y as ComponentDataMap, z as Content, Y as CustomField, $ as DefaultRootProps, _ as DefaultRootRenderProps, m as Direction, n as DragAxis, X as ExternalField, W as ExternalFieldWithAdaptor, a4 as ExtractPropsFromConfig, a5 as ExtractRootPropsFromConfig, r as FieldRenderFunctions, s as ItemWithId, x as MappedItem, N as NumberField, L as ObjectField, q as OverrideKey, u as PuckComponent, Z as PuckContext, J as RadioField, w as RootData, R as RootDataWithProps, v as RootDataWithoutProps, S as SelectField, T as TextField, G as TextareaField, o as Viewport, a3 as WithChildren, a0 as WithId, a1 as WithPuckProps, p as overrideKeys, a6 as resolveAllData } from './resolve-all-data-wwgDuTnC.mjs';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as react from 'react';
5
- import { ReactNode, SyntheticEvent, ReactElement } from 'react';
5
+ import react__default, { ReactNode, SyntheticEvent, ReactElement } from 'react';
6
6
 
7
7
  declare const ActionBar: {
8
8
  ({ label, children, }: {
@@ -93,7 +93,7 @@ declare const IconButton: ({ children, href, onClick, variant, type, disabled, t
93
93
  title: string;
94
94
  }) => react_jsx_runtime.JSX.Element;
95
95
 
96
- declare function Puck<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>({ children, config, data: initialData, ui: initialUi, onChange, onPublish, onAction, permissions, plugins, overrides, renderHeader, renderHeaderActions, headerTitle, headerPath, viewports, iframe: _iframe, dnd, initialHistory: _initialHistory, }: {
96
+ type PuckProps<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
97
97
  children?: ReactNode;
98
98
  config: UserConfig;
99
99
  data: Partial<G["UserData"] | Data>;
@@ -121,7 +121,9 @@ declare function Puck<UserConfig extends Config = Config, G extends UserGenerics
121
121
  disableAutoScroll?: boolean;
122
122
  };
123
123
  initialHistory?: InitialHistory;
124
- }): react_jsx_runtime.JSX.Element;
124
+ metadata?: Metadata;
125
+ };
126
+ declare function Puck<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>(props: PuckProps<UserConfig>): react_jsx_runtime.JSX.Element;
125
127
  declare namespace Puck {
126
128
  var Components: () => react_jsx_runtime.JSX.Element;
127
129
  var Fields: ({ wrapFields }: {
@@ -133,9 +135,15 @@ declare namespace Puck {
133
135
  }) => react_jsx_runtime.JSX.Element;
134
136
  }
135
137
 
136
- declare function Render<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>({ config, data, }: {
138
+ declare const renderContext: react__default.Context<{
139
+ config: Config;
140
+ data: Data;
141
+ metadata: Metadata;
142
+ }>;
143
+ declare function Render<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>({ config, data, metadata, }: {
137
144
  config: UserConfig;
138
145
  data: Partial<G["UserData"] | Data>;
146
+ metadata?: Metadata;
139
147
  }): react_jsx_runtime.JSX.Element;
140
148
 
141
149
  declare function migrate(data: Data): Data;
@@ -151,47 +159,139 @@ type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps,
151
159
  }>;
152
160
  declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>): Data;
153
161
 
154
- type HistoryStore<D = any> = {
162
+ type HistorySlice<D = any> = {
155
163
  index: number;
156
- hasPast: boolean;
157
- hasFuture: boolean;
164
+ hasPast: () => boolean;
165
+ hasFuture: () => boolean;
158
166
  histories: History<D>[];
159
167
  record: (data: D) => void;
160
168
  back: VoidFunction;
161
169
  forward: VoidFunction;
162
- currentHistory: History;
163
- nextHistory: History<D> | null;
164
- prevHistory: History<D> | null;
170
+ currentHistory: () => History;
171
+ nextHistory: () => History<D> | null;
172
+ prevHistory: () => History<D> | null;
165
173
  setHistories: (histories: History[]) => void;
166
174
  setHistoryIndex: (index: number) => void;
175
+ initialAppState: D;
176
+ };
177
+
178
+ type NodeMethods = {
179
+ sync: () => void;
180
+ };
181
+ type PuckNode = {
182
+ id: string;
183
+ methods: NodeMethods;
184
+ data: ComponentData;
185
+ parentId: string | null;
186
+ zone: string;
187
+ path: string[];
188
+ index: number;
189
+ element: HTMLElement | null;
190
+ };
191
+ type NodesSlice = {
192
+ nodes: Record<string, PuckNode | undefined>;
193
+ registerNode: (id: string, node: Partial<PuckNode>) => void;
194
+ unregisterNode: (id: string, node?: Partial<PuckNode>) => void;
167
195
  };
168
196
 
169
197
  type PermissionsArgs<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
170
- item?: G["UserComponentData"];
198
+ item?: G["UserComponentData"] | null;
171
199
  type?: keyof G["UserProps"];
172
200
  root?: boolean;
173
201
  };
174
- type GetPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>) => Partial<Permissions>;
202
+ type GetPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>) => Permissions;
203
+ type ResolvePermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>, force?: boolean) => void;
175
204
  type RefreshPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>, force?: boolean) => void;
205
+ type Cache = Record<string, {
206
+ lastPermissions: Partial<Permissions>;
207
+ lastData: ComponentData | null;
208
+ }>;
209
+ type PermissionsSlice = {
210
+ cache: Cache;
211
+ globalPermissions: Permissions;
212
+ resolvedPermissions: Record<string, Partial<Permissions> | undefined>;
213
+ getPermissions: GetPermissions<Config>;
214
+ resolvePermissions: ResolvePermissions<Config>;
215
+ refreshPermissions: RefreshPermissions<Config>;
216
+ };
176
217
 
177
- declare const usePuck: <UserConfig extends Config = Config>() => {
178
- appState: AppState<Data<ExtractPropsFromConfig<UserConfig>, ExtractRootPropsFromConfig<UserConfig>>>;
179
- config: UserConfig;
218
+ type ComponentOrRootData = Omit<ComponentData<any>, "type">;
219
+ type FieldsSlice = {
220
+ fields: Fields | Partial<Fields>;
221
+ loading: boolean;
222
+ lastResolvedData: Partial<ComponentOrRootData>;
223
+ };
224
+
225
+ type Status = "LOADING" | "MOUNTED" | "READY";
226
+ type ZoomConfig = {
227
+ autoZoom: number;
228
+ rootHeight: number;
229
+ zoom: number;
230
+ };
231
+ type ComponentState = Record<string, {
232
+ loadingCount: number;
233
+ }>;
234
+ type AppStore<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
235
+ state: G["UserAppState"];
180
236
  dispatch: (action: PuckAction) => void;
237
+ config: UserConfig;
238
+ componentState: ComponentState;
239
+ setComponentState: (componentState: ComponentState) => void;
240
+ setComponentLoading: (id: string) => void;
241
+ unsetComponentLoading: (id: string) => void;
242
+ resolveDataRuns: number;
243
+ resolveData: (newAppState: AppState) => void;
244
+ plugins: Plugin[];
245
+ overrides: Partial<Overrides>;
246
+ viewports: Viewports;
247
+ zoomConfig: ZoomConfig;
248
+ setZoomConfig: (zoomConfig: ZoomConfig) => void;
249
+ status: Status;
250
+ setStatus: (status: Status) => void;
251
+ iframe: IframeConfig;
252
+ selectedItem?: G["UserData"]["content"][0] | null;
253
+ setUi: (ui: Partial<UiState>, recordHistory?: boolean) => void;
254
+ getComponentConfig: (type?: string) => ComponentConfig | null | undefined;
255
+ onAction?: (action: PuckAction, newState: AppState, state: AppState) => void;
256
+ metadata: Metadata;
257
+ fields: FieldsSlice;
258
+ history: HistorySlice;
259
+ nodes: NodesSlice;
260
+ permissions: PermissionsSlice;
261
+ };
262
+
263
+ type WithGet<T> = T & {
264
+ get: () => T;
265
+ };
266
+ type UsePuckData<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
267
+ appState: AppState;
268
+ config: Config;
269
+ dispatch: AppStore["dispatch"];
181
270
  getPermissions: GetPermissions<UserConfig>;
182
271
  refreshPermissions: RefreshPermissions<UserConfig>;
272
+ selectedItem: G["UserComponentData"] | null;
183
273
  history: {
184
- back: VoidFunction;
185
- forward: VoidFunction;
186
- setHistories: (histories: History[]) => void;
187
- setHistoryIndex: (index: number) => void;
274
+ back: HistorySlice["back"];
275
+ forward: HistorySlice["forward"];
276
+ setHistories: HistorySlice["setHistories"];
277
+ setHistoryIndex: HistorySlice["setHistoryIndex"];
278
+ histories: HistorySlice["histories"];
279
+ index: HistorySlice["index"];
188
280
  hasPast: boolean;
189
281
  hasFuture: boolean;
190
- histories: History<any>[];
191
- index: number;
192
- historyStore: HistoryStore | undefined;
193
282
  };
194
- selectedItem: ComponentDataMap<ExtractPropsFromConfig<UserConfig>> | null;
195
283
  };
284
+ type UsePuckStore<UserConfig extends Config = Config> = WithGet<UsePuckData<UserConfig>>;
285
+ /**
286
+ * createUsePuck
287
+ *
288
+ * Create a typed usePuck hook, which is necessary because the user may provide a generic type but not
289
+ * a selector type, and TS does not currently support partial inference.
290
+ * Related: https://github.com/microsoft/TypeScript/issues/26242
291
+ *
292
+ * @returns a typed usePuck function
293
+ */
294
+ declare function createUsePuck<UserConfig extends Config = Config>(): <T = UsePuckData<UserConfig, UserGenerics<UserConfig>>>(selector: (state: UsePuckStore<UserConfig>) => T) => T;
295
+ declare function usePuck<UserConfig extends Config = Config>(): UsePuckStore<UserConfig>;
196
296
 
197
- export { Action, ActionBar, AppState, AutoField, Button, ComponentDataMap, Config, Data, DefaultComponentProps, DefaultRootFieldProps, Drawer, DropZone, ExtractPropsFromConfig, ExtractRootPropsFromConfig, Field, FieldLabel, FieldProps, Group, History, IconButton, IframeConfig, InitialHistory, Label, OnAction, Overrides, Permissions, Plugin, Puck, PuckAction, Render, UiState, UserGenerics, Viewports, migrate, transformProps, usePuck };
297
+ export { Action, ActionBar, AppState, AutoField, Button, ComponentConfig, ComponentData, Config, Data, DefaultComponentProps, DefaultRootFieldProps, Drawer, DropZone, Field, FieldLabel, FieldProps, Fields, Group, History, IconButton, IframeConfig, InitialHistory, Label, Metadata, OnAction, Overrides, Permissions, Plugin, Puck, PuckAction, Render, UiState, type UsePuckData, UserGenerics, Viewports, createUsePuck, migrate, renderContext, transformProps, usePuck };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { F as FieldProps, a as Field, D as DropZoneProps, C as Config, U as UserGenerics, b as Data, c as UiState, O as OnAction, P as Permissions, d as Plugin, e as Overrides, f as PuckAction, V as Viewports, I as IframeConfig, g as InitialHistory, h as DefaultComponentProps, i as DefaultRootFieldProps, H as History, A as AppState, E as ExtractPropsFromConfig, j as ExtractRootPropsFromConfig, k as ComponentDataMap } from './resolve-all-data-ppm982Jh.js';
2
- export { Q as Adaptor, K as ArrayField, s as ArrayState, a3 as AsFieldProps, B as BaseData, z as BaseField, u as ComponentConfig, x as ComponentData, y as Content, Y as CustomField, a0 as DefaultRootProps, $ as DefaultRootRenderProps, l as Direction, m as DragAxis, X as ExternalField, W as ExternalFieldWithAdaptor, q as FieldRenderFunctions, Z as Fields, r as ItemWithId, M as MappedItem, N as NumberField, L as ObjectField, p as OverrideKey, t as PuckComponent, _ as PuckContext, J as RadioField, w as RootData, R as RootDataWithProps, v as RootDataWithoutProps, S as SelectField, T as TextField, G as TextareaField, n as Viewport, a4 as WithChildren, a1 as WithId, a2 as WithPuckProps, o as overrideKeys, a5 as resolveAllData } from './resolve-all-data-ppm982Jh.js';
1
+ import { F as FieldProps, a as Field, D as DropZoneProps, C as Config, U as UserGenerics, b as Data, c as UiState, O as OnAction, P as Permissions, d as Plugin, e as Overrides, f as PuckAction, V as Viewports, I as IframeConfig, g as InitialHistory, M as Metadata, h as DefaultComponentProps, i as DefaultRootFieldProps, H as History, j as ComponentData, k as Fields, A as AppState, l as ComponentConfig } from './resolve-all-data-wwgDuTnC.js';
2
+ export { Q as Adaptor, K as ArrayField, t as ArrayState, a2 as AsFieldProps, B as BaseData, E as BaseField, y as ComponentDataMap, z as Content, Y as CustomField, $ as DefaultRootProps, _ as DefaultRootRenderProps, m as Direction, n as DragAxis, X as ExternalField, W as ExternalFieldWithAdaptor, a4 as ExtractPropsFromConfig, a5 as ExtractRootPropsFromConfig, r as FieldRenderFunctions, s as ItemWithId, x as MappedItem, N as NumberField, L as ObjectField, q as OverrideKey, u as PuckComponent, Z as PuckContext, J as RadioField, w as RootData, R as RootDataWithProps, v as RootDataWithoutProps, S as SelectField, T as TextField, G as TextareaField, o as Viewport, a3 as WithChildren, a0 as WithId, a1 as WithPuckProps, p as overrideKeys, a6 as resolveAllData } from './resolve-all-data-wwgDuTnC.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as react from 'react';
5
- import { ReactNode, SyntheticEvent, ReactElement } from 'react';
5
+ import react__default, { ReactNode, SyntheticEvent, ReactElement } from 'react';
6
6
 
7
7
  declare const ActionBar: {
8
8
  ({ label, children, }: {
@@ -93,7 +93,7 @@ declare const IconButton: ({ children, href, onClick, variant, type, disabled, t
93
93
  title: string;
94
94
  }) => react_jsx_runtime.JSX.Element;
95
95
 
96
- declare function Puck<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>({ children, config, data: initialData, ui: initialUi, onChange, onPublish, onAction, permissions, plugins, overrides, renderHeader, renderHeaderActions, headerTitle, headerPath, viewports, iframe: _iframe, dnd, initialHistory: _initialHistory, }: {
96
+ type PuckProps<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
97
97
  children?: ReactNode;
98
98
  config: UserConfig;
99
99
  data: Partial<G["UserData"] | Data>;
@@ -121,7 +121,9 @@ declare function Puck<UserConfig extends Config = Config, G extends UserGenerics
121
121
  disableAutoScroll?: boolean;
122
122
  };
123
123
  initialHistory?: InitialHistory;
124
- }): react_jsx_runtime.JSX.Element;
124
+ metadata?: Metadata;
125
+ };
126
+ declare function Puck<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>(props: PuckProps<UserConfig>): react_jsx_runtime.JSX.Element;
125
127
  declare namespace Puck {
126
128
  var Components: () => react_jsx_runtime.JSX.Element;
127
129
  var Fields: ({ wrapFields }: {
@@ -133,9 +135,15 @@ declare namespace Puck {
133
135
  }) => react_jsx_runtime.JSX.Element;
134
136
  }
135
137
 
136
- declare function Render<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>({ config, data, }: {
138
+ declare const renderContext: react__default.Context<{
139
+ config: Config;
140
+ data: Data;
141
+ metadata: Metadata;
142
+ }>;
143
+ declare function Render<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>({ config, data, metadata, }: {
137
144
  config: UserConfig;
138
145
  data: Partial<G["UserData"] | Data>;
146
+ metadata?: Metadata;
139
147
  }): react_jsx_runtime.JSX.Element;
140
148
 
141
149
  declare function migrate(data: Data): Data;
@@ -151,47 +159,139 @@ type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps,
151
159
  }>;
152
160
  declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>): Data;
153
161
 
154
- type HistoryStore<D = any> = {
162
+ type HistorySlice<D = any> = {
155
163
  index: number;
156
- hasPast: boolean;
157
- hasFuture: boolean;
164
+ hasPast: () => boolean;
165
+ hasFuture: () => boolean;
158
166
  histories: History<D>[];
159
167
  record: (data: D) => void;
160
168
  back: VoidFunction;
161
169
  forward: VoidFunction;
162
- currentHistory: History;
163
- nextHistory: History<D> | null;
164
- prevHistory: History<D> | null;
170
+ currentHistory: () => History;
171
+ nextHistory: () => History<D> | null;
172
+ prevHistory: () => History<D> | null;
165
173
  setHistories: (histories: History[]) => void;
166
174
  setHistoryIndex: (index: number) => void;
175
+ initialAppState: D;
176
+ };
177
+
178
+ type NodeMethods = {
179
+ sync: () => void;
180
+ };
181
+ type PuckNode = {
182
+ id: string;
183
+ methods: NodeMethods;
184
+ data: ComponentData;
185
+ parentId: string | null;
186
+ zone: string;
187
+ path: string[];
188
+ index: number;
189
+ element: HTMLElement | null;
190
+ };
191
+ type NodesSlice = {
192
+ nodes: Record<string, PuckNode | undefined>;
193
+ registerNode: (id: string, node: Partial<PuckNode>) => void;
194
+ unregisterNode: (id: string, node?: Partial<PuckNode>) => void;
167
195
  };
168
196
 
169
197
  type PermissionsArgs<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
170
- item?: G["UserComponentData"];
198
+ item?: G["UserComponentData"] | null;
171
199
  type?: keyof G["UserProps"];
172
200
  root?: boolean;
173
201
  };
174
- type GetPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>) => Partial<Permissions>;
202
+ type GetPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>) => Permissions;
203
+ type ResolvePermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>, force?: boolean) => void;
175
204
  type RefreshPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>, force?: boolean) => void;
205
+ type Cache = Record<string, {
206
+ lastPermissions: Partial<Permissions>;
207
+ lastData: ComponentData | null;
208
+ }>;
209
+ type PermissionsSlice = {
210
+ cache: Cache;
211
+ globalPermissions: Permissions;
212
+ resolvedPermissions: Record<string, Partial<Permissions> | undefined>;
213
+ getPermissions: GetPermissions<Config>;
214
+ resolvePermissions: ResolvePermissions<Config>;
215
+ refreshPermissions: RefreshPermissions<Config>;
216
+ };
176
217
 
177
- declare const usePuck: <UserConfig extends Config = Config>() => {
178
- appState: AppState<Data<ExtractPropsFromConfig<UserConfig>, ExtractRootPropsFromConfig<UserConfig>>>;
179
- config: UserConfig;
218
+ type ComponentOrRootData = Omit<ComponentData<any>, "type">;
219
+ type FieldsSlice = {
220
+ fields: Fields | Partial<Fields>;
221
+ loading: boolean;
222
+ lastResolvedData: Partial<ComponentOrRootData>;
223
+ };
224
+
225
+ type Status = "LOADING" | "MOUNTED" | "READY";
226
+ type ZoomConfig = {
227
+ autoZoom: number;
228
+ rootHeight: number;
229
+ zoom: number;
230
+ };
231
+ type ComponentState = Record<string, {
232
+ loadingCount: number;
233
+ }>;
234
+ type AppStore<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
235
+ state: G["UserAppState"];
180
236
  dispatch: (action: PuckAction) => void;
237
+ config: UserConfig;
238
+ componentState: ComponentState;
239
+ setComponentState: (componentState: ComponentState) => void;
240
+ setComponentLoading: (id: string) => void;
241
+ unsetComponentLoading: (id: string) => void;
242
+ resolveDataRuns: number;
243
+ resolveData: (newAppState: AppState) => void;
244
+ plugins: Plugin[];
245
+ overrides: Partial<Overrides>;
246
+ viewports: Viewports;
247
+ zoomConfig: ZoomConfig;
248
+ setZoomConfig: (zoomConfig: ZoomConfig) => void;
249
+ status: Status;
250
+ setStatus: (status: Status) => void;
251
+ iframe: IframeConfig;
252
+ selectedItem?: G["UserData"]["content"][0] | null;
253
+ setUi: (ui: Partial<UiState>, recordHistory?: boolean) => void;
254
+ getComponentConfig: (type?: string) => ComponentConfig | null | undefined;
255
+ onAction?: (action: PuckAction, newState: AppState, state: AppState) => void;
256
+ metadata: Metadata;
257
+ fields: FieldsSlice;
258
+ history: HistorySlice;
259
+ nodes: NodesSlice;
260
+ permissions: PermissionsSlice;
261
+ };
262
+
263
+ type WithGet<T> = T & {
264
+ get: () => T;
265
+ };
266
+ type UsePuckData<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
267
+ appState: AppState;
268
+ config: Config;
269
+ dispatch: AppStore["dispatch"];
181
270
  getPermissions: GetPermissions<UserConfig>;
182
271
  refreshPermissions: RefreshPermissions<UserConfig>;
272
+ selectedItem: G["UserComponentData"] | null;
183
273
  history: {
184
- back: VoidFunction;
185
- forward: VoidFunction;
186
- setHistories: (histories: History[]) => void;
187
- setHistoryIndex: (index: number) => void;
274
+ back: HistorySlice["back"];
275
+ forward: HistorySlice["forward"];
276
+ setHistories: HistorySlice["setHistories"];
277
+ setHistoryIndex: HistorySlice["setHistoryIndex"];
278
+ histories: HistorySlice["histories"];
279
+ index: HistorySlice["index"];
188
280
  hasPast: boolean;
189
281
  hasFuture: boolean;
190
- histories: History<any>[];
191
- index: number;
192
- historyStore: HistoryStore | undefined;
193
282
  };
194
- selectedItem: ComponentDataMap<ExtractPropsFromConfig<UserConfig>> | null;
195
283
  };
284
+ type UsePuckStore<UserConfig extends Config = Config> = WithGet<UsePuckData<UserConfig>>;
285
+ /**
286
+ * createUsePuck
287
+ *
288
+ * Create a typed usePuck hook, which is necessary because the user may provide a generic type but not
289
+ * a selector type, and TS does not currently support partial inference.
290
+ * Related: https://github.com/microsoft/TypeScript/issues/26242
291
+ *
292
+ * @returns a typed usePuck function
293
+ */
294
+ declare function createUsePuck<UserConfig extends Config = Config>(): <T = UsePuckData<UserConfig, UserGenerics<UserConfig>>>(selector: (state: UsePuckStore<UserConfig>) => T) => T;
295
+ declare function usePuck<UserConfig extends Config = Config>(): UsePuckStore<UserConfig>;
196
296
 
197
- export { Action, ActionBar, AppState, AutoField, Button, ComponentDataMap, Config, Data, DefaultComponentProps, DefaultRootFieldProps, Drawer, DropZone, ExtractPropsFromConfig, ExtractRootPropsFromConfig, Field, FieldLabel, FieldProps, Group, History, IconButton, IframeConfig, InitialHistory, Label, OnAction, Overrides, Permissions, Plugin, Puck, PuckAction, Render, UiState, UserGenerics, Viewports, migrate, transformProps, usePuck };
297
+ export { Action, ActionBar, AppState, AutoField, Button, ComponentConfig, ComponentData, Config, Data, DefaultComponentProps, DefaultRootFieldProps, Drawer, DropZone, Field, FieldLabel, FieldProps, Fields, Group, History, IconButton, IframeConfig, InitialHistory, Label, Metadata, OnAction, Overrides, Permissions, Plugin, Puck, PuckAction, Render, UiState, type UsePuckData, UserGenerics, Viewports, createUsePuck, migrate, renderContext, transformProps, usePuck };