@measured/puck 0.21.0-canary.79a26849 → 0.21.0-canary.7c2f9283

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.
Files changed (52) hide show
  1. package/dist/Editor-32UYWE6W.mjs +204 -0
  2. package/dist/Editor-IQP25PUX.css +404 -0
  3. package/dist/Render-3OV4N4MT.css +102 -0
  4. package/dist/Render-FXZX6NFH.mjs +55 -0
  5. package/dist/{walk-tree-CgWnYC1X.d.mts → actions-BkBoKAc5.d.mts} +226 -37
  6. package/dist/{walk-tree-CgWnYC1X.d.ts → actions-BkBoKAc5.d.ts} +226 -37
  7. package/dist/chunk-3VQHXASI.mjs +33 -0
  8. package/dist/chunk-6KNQXLQR.mjs +708 -0
  9. package/dist/chunk-AOEDIUVK.mjs +11 -0
  10. package/dist/{chunk-UABEUL66.mjs → chunk-FCCNEDWR.mjs} +6964 -7964
  11. package/dist/chunk-GVKHZNTR.mjs +53 -0
  12. package/dist/chunk-K562SEXI.mjs +1813 -0
  13. package/dist/chunk-KN3XDS7U.mjs +528 -0
  14. package/dist/chunk-M6W7YEVX.mjs +95 -0
  15. package/dist/chunk-MEL7FUSF.mjs +63 -0
  16. package/dist/chunk-NYGQH27S.mjs +445 -0
  17. package/dist/chunk-Q3TJ2VYO.mjs +436 -0
  18. package/dist/chunk-REWRIUGR.mjs +156 -0
  19. package/dist/chunk-V2IQTPPK.mjs +111 -0
  20. package/dist/chunk-V5I7CVLT.mjs +103 -0
  21. package/dist/chunk-Y2EFNT5P.mjs +108 -0
  22. package/dist/full-2GJTAAZE.css +301 -0
  23. package/dist/full-4OS3O57Y.mjs +93 -0
  24. package/dist/index-bqD1SEOb.d.mts +118 -0
  25. package/dist/index-lt1zf5WR.d.ts +118 -0
  26. package/dist/index.css +1032 -385
  27. package/dist/index.d.mts +115 -115
  28. package/dist/index.d.ts +115 -115
  29. package/dist/index.js +9636 -5416
  30. package/dist/index.mjs +34 -12
  31. package/dist/internal.d.mts +27 -0
  32. package/dist/internal.d.ts +27 -0
  33. package/dist/internal.js +927 -0
  34. package/dist/internal.mjs +13 -0
  35. package/dist/loaded-DCQVLO7I.mjs +57 -0
  36. package/dist/loaded-JGRO7BH7.mjs +57 -0
  37. package/dist/loaded-KKVJE5KH.mjs +60 -0
  38. package/dist/loaded-RVWBFK7L.css +87 -0
  39. package/dist/no-external.css +1121 -470
  40. package/dist/no-external.d.mts +19 -2
  41. package/dist/no-external.d.ts +19 -2
  42. package/dist/no-external.js +9639 -5416
  43. package/dist/no-external.mjs +36 -9
  44. package/dist/rsc.css +102 -0
  45. package/dist/rsc.d.mts +17 -2
  46. package/dist/rsc.d.ts +17 -2
  47. package/dist/rsc.js +547 -98
  48. package/dist/rsc.mjs +18 -9
  49. package/dist/walk-tree-CRRDqx6_.d.mts +29 -0
  50. package/dist/walk-tree-CS7sEpfG.d.ts +29 -0
  51. package/package.json +31 -4
  52. package/dist/chunk-JA7SEUEH.mjs +0 -966
package/dist/rsc.js CHANGED
@@ -34,6 +34,12 @@ var __objRest = (source, exclude) => {
34
34
  }
35
35
  return target;
36
36
  };
37
+ var __esm = (fn, res) => function __init() {
38
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
39
+ };
40
+ var __commonJS = (cb, mod) => function __require() {
41
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
42
+ };
37
43
  var __export = (target, all) => {
38
44
  for (var name in all)
39
45
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -76,6 +82,276 @@ var __async = (__this, __arguments, generator) => {
76
82
  });
77
83
  };
78
84
 
85
+ // ../tsup-config/react-import.js
86
+ var import_react;
87
+ var init_react_import = __esm({
88
+ "../tsup-config/react-import.js"() {
89
+ "use strict";
90
+ import_react = __toESM(require("react"));
91
+ }
92
+ });
93
+
94
+ // ../../node_modules/classnames/index.js
95
+ var require_classnames = __commonJS({
96
+ "../../node_modules/classnames/index.js"(exports2, module2) {
97
+ "use strict";
98
+ init_react_import();
99
+ (function() {
100
+ "use strict";
101
+ var hasOwn = {}.hasOwnProperty;
102
+ function classNames() {
103
+ var classes = "";
104
+ for (var i = 0; i < arguments.length; i++) {
105
+ var arg = arguments[i];
106
+ if (arg) {
107
+ classes = appendClass(classes, parseValue(arg));
108
+ }
109
+ }
110
+ return classes;
111
+ }
112
+ function parseValue(arg) {
113
+ if (typeof arg === "string" || typeof arg === "number") {
114
+ return arg;
115
+ }
116
+ if (typeof arg !== "object") {
117
+ return "";
118
+ }
119
+ if (Array.isArray(arg)) {
120
+ return classNames.apply(null, arg);
121
+ }
122
+ if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
123
+ return arg.toString();
124
+ }
125
+ var classes = "";
126
+ for (var key in arg) {
127
+ if (hasOwn.call(arg, key) && arg[key]) {
128
+ classes = appendClass(classes, key);
129
+ }
130
+ }
131
+ return classes;
132
+ }
133
+ function appendClass(value, newClass) {
134
+ if (!newClass) {
135
+ return value;
136
+ }
137
+ if (value) {
138
+ return value + " " + newClass;
139
+ }
140
+ return value + newClass;
141
+ }
142
+ if (typeof module2 !== "undefined" && module2.exports) {
143
+ classNames.default = classNames;
144
+ module2.exports = classNames;
145
+ } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
146
+ define("classnames", [], function() {
147
+ return classNames;
148
+ });
149
+ } else {
150
+ window.classNames = classNames;
151
+ }
152
+ })();
153
+ }
154
+ });
155
+
156
+ // lib/get-class-name-factory.ts
157
+ var import_classnames, getClassNameFactory, get_class_name_factory_default;
158
+ var init_get_class_name_factory = __esm({
159
+ "lib/get-class-name-factory.ts"() {
160
+ "use strict";
161
+ init_react_import();
162
+ import_classnames = __toESM(require_classnames());
163
+ getClassNameFactory = (rootClass, styles, config = { baseClass: "" }) => (options = {}) => {
164
+ if (typeof options === "string") {
165
+ const descendant = options;
166
+ const style = styles[`${rootClass}-${descendant}`];
167
+ if (style) {
168
+ return config.baseClass + styles[`${rootClass}-${descendant}`] || "";
169
+ }
170
+ return "";
171
+ } else if (typeof options === "object") {
172
+ const modifiers = options;
173
+ const prefixedModifiers = {};
174
+ for (let modifier in modifiers) {
175
+ prefixedModifiers[styles[`${rootClass}--${modifier}`]] = modifiers[modifier];
176
+ }
177
+ const c = styles[rootClass];
178
+ return config.baseClass + (0, import_classnames.default)(__spreadValues({
179
+ [c]: !!c
180
+ }, prefixedModifiers));
181
+ } else {
182
+ return config.baseClass + styles[rootClass] || "";
183
+ }
184
+ };
185
+ get_class_name_factory_default = getClassNameFactory;
186
+ }
187
+ });
188
+
189
+ // css-module:/home/runner/work/puck/puck/packages/core/components/RichTextEditor/styles.module.css/#css-module-data
190
+ var init_css_module_data = __esm({
191
+ "css-module:/home/runner/work/puck/puck/packages/core/components/RichTextEditor/styles.module.css/#css-module-data"() {
192
+ }
193
+ });
194
+
195
+ // css-module:/home/runner/work/puck/puck/packages/core/components/RichTextEditor/styles.module.css#css-module
196
+ var styles_module_default;
197
+ var init_styles_module = __esm({
198
+ "css-module:/home/runner/work/puck/puck/packages/core/components/RichTextEditor/styles.module.css#css-module"() {
199
+ "use strict";
200
+ init_react_import();
201
+ init_css_module_data();
202
+ styles_module_default = { "RichTextEditor": "_RichTextEditor_z25h4_1", "RichTextEditor--editor": "_RichTextEditor--editor_z25h4_50", "RichTextEditor--disabled": "_RichTextEditor--disabled_z25h4_107", "RichTextEditor--isActive": "_RichTextEditor--isActive_z25h4_111", "RichTextEditor-menu": "_RichTextEditor-menu_z25h4_117" };
203
+ }
204
+ });
205
+
206
+ // components/RichTextEditor/extension.ts
207
+ var import_core, import_extension_blockquote, import_extension_bold, import_extension_code, import_extension_code_block, import_extension_document, import_extension_hard_break, import_extension_heading, import_extension_horizontal_rule, import_extension_italic, import_extension_link, import_extension_list, import_extension_paragraph, import_extension_strike, import_extension_text, import_extension_text_align, import_extension_underline, defaultPuckRichTextOptions, PuckRichText;
208
+ var init_extension = __esm({
209
+ "components/RichTextEditor/extension.ts"() {
210
+ "use strict";
211
+ init_react_import();
212
+ import_core = require("@tiptap/core");
213
+ import_extension_blockquote = require("@tiptap/extension-blockquote");
214
+ import_extension_bold = require("@tiptap/extension-bold");
215
+ import_extension_code = require("@tiptap/extension-code");
216
+ import_extension_code_block = require("@tiptap/extension-code-block");
217
+ import_extension_document = require("@tiptap/extension-document");
218
+ import_extension_hard_break = require("@tiptap/extension-hard-break");
219
+ import_extension_heading = require("@tiptap/extension-heading");
220
+ import_extension_horizontal_rule = require("@tiptap/extension-horizontal-rule");
221
+ import_extension_italic = require("@tiptap/extension-italic");
222
+ import_extension_link = require("@tiptap/extension-link");
223
+ import_extension_list = require("@tiptap/extension-list");
224
+ import_extension_paragraph = require("@tiptap/extension-paragraph");
225
+ import_extension_strike = require("@tiptap/extension-strike");
226
+ import_extension_text = require("@tiptap/extension-text");
227
+ import_extension_text_align = __toESM(require("@tiptap/extension-text-align"));
228
+ import_extension_underline = require("@tiptap/extension-underline");
229
+ defaultPuckRichTextOptions = {
230
+ textAlign: {
231
+ types: ["heading", "paragraph"]
232
+ }
233
+ };
234
+ PuckRichText = import_core.Extension.create({
235
+ name: "puckRichText",
236
+ addExtensions() {
237
+ const extensions = [];
238
+ const options = __spreadValues(__spreadValues({}, this.options), defaultPuckRichTextOptions);
239
+ if (options.bold !== false) {
240
+ extensions.push(import_extension_bold.Bold.configure(options.bold));
241
+ }
242
+ if (options.blockquote !== false) {
243
+ extensions.push(import_extension_blockquote.Blockquote.configure(options.blockquote));
244
+ }
245
+ if (options.bulletList !== false) {
246
+ extensions.push(import_extension_list.BulletList.configure(options.bulletList));
247
+ }
248
+ if (options.code !== false) {
249
+ extensions.push(import_extension_code.Code.configure(options.code));
250
+ }
251
+ if (options.codeBlock !== false) {
252
+ extensions.push(import_extension_code_block.CodeBlock.configure(options.codeBlock));
253
+ }
254
+ if (options.document !== false) {
255
+ extensions.push(import_extension_document.Document.configure(options.document));
256
+ }
257
+ if (options.hardBreak !== false) {
258
+ extensions.push(import_extension_hard_break.HardBreak.configure(options.hardBreak));
259
+ }
260
+ if (options.heading !== false) {
261
+ extensions.push(import_extension_heading.Heading.configure(options.heading));
262
+ }
263
+ if (options.horizontalRule !== false) {
264
+ extensions.push(import_extension_horizontal_rule.HorizontalRule.configure(options.horizontalRule));
265
+ }
266
+ if (options.italic !== false) {
267
+ extensions.push(import_extension_italic.Italic.configure(options.italic));
268
+ }
269
+ if (options.listItem !== false) {
270
+ extensions.push(import_extension_list.ListItem.configure(options.listItem));
271
+ }
272
+ if (options.listKeymap !== false) {
273
+ extensions.push(import_extension_list.ListKeymap.configure(options == null ? void 0 : options.listKeymap));
274
+ }
275
+ if (options.link !== false) {
276
+ extensions.push(import_extension_link.Link.configure(options == null ? void 0 : options.link));
277
+ }
278
+ if (options.orderedList !== false) {
279
+ extensions.push(import_extension_list.OrderedList.configure(options.orderedList));
280
+ }
281
+ if (options.paragraph !== false) {
282
+ extensions.push(import_extension_paragraph.Paragraph.configure(options.paragraph));
283
+ }
284
+ if (options.strike !== false) {
285
+ extensions.push(import_extension_strike.Strike.configure(options.strike));
286
+ }
287
+ if (options.text !== false) {
288
+ extensions.push(import_extension_text.Text.configure(options.text));
289
+ }
290
+ if (options.textAlign !== false) {
291
+ extensions.push(import_extension_text_align.default.configure(options.textAlign));
292
+ }
293
+ if (options.underline !== false) {
294
+ extensions.push(import_extension_underline.Underline.configure(options == null ? void 0 : options.underline));
295
+ }
296
+ return extensions;
297
+ }
298
+ });
299
+ }
300
+ });
301
+
302
+ // components/RichTextEditor/components/Render.tsx
303
+ var Render_exports = {};
304
+ __export(Render_exports, {
305
+ RichTextRender: () => RichTextRender
306
+ });
307
+ function RichTextRender({
308
+ content,
309
+ field
310
+ }) {
311
+ const { tiptap = {}, options } = field;
312
+ const { extensions = [] } = tiptap;
313
+ const loadedExtensions = (0, import_react3.useMemo)(
314
+ () => [PuckRichText.configure(options), ...extensions],
315
+ [field, extensions]
316
+ );
317
+ const normalized = (0, import_react3.useMemo)(() => {
318
+ if (typeof content === "object" && (content == null ? void 0 : content.type) === "doc") {
319
+ return content;
320
+ }
321
+ if (typeof content === "string") {
322
+ const isHtml = /<\/?[a-z][\s\S]*>/i.test(content);
323
+ if (isHtml) {
324
+ return (0, import_html.generateJSON)(content, loadedExtensions);
325
+ }
326
+ return {
327
+ type: "doc",
328
+ content: [
329
+ { type: "paragraph", content: [{ type: "text", text: content }] }
330
+ ]
331
+ };
332
+ }
333
+ return { type: "doc", content: [] };
334
+ }, [content, loadedExtensions]);
335
+ const html = (0, import_react3.useMemo)(() => {
336
+ return (0, import_html.generateHTML)(normalized, loadedExtensions);
337
+ }, [normalized, loadedExtensions]);
338
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: getClassName2(), children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "rich-text", dangerouslySetInnerHTML: { __html: html } }) });
339
+ }
340
+ var import_html, import_react3, import_jsx_runtime2, getClassName2;
341
+ var init_Render = __esm({
342
+ "components/RichTextEditor/components/Render.tsx"() {
343
+ "use strict";
344
+ init_react_import();
345
+ import_html = require("@tiptap/html");
346
+ import_react3 = require("react");
347
+ init_get_class_name_factory();
348
+ init_styles_module();
349
+ init_extension();
350
+ import_jsx_runtime2 = require("react/jsx-runtime");
351
+ getClassName2 = get_class_name_factory_default("RichTextEditor", styles_module_default);
352
+ }
353
+ });
354
+
79
355
  // bundle/rsc.tsx
80
356
  var rsc_exports = {};
81
357
  __export(rsc_exports, {
@@ -86,16 +362,19 @@ __export(rsc_exports, {
86
362
  walkTree: () => walkTree
87
363
  });
88
364
  module.exports = __toCommonJS(rsc_exports);
365
+ init_react_import();
89
366
 
90
- // ../tsup-config/react-import.js
91
- var import_react = __toESM(require("react"));
367
+ // components/ServerRender/index.tsx
368
+ init_react_import();
92
369
 
93
370
  // lib/root-droppable-id.ts
371
+ init_react_import();
94
372
  var rootAreaId = "root";
95
373
  var rootZone = "default-zone";
96
374
  var rootDroppableId = `${rootAreaId}:${rootZone}`;
97
375
 
98
376
  // lib/data/setup-zone.ts
377
+ init_react_import();
99
378
  var setupZone = (data, zoneKey) => {
100
379
  if (zoneKey === rootDroppableId) {
101
380
  return data;
@@ -107,10 +386,18 @@ var setupZone = (data, zoneKey) => {
107
386
  return newData;
108
387
  };
109
388
 
389
+ // lib/use-slots.tsx
390
+ init_react_import();
391
+
110
392
  // lib/field-transforms/use-field-transforms.tsx
393
+ init_react_import();
111
394
  var import_react2 = require("react");
112
395
 
396
+ // lib/data/map-fields.ts
397
+ init_react_import();
398
+
113
399
  // lib/data/default-slots.ts
400
+ init_react_import();
114
401
  var defaultSlots = (value, fields) => Object.keys(fields).reduce(
115
402
  (acc, fieldName) => fields[fieldName].type === "slot" ? __spreadValues({ [fieldName]: [] }, acc) : acc,
116
403
  value
@@ -242,12 +529,12 @@ var walkObject = ({
242
529
  }
243
530
  return flatten(newProps);
244
531
  };
245
- function mapFields(item, mappers, config, recurseSlots = false) {
532
+ function mapFields(item, mappers, config, recurseSlots = false, shouldDefaultSlots = true) {
246
533
  var _a, _b, _c, _d, _e;
247
534
  const itemType = "type" in item ? item.type : "root";
248
535
  const componentConfig = itemType === "root" ? config.root : (_a = config.components) == null ? void 0 : _a[itemType];
249
536
  const newProps = walkObject({
250
- value: defaultSlots((_b = item.props) != null ? _b : {}, (_c = componentConfig == null ? void 0 : componentConfig.fields) != null ? _c : {}),
537
+ value: shouldDefaultSlots ? defaultSlots((_b = item.props) != null ? _b : {}, (_c = componentConfig == null ? void 0 : componentConfig.fields) != null ? _c : {}) : item.props,
251
538
  fields: (_d = componentConfig == null ? void 0 : componentConfig.fields) != null ? _d : {},
252
539
  mappers,
253
540
  id: item.props ? (_e = item.props.id) != null ? _e : "root" : "root",
@@ -265,32 +552,38 @@ function mapFields(item, mappers, config, recurseSlots = false) {
265
552
  });
266
553
  }
267
554
 
555
+ // lib/field-transforms/build-mappers.ts
556
+ init_react_import();
557
+ function buildMappers(transforms, readOnly, forceReadOnly) {
558
+ return Object.keys(transforms).reduce((acc, _fieldType) => {
559
+ const fieldType = _fieldType;
560
+ return __spreadProps(__spreadValues({}, acc), {
561
+ [fieldType]: (_a) => {
562
+ var _b = _a, {
563
+ parentId
564
+ } = _b, params = __objRest(_b, [
565
+ "parentId"
566
+ ]);
567
+ const wildcardPath = params.propPath.replace(/\[\d+\]/g, "[*]");
568
+ const isReadOnly = (readOnly == null ? void 0 : readOnly[params.propPath]) || (readOnly == null ? void 0 : readOnly[wildcardPath]) || forceReadOnly || false;
569
+ const fn = transforms[fieldType];
570
+ return fn == null ? void 0 : fn(__spreadProps(__spreadValues({}, params), {
571
+ isReadOnly,
572
+ componentId: parentId
573
+ }));
574
+ }
575
+ });
576
+ }, {});
577
+ }
578
+
268
579
  // lib/field-transforms/use-field-transforms.tsx
269
580
  function useFieldTransforms(config, item, transforms, readOnly, forceReadOnly) {
270
- const mappers = (0, import_react2.useMemo)(() => {
271
- return Object.keys(transforms).reduce((acc, _fieldType) => {
272
- const fieldType = _fieldType;
273
- return __spreadProps(__spreadValues({}, acc), {
274
- [fieldType]: (_a) => {
275
- var _b = _a, {
276
- parentId
277
- } = _b, params = __objRest(_b, [
278
- "parentId"
279
- ]);
280
- const wildcardPath = params.propPath.replace(/\[\d+\]/g, "[*]");
281
- const isReadOnly = (readOnly == null ? void 0 : readOnly[params.propPath]) || (readOnly == null ? void 0 : readOnly[wildcardPath]) || forceReadOnly || false;
282
- const fn = transforms[fieldType];
283
- return fn == null ? void 0 : fn(__spreadProps(__spreadValues({}, params), {
284
- isReadOnly,
285
- componentId: parentId
286
- }));
287
- }
288
- });
289
- }, {});
290
- }, [transforms, readOnly, forceReadOnly]);
581
+ const mappers = (0, import_react2.useMemo)(
582
+ () => buildMappers(transforms, readOnly, forceReadOnly),
583
+ [transforms, readOnly, forceReadOnly]
584
+ );
291
585
  const transformedProps = (0, import_react2.useMemo)(() => {
292
- const mapped = mapFields(item, mappers, config).props;
293
- return mapped;
586
+ return mapFields(item, mappers, config).props;
294
587
  }, [config, item, mappers]);
295
588
  const mergedProps = (0, import_react2.useMemo)(
296
589
  () => __spreadValues(__spreadValues({}, item.props), transformedProps),
@@ -300,6 +593,7 @@ function useFieldTransforms(config, item, transforms, readOnly, forceReadOnly) {
300
593
  }
301
594
 
302
595
  // lib/field-transforms/default-transforms/slot-transform.tsx
596
+ init_react_import();
303
597
  var getSlotTransform = (renderSlotEdit, renderSlotRender = renderSlotEdit) => ({
304
598
  slot: ({ value: content, propName, field, isReadOnly }) => {
305
599
  const render = isReadOnly ? renderSlotRender : renderSlotEdit;
@@ -326,33 +620,92 @@ function useSlots(config, item, renderSlotEdit, renderSlotRender = renderSlotEdi
326
620
  }
327
621
 
328
622
  // components/SlotRender/server.tsx
329
- var import_react3 = require("react");
623
+ init_react_import();
624
+ var import_react5 = require("react");
625
+
626
+ // components/RichTextEditor/lib/use-richtext-props.tsx
627
+ init_react_import();
628
+ var import_react4 = require("react");
629
+
630
+ // components/RichTextEditor/components/RenderFallback.tsx
631
+ init_react_import();
632
+ init_get_class_name_factory();
633
+ init_styles_module();
330
634
  var import_jsx_runtime = require("react/jsx-runtime");
331
- var SlotRenderPure = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SlotRender, __spreadValues({}, props));
635
+ var getClassName = get_class_name_factory_default("RichTextEditor", styles_module_default);
636
+ function RichTextRenderFallback({ content }) {
637
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: getClassName(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
638
+ "div",
639
+ {
640
+ className: "rich-text",
641
+ dangerouslySetInnerHTML: { __html: content }
642
+ }
643
+ ) });
644
+ }
645
+
646
+ // components/RichTextEditor/lib/use-richtext-props.tsx
647
+ var import_jsx_runtime3 = require("react/jsx-runtime");
648
+ function useRichtextProps(fields, props) {
649
+ const findAllRichtextKeys = (fields2) => {
650
+ if (!fields2) return [];
651
+ const result = [];
652
+ for (const [key, field] of Object.entries(fields2)) {
653
+ if (field.type === "richtext") {
654
+ result.push(key);
655
+ }
656
+ }
657
+ return result;
658
+ };
659
+ const richtextKeys = (0, import_react4.useMemo)(() => findAllRichtextKeys(fields), [fields]);
660
+ const richtextProps = (0, import_react4.useMemo)(() => {
661
+ if (!(richtextKeys == null ? void 0 : richtextKeys.length)) return {};
662
+ const RichTextRender2 = (0, import_react4.lazy)(
663
+ () => Promise.resolve().then(() => (init_Render(), Render_exports)).then((m) => ({
664
+ default: m.RichTextRender
665
+ }))
666
+ );
667
+ return richtextKeys.reduce((acc, key) => {
668
+ acc[key] = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react4.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(RichTextRenderFallback, { content: props[key] }), children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
669
+ RichTextRender2,
670
+ {
671
+ content: props[key],
672
+ field: fields[key]
673
+ }
674
+ ) });
675
+ return acc;
676
+ }, {});
677
+ }, [richtextKeys, props, fields]);
678
+ return richtextProps;
679
+ }
680
+
681
+ // components/SlotRender/server.tsx
682
+ var import_jsx_runtime4 = require("react/jsx-runtime");
683
+ var SlotRenderPure = (props) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SlotRender, __spreadValues({}, props));
332
684
  var Item = ({
333
685
  config,
334
686
  item,
335
687
  metadata
336
688
  }) => {
337
689
  const Component = config.components[item.type];
338
- const props = useSlots(config, item, (slotProps) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SlotRenderPure, __spreadProps(__spreadValues({}, slotProps), { config, metadata })));
339
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
690
+ const props = useSlots(config, item, (slotProps) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SlotRenderPure, __spreadProps(__spreadValues({}, slotProps), { config, metadata })));
691
+ const richtextProps = useRichtextProps(Component.fields, props);
692
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
340
693
  Component.render,
341
- __spreadProps(__spreadValues({}, props), {
694
+ __spreadProps(__spreadValues(__spreadValues({}, props), richtextProps), {
342
695
  puck: __spreadProps(__spreadValues({}, props.puck), {
343
696
  metadata: metadata || {}
344
697
  })
345
698
  })
346
699
  );
347
700
  };
348
- var SlotRender = (0, import_react3.forwardRef)(
701
+ var SlotRender = (0, import_react5.forwardRef)(
349
702
  function SlotRenderInternal({ className, style, content, config, metadata, as }, ref) {
350
703
  const El = as != null ? as : "div";
351
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(El, { className, style, ref, children: content.map((item) => {
704
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(El, { className, style, ref, children: content.map((item) => {
352
705
  if (!config.components[item.type]) {
353
706
  return null;
354
707
  }
355
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
708
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
356
709
  Item,
357
710
  {
358
711
  config,
@@ -366,7 +719,7 @@ var SlotRender = (0, import_react3.forwardRef)(
366
719
  );
367
720
 
368
721
  // components/ServerRender/index.tsx
369
- var import_jsx_runtime2 = require("react/jsx-runtime");
722
+ var import_jsx_runtime5 = require("react/jsx-runtime");
370
723
  function DropZoneRender({
371
724
  zone,
372
725
  data,
@@ -383,11 +736,11 @@ function DropZoneRender({
383
736
  zoneCompound = `${areaId}:${zone}`;
384
737
  content = setupZone(data, zoneCompound).zones[zoneCompound];
385
738
  }
386
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children: content.map((item) => {
739
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, { children: content.map((item) => {
387
740
  const Component = config.components[item.type];
388
741
  const props = __spreadProps(__spreadValues({}, item.props), {
389
742
  puck: {
390
- renderDropZone: ({ zone: zone2 }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
743
+ renderDropZone: ({ zone: zone2 }) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
391
744
  DropZoneRender,
392
745
  {
393
746
  zone: zone2,
@@ -403,9 +756,9 @@ function DropZoneRender({
403
756
  }
404
757
  });
405
758
  const renderItem = __spreadProps(__spreadValues({}, item), { props });
406
- const propsWithSlots = useSlots(config, renderItem, (props2) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SlotRenderPure, __spreadProps(__spreadValues({}, props2), { config, metadata })));
759
+ const propsWithSlots = useSlots(config, renderItem, (props2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SlotRenderPure, __spreadProps(__spreadValues({}, props2), { config, metadata })));
407
760
  if (Component) {
408
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Component.render, __spreadValues({}, propsWithSlots), renderItem.props.id);
761
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Component.render, __spreadValues({}, propsWithSlots), renderItem.props.id);
409
762
  }
410
763
  return null;
411
764
  }) });
@@ -415,12 +768,12 @@ function Render({
415
768
  data,
416
769
  metadata = {}
417
770
  }) {
418
- var _a;
771
+ var _a, _b;
419
772
  const rootProps = "props" in data.root ? data.root.props : data.root;
420
773
  const title = rootProps.title || "";
421
774
  const props = __spreadProps(__spreadValues({}, rootProps), {
422
775
  puck: {
423
- renderDropZone: ({ zone }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
776
+ renderDropZone: ({ zone }) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
424
777
  DropZoneRender,
425
778
  {
426
779
  zone,
@@ -437,9 +790,10 @@ function Render({
437
790
  editMode: false,
438
791
  id: "puck-root"
439
792
  });
440
- const propsWithSlots = useSlots(config, { type: "root", props }, (props2) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SlotRenderPure, __spreadProps(__spreadValues({}, props2), { config, metadata })));
441
- if ((_a = config.root) == null ? void 0 : _a.render) {
442
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(config.root.render, __spreadProps(__spreadValues({}, propsWithSlots), { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
793
+ const propsWithSlots = useSlots(config, { type: "root", props }, (props2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SlotRenderPure, __spreadProps(__spreadValues({}, props2), { config, metadata })));
794
+ const richtextProps = useRichtextProps((_a = config.root) == null ? void 0 : _a.fields, props);
795
+ if ((_b = config.root) == null ? void 0 : _b.render) {
796
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(config.root.render, __spreadProps(__spreadValues(__spreadValues({}, propsWithSlots), richtextProps), { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
443
797
  DropZoneRender,
444
798
  {
445
799
  config,
@@ -449,7 +803,7 @@ function Render({
449
803
  }
450
804
  ) }));
451
805
  }
452
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
806
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
453
807
  DropZoneRender,
454
808
  {
455
809
  config,
@@ -460,7 +814,23 @@ function Render({
460
814
  );
461
815
  }
462
816
 
817
+ // lib/resolve-all-data.ts
818
+ init_react_import();
819
+
820
+ // lib/resolve-component-data.ts
821
+ init_react_import();
822
+
823
+ // lib/data/to-component.ts
824
+ init_react_import();
825
+ var toComponent = (item) => {
826
+ return "type" in item ? item : __spreadProps(__spreadValues({}, item), {
827
+ props: __spreadProps(__spreadValues({}, item.props), { id: "root" }),
828
+ type: "root"
829
+ });
830
+ };
831
+
463
832
  // lib/get-changed.ts
833
+ init_react_import();
464
834
  var import_fast_equals = require("fast-equals");
465
835
  var getChanged = (newItem, oldItem) => {
466
836
  return newItem ? Object.keys(newItem.props || {}).reduce((acc, item) => {
@@ -475,14 +845,22 @@ var getChanged = (newItem, oldItem) => {
475
845
  // lib/resolve-component-data.ts
476
846
  var import_fast_equals2 = require("fast-equals");
477
847
  var cache = { lastChange: {} };
478
- var resolveComponentData = (_0, _1, ..._2) => __async(null, [_0, _1, ..._2], function* (item, config, metadata = {}, onResolveStart, onResolveEnd, trigger = "replace") {
848
+ var resolveComponentData = (_0, _1, ..._2) => __async(null, [_0, _1, ..._2], function* (item, config, metadata = {}, onResolveStart, onResolveEnd, trigger = "replace", parent = null) {
479
849
  const configForItem = "type" in item && item.type !== "root" ? config.components[item.type] : config.root;
480
850
  const resolvedItem = __spreadValues({}, item);
481
851
  const shouldRunResolver = (configForItem == null ? void 0 : configForItem.resolveData) && item.props;
482
852
  const id = "id" in item.props ? item.props.id : "root";
483
853
  if (shouldRunResolver) {
484
- const { item: oldItem = null, resolved = {} } = cache.lastChange[id] || {};
485
- if (trigger !== "force" && item && (0, import_fast_equals2.deepEqual)(item, oldItem)) {
854
+ const {
855
+ item: oldItem = null,
856
+ resolved = {},
857
+ parentId: oldParentId = null
858
+ } = cache.lastChange[id] || {};
859
+ const isRootOrInserted = oldParentId === null;
860
+ const parentChanged = !isRootOrInserted && (parent == null ? void 0 : parent.props.id) !== oldParentId;
861
+ const dataChanged = item && !(0, import_fast_equals2.deepEqual)(item, oldItem);
862
+ const shouldSkip = trigger === "move" && !parentChanged || trigger !== "move" && trigger !== "force" && !dataChanged;
863
+ if (shouldSkip) {
486
864
  return { node: resolved, didChange: false };
487
865
  }
488
866
  const changed = getChanged(item, oldItem);
@@ -493,13 +871,15 @@ var resolveComponentData = (_0, _1, ..._2) => __async(null, [_0, _1, ..._2], fun
493
871
  changed,
494
872
  lastData: oldItem,
495
873
  metadata: __spreadValues(__spreadValues({}, metadata), configForItem.metadata),
496
- trigger
874
+ trigger,
875
+ parent
497
876
  });
498
877
  resolvedItem.props = __spreadValues(__spreadValues({}, item.props), resolvedProps);
499
878
  if (Object.keys(readOnly).length) {
500
879
  resolvedItem.readOnly = readOnly;
501
880
  }
502
881
  }
882
+ const itemAsComponentData = toComponent(resolvedItem);
503
883
  let itemWithResolvedChildren = yield mapFields(
504
884
  resolvedItem,
505
885
  {
@@ -514,7 +894,8 @@ var resolveComponentData = (_0, _1, ..._2) => __async(null, [_0, _1, ..._2], fun
514
894
  metadata,
515
895
  onResolveStart,
516
896
  onResolveEnd,
517
- trigger
897
+ trigger,
898
+ itemAsComponentData
518
899
  )).node;
519
900
  })
520
901
  )
@@ -528,7 +909,8 @@ var resolveComponentData = (_0, _1, ..._2) => __async(null, [_0, _1, ..._2], fun
528
909
  }
529
910
  cache.lastChange[id] = {
530
911
  item,
531
- resolved: itemWithResolvedChildren
912
+ resolved: itemWithResolvedChildren,
913
+ parentId: parent == null ? void 0 : parent.props.id
532
914
  };
533
915
  return {
534
916
  node: itemWithResolvedChildren,
@@ -536,26 +918,50 @@ var resolveComponentData = (_0, _1, ..._2) => __async(null, [_0, _1, ..._2], fun
536
918
  };
537
919
  });
538
920
 
921
+ // lib/group-zones-by-component.ts
922
+ init_react_import();
923
+
924
+ // lib/get-zone-id.ts
925
+ init_react_import();
926
+ var getZoneId = (zoneCompound) => {
927
+ if (!zoneCompound) {
928
+ return [];
929
+ }
930
+ if (zoneCompound && zoneCompound.indexOf(":") > -1) {
931
+ return zoneCompound.split(":");
932
+ }
933
+ return [rootDroppableId, zoneCompound];
934
+ };
935
+
936
+ // lib/group-zones-by-component.ts
937
+ var groupZonesByComponent = (data) => {
938
+ var _a;
939
+ const zoneEntries = Object.entries((_a = data.zones) != null ? _a : {});
940
+ return zoneEntries.reduce((acc, [zoneCompound, zoneContent]) => {
941
+ const [componentId, zoneName] = getZoneId(zoneCompound);
942
+ if (!componentId.length || !zoneName.length) return acc;
943
+ if (!acc[componentId]) {
944
+ acc[componentId] = [];
945
+ }
946
+ acc[componentId].push({ zoneCompound, content: zoneContent });
947
+ return acc;
948
+ }, {});
949
+ };
950
+
539
951
  // lib/data/default-data.ts
952
+ init_react_import();
540
953
  var defaultData = (data) => __spreadProps(__spreadValues({}, data), {
541
954
  root: data.root || {},
542
955
  content: data.content || []
543
956
  });
544
957
 
545
- // lib/data/to-component.ts
546
- var toComponent = (item) => {
547
- return "type" in item ? item : __spreadProps(__spreadValues({}, item), {
548
- props: __spreadProps(__spreadValues({}, item.props), { id: "root" }),
549
- type: "root"
550
- });
551
- };
552
-
553
958
  // lib/resolve-all-data.ts
554
959
  function resolveAllData(_0, _1) {
555
960
  return __async(this, arguments, function* (data, config, metadata = {}, onResolveStart, onResolveEnd) {
556
- var _a;
557
961
  const defaultedData = defaultData(data);
558
- const resolveNode = (_node) => __async(null, null, function* () {
962
+ const zonesByComponent = groupZonesByComponent(defaultedData);
963
+ let resolvedZones = {};
964
+ const resolveNode = (_node, parent) => __async(null, null, function* () {
559
965
  const node = toComponent(_node);
560
966
  onResolveStart == null ? void 0 : onResolveStart(node);
561
967
  const resolved = (yield resolveComponentData(
@@ -566,41 +972,52 @@ function resolveAllData(_0, _1) {
566
972
  },
567
973
  () => {
568
974
  },
569
- "force"
975
+ "force",
976
+ parent
570
977
  )).node;
571
- const resolvedDeep = yield mapFields(
978
+ const resolvedAsComponent = toComponent(resolved);
979
+ const resolvedDeepPromise = mapFields(
572
980
  resolved,
573
- { slot: ({ value }) => processContent(value) },
981
+ {
982
+ slot: ({ value }) => processContent(value, resolvedAsComponent)
983
+ },
574
984
  config
575
985
  );
986
+ let resolveZonePromises = [];
987
+ if (zonesByComponent[resolvedAsComponent.props.id]) {
988
+ resolveZonePromises = zonesByComponent[resolvedAsComponent.props.id].map(
989
+ (_02) => __async(null, [_02], function* ({ zoneCompound, content }) {
990
+ resolvedZones[zoneCompound] = yield processContent(
991
+ content,
992
+ resolvedAsComponent
993
+ );
994
+ })
995
+ );
996
+ }
997
+ const resolvedDeep = yield resolvedDeepPromise;
998
+ yield Promise.all(resolveZonePromises);
576
999
  onResolveEnd == null ? void 0 : onResolveEnd(toComponent(resolvedDeep));
577
1000
  return resolvedDeep;
578
1001
  });
579
- const processContent = (content) => __async(null, null, function* () {
580
- return Promise.all(content.map(resolveNode));
1002
+ const processContent = (content, parent) => __async(null, null, function* () {
1003
+ return Promise.all(content.map((item) => resolveNode(item, parent)));
581
1004
  });
582
- const processZones = () => __async(null, null, function* () {
583
- var _a2;
584
- const zones = (_a2 = data.zones) != null ? _a2 : {};
585
- Object.entries(zones).forEach((_02) => __async(null, [_02], function* ([zoneKey, content]) {
586
- zones[zoneKey] = yield Promise.all(content.map(resolveNode));
587
- }));
588
- return zones;
589
- });
590
- const dynamic = {
591
- root: yield resolveNode(defaultedData.root),
592
- content: yield processContent(defaultedData.content),
593
- zones: yield processZones()
594
- };
595
- Object.keys((_a = defaultedData.zones) != null ? _a : {}).forEach((zoneKey) => __async(null, null, function* () {
596
- const content = defaultedData.zones[zoneKey];
597
- dynamic.zones[zoneKey] = yield processContent(content);
598
- }), {});
599
- return dynamic;
1005
+ const result = defaultData({});
1006
+ result.root = yield resolveNode(defaultedData.root, null);
1007
+ result.content = yield processContent(
1008
+ defaultedData.content,
1009
+ toComponent(result.root)
1010
+ );
1011
+ result.zones = resolvedZones;
1012
+ return result;
600
1013
  });
601
1014
  }
602
1015
 
1016
+ // lib/transform-props.ts
1017
+ init_react_import();
1018
+
603
1019
  // lib/data/walk-tree.ts
1020
+ init_react_import();
604
1021
  function walkTree(data, config, callbackFn) {
605
1022
  var _a, _b;
606
1023
  const walkItem = (item) => {
@@ -668,11 +1085,19 @@ function transformProps(data, propTransforms, config = { components: {} }) {
668
1085
  return updatedData;
669
1086
  }
670
1087
 
1088
+ // lib/migrate.ts
1089
+ init_react_import();
1090
+
1091
+ // store/default-app-state.ts
1092
+ init_react_import();
1093
+
671
1094
  // components/ViewportControls/default-viewports.ts
1095
+ init_react_import();
672
1096
  var defaultViewports = [
673
1097
  { width: 360, height: "auto", icon: "Smartphone", label: "Small" },
674
1098
  { width: 768, height: "auto", icon: "Tablet", label: "Medium" },
675
- { width: 1280, height: "auto", icon: "Monitor", label: "Large" }
1099
+ { width: 1280, height: "auto", icon: "Monitor", label: "Large" },
1100
+ { width: "100%", height: "auto", icon: "FullWidth", label: "Full-width" }
676
1101
  ];
677
1102
 
678
1103
  // store/default-app-state.ts
@@ -694,7 +1119,8 @@ var defaultAppState = {
694
1119
  options: [],
695
1120
  controlsVisible: true
696
1121
  },
697
- field: { focus: null }
1122
+ field: { focus: null },
1123
+ plugin: { current: null }
698
1124
  },
699
1125
  indexes: {
700
1126
  nodes: {},
@@ -702,18 +1128,11 @@ var defaultAppState = {
702
1128
  }
703
1129
  };
704
1130
 
705
- // lib/get-zone-id.ts
706
- var getZoneId = (zoneCompound) => {
707
- if (!zoneCompound) {
708
- return [];
709
- }
710
- if (zoneCompound && zoneCompound.indexOf(":") > -1) {
711
- return zoneCompound.split(":");
712
- }
713
- return [rootDroppableId, zoneCompound];
714
- };
1131
+ // lib/data/walk-app-state.ts
1132
+ init_react_import();
715
1133
 
716
1134
  // lib/data/for-related-zones.ts
1135
+ init_react_import();
717
1136
  function forRelatedZones(item, data, cb, path = []) {
718
1137
  Object.entries(data.zones || {}).forEach(([zoneCompound, content]) => {
719
1138
  const [parentId] = getZoneId(zoneCompound);
@@ -724,18 +1143,39 @@ function forRelatedZones(item, data, cb, path = []) {
724
1143
  }
725
1144
 
726
1145
  // lib/data/flatten-node.ts
1146
+ init_react_import();
727
1147
  var import_flat = __toESM(require("flat"));
728
1148
 
729
1149
  // lib/data/strip-slots.ts
1150
+ init_react_import();
730
1151
  var stripSlots = (data, config) => {
731
1152
  return mapFields(data, { slot: () => null }, config);
732
1153
  };
733
1154
 
734
1155
  // lib/data/flatten-node.ts
735
1156
  var { flatten: flatten2, unflatten } = import_flat.default;
1157
+ function isEmptyArrayOrObject(val) {
1158
+ if (Array.isArray(val)) {
1159
+ return val.length === 0;
1160
+ }
1161
+ if (val != null && Object.prototype.toString.call(val) === "[object Object]") {
1162
+ return Object.keys(val).length === 0;
1163
+ }
1164
+ return false;
1165
+ }
1166
+ function stripEmptyObjects(props) {
1167
+ const result = {};
1168
+ for (const key in props) {
1169
+ if (!Object.prototype.hasOwnProperty.call(props, key)) continue;
1170
+ const val = props[key];
1171
+ if (isEmptyArrayOrObject(val)) continue;
1172
+ result[key] = val;
1173
+ }
1174
+ return result;
1175
+ }
736
1176
  var flattenNode = (node, config) => {
737
1177
  return __spreadProps(__spreadValues({}, node), {
738
- props: flatten2(stripSlots(node, config).props)
1178
+ props: stripEmptyObjects(flatten2(stripSlots(node, config).props))
739
1179
  });
740
1180
  };
741
1181
 
@@ -994,3 +1434,12 @@ function migrate(data, config, migrationOptions) {
994
1434
  transformProps,
995
1435
  walkTree
996
1436
  });
1437
+ /*! Bundled license information:
1438
+
1439
+ classnames/index.js:
1440
+ (*!
1441
+ Copyright (c) 2018 Jed Watson.
1442
+ Licensed under the MIT License (MIT), see
1443
+ http://jedwatson.github.io/classnames
1444
+ *)
1445
+ */