@measured/puck 0.21.0-canary.a3dabae1 → 0.21.0-canary.a5160e5d

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.
@@ -11,24 +11,21 @@ import {
11
11
  Label,
12
12
  Puck,
13
13
  Render,
14
- blocksPlugin,
15
14
  createUsePuck,
16
- fieldsPlugin,
17
- outlinePlugin,
18
15
  overrideKeys,
19
16
  registerOverlayPortal,
20
17
  renderContext,
21
18
  setDeep,
22
19
  useGetPuck,
23
20
  usePuck
24
- } from "./chunk-V2FU5KB6.mjs";
21
+ } from "./chunk-LAV6OYHN.mjs";
25
22
  import {
26
23
  init_react_import,
27
24
  migrate,
28
25
  resolveAllData,
29
26
  transformProps,
30
27
  walkTree
31
- } from "./chunk-C24EBUN6.mjs";
28
+ } from "./chunk-VBJEDLUM.mjs";
32
29
 
33
30
  // bundle/no-external.ts
34
31
  init_react_import();
@@ -45,11 +42,8 @@ export {
45
42
  Label,
46
43
  Puck,
47
44
  Render,
48
- blocksPlugin,
49
45
  createUsePuck,
50
- fieldsPlugin,
51
46
  migrate,
52
- outlinePlugin,
53
47
  overrideKeys,
54
48
  registerOverlayPortal,
55
49
  renderContext,
package/dist/rsc.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as Config, U as UserGenerics, M as Metadata } from './walk-tree-Cvtjzg9C.mjs';
3
- export { m as migrate, r as resolveAllData, t as transformProps, w as walkTree } from './walk-tree-Cvtjzg9C.mjs';
2
+ import { C as Config, U as UserGenerics, M as Metadata } from './walk-tree-DkTSFbz_.mjs';
3
+ export { m as migrate, r as resolveAllData, t as transformProps, w as walkTree } from './walk-tree-DkTSFbz_.mjs';
4
4
  import 'react';
5
5
 
6
6
  declare function Render<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>({ config, data, metadata, }: {
package/dist/rsc.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as Config, U as UserGenerics, M as Metadata } from './walk-tree-Cvtjzg9C.js';
3
- export { m as migrate, r as resolveAllData, t as transformProps, w as walkTree } from './walk-tree-Cvtjzg9C.js';
2
+ import { C as Config, U as UserGenerics, M as Metadata } from './walk-tree-DkTSFbz_.js';
3
+ export { m as migrate, r as resolveAllData, t as transformProps, w as walkTree } from './walk-tree-DkTSFbz_.js';
4
4
  import 'react';
5
5
 
6
6
  declare function Render<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>({ config, data, metadata, }: {
package/dist/rsc.js CHANGED
@@ -130,32 +130,27 @@ var walkField = ({
130
130
  config,
131
131
  recurseSlots = false
132
132
  }) => {
133
- var _a, _b, _c, _d, _e;
133
+ var _a, _b, _c;
134
134
  const fieldType = (_a = fields[propKey]) == null ? void 0 : _a.type;
135
135
  const map = mappers[fieldType];
136
136
  if (map && fieldType === "slot") {
137
137
  const content = value || [];
138
- let mappedContent = content;
139
- if (recurseSlots) {
140
- for (let i = 0; i < content.length; i++) {
141
- const el = content[i];
142
- const componentConfig = config.components[el.type];
143
- if (!componentConfig || !((_b = el.props) == null ? void 0 : _b.id)) {
144
- continue;
145
- }
146
- const fields2 = (_c = componentConfig.fields) != null ? _c : {};
147
- mappedContent.push(
148
- walkField({
149
- value: __spreadProps(__spreadValues({}, el), { props: defaultSlots(el.props, fields2) }),
150
- fields: fields2,
151
- mappers,
152
- id: el.props.id,
153
- config,
154
- recurseSlots
155
- })
156
- );
138
+ const mappedContent = recurseSlots ? content.map((el) => {
139
+ var _a2;
140
+ const componentConfig = config.components[el.type];
141
+ if (!componentConfig) {
142
+ throw new Error(`Could not find component config for ${el.type}`);
157
143
  }
158
- }
144
+ const fields2 = (_a2 = componentConfig.fields) != null ? _a2 : {};
145
+ return walkField({
146
+ value: __spreadProps(__spreadValues({}, el), { props: defaultSlots(el.props, fields2) }),
147
+ fields: fields2,
148
+ mappers,
149
+ id: el.props.id,
150
+ config,
151
+ recurseSlots
152
+ });
153
+ }) : content;
159
154
  if (containsPromise(mappedContent)) {
160
155
  return Promise.all(mappedContent);
161
156
  }
@@ -177,7 +172,7 @@ var walkField = ({
177
172
  }
178
173
  if (value && typeof value === "object") {
179
174
  if (Array.isArray(value)) {
180
- const arrayFields = ((_d = fields[propKey]) == null ? void 0 : _d.type) === "array" ? fields[propKey].arrayFields : null;
175
+ const arrayFields = ((_b = fields[propKey]) == null ? void 0 : _b.type) === "array" ? fields[propKey].arrayFields : null;
181
176
  if (!arrayFields) return value;
182
177
  const newValue = value.map(
183
178
  (el, idx) => walkField({
@@ -198,7 +193,7 @@ var walkField = ({
198
193
  } else if ("$$typeof" in value) {
199
194
  return value;
200
195
  } else {
201
- const objectFields = ((_e = fields[propKey]) == null ? void 0 : _e.type) === "object" ? fields[propKey].objectFields : fields;
196
+ const objectFields = ((_c = fields[propKey]) == null ? void 0 : _c.type) === "object" ? fields[propKey].objectFields : fields;
202
197
  return walkObject({
203
198
  value,
204
199
  fields: objectFields,
@@ -676,8 +671,7 @@ function transformProps(data, propTransforms, config = { components: {} }) {
676
671
  var defaultViewports = [
677
672
  { width: 360, height: "auto", icon: "Smartphone", label: "Small" },
678
673
  { width: 768, height: "auto", icon: "Tablet", label: "Medium" },
679
- { width: 1280, height: "auto", icon: "Monitor", label: "Large" },
680
- { width: "100%", height: "auto", icon: "FullWidth", label: "Full-width" }
674
+ { width: 1280, height: "auto", icon: "Monitor", label: "Large" }
681
675
  ];
682
676
 
683
677
  // store/default-app-state.ts
@@ -699,8 +693,7 @@ var defaultAppState = {
699
693
  options: [],
700
694
  controlsVisible: true
701
695
  },
702
- field: { focus: null },
703
- plugin: { current: null }
696
+ field: { focus: null }
704
697
  },
705
698
  indexes: {
706
699
  nodes: {},
package/dist/rsc.mjs CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  transformProps,
13
13
  useSlots,
14
14
  walkTree
15
- } from "./chunk-C24EBUN6.mjs";
15
+ } from "./chunk-VBJEDLUM.mjs";
16
16
 
17
17
  // bundle/rsc.tsx
18
18
  init_react_import();
@@ -82,10 +82,14 @@ type ExternalFieldWithAdaptor<Props extends any = {
82
82
  adaptorParams?: object;
83
83
  getItemSummary: (item: NotUndefined<Props>, index?: number) => string;
84
84
  };
85
+ type CacheOpts = {
86
+ enabled?: boolean;
87
+ };
85
88
  type ExternalField<Props extends any = {
86
89
  [key: string]: any;
87
90
  }> = BaseField & {
88
91
  type: "external";
92
+ cache?: CacheOpts;
89
93
  placeholder?: string;
90
94
  fetchList: (params: {
91
95
  query: string;
@@ -309,7 +313,6 @@ type Metadata = {
309
313
  type ItemWithId = {
310
314
  _arrayId: string;
311
315
  _originalIndex: number;
312
- _currentIndex: number;
313
316
  };
314
317
  type ArrayState = {
315
318
  items: ItemWithId[];
@@ -320,7 +323,6 @@ type UiState = {
320
323
  rightSideBarVisible: boolean;
321
324
  leftSideBarWidth?: number | null;
322
325
  rightSideBarWidth?: number | null;
323
- mobilePanelExpanded?: boolean;
324
326
  itemSelector: ItemSelector | null;
325
327
  arrayState: Record<string, ArrayState | undefined>;
326
328
  previewMode: "interactive" | "edit";
@@ -333,7 +335,7 @@ type UiState = {
333
335
  isDragging: boolean;
334
336
  viewports: {
335
337
  current: {
336
- width: number | "100%";
338
+ width: number;
337
339
  height: number | "auto";
338
340
  };
339
341
  controlsVisible: boolean;
@@ -342,9 +344,6 @@ type UiState = {
342
344
  field: {
343
345
  focus?: string | null;
344
346
  };
345
- plugin: {
346
- current: string | null;
347
- };
348
347
  };
349
348
  type AppState<UserData extends Data = Data> = {
350
349
  data: UserData;
@@ -398,14 +397,6 @@ type LeftOrExactRight<Union, Left, Right> = (Left & Union extends Right ? Exact<
398
397
  type AssertHasValue<T, True = T, False = never> = [keyof T] extends [
399
398
  never
400
399
  ] ? False : True;
401
- type RenderFunc<Props extends {
402
- [key: string]: any;
403
- } = {
404
- children: ReactNode;
405
- }> = (props: Props) => ReactElement;
406
- type PluginInternal = Plugin & {
407
- mobileOnly?: boolean;
408
- };
409
400
 
410
401
  type MapFnParams<ThisField = Field> = {
411
402
  value: any;
@@ -429,6 +420,11 @@ G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>, UserField extends
429
420
  [Type in UserField["type"]]: FieldTransformFn<ExtractField<UserField, Type>>;
430
421
  }>;
431
422
 
423
+ type RenderFunc<Props extends {
424
+ [key: string]: any;
425
+ } = {
426
+ children: ReactNode;
427
+ }> = (props: Props) => ReactElement;
432
428
  declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "drawer", "drawerItem", "componentOverlay", "outline", "puck", "preview"];
433
429
  type OverrideKey = (typeof overrideKeys)[number];
434
430
  type OverridesGeneric<Shape extends {
@@ -500,7 +496,7 @@ type DragAxis = "dynamic" | "y" | "x";
500
496
 
501
497
  type iconTypes = "Smartphone" | "Monitor" | "Tablet";
502
498
  type Viewport = {
503
- width: number | "100%";
499
+ width: number;
504
500
  height?: number | "auto";
505
501
  label?: string;
506
502
  icon?: iconTypes | ReactNode;
@@ -520,13 +516,8 @@ type IframeConfig = {
520
516
  };
521
517
  type OnAction<UserData extends Data = Data> = (action: PuckAction, appState: AppState<UserData>, prevAppState: AppState<UserData>) => void;
522
518
  type Plugin<UserConfig extends Config = Config> = {
523
- name?: string;
524
- label?: string;
525
- icon?: ReactNode;
526
- render?: () => ReactElement;
527
519
  overrides?: Partial<Overrides<UserConfig>>;
528
520
  fieldTransforms?: FieldTransforms<UserConfig>;
529
- mobilePanelHeight?: "toggle" | "min-content";
530
521
  };
531
522
  type History<D = any> = {
532
523
  state: D;
@@ -644,4 +635,4 @@ type WalkTreeOptions = {
644
635
  };
645
636
  declare function walkTree<T extends ComponentData | RootData | G["UserData"], UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>(data: T, config: UserConfig, callbackFn: (data: Content, options: WalkTreeOptions) => Content | null | void): T;
646
637
 
647
- export { type Content as $, type AppState as A, type ItemWithId as B, type Config as C, type DropZoneProps as D, type ArrayState as E, type Fields as F, type SlotComponent as G, type History as H, type IframeConfig as I, type PuckComponent as J, type RootConfig as K, type DefaultComponents as L, type Metadata as M, type ExtractConfigParams as N, type Overrides as O, type Permissions as P, type BaseData as Q, type RootDataWithProps as R, type Slot as S, type RootDataWithoutProps as T, type UserGenerics as U, type Viewports as V, type WithSlotProps as W, type RootData as X, type ComponentDataOptionalId as Y, type MappedItem as Z, type ComponentDataMap as _, type ComponentData as a, type BaseField as a0, type TextField as a1, type NumberField as a2, type TextareaField as a3, type SelectField as a4, type RadioField as a5, type ArrayField as a6, type ObjectField as a7, type Adaptor as a8, type ExternalFieldWithAdaptor as a9, type ExternalField as aa, type CustomFieldRender as ab, type CustomField as ac, type SlotField as ad, type PuckContext as ae, type DefaultRootFieldProps as af, type DefaultRootRenderProps as ag, type DefaultRootProps as ah, type DefaultComponentProps as ai, type WithId as aj, type WithPuckProps as ak, type AsFieldProps as al, type WithChildren as am, type ExtractField as an, type PuckAction as b, type ResolveDataTrigger as c, type Plugin as d, type UiState as e, type ComponentConfig as f, type FieldTransforms as g, type Field as h, type FieldProps as i, type Data as j, type OnAction as k, type InitialHistory as l, migrate as m, type ItemSelector as n, type PluginInternal as o, type Direction as p, type DragAxis as q, resolveAllData as r, type Viewport as s, transformProps as t, type FieldTransformFnParams as u, type FieldTransformFn as v, walkTree as w, overrideKeys as x, type OverrideKey as y, type FieldRenderFunctions as z };
638
+ export { type BaseField as $, type AppState as A, type ArrayState as B, type Config as C, type DropZoneProps as D, type SlotComponent as E, type Fields as F, type PuckComponent as G, type History as H, type IframeConfig as I, type RootConfig as J, type DefaultComponents as K, type ExtractConfigParams as L, type Metadata as M, type BaseData as N, type Overrides as O, type Permissions as P, type RootDataWithoutProps as Q, type RootDataWithProps as R, type Slot as S, type RootData as T, type UserGenerics as U, type Viewports as V, type WithSlotProps as W, type ComponentDataOptionalId as X, type MappedItem as Y, type ComponentDataMap as Z, type Content as _, type ComponentData as a, type TextField as a0, type NumberField as a1, type TextareaField as a2, type SelectField as a3, type RadioField as a4, type ArrayField as a5, type ObjectField as a6, type Adaptor as a7, type ExternalFieldWithAdaptor as a8, type CacheOpts as a9, type ExternalField as aa, type CustomFieldRender as ab, type CustomField as ac, type SlotField as ad, type PuckContext as ae, type DefaultRootFieldProps as af, type DefaultRootRenderProps as ag, type DefaultRootProps as ah, type DefaultComponentProps as ai, type WithId as aj, type WithPuckProps as ak, type AsFieldProps as al, type WithChildren as am, type ExtractField as an, type PuckAction as b, type ResolveDataTrigger as c, type Plugin as d, type UiState as e, type ComponentConfig as f, type FieldTransforms as g, type Field as h, type FieldProps as i, type Data as j, type OnAction as k, type InitialHistory as l, migrate as m, type ItemSelector as n, type Direction as o, type DragAxis as p, type Viewport as q, resolveAllData as r, type FieldTransformFnParams as s, transformProps as t, type FieldTransformFn as u, overrideKeys as v, walkTree as w, type OverrideKey as x, type FieldRenderFunctions as y, type ItemWithId as z };
@@ -82,10 +82,14 @@ type ExternalFieldWithAdaptor<Props extends any = {
82
82
  adaptorParams?: object;
83
83
  getItemSummary: (item: NotUndefined<Props>, index?: number) => string;
84
84
  };
85
+ type CacheOpts = {
86
+ enabled?: boolean;
87
+ };
85
88
  type ExternalField<Props extends any = {
86
89
  [key: string]: any;
87
90
  }> = BaseField & {
88
91
  type: "external";
92
+ cache?: CacheOpts;
89
93
  placeholder?: string;
90
94
  fetchList: (params: {
91
95
  query: string;
@@ -309,7 +313,6 @@ type Metadata = {
309
313
  type ItemWithId = {
310
314
  _arrayId: string;
311
315
  _originalIndex: number;
312
- _currentIndex: number;
313
316
  };
314
317
  type ArrayState = {
315
318
  items: ItemWithId[];
@@ -320,7 +323,6 @@ type UiState = {
320
323
  rightSideBarVisible: boolean;
321
324
  leftSideBarWidth?: number | null;
322
325
  rightSideBarWidth?: number | null;
323
- mobilePanelExpanded?: boolean;
324
326
  itemSelector: ItemSelector | null;
325
327
  arrayState: Record<string, ArrayState | undefined>;
326
328
  previewMode: "interactive" | "edit";
@@ -333,7 +335,7 @@ type UiState = {
333
335
  isDragging: boolean;
334
336
  viewports: {
335
337
  current: {
336
- width: number | "100%";
338
+ width: number;
337
339
  height: number | "auto";
338
340
  };
339
341
  controlsVisible: boolean;
@@ -342,9 +344,6 @@ type UiState = {
342
344
  field: {
343
345
  focus?: string | null;
344
346
  };
345
- plugin: {
346
- current: string | null;
347
- };
348
347
  };
349
348
  type AppState<UserData extends Data = Data> = {
350
349
  data: UserData;
@@ -398,14 +397,6 @@ type LeftOrExactRight<Union, Left, Right> = (Left & Union extends Right ? Exact<
398
397
  type AssertHasValue<T, True = T, False = never> = [keyof T] extends [
399
398
  never
400
399
  ] ? False : True;
401
- type RenderFunc<Props extends {
402
- [key: string]: any;
403
- } = {
404
- children: ReactNode;
405
- }> = (props: Props) => ReactElement;
406
- type PluginInternal = Plugin & {
407
- mobileOnly?: boolean;
408
- };
409
400
 
410
401
  type MapFnParams<ThisField = Field> = {
411
402
  value: any;
@@ -429,6 +420,11 @@ G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>, UserField extends
429
420
  [Type in UserField["type"]]: FieldTransformFn<ExtractField<UserField, Type>>;
430
421
  }>;
431
422
 
423
+ type RenderFunc<Props extends {
424
+ [key: string]: any;
425
+ } = {
426
+ children: ReactNode;
427
+ }> = (props: Props) => ReactElement;
432
428
  declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "drawer", "drawerItem", "componentOverlay", "outline", "puck", "preview"];
433
429
  type OverrideKey = (typeof overrideKeys)[number];
434
430
  type OverridesGeneric<Shape extends {
@@ -500,7 +496,7 @@ type DragAxis = "dynamic" | "y" | "x";
500
496
 
501
497
  type iconTypes = "Smartphone" | "Monitor" | "Tablet";
502
498
  type Viewport = {
503
- width: number | "100%";
499
+ width: number;
504
500
  height?: number | "auto";
505
501
  label?: string;
506
502
  icon?: iconTypes | ReactNode;
@@ -520,13 +516,8 @@ type IframeConfig = {
520
516
  };
521
517
  type OnAction<UserData extends Data = Data> = (action: PuckAction, appState: AppState<UserData>, prevAppState: AppState<UserData>) => void;
522
518
  type Plugin<UserConfig extends Config = Config> = {
523
- name?: string;
524
- label?: string;
525
- icon?: ReactNode;
526
- render?: () => ReactElement;
527
519
  overrides?: Partial<Overrides<UserConfig>>;
528
520
  fieldTransforms?: FieldTransforms<UserConfig>;
529
- mobilePanelHeight?: "toggle" | "min-content";
530
521
  };
531
522
  type History<D = any> = {
532
523
  state: D;
@@ -644,4 +635,4 @@ type WalkTreeOptions = {
644
635
  };
645
636
  declare function walkTree<T extends ComponentData | RootData | G["UserData"], UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>(data: T, config: UserConfig, callbackFn: (data: Content, options: WalkTreeOptions) => Content | null | void): T;
646
637
 
647
- export { type Content as $, type AppState as A, type ItemWithId as B, type Config as C, type DropZoneProps as D, type ArrayState as E, type Fields as F, type SlotComponent as G, type History as H, type IframeConfig as I, type PuckComponent as J, type RootConfig as K, type DefaultComponents as L, type Metadata as M, type ExtractConfigParams as N, type Overrides as O, type Permissions as P, type BaseData as Q, type RootDataWithProps as R, type Slot as S, type RootDataWithoutProps as T, type UserGenerics as U, type Viewports as V, type WithSlotProps as W, type RootData as X, type ComponentDataOptionalId as Y, type MappedItem as Z, type ComponentDataMap as _, type ComponentData as a, type BaseField as a0, type TextField as a1, type NumberField as a2, type TextareaField as a3, type SelectField as a4, type RadioField as a5, type ArrayField as a6, type ObjectField as a7, type Adaptor as a8, type ExternalFieldWithAdaptor as a9, type ExternalField as aa, type CustomFieldRender as ab, type CustomField as ac, type SlotField as ad, type PuckContext as ae, type DefaultRootFieldProps as af, type DefaultRootRenderProps as ag, type DefaultRootProps as ah, type DefaultComponentProps as ai, type WithId as aj, type WithPuckProps as ak, type AsFieldProps as al, type WithChildren as am, type ExtractField as an, type PuckAction as b, type ResolveDataTrigger as c, type Plugin as d, type UiState as e, type ComponentConfig as f, type FieldTransforms as g, type Field as h, type FieldProps as i, type Data as j, type OnAction as k, type InitialHistory as l, migrate as m, type ItemSelector as n, type PluginInternal as o, type Direction as p, type DragAxis as q, resolveAllData as r, type Viewport as s, transformProps as t, type FieldTransformFnParams as u, type FieldTransformFn as v, walkTree as w, overrideKeys as x, type OverrideKey as y, type FieldRenderFunctions as z };
638
+ export { type BaseField as $, type AppState as A, type ArrayState as B, type Config as C, type DropZoneProps as D, type SlotComponent as E, type Fields as F, type PuckComponent as G, type History as H, type IframeConfig as I, type RootConfig as J, type DefaultComponents as K, type ExtractConfigParams as L, type Metadata as M, type BaseData as N, type Overrides as O, type Permissions as P, type RootDataWithoutProps as Q, type RootDataWithProps as R, type Slot as S, type RootData as T, type UserGenerics as U, type Viewports as V, type WithSlotProps as W, type ComponentDataOptionalId as X, type MappedItem as Y, type ComponentDataMap as Z, type Content as _, type ComponentData as a, type TextField as a0, type NumberField as a1, type TextareaField as a2, type SelectField as a3, type RadioField as a4, type ArrayField as a5, type ObjectField as a6, type Adaptor as a7, type ExternalFieldWithAdaptor as a8, type CacheOpts as a9, type ExternalField as aa, type CustomFieldRender as ab, type CustomField as ac, type SlotField as ad, type PuckContext as ae, type DefaultRootFieldProps as af, type DefaultRootRenderProps as ag, type DefaultRootProps as ah, type DefaultComponentProps as ai, type WithId as aj, type WithPuckProps as ak, type AsFieldProps as al, type WithChildren as am, type ExtractField as an, type PuckAction as b, type ResolveDataTrigger as c, type Plugin as d, type UiState as e, type ComponentConfig as f, type FieldTransforms as g, type Field as h, type FieldProps as i, type Data as j, type OnAction as k, type InitialHistory as l, migrate as m, type ItemSelector as n, type Direction as o, type DragAxis as p, type Viewport as q, resolveAllData as r, type FieldTransformFnParams as s, transformProps as t, type FieldTransformFn as u, overrideKeys as v, walkTree as w, type OverrideKey as x, type FieldRenderFunctions as y, type ItemWithId as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@measured/puck",
3
- "version": "0.21.0-canary.a3dabae1",
3
+ "version": "0.21.0-canary.a5160e5d",
4
4
  "description": "The open-source visual editor for React",
5
5
  "author": "Chris Villa <chris@puckeditor.com>",
6
6
  "repository": "measuredco/puck",