@measured/puck 0.18.3-canary.9e8e47b → 0.19.0-canary.020071e

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.
@@ -91,6 +91,49 @@ var init_react_import = __esm({
91
91
  }
92
92
  });
93
93
 
94
+ // lib/transform-props.ts
95
+ init_react_import();
96
+
97
+ // lib/default-data.ts
98
+ init_react_import();
99
+ var defaultData = (data) => __spreadProps(__spreadValues({}, data), {
100
+ root: data.root || {},
101
+ content: data.content || []
102
+ });
103
+
104
+ // lib/transform-props.ts
105
+ function transformProps(data, propTransforms) {
106
+ const mapItem = (item) => {
107
+ if (propTransforms[item.type]) {
108
+ return __spreadProps(__spreadValues({}, item), {
109
+ props: propTransforms[item.type](item.props)
110
+ });
111
+ }
112
+ return item;
113
+ };
114
+ const defaultedData = defaultData(data);
115
+ const rootProps = defaultedData.root.props || defaultedData.root;
116
+ let newRoot = __spreadValues({}, defaultedData.root);
117
+ if (propTransforms["root"]) {
118
+ if (defaultedData.root.props) {
119
+ newRoot.props = propTransforms["root"](rootProps);
120
+ } else {
121
+ newRoot = propTransforms["root"](rootProps);
122
+ }
123
+ }
124
+ const afterPropTransforms = __spreadProps(__spreadValues({}, defaultedData), {
125
+ root: newRoot,
126
+ content: defaultedData.content.map(mapItem),
127
+ zones: Object.keys(data.zones || {}).reduce(
128
+ (acc, zoneKey) => __spreadProps(__spreadValues({}, acc), {
129
+ [zoneKey]: data.zones[zoneKey].map(mapItem)
130
+ }),
131
+ {}
132
+ )
133
+ });
134
+ return afterPropTransforms;
135
+ }
136
+
94
137
  // lib/resolve-all-data.ts
95
138
  init_react_import();
96
139
 
@@ -111,19 +154,20 @@ var getChanged = (newItem, oldItem) => {
111
154
 
112
155
  // lib/resolve-component-data.ts
113
156
  var cache = { lastChange: {} };
114
- var resolveAllComponentData = (content, config, onResolveStart, onResolveEnd) => __async(void 0, null, function* () {
157
+ var resolveAllComponentData = (_0, _1, ..._2) => __async(void 0, [_0, _1, ..._2], function* (content, config, metadata = {}, onResolveStart, onResolveEnd) {
115
158
  return yield Promise.all(
116
159
  content.map((item) => __async(void 0, null, function* () {
117
160
  return yield resolveComponentData(
118
161
  item,
119
162
  config,
163
+ metadata,
120
164
  onResolveStart,
121
165
  onResolveEnd
122
166
  );
123
167
  }))
124
168
  );
125
169
  });
126
- var resolveComponentData = (item, config, onResolveStart, onResolveEnd) => __async(void 0, null, function* () {
170
+ var resolveComponentData = (_0, _1, ..._2) => __async(void 0, [_0, _1, ..._2], function* (item, config, metadata = {}, onResolveStart, onResolveEnd) {
127
171
  const configForItem = config.components[item.type];
128
172
  if (configForItem.resolveData) {
129
173
  const { item: oldItem = null, resolved = {} } = cache.lastChange[item.props.id] || {};
@@ -134,7 +178,11 @@ var resolveComponentData = (item, config, onResolveStart, onResolveEnd) => __asy
134
178
  if (onResolveStart) {
135
179
  onResolveStart(item);
136
180
  }
137
- const { props: resolvedProps, readOnly = {} } = yield configForItem.resolveData(item, { changed, lastData: oldItem });
181
+ const { props: resolvedProps, readOnly = {} } = yield configForItem.resolveData(item, {
182
+ changed,
183
+ lastData: oldItem,
184
+ metadata
185
+ });
138
186
  const resolvedItem = __spreadProps(__spreadValues({}, item), {
139
187
  props: __spreadValues(__spreadValues({}, item.props), resolvedProps)
140
188
  });
@@ -156,7 +204,7 @@ var resolveComponentData = (item, config, onResolveStart, onResolveEnd) => __asy
156
204
  // lib/resolve-root-data.ts
157
205
  init_react_import();
158
206
  var cache2 = {};
159
- function resolveRootData(data, config) {
207
+ function resolveRootData(data, config, metadata) {
160
208
  return __async(this, null, function* () {
161
209
  var _a, _b, _c, _d, _e;
162
210
  if (((_a = config.root) == null ? void 0 : _a.resolveData) && data.root.props) {
@@ -167,7 +215,8 @@ function resolveRootData(data, config) {
167
215
  const rootWithProps = data.root;
168
216
  const resolvedRoot = yield (_e = config.root) == null ? void 0 : _e.resolveData(rootWithProps, {
169
217
  changed,
170
- lastData: ((_d = cache2.lastChange) == null ? void 0 : _d.original) || {}
218
+ lastData: ((_d = cache2.lastChange) == null ? void 0 : _d.original) || {},
219
+ metadata: metadata || {}
171
220
  });
172
221
  cache2.lastChange = {
173
222
  original: data.root,
@@ -181,18 +230,15 @@ function resolveRootData(data, config) {
181
230
  });
182
231
  }
183
232
 
184
- // lib/default-data.ts
185
- init_react_import();
186
- var defaultData = (data) => __spreadProps(__spreadValues({}, data), {
187
- root: data.root || {},
188
- content: data.content || []
189
- });
190
-
191
233
  // lib/resolve-all-data.ts
192
- function resolveAllData(data, config, onResolveStart, onResolveEnd) {
193
- return __async(this, null, function* () {
234
+ function resolveAllData(_0, _1) {
235
+ return __async(this, arguments, function* (data, config, metadata = {}, onResolveStart, onResolveEnd) {
194
236
  const defaultedData = defaultData(data);
195
- const dynamicRoot = yield resolveRootData(defaultedData, config);
237
+ const dynamicRoot = yield resolveRootData(
238
+ defaultedData,
239
+ config,
240
+ metadata
241
+ );
196
242
  const { zones = {} } = data;
197
243
  const zoneKeys = Object.keys(zones);
198
244
  const resolvedZones = {};
@@ -201,6 +247,7 @@ function resolveAllData(data, config, onResolveStart, onResolveEnd) {
201
247
  resolvedZones[zoneKey] = yield resolveAllComponentData(
202
248
  zones[zoneKey],
203
249
  config,
250
+ metadata,
204
251
  onResolveStart,
205
252
  onResolveEnd
206
253
  );
@@ -210,6 +257,7 @@ function resolveAllData(data, config, onResolveStart, onResolveEnd) {
210
257
  content: yield resolveAllComponentData(
211
258
  defaultedData.content,
212
259
  config,
260
+ metadata,
213
261
  onResolveStart,
214
262
  onResolveEnd
215
263
  ),
@@ -220,7 +268,9 @@ function resolveAllData(data, config, onResolveStart, onResolveEnd) {
220
268
 
221
269
  // lib/root-droppable-id.ts
222
270
  init_react_import();
223
- var rootDroppableId = "default-zone";
271
+ var rootAreaId = "root";
272
+ var rootZone = "default-zone";
273
+ var rootDroppableId = `${rootAreaId}:${rootZone}`;
224
274
 
225
275
  // lib/setup-zone.ts
226
276
  init_react_import();
@@ -246,11 +296,13 @@ export {
246
296
  __privateSet,
247
297
  __async,
248
298
  init_react_import,
299
+ rootAreaId,
300
+ rootZone,
249
301
  rootDroppableId,
250
302
  setupZone,
251
303
  getChanged,
252
304
  resolveComponentData,
253
305
  resolveRootData,
254
- defaultData,
306
+ transformProps,
255
307
  resolveAllData
256
308
  };
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 History, h as ComponentData, i as Fields, A as AppState, j as ComponentConfig } from './resolve-all-data-3XjIPfNh.mjs';
2
+ export { K as Adaptor, G as ArrayField, r as ArrayState, a2 as AsFieldProps, B as BaseData, y as BaseField, w as ComponentDataMap, x as Content, W as CustomField, $ as DefaultComponentProps, Y as DefaultRootFieldProps, _ as DefaultRootProps, Z as DefaultRootRenderProps, k as Direction, l as DragAxis, Q as ExternalField, L as ExternalFieldWithAdaptor, a4 as ExtractPropsFromConfig, a5 as ExtractRootPropsFromConfig, p as FieldRenderFunctions, q as ItemWithId, v as MappedItem, N as NumberField, J as ObjectField, n as OverrideKey, s as PuckComponent, X as PuckContext, E as RadioField, u as RootData, R as RootDataWithProps, t as RootDataWithoutProps, S as SelectField, T as TextField, z as TextareaField, m as Viewport, a3 as WithChildren, a0 as WithId, a1 as WithPuckProps, o as overrideKeys, a7 as resolveAllData, a6 as transformProps } from './resolve-all-data-3XjIPfNh.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,65 +135,152 @@ 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;
142
150
 
143
- type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = Partial<{
144
- [ComponentName in keyof Props]: (props: Props[ComponentName] & {
145
- [key: string]: any;
146
- }) => Props[ComponentName];
147
- } & {
148
- root: (props: RootProps & {
149
- [key: string]: any;
150
- }) => RootProps;
151
- }>;
152
- declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>): Data;
153
-
154
- type HistoryStore<D = any> = {
151
+ type HistorySlice<D = any> = {
155
152
  index: number;
156
- hasPast: boolean;
157
- hasFuture: boolean;
153
+ hasPast: () => boolean;
154
+ hasFuture: () => boolean;
158
155
  histories: History<D>[];
159
156
  record: (data: D) => void;
160
157
  back: VoidFunction;
161
158
  forward: VoidFunction;
162
- currentHistory: History;
163
- nextHistory: History<D> | null;
164
- prevHistory: History<D> | null;
159
+ currentHistory: () => History;
160
+ nextHistory: () => History<D> | null;
161
+ prevHistory: () => History<D> | null;
165
162
  setHistories: (histories: History[]) => void;
166
163
  setHistoryIndex: (index: number) => void;
164
+ initialAppState: D;
165
+ };
166
+
167
+ type NodeMethods = {
168
+ sync: () => void;
169
+ };
170
+ type PuckNode = {
171
+ id: string;
172
+ methods: NodeMethods;
173
+ data: ComponentData;
174
+ parentId: string | null;
175
+ zone: string;
176
+ path: string[];
177
+ index: number;
178
+ element: HTMLElement | null;
179
+ };
180
+ type NodesSlice = {
181
+ nodes: Record<string, PuckNode | undefined>;
182
+ registerNode: (id: string, node: Partial<PuckNode>) => void;
183
+ unregisterNode: (id: string, node?: Partial<PuckNode>) => void;
167
184
  };
168
185
 
169
186
  type PermissionsArgs<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
170
- item?: G["UserComponentData"];
187
+ item?: G["UserComponentData"] | null;
171
188
  type?: keyof G["UserProps"];
172
189
  root?: boolean;
173
190
  };
174
- type GetPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>) => Partial<Permissions>;
191
+ type GetPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>) => Permissions;
192
+ type ResolvePermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>, force?: boolean) => void;
175
193
  type RefreshPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>, force?: boolean) => void;
194
+ type Cache = Record<string, {
195
+ lastPermissions: Partial<Permissions>;
196
+ lastData: ComponentData | null;
197
+ }>;
198
+ type PermissionsSlice = {
199
+ cache: Cache;
200
+ globalPermissions: Permissions;
201
+ resolvedPermissions: Record<string, Partial<Permissions> | undefined>;
202
+ getPermissions: GetPermissions<Config>;
203
+ resolvePermissions: ResolvePermissions<Config>;
204
+ refreshPermissions: RefreshPermissions<Config>;
205
+ };
176
206
 
177
- declare const usePuck: <UserConfig extends Config = Config>() => {
178
- appState: AppState<Data<ExtractPropsFromConfig<UserConfig>, ExtractRootPropsFromConfig<UserConfig>>>;
179
- config: UserConfig;
207
+ type ComponentOrRootData = Omit<ComponentData<any>, "type">;
208
+ type FieldsSlice = {
209
+ fields: Fields | Partial<Fields>;
210
+ loading: boolean;
211
+ lastResolvedData: Partial<ComponentOrRootData>;
212
+ };
213
+
214
+ type Status = "LOADING" | "MOUNTED" | "READY";
215
+ type ZoomConfig = {
216
+ autoZoom: number;
217
+ rootHeight: number;
218
+ zoom: number;
219
+ };
220
+ type ComponentState = Record<string, {
221
+ loadingCount: number;
222
+ }>;
223
+ type AppStore<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
224
+ state: G["UserAppState"];
180
225
  dispatch: (action: PuckAction) => void;
226
+ config: UserConfig;
227
+ componentState: ComponentState;
228
+ setComponentState: (componentState: ComponentState) => void;
229
+ setComponentLoading: (id: string) => void;
230
+ unsetComponentLoading: (id: string) => void;
231
+ resolveDataRuns: number;
232
+ resolveData: (newAppState: AppState) => void;
233
+ plugins: Plugin[];
234
+ overrides: Partial<Overrides>;
235
+ viewports: Viewports;
236
+ zoomConfig: ZoomConfig;
237
+ setZoomConfig: (zoomConfig: ZoomConfig) => void;
238
+ status: Status;
239
+ setStatus: (status: Status) => void;
240
+ iframe: IframeConfig;
241
+ selectedItem?: G["UserData"]["content"][0] | null;
242
+ setUi: (ui: Partial<UiState>, recordHistory?: boolean) => void;
243
+ getComponentConfig: (type?: string) => ComponentConfig | null | undefined;
244
+ onAction?: (action: PuckAction, newState: AppState, state: AppState) => void;
245
+ metadata: Metadata;
246
+ fields: FieldsSlice;
247
+ history: HistorySlice;
248
+ nodes: NodesSlice;
249
+ permissions: PermissionsSlice;
250
+ };
251
+
252
+ type WithGet<T> = T & {
253
+ get: () => T;
254
+ };
255
+ type UsePuckData<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
256
+ appState: AppState;
257
+ config: Config;
258
+ dispatch: AppStore["dispatch"];
181
259
  getPermissions: GetPermissions<UserConfig>;
182
260
  refreshPermissions: RefreshPermissions<UserConfig>;
261
+ selectedItem: G["UserComponentData"] | null;
183
262
  history: {
184
- back: VoidFunction;
185
- forward: VoidFunction;
186
- setHistories: (histories: History[]) => void;
187
- setHistoryIndex: (index: number) => void;
263
+ back: HistorySlice["back"];
264
+ forward: HistorySlice["forward"];
265
+ setHistories: HistorySlice["setHistories"];
266
+ setHistoryIndex: HistorySlice["setHistoryIndex"];
267
+ histories: HistorySlice["histories"];
268
+ index: HistorySlice["index"];
188
269
  hasPast: boolean;
189
270
  hasFuture: boolean;
190
- histories: History<any>[];
191
- index: number;
192
- historyStore: HistoryStore | undefined;
193
271
  };
194
- selectedItem: ComponentDataMap<ExtractPropsFromConfig<UserConfig>> | null;
195
272
  };
273
+ type UsePuckStore<UserConfig extends Config = Config> = WithGet<UsePuckData<UserConfig>>;
274
+ /**
275
+ * createUsePuck
276
+ *
277
+ * Create a typed usePuck hook, which is necessary because the user may provide a generic type but not
278
+ * a selector type, and TS does not currently support partial inference.
279
+ * Related: https://github.com/microsoft/TypeScript/issues/26242
280
+ *
281
+ * @returns a typed usePuck function
282
+ */
283
+ declare function createUsePuck<UserConfig extends Config = Config>(): <T = UsePuckData<UserConfig, UserGenerics<UserConfig>>>(selector: (state: UsePuckStore<UserConfig>) => T) => T;
284
+ declare function usePuck<UserConfig extends Config = Config>(): UsePuckStore<UserConfig>;
196
285
 
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 };
286
+ export { Action, ActionBar, AppState, AutoField, Button, ComponentConfig, ComponentData, Config, Data, 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, 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 History, h as ComponentData, i as Fields, A as AppState, j as ComponentConfig } from './resolve-all-data-3XjIPfNh.js';
2
+ export { K as Adaptor, G as ArrayField, r as ArrayState, a2 as AsFieldProps, B as BaseData, y as BaseField, w as ComponentDataMap, x as Content, W as CustomField, $ as DefaultComponentProps, Y as DefaultRootFieldProps, _ as DefaultRootProps, Z as DefaultRootRenderProps, k as Direction, l as DragAxis, Q as ExternalField, L as ExternalFieldWithAdaptor, a4 as ExtractPropsFromConfig, a5 as ExtractRootPropsFromConfig, p as FieldRenderFunctions, q as ItemWithId, v as MappedItem, N as NumberField, J as ObjectField, n as OverrideKey, s as PuckComponent, X as PuckContext, E as RadioField, u as RootData, R as RootDataWithProps, t as RootDataWithoutProps, S as SelectField, T as TextField, z as TextareaField, m as Viewport, a3 as WithChildren, a0 as WithId, a1 as WithPuckProps, o as overrideKeys, a7 as resolveAllData, a6 as transformProps } from './resolve-all-data-3XjIPfNh.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,65 +135,152 @@ 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;
142
150
 
143
- type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps> = Partial<{
144
- [ComponentName in keyof Props]: (props: Props[ComponentName] & {
145
- [key: string]: any;
146
- }) => Props[ComponentName];
147
- } & {
148
- root: (props: RootProps & {
149
- [key: string]: any;
150
- }) => RootProps;
151
- }>;
152
- declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultRootFieldProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>): Data;
153
-
154
- type HistoryStore<D = any> = {
151
+ type HistorySlice<D = any> = {
155
152
  index: number;
156
- hasPast: boolean;
157
- hasFuture: boolean;
153
+ hasPast: () => boolean;
154
+ hasFuture: () => boolean;
158
155
  histories: History<D>[];
159
156
  record: (data: D) => void;
160
157
  back: VoidFunction;
161
158
  forward: VoidFunction;
162
- currentHistory: History;
163
- nextHistory: History<D> | null;
164
- prevHistory: History<D> | null;
159
+ currentHistory: () => History;
160
+ nextHistory: () => History<D> | null;
161
+ prevHistory: () => History<D> | null;
165
162
  setHistories: (histories: History[]) => void;
166
163
  setHistoryIndex: (index: number) => void;
164
+ initialAppState: D;
165
+ };
166
+
167
+ type NodeMethods = {
168
+ sync: () => void;
169
+ };
170
+ type PuckNode = {
171
+ id: string;
172
+ methods: NodeMethods;
173
+ data: ComponentData;
174
+ parentId: string | null;
175
+ zone: string;
176
+ path: string[];
177
+ index: number;
178
+ element: HTMLElement | null;
179
+ };
180
+ type NodesSlice = {
181
+ nodes: Record<string, PuckNode | undefined>;
182
+ registerNode: (id: string, node: Partial<PuckNode>) => void;
183
+ unregisterNode: (id: string, node?: Partial<PuckNode>) => void;
167
184
  };
168
185
 
169
186
  type PermissionsArgs<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
170
- item?: G["UserComponentData"];
187
+ item?: G["UserComponentData"] | null;
171
188
  type?: keyof G["UserProps"];
172
189
  root?: boolean;
173
190
  };
174
- type GetPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>) => Partial<Permissions>;
191
+ type GetPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>) => Permissions;
192
+ type ResolvePermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>, force?: boolean) => void;
175
193
  type RefreshPermissions<UserConfig extends Config = Config> = (params?: PermissionsArgs<UserConfig>, force?: boolean) => void;
194
+ type Cache = Record<string, {
195
+ lastPermissions: Partial<Permissions>;
196
+ lastData: ComponentData | null;
197
+ }>;
198
+ type PermissionsSlice = {
199
+ cache: Cache;
200
+ globalPermissions: Permissions;
201
+ resolvedPermissions: Record<string, Partial<Permissions> | undefined>;
202
+ getPermissions: GetPermissions<Config>;
203
+ resolvePermissions: ResolvePermissions<Config>;
204
+ refreshPermissions: RefreshPermissions<Config>;
205
+ };
176
206
 
177
- declare const usePuck: <UserConfig extends Config = Config>() => {
178
- appState: AppState<Data<ExtractPropsFromConfig<UserConfig>, ExtractRootPropsFromConfig<UserConfig>>>;
179
- config: UserConfig;
207
+ type ComponentOrRootData = Omit<ComponentData<any>, "type">;
208
+ type FieldsSlice = {
209
+ fields: Fields | Partial<Fields>;
210
+ loading: boolean;
211
+ lastResolvedData: Partial<ComponentOrRootData>;
212
+ };
213
+
214
+ type Status = "LOADING" | "MOUNTED" | "READY";
215
+ type ZoomConfig = {
216
+ autoZoom: number;
217
+ rootHeight: number;
218
+ zoom: number;
219
+ };
220
+ type ComponentState = Record<string, {
221
+ loadingCount: number;
222
+ }>;
223
+ type AppStore<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
224
+ state: G["UserAppState"];
180
225
  dispatch: (action: PuckAction) => void;
226
+ config: UserConfig;
227
+ componentState: ComponentState;
228
+ setComponentState: (componentState: ComponentState) => void;
229
+ setComponentLoading: (id: string) => void;
230
+ unsetComponentLoading: (id: string) => void;
231
+ resolveDataRuns: number;
232
+ resolveData: (newAppState: AppState) => void;
233
+ plugins: Plugin[];
234
+ overrides: Partial<Overrides>;
235
+ viewports: Viewports;
236
+ zoomConfig: ZoomConfig;
237
+ setZoomConfig: (zoomConfig: ZoomConfig) => void;
238
+ status: Status;
239
+ setStatus: (status: Status) => void;
240
+ iframe: IframeConfig;
241
+ selectedItem?: G["UserData"]["content"][0] | null;
242
+ setUi: (ui: Partial<UiState>, recordHistory?: boolean) => void;
243
+ getComponentConfig: (type?: string) => ComponentConfig | null | undefined;
244
+ onAction?: (action: PuckAction, newState: AppState, state: AppState) => void;
245
+ metadata: Metadata;
246
+ fields: FieldsSlice;
247
+ history: HistorySlice;
248
+ nodes: NodesSlice;
249
+ permissions: PermissionsSlice;
250
+ };
251
+
252
+ type WithGet<T> = T & {
253
+ get: () => T;
254
+ };
255
+ type UsePuckData<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>> = {
256
+ appState: AppState;
257
+ config: Config;
258
+ dispatch: AppStore["dispatch"];
181
259
  getPermissions: GetPermissions<UserConfig>;
182
260
  refreshPermissions: RefreshPermissions<UserConfig>;
261
+ selectedItem: G["UserComponentData"] | null;
183
262
  history: {
184
- back: VoidFunction;
185
- forward: VoidFunction;
186
- setHistories: (histories: History[]) => void;
187
- setHistoryIndex: (index: number) => void;
263
+ back: HistorySlice["back"];
264
+ forward: HistorySlice["forward"];
265
+ setHistories: HistorySlice["setHistories"];
266
+ setHistoryIndex: HistorySlice["setHistoryIndex"];
267
+ histories: HistorySlice["histories"];
268
+ index: HistorySlice["index"];
188
269
  hasPast: boolean;
189
270
  hasFuture: boolean;
190
- histories: History<any>[];
191
- index: number;
192
- historyStore: HistoryStore | undefined;
193
271
  };
194
- selectedItem: ComponentDataMap<ExtractPropsFromConfig<UserConfig>> | null;
195
272
  };
273
+ type UsePuckStore<UserConfig extends Config = Config> = WithGet<UsePuckData<UserConfig>>;
274
+ /**
275
+ * createUsePuck
276
+ *
277
+ * Create a typed usePuck hook, which is necessary because the user may provide a generic type but not
278
+ * a selector type, and TS does not currently support partial inference.
279
+ * Related: https://github.com/microsoft/TypeScript/issues/26242
280
+ *
281
+ * @returns a typed usePuck function
282
+ */
283
+ declare function createUsePuck<UserConfig extends Config = Config>(): <T = UsePuckData<UserConfig, UserGenerics<UserConfig>>>(selector: (state: UsePuckStore<UserConfig>) => T) => T;
284
+ declare function usePuck<UserConfig extends Config = Config>(): UsePuckStore<UserConfig>;
196
285
 
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 };
286
+ export { Action, ActionBar, AppState, AutoField, Button, ComponentConfig, ComponentData, Config, Data, 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, usePuck };