@measured/puck 0.16.0-canary.60fe631 → 0.16.0-canary.7c79787

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.d.ts CHANGED
@@ -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";
@@ -207,6 +208,8 @@ type HistoryStore<D = any> = {
207
208
  setHistoryIndex: (index: number) => void;
208
209
  };
209
210
 
211
+ type OnAction = (action: PuckAction, appState: AppState, prevAppState: AppState) => void;
212
+
210
213
  type PathData = Record<string, {
211
214
  path: string[];
212
215
  label: string;
@@ -263,13 +266,14 @@ type IframeConfig = {
263
266
  enabled?: boolean;
264
267
  };
265
268
 
266
- declare function Puck<UserConfig extends Config = Config>({ children, config, data: initialData, ui: initialUi, onChange, onPublish, plugins, overrides, renderHeader, renderHeaderActions, headerTitle, headerPath, viewports, iframe, dnd, initialHistory, }: {
269
+ declare function Puck<UserConfig extends Config = Config>({ children, config, data: initialData, ui: initialUi, onChange, onPublish, onAction, plugins, overrides, renderHeader, renderHeaderActions, headerTitle, headerPath, viewports, iframe, dnd, initialHistory, }: {
267
270
  children?: ReactNode;
268
271
  config: UserConfig;
269
272
  data: Partial<Data>;
270
273
  ui?: Partial<UiState>;
271
274
  onChange?: (data: Data) => void;
272
275
  onPublish?: (data: Data) => void;
276
+ onAction?: OnAction;
273
277
  plugins?: Plugin[];
274
278
  overrides?: Partial<Overrides>;
275
279
  renderHeader?: (props: {
package/dist/index.js CHANGED
@@ -31282,34 +31282,37 @@ var replaceAction = (data, action) => {
31282
31282
  })
31283
31283
  });
31284
31284
  };
31285
- var reduceData = (data, action, config) => {
31286
- if (action.type === "insert") {
31287
- const emptyComponentData = {
31288
- type: action.componentType,
31289
- props: __spreadProps(__spreadValues({}, config.components[action.componentType].defaultProps || {}), {
31290
- id: generateId(action.componentType)
31291
- })
31292
- };
31293
- if (action.destinationZone === rootDroppableId) {
31294
- return __spreadProps(__spreadValues({}, data), {
31295
- content: insert(
31296
- data.content,
31297
- action.destinationIndex,
31298
- emptyComponentData
31299
- )
31300
- });
31301
- }
31302
- const newData = setupZone(data, action.destinationZone);
31285
+ var insertAction = (data, action, config) => {
31286
+ const emptyComponentData = {
31287
+ type: action.componentType,
31288
+ props: __spreadProps(__spreadValues({}, config.components[action.componentType].defaultProps || {}), {
31289
+ id: action.id || generateId(action.componentType)
31290
+ })
31291
+ };
31292
+ if (action.destinationZone === rootDroppableId) {
31303
31293
  return __spreadProps(__spreadValues({}, data), {
31304
- zones: __spreadProps(__spreadValues({}, newData.zones), {
31305
- [action.destinationZone]: insert(
31306
- newData.zones[action.destinationZone],
31307
- action.destinationIndex,
31308
- emptyComponentData
31309
- )
31310
- })
31294
+ content: insert(
31295
+ data.content,
31296
+ action.destinationIndex,
31297
+ emptyComponentData
31298
+ )
31311
31299
  });
31312
31300
  }
31301
+ const newData = setupZone(data, action.destinationZone);
31302
+ return __spreadProps(__spreadValues({}, data), {
31303
+ zones: __spreadProps(__spreadValues({}, newData.zones), {
31304
+ [action.destinationZone]: insert(
31305
+ newData.zones[action.destinationZone],
31306
+ action.destinationIndex,
31307
+ emptyComponentData
31308
+ )
31309
+ })
31310
+ });
31311
+ };
31312
+ var reduceData = (data, action, config) => {
31313
+ if (action.type === "insert") {
31314
+ return insertAction(data, action, config);
31315
+ }
31313
31316
  if (action.type === "duplicate") {
31314
31317
  const item = getItem(
31315
31318
  { index: action.sourceIndex, zone: action.sourceZone },
@@ -31473,7 +31476,7 @@ var reduceUi = (ui, action) => {
31473
31476
  init_react_import();
31474
31477
 
31475
31478
  // reducer/index.ts
31476
- var storeInterceptor = (reducer, record) => {
31479
+ var storeInterceptor = (reducer, record, onAction) => {
31477
31480
  return (state, action) => {
31478
31481
  const newAppState = reducer(state, action);
31479
31482
  const isValidType = ![
@@ -31486,6 +31489,7 @@ var storeInterceptor = (reducer, record) => {
31486
31489
  if (typeof action.recordHistory !== "undefined" ? action.recordHistory : isValidType) {
31487
31490
  if (record) record(newAppState);
31488
31491
  }
31492
+ onAction == null ? void 0 : onAction(action, newAppState, state);
31489
31493
  return newAppState;
31490
31494
  };
31491
31495
  };
@@ -31497,16 +31501,21 @@ var setAction = (state, action) => {
31497
31501
  };
31498
31502
  function createReducer({
31499
31503
  config,
31500
- record
31504
+ record,
31505
+ onAction
31501
31506
  }) {
31502
- return storeInterceptor((state, action) => {
31503
- const data = reduceData(state.data, action, config);
31504
- const ui = reduceUi(state.ui, action);
31505
- if (action.type === "set") {
31506
- return setAction(state, action);
31507
- }
31508
- return { data, ui };
31509
- }, record);
31507
+ return storeInterceptor(
31508
+ (state, action) => {
31509
+ const data = reduceData(state.data, action, config);
31510
+ const ui = reduceUi(state.ui, action);
31511
+ if (action.type === "set") {
31512
+ return setAction(state, action);
31513
+ }
31514
+ return { data, ui };
31515
+ },
31516
+ record,
31517
+ onAction
31518
+ );
31510
31519
  }
31511
31520
 
31512
31521
  // lib/flush-zones.ts
@@ -31767,20 +31776,8 @@ var MenuBar = ({
31767
31776
  },
31768
31777
  children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: getClassName19("inner"), children: [
31769
31778
  /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: getClassName19("history"), children: [
31770
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(IconButton, { title: "undo", disabled: !hasPast, onClick: back, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
31771
- Undo2,
31772
- {
31773
- size: 21,
31774
- stroke: hasPast ? "var(--puck-color-black)" : "var(--puck-color-grey-08)"
31775
- }
31776
- ) }),
31777
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(IconButton, { title: "redo", disabled: !hasFuture, onClick: forward, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
31778
- Redo2,
31779
- {
31780
- size: 21,
31781
- stroke: hasFuture ? "var(--puck-color-black)" : "var(--puck-color-grey-08)"
31782
- }
31783
- ) })
31779
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(IconButton, { title: "undo", disabled: !hasPast, onClick: back, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Undo2, { size: 21 }) }),
31780
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(IconButton, { title: "redo", disabled: !hasFuture, onClick: forward, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Redo2, { size: 21 }) })
31784
31781
  ] }),
31785
31782
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_jsx_runtime25.Fragment, { children: renderHeaderActions && renderHeaderActions({
31786
31783
  state: appState,
@@ -33197,6 +33194,38 @@ var Canvas = () => {
33197
33194
  );
33198
33195
  };
33199
33196
 
33197
+ // lib/insert-component.ts
33198
+ init_react_import();
33199
+ var insertComponent = (componentType, zone, index, {
33200
+ config,
33201
+ dispatch,
33202
+ resolveData,
33203
+ state
33204
+ }) => {
33205
+ const id = generateId(componentType);
33206
+ const insertActionData = {
33207
+ type: "insert",
33208
+ componentType,
33209
+ destinationIndex: index,
33210
+ destinationZone: zone,
33211
+ id
33212
+ };
33213
+ const insertedData = insertAction(state.data, insertActionData, config);
33214
+ dispatch(__spreadProps(__spreadValues({}, insertActionData), {
33215
+ // Dispatch insert rather set, as user's may rely on this via onAction
33216
+ recordHistory: false
33217
+ }));
33218
+ const itemSelector = {
33219
+ index,
33220
+ zone
33221
+ };
33222
+ dispatch({ type: "setUi", ui: { itemSelector } });
33223
+ resolveData({
33224
+ data: insertedData,
33225
+ ui: __spreadProps(__spreadValues({}, state.ui), { itemSelector })
33226
+ });
33227
+ };
33228
+
33200
33229
  // components/Puck/index.tsx
33201
33230
  var import_jsx_runtime36 = require("react/jsx-runtime");
33202
33231
  var getClassName26 = get_class_name_factory_default("Puck", styles_module_default14);
@@ -33208,6 +33237,7 @@ function Puck({
33208
33237
  ui: initialUi,
33209
33238
  onChange,
33210
33239
  onPublish,
33240
+ onAction,
33211
33241
  plugins = [],
33212
33242
  overrides = {},
33213
33243
  renderHeader,
@@ -33224,7 +33254,7 @@ function Puck({
33224
33254
  var _a;
33225
33255
  const historyStore = useHistoryStore(initialHistory);
33226
33256
  const [reducer] = (0, import_react30.useState)(
33227
- () => createReducer({ config, record: historyStore.record })
33257
+ () => createReducer({ config, record: historyStore.record, onAction })
33228
33258
  );
33229
33259
  const [initialAppState] = (0, import_react30.useState)(() => {
33230
33260
  var _a2, _b, _c, _d, _e, _f, _g;
@@ -33441,16 +33471,12 @@ function Puck({
33441
33471
  }
33442
33472
  if (droppedItem.source.droppableId.startsWith("component-list") && droppedItem.destination) {
33443
33473
  const [_, componentType] = droppedItem.draggableId.split("::");
33444
- dispatch({
33445
- type: "insert",
33446
- componentType: componentType || droppedItem.draggableId,
33447
- destinationIndex: droppedItem.destination.index,
33448
- destinationZone: droppedItem.destination.droppableId
33449
- });
33450
- setItemSelector({
33451
- index: droppedItem.destination.index,
33452
- zone: droppedItem.destination.droppableId
33453
- });
33474
+ insertComponent(
33475
+ componentType || droppedItem.draggableId,
33476
+ droppedItem.destination.droppableId,
33477
+ droppedItem.destination.index,
33478
+ { config, dispatch, resolveData, state: appState }
33479
+ );
33454
33480
  return;
33455
33481
  } else {
33456
33482
  const { source, destination } = droppedItem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@measured/puck",
3
- "version": "0.16.0-canary.60fe631",
3
+ "version": "0.16.0-canary.7c79787",
4
4
  "author": "Measured Corporation Ltd <hello@measured.co>",
5
5
  "repository": "measuredco/puck",
6
6
  "bugs": "https://github.com/measuredco/puck/issues",