@measured/puck 0.16.0-canary.345374c → 0.16.0-canary.39d63e0

Sign up to get free protection for your applications and to get access to all the features.
@@ -68,7 +68,7 @@ type ObjectField<Props extends {
68
68
  [key: string]: any;
69
69
  }> = BaseField & {
70
70
  type: "object";
71
- objectFields: {
71
+ objectFields: Props extends any[] ? never : {
72
72
  [SubPropName in keyof Props]: Field<Props[SubPropName]>;
73
73
  };
74
74
  };
@@ -166,6 +166,7 @@ type ComponentConfig<ComponentProps extends DefaultComponentProps = DefaultCompo
166
166
  label?: string;
167
167
  defaultProps?: DefaultProps;
168
168
  fields?: Fields<ComponentProps>;
169
+ permissions?: Partial<Permissions>;
169
170
  resolveFields?: (data: DataShape, params: {
170
171
  changed: Partial<Record<keyof ComponentProps, boolean>>;
171
172
  fields: Fields<ComponentProps>;
@@ -258,5 +259,10 @@ type AppState = {
258
259
  data: Data;
259
260
  ui: UiState;
260
261
  };
262
+ type Permissions = {
263
+ drag: boolean;
264
+ duplicate: boolean;
265
+ delete: boolean;
266
+ } & Record<string, boolean>;
261
267
 
262
- export { AppState as A, BaseData as B, Config as C, Data as D, ExternalFieldWithAdaptor as E, Field as F, ItemSelector as I, MappedItem as M, NumberField as N, ObjectField as O, PuckComponent as P, RootDataWithProps as R, SelectField as S, TextField as T, UiState as U, Viewports as V, FieldProps as a, DefaultRootProps as b, DropZoneProps as c, DefaultComponentProps as d, RootData as e, ComponentData as f, Content as g, PuckContext as h, ComponentConfig as i, RootDataWithoutProps as j, ItemWithId as k, ArrayState as l, BaseField as m, TextareaField as n, RadioField as o, ArrayField as p, Adaptor as q, ExternalField as r, CustomField as s, Fields as t };
268
+ export type { AppState as A, BaseData as B, Config as C, Data as D, ExternalFieldWithAdaptor as E, Field as F, ItemSelector as I, MappedItem as M, NumberField as N, ObjectField as O, Permissions as P, RootData as R, SelectField as S, TextField as T, UiState as U, Viewports as V, FieldProps as a, DropZoneProps as b, DefaultComponentProps as c, DefaultRootProps as d, RootDataWithProps as e, ComponentData as f, Content as g, PuckComponent as h, PuckContext as i, ComponentConfig as j, RootDataWithoutProps as k, ItemWithId as l, ArrayState as m, BaseField as n, TextareaField as o, RadioField as p, ArrayField as q, Adaptor as r, ExternalField as s, CustomField as t, Fields as u };
package/dist/index.css CHANGED
@@ -136,6 +136,61 @@
136
136
 
137
137
  /* styles.css */
138
138
 
139
+ /* css-module:/home/runner/work/puck/puck/packages/core/components/ActionBar/styles.module.css/#css-module-data */
140
+ ._ActionBarComponent_16pc9_1 {
141
+ display: flex;
142
+ width: auto;
143
+ padding: 4px;
144
+ border-top-left-radius: 8px;
145
+ border-top-right-radius: 8px;
146
+ border-radius: 8px;
147
+ background: var(--puck-color-grey-01);
148
+ color: var(--puck-color-white);
149
+ font-family: var(--puck-font-family);
150
+ gap: 4px;
151
+ }
152
+ ._ActionBarComponent-actionsLabel_16pc9_14 {
153
+ color: var(--puck-color-grey-08);
154
+ display: flex;
155
+ font-size: var(--puck-font-size-xxxs);
156
+ font-weight: 500;
157
+ justify-content: center;
158
+ align-items: center;
159
+ padding-left: 8px;
160
+ padding-right: 16px;
161
+ margin-right: 8px;
162
+ border-right: 0.5px solid var(--puck-color-grey-05);
163
+ text-overflow: ellipsis;
164
+ white-space: nowrap;
165
+ }
166
+ ._ActionBarComponent-action_16pc9_14 {
167
+ background: transparent;
168
+ border: none;
169
+ color: var(--puck-color-grey-08);
170
+ cursor: pointer;
171
+ padding: 6px 8px;
172
+ border-radius: 4px;
173
+ overflow: hidden;
174
+ display: flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ transition: color 50ms ease-in;
178
+ }
179
+ ._ActionBarComponent-action_16pc9_14:focus-visible {
180
+ outline: 2px solid var(--puck-color-azure-05);
181
+ outline-offset: -2px;
182
+ }
183
+ @media (hover: hover) and (pointer: fine) {
184
+ ._ActionBarComponent-action_16pc9_14:hover {
185
+ color: var(--puck-color-azure-06);
186
+ transition: none;
187
+ }
188
+ }
189
+ ._ActionBarComponent-action_16pc9_14:active {
190
+ color: var(--puck-color-azure-07);
191
+ transition: none;
192
+ }
193
+
139
194
  /* css-module:/home/runner/work/puck/puck/packages/core/components/AutoField/styles.module.css/#css-module-data */
140
195
  ._Input_3pq3z_1 {
141
196
  color: var(--puck-color-grey-04);
@@ -1032,25 +1087,25 @@ textarea._Input-input_3pq3z_47 {
1032
1087
  }
1033
1088
 
1034
1089
  /* css-module:/home/runner/work/puck/puck/packages/core/components/DraggableComponent/styles.module.css/#css-module-data */
1035
- ._DraggableComponent_59z7f_1 {
1090
+ ._DraggableComponent_1bhad_1 {
1036
1091
  pointer-events: auto;
1037
1092
  --overlay-background: color-mix( in srgb, var(--puck-color-azure-08) 30%, transparent );
1038
1093
  }
1039
- ._DraggableComponent--isDragging_59z7f_11 {
1094
+ ._DraggableComponent--isDragging_1bhad_11 {
1040
1095
  background: color-mix(in srgb, var(--puck-color-azure-08) 10%, transparent);
1041
1096
  overflow: hidden;
1042
1097
  }
1043
- ._DraggableComponent-contents_59z7f_16 {
1098
+ ._DraggableComponent-contents_1bhad_16 {
1044
1099
  position: relative;
1045
1100
  pointer-events: none;
1046
1101
  z-index: 0;
1047
1102
  }
1048
- ._DraggableComponent-contents_59z7f_16::before,
1049
- ._DraggableComponent-contents_59z7f_16::after {
1103
+ ._DraggableComponent-contents_1bhad_16::before,
1104
+ ._DraggableComponent-contents_1bhad_16::after {
1050
1105
  content: " ";
1051
1106
  display: table;
1052
1107
  }
1053
- ._DraggableComponent-overlay_59z7f_29 {
1108
+ ._DraggableComponent-overlay_1bhad_29 {
1054
1109
  cursor: pointer;
1055
1110
  height: 100%;
1056
1111
  width: 100%;
@@ -1061,13 +1116,13 @@ textarea._Input-input_3pq3z_47 {
1061
1116
  box-sizing: border-box;
1062
1117
  z-index: 1;
1063
1118
  }
1064
- ._DraggableComponent_59z7f_1:focus-visible > ._DraggableComponent-overlay_59z7f_29 {
1119
+ ._DraggableComponent_1bhad_1:focus-visible > ._DraggableComponent-overlay_1bhad_29 {
1065
1120
  outline: 1px solid var(--puck-color-azure-05);
1066
1121
  }
1067
- ._DraggableComponent--isDragging_59z7f_11 > ._DraggableComponent-overlay_59z7f_29 {
1122
+ ._DraggableComponent--isDragging_1bhad_11 > ._DraggableComponent-overlay_1bhad_29 {
1068
1123
  outline: 2px var(--puck-color-azure-09) solid !important;
1069
1124
  }
1070
- ._DraggableComponent-loadingOverlay_59z7f_49 {
1125
+ ._DraggableComponent-loadingOverlay_1bhad_49 {
1071
1126
  background: var(--puck-color-white);
1072
1127
  color: var(--puck-color-grey-03);
1073
1128
  border-radius: 4px;
@@ -1082,91 +1137,42 @@ textarea._Input-input_3pq3z_47 {
1082
1137
  opacity: 0.8;
1083
1138
  z-index: 1;
1084
1139
  }
1085
- ._DraggableComponent_59z7f_1:hover:not(._DraggableComponent--isLocked_59z7f_65) > ._DraggableComponent-overlay_59z7f_29 {
1140
+ ._DraggableComponent_1bhad_1:hover:not(._DraggableComponent--isLocked_1bhad_65) > ._DraggableComponent-overlay_1bhad_29 {
1086
1141
  background: var(--overlay-background);
1087
1142
  pointer-events: none;
1088
1143
  }
1089
- ._DraggableComponent--forceHover_59z7f_71 > ._DraggableComponent-overlay_59z7f_29 {
1144
+ ._DraggableComponent--forceHover_1bhad_71 > ._DraggableComponent-overlay_1bhad_29 {
1090
1145
  background: var(--overlay-background);
1091
1146
  pointer-events: none;
1092
1147
  }
1093
- ._DraggableComponent_59z7f_1:not(._DraggableComponent--isSelected_59z7f_76):hover > ._DraggableComponent-overlay_59z7f_29 {
1148
+ ._DraggableComponent_1bhad_1:not(._DraggableComponent--isSelected_1bhad_76):hover > ._DraggableComponent-overlay_1bhad_29 {
1094
1149
  outline: 2px var(--puck-color-azure-09) solid !important;
1095
1150
  }
1096
- ._DraggableComponent--indicativeHover_59z7f_81 > ._DraggableComponent-overlay_59z7f_29 {
1151
+ ._DraggableComponent--indicativeHover_1bhad_81 > ._DraggableComponent-overlay_1bhad_29 {
1097
1152
  pointer-events: none;
1098
1153
  }
1099
- ._DraggableComponent_59z7f_1:not(._DraggableComponent--isSelected_59z7f_76):has(._DraggableComponent_59z7f_1:hover > ._DraggableComponent-overlay_59z7f_29) > ._DraggableComponent-overlay_59z7f_29 {
1154
+ ._DraggableComponent_1bhad_1:not(._DraggableComponent--isSelected_1bhad_76):has(._DraggableComponent_1bhad_1:hover > ._DraggableComponent-overlay_1bhad_29) > ._DraggableComponent-overlay_1bhad_29 {
1100
1155
  display: none;
1101
1156
  }
1102
- ._DraggableComponent--isSelected_59z7f_76 > ._DraggableComponent-overlay_59z7f_29 {
1157
+ ._DraggableComponent--isSelected_1bhad_76 > ._DraggableComponent-overlay_1bhad_29 {
1103
1158
  outline: 2px var(--puck-color-azure-07) solid !important;
1104
1159
  }
1105
- ._DraggableComponent--isSelected_59z7f_76 > ._DraggableComponent-actionsOverlay_59z7f_97 {
1160
+ ._DraggableComponent--isSelected_1bhad_76 > ._DraggableComponent-actionsOverlay_1bhad_97 {
1106
1161
  display: block;
1107
1162
  position: sticky;
1108
1163
  z-index: 2;
1109
1164
  }
1110
- ._DraggableComponent-actions_59z7f_97 {
1165
+ ._DraggableComponent-actions_1bhad_97 {
1111
1166
  position: absolute;
1112
1167
  width: auto;
1113
- padding: 4px;
1114
- border-top-left-radius: 8px;
1115
- border-top-right-radius: 8px;
1116
- border-radius: 8px;
1117
- background: var(--puck-color-grey-01);
1118
- color: var(--puck-color-white);
1119
1168
  cursor: grab;
1120
1169
  display: none;
1121
- font-family: var(--puck-font-family);
1122
- gap: 4px;
1123
1170
  pointer-events: auto;
1124
1171
  box-sizing: border-box;
1125
1172
  transform-origin: right top;
1126
1173
  }
1127
- ._DraggableComponent--isSelected_59z7f_76 > ._DraggableComponent-actionsOverlay_59z7f_97 > ._DraggableComponent-actions_59z7f_97 {
1128
- display: flex;
1129
- }
1130
- ._DraggableComponent-actionsLabel_59z7f_127 {
1131
- color: var(--puck-color-grey-08);
1132
- display: flex;
1133
- font-size: var(--puck-font-size-xxxs);
1134
- font-weight: 500;
1135
- justify-content: center;
1136
- align-items: center;
1137
- padding-left: 8px;
1138
- padding-right: 16px;
1139
- margin-right: 8px;
1140
- border-right: 0.5px solid var(--puck-color-grey-05);
1141
- text-overflow: ellipsis;
1142
- white-space: nowrap;
1143
- }
1144
- ._DraggableComponent-action_59z7f_97 {
1145
- background: transparent;
1146
- border: none;
1147
- color: var(--puck-color-grey-08);
1148
- cursor: pointer;
1149
- padding: 6px 8px;
1150
- border-radius: 4px;
1151
- overflow: hidden;
1174
+ ._DraggableComponent--isSelected_1bhad_76 > ._DraggableComponent-actionsOverlay_1bhad_97 > ._DraggableComponent-actions_1bhad_97 {
1152
1175
  display: flex;
1153
- align-items: center;
1154
- justify-content: center;
1155
- transition: color 50ms ease-in;
1156
- }
1157
- ._DraggableComponent-action_59z7f_97:focus-visible {
1158
- outline: 2px solid var(--puck-color-azure-05);
1159
- outline-offset: -2px;
1160
- }
1161
- @media (hover: hover) and (pointer: fine) {
1162
- ._DraggableComponent-action_59z7f_97:hover {
1163
- color: var(--puck-color-azure-06);
1164
- transition: none;
1165
- }
1166
- }
1167
- ._DraggableComponent-action_59z7f_97:active {
1168
- color: var(--puck-color-azure-07);
1169
- transition: none;
1170
1176
  }
1171
1177
 
1172
1178
  /* css-module:/home/runner/work/puck/puck/packages/core/components/DropZone/styles.module.css/#css-module-data */
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { U as UiState, D as Data, A as AppState, F as Field, a as FieldProps, C as Config, b as DefaultRootProps, I as ItemSelector, c as DropZoneProps, V as Viewports, d as DefaultComponentProps, M as MappedItem, R as RootDataWithProps, e as RootData, f as ComponentData } from './Config-041c35a2.js';
2
- export { q as Adaptor, p as ArrayField, l as ArrayState, B as BaseData, m as BaseField, i as ComponentConfig, g as Content, s as CustomField, r as ExternalField, E as ExternalFieldWithAdaptor, t as Fields, k as ItemWithId, N as NumberField, O as ObjectField, P as PuckComponent, h as PuckContext, o as RadioField, j as RootDataWithoutProps, S as SelectField, T as TextField, n as TextareaField } from './Config-041c35a2.js';
3
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import { U as UiState, D as Data, A as AppState, I as ItemSelector, F as Field, a as FieldProps, C as Config, b as DropZoneProps, P as Permissions, V as Viewports, c as DefaultComponentProps, d as DefaultRootProps, M as MappedItem, R as RootData, e as RootDataWithProps, f as ComponentData } from './Config-B7UadvMA.js';
2
+ export { r as Adaptor, q as ArrayField, m as ArrayState, B as BaseData, n as BaseField, j as ComponentConfig, g as Content, t as CustomField, s as ExternalField, E as ExternalFieldWithAdaptor, u as Fields, l as ItemWithId, N as NumberField, O as ObjectField, h as PuckComponent, i as PuckContext, p as RadioField, k as RootDataWithoutProps, S as SelectField, T as TextField, o as TextareaField } from './Config-B7UadvMA.js';
4
3
  import * as react from 'react';
5
- import { ReactNode, ReactElement, CSSProperties, SyntheticEvent } from 'react';
4
+ import { ReactNode, ReactElement, SyntheticEvent, CSSProperties } from 'react';
5
+ import * as react_jsx_runtime from 'react/jsx-runtime';
6
6
  import { DragStart, DragUpdate } from '@measured/dnd';
7
7
 
8
8
  type InsertAction = {
@@ -10,6 +10,7 @@ type InsertAction = {
10
10
  componentType: string;
11
11
  destinationIndex: number;
12
12
  destinationZone: string;
13
+ id?: string;
13
14
  };
14
15
  type DuplicateAction = {
15
16
  type: "duplicate";
@@ -64,13 +65,93 @@ type PuckAction = {
64
65
  recordHistory?: boolean;
65
66
  } & (ReorderAction | InsertAction | MoveAction | ReplaceAction | RemoveAction | DuplicateAction | SetAction | SetDataAction | SetUiAction | RegisterZoneAction | UnregisterZoneAction);
66
67
 
68
+ type RenderFunc<Props extends {
69
+ [key: string]: any;
70
+ } = {
71
+ children: ReactNode;
72
+ }> = (props: Props) => ReactElement;
73
+ declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "components", "componentItem", "outline", "puck", "preview"];
74
+ type OverrideKey = (typeof overrideKeys)[number];
75
+ type OverridesGeneric<Shape extends {
76
+ [key in OverrideKey]: any;
77
+ }> = Shape;
78
+ type Overrides = OverridesGeneric<{
79
+ fieldTypes: Partial<FieldRenderFunctions>;
80
+ header: RenderFunc<{
81
+ actions: ReactNode;
82
+ children: ReactNode;
83
+ }>;
84
+ actionBar: RenderFunc<{
85
+ label?: string;
86
+ children: ReactNode;
87
+ }>;
88
+ headerActions: RenderFunc<{
89
+ children: ReactNode;
90
+ }>;
91
+ preview: RenderFunc;
92
+ fields: RenderFunc<{
93
+ children: ReactNode;
94
+ isLoading: boolean;
95
+ itemSelector?: ItemSelector | null;
96
+ }>;
97
+ fieldLabel: RenderFunc<{
98
+ children?: ReactNode;
99
+ icon?: ReactNode;
100
+ label: string;
101
+ el?: "label" | "div";
102
+ readOnly?: boolean;
103
+ className?: string;
104
+ }>;
105
+ components: RenderFunc;
106
+ componentItem: RenderFunc<{
107
+ children: ReactNode;
108
+ name: string;
109
+ }>;
110
+ outline: RenderFunc;
111
+ puck: RenderFunc;
112
+ }>;
113
+ type FieldRenderFunctions = Omit<{
114
+ [Type in Field["type"]]: React.FunctionComponent<FieldProps<Extract<Field, {
115
+ type: Type;
116
+ }>> & {
117
+ children: ReactNode;
118
+ name: string;
119
+ }>;
120
+ }, "custom"> & {
121
+ [key: string]: React.FunctionComponent<FieldProps<any> & {
122
+ children: ReactNode;
123
+ name: string;
124
+ }>;
125
+ };
126
+
127
+ type Plugin = {
128
+ overrides: Partial<Overrides>;
129
+ };
130
+
131
+ declare const ActionBar: {
132
+ ({ label, children, }: {
133
+ label?: string;
134
+ children?: ReactNode;
135
+ }): react_jsx_runtime.JSX.Element;
136
+ Action: ({ children, label, onClick, }: {
137
+ children: ReactNode;
138
+ label?: string;
139
+ onClick: (e: SyntheticEvent) => void;
140
+ }) => react_jsx_runtime.JSX.Element;
141
+ };
142
+ declare const Action: ({ children, label, onClick, }: {
143
+ children: ReactNode;
144
+ label?: string;
145
+ onClick: (e: SyntheticEvent) => void;
146
+ }) => react_jsx_runtime.JSX.Element;
147
+
67
148
  declare const FieldLabel: ({ children, icon, label, el, readOnly, className, }: {
68
149
  children?: ReactNode;
69
150
  icon?: ReactNode;
70
151
  label: string;
71
- el?: "label" | "div" | undefined;
72
- readOnly?: boolean | undefined;
73
- className?: string | undefined;
152
+ el?: "label" | "div";
153
+ readOnly?: boolean;
154
+ className?: string;
74
155
  }) => react_jsx_runtime.JSX.Element;
75
156
  type FieldLabelPropsInternal = {
76
157
  children?: ReactNode;
@@ -98,37 +179,58 @@ declare function AutoField<ValueType = any, FieldType extends Field<ValueType> =
98
179
 
99
180
  declare const Button: ({ children, href, onClick, variant, type, disabled, tabIndex, newTab, fullWidth, icon, size, loading: loadingProp, }: {
100
181
  children: ReactNode;
101
- href?: string | undefined;
102
- onClick?: ((e: any) => void | Promise<void>) | undefined;
103
- variant?: "primary" | "secondary" | undefined;
104
- type?: "button" | "submit" | "reset" | undefined;
105
- disabled?: boolean | undefined;
106
- tabIndex?: number | undefined;
107
- newTab?: boolean | undefined;
108
- fullWidth?: boolean | undefined;
182
+ href?: string;
183
+ onClick?: (e: any) => void | Promise<void>;
184
+ variant?: "primary" | "secondary";
185
+ type?: "button" | "submit" | "reset";
186
+ disabled?: boolean;
187
+ tabIndex?: number;
188
+ newTab?: boolean;
189
+ fullWidth?: boolean;
109
190
  icon?: ReactNode;
110
- size?: "medium" | "large" | undefined;
111
- loading?: boolean | undefined;
191
+ size?: "medium" | "large";
192
+ loading?: boolean;
112
193
  }) => react_jsx_runtime.JSX.Element;
113
194
 
114
195
  declare const Drawer: {
115
196
  ({ children, droppableId: _droppableId, direction, }: {
116
197
  children: ReactNode;
117
- droppableId?: string | undefined;
118
- direction?: "vertical" | "horizontal" | undefined;
198
+ droppableId?: string;
199
+ direction?: "vertical" | "horizontal";
119
200
  }): react_jsx_runtime.JSX.Element;
120
201
  Item: ({ name, children, id, label, index, }: {
121
202
  name: string;
122
- children?: ((props: {
203
+ children?: (props: {
123
204
  children: ReactNode;
124
205
  name: string;
125
- }) => ReactElement) | undefined;
126
- id?: string | undefined;
127
- label?: string | undefined;
206
+ }) => ReactElement;
207
+ id?: string;
208
+ label?: string;
128
209
  index: number;
129
210
  }) => react_jsx_runtime.JSX.Element;
130
211
  };
131
212
 
213
+ type History<D = any> = {
214
+ id: string;
215
+ data: D;
216
+ };
217
+ type HistoryStore<D = any> = {
218
+ index: number;
219
+ hasPast: boolean;
220
+ hasFuture: boolean;
221
+ histories: History<D>[];
222
+ record: (data: D) => void;
223
+ back: VoidFunction;
224
+ forward: VoidFunction;
225
+ currentHistory: History;
226
+ nextHistory: History<D> | null;
227
+ prevHistory: History<D> | null;
228
+ setHistories: (histories: History[]) => void;
229
+ setHistoryIndex: (index: number) => void;
230
+ };
231
+
232
+ type OnAction = (action: PuckAction, appState: AppState, prevAppState: AppState) => void;
233
+
132
234
  type PathData = Record<string, {
133
235
  path: string[];
134
236
  label: string;
@@ -160,7 +262,7 @@ type DropZoneContext<UserConfig extends Config = Config> = {
160
262
  zoneWillDrag?: string;
161
263
  setZoneWillDrag?: (zone: string) => void;
162
264
  } | null;
163
- declare const dropZoneContext: react.Context<DropZoneContext<Config<Record<string, any>, DefaultRootProps, string>>>;
265
+ declare const dropZoneContext: react.Context<DropZoneContext<Config>>;
164
266
  declare const DropZoneProvider: ({ children, value, }: {
165
267
  children: ReactNode;
166
268
  value: DropZoneContext;
@@ -170,104 +272,30 @@ declare function DropZone(props: DropZoneProps): react_jsx_runtime.JSX.Element;
170
272
 
171
273
  declare const IconButton: ({ children, href, onClick, variant, type, disabled, tabIndex, newTab, fullWidth, title, }: {
172
274
  children: ReactNode;
173
- href?: string | undefined;
174
- onClick?: ((e: SyntheticEvent) => void | Promise<void>) | undefined;
175
- variant?: "primary" | "secondary" | undefined;
176
- type?: "button" | "submit" | "reset" | undefined;
177
- disabled?: boolean | undefined;
178
- tabIndex?: number | undefined;
179
- newTab?: boolean | undefined;
180
- fullWidth?: boolean | undefined;
275
+ href?: string;
276
+ onClick?: (e: SyntheticEvent) => void | Promise<void>;
277
+ variant?: "primary" | "secondary";
278
+ type?: "button" | "submit" | "reset";
279
+ disabled?: boolean;
280
+ tabIndex?: number;
281
+ newTab?: boolean;
282
+ fullWidth?: boolean;
181
283
  title: string;
182
284
  }) => react_jsx_runtime.JSX.Element;
183
285
 
184
- type RenderFunc<Props extends {
185
- [key: string]: any;
186
- } = {
187
- children: ReactNode;
188
- }> = (props: Props) => ReactElement;
189
- declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "components", "componentItem", "outline", "puck", "preview"];
190
- type OverrideKey = (typeof overrideKeys)[number];
191
- type OverridesGeneric<Shape extends {
192
- [key in OverrideKey]: any;
193
- }> = Shape;
194
- type Overrides = OverridesGeneric<{
195
- fieldTypes: Partial<FieldRenderFunctions>;
196
- header: RenderFunc<{
197
- actions: ReactNode;
198
- children: ReactNode;
199
- }>;
200
- headerActions: RenderFunc<{
201
- children: ReactNode;
202
- }>;
203
- preview: RenderFunc;
204
- fields: RenderFunc<{
205
- children: ReactNode;
206
- isLoading: boolean;
207
- itemSelector?: ItemSelector | null;
208
- }>;
209
- fieldLabel: RenderFunc<{
210
- children?: ReactNode;
211
- icon?: ReactNode;
212
- label: string;
213
- el?: "label" | "div";
214
- readOnly?: boolean;
215
- className?: string;
216
- }>;
217
- components: RenderFunc;
218
- componentItem: RenderFunc<{
219
- children: ReactNode;
220
- name: string;
221
- }>;
222
- outline: RenderFunc;
223
- puck: RenderFunc;
224
- }>;
225
- type FieldRenderFunctions = Omit<{
226
- [Type in Field["type"]]: React.FunctionComponent<FieldProps<Extract<Field, {
227
- type: Type;
228
- }>> & {
229
- children: ReactNode;
230
- name: string;
231
- }>;
232
- }, "custom"> & {
233
- [key: string]: React.FunctionComponent<FieldProps<any> & {
234
- children: ReactNode;
235
- name: string;
236
- }>;
237
- };
238
-
239
- type Plugin = {
240
- overrides: Partial<Overrides>;
241
- };
242
-
243
- type History<D = any> = {
244
- id: string;
245
- data: D;
246
- };
247
- type HistoryStore<D = any> = {
248
- index: number;
249
- currentHistory: History;
250
- hasPast: boolean;
251
- hasFuture: boolean;
252
- record: (data: D) => void;
253
- back: VoidFunction;
254
- forward: VoidFunction;
255
- nextHistory: History<D> | null;
256
- prevHistory: History<D> | null;
257
- histories: History<D>[];
258
- };
259
-
260
286
  type IframeConfig = {
261
287
  enabled?: boolean;
262
288
  };
263
289
 
264
- declare function Puck<UserConfig extends Config = Config>({ children, config, data: initialData, ui: initialUi, onChange, onPublish, plugins, overrides, renderHeader, renderHeaderActions, headerTitle, headerPath, viewports, iframe, dnd, initialHistories, }: {
290
+ declare function Puck<UserConfig extends Config = Config>({ children, config, data: initialData, ui: initialUi, onChange, onPublish, onAction, permissions, plugins, overrides, renderHeader, renderHeaderActions, headerTitle, headerPath, viewports, iframe, dnd, initialHistory, }: {
265
291
  children?: ReactNode;
266
292
  config: UserConfig;
267
293
  data: Partial<Data>;
268
294
  ui?: Partial<UiState>;
269
295
  onChange?: (data: Data) => void;
270
296
  onPublish?: (data: Data) => void;
297
+ onAction?: OnAction;
298
+ permissions?: Partial<Permissions>;
271
299
  plugins?: Plugin[];
272
300
  overrides?: Partial<Overrides>;
273
301
  renderHeader?: (props: {
@@ -286,7 +314,7 @@ declare function Puck<UserConfig extends Config = Config>({ children, config, da
286
314
  dnd?: {
287
315
  disableAutoScroll?: boolean;
288
316
  };
289
- initialHistories?: {
317
+ initialHistory?: {
290
318
  histories: History<any>[];
291
319
  index: number;
292
320
  };
@@ -296,7 +324,7 @@ declare namespace Puck {
296
324
  var Fields: () => react_jsx_runtime.JSX.Element;
297
325
  var Outline: () => react_jsx_runtime.JSX.Element;
298
326
  var Preview: ({ id }: {
299
- id?: string | undefined;
327
+ id?: string;
300
328
  }) => react_jsx_runtime.JSX.Element;
301
329
  }
302
330
 
@@ -319,25 +347,35 @@ type PropTransform<Props extends DefaultComponentProps = DefaultComponentProps,
319
347
  declare function transformProps<Props extends DefaultComponentProps = DefaultComponentProps, RootProps extends DefaultComponentProps = DefaultComponentProps>(data: Partial<Data>, propTransforms: PropTransform<Props, RootProps>): Data;
320
348
 
321
349
  declare function resolveAllData(data: Partial<Data>, config: Config, onResolveStart?: (item: MappedItem) => void, onResolveEnd?: (item: MappedItem) => void): Promise<{
322
- root: RootDataWithProps<DefaultRootProps> | RootData<DefaultRootProps>;
323
- content: any[];
350
+ root: RootData<DefaultRootProps> | RootDataWithProps;
351
+ content: any;
324
352
  zones: Record<string, MappedItem[]>;
325
353
  }>;
326
354
 
327
- type PuckHistory = {
328
- back: VoidFunction;
329
- forward: VoidFunction;
330
- historyStore: HistoryStore;
331
- };
332
-
333
355
  declare const usePuck: () => {
334
356
  appState: AppState;
335
- config: Config<Record<string, any>, DefaultRootProps, string>;
357
+ config: Config;
336
358
  dispatch: (action: PuckAction) => void;
337
- history: Partial<PuckHistory>;
359
+ getPermissions: (selectedItem?: ComponentData) => {
360
+ [x: string]: boolean | undefined;
361
+ drag?: boolean | undefined;
362
+ duplicate?: boolean | undefined;
363
+ delete?: boolean | undefined;
364
+ };
365
+ history: {
366
+ back: VoidFunction;
367
+ forward: VoidFunction;
368
+ setHistories: (histories: History[]) => void;
369
+ setHistoryIndex: (index: number) => void;
370
+ hasPast: boolean;
371
+ hasFuture: boolean;
372
+ histories: History<any>[];
373
+ index: number;
374
+ historyStore: HistoryStore | undefined;
375
+ };
338
376
  selectedItem: ComponentData<DefaultComponentProps & {
339
377
  id: string;
340
378
  }> | null;
341
379
  };
342
380
 
343
- export { AppState, AutoField, AutoFieldPrivate, Button, ComponentData, Config, Data, DefaultComponentProps, DefaultRootProps, Drawer, DropZone, DropZoneProvider, Field, FieldLabel, FieldLabelInternal, FieldProps, FieldPropsInternal, IconButton, MappedItem, Puck, PuckAction, Render, RootData, RootDataWithProps, UiState, dropZoneContext, migrate, resolveAllData, transformProps, usePuck };
381
+ export { Action, ActionBar, AppState, AutoField, AutoFieldPrivate, Button, ComponentData, Config, Data, DefaultComponentProps, DefaultRootProps, Drawer, DropZone, DropZoneProvider, Field, FieldLabel, FieldLabelInternal, FieldProps, type FieldPropsInternal, type History, IconButton, MappedItem, Permissions, type Plugin, Puck, type PuckAction, Render, RootData, RootDataWithProps, UiState, dropZoneContext, migrate, resolveAllData, transformProps, usePuck };