@uniformdev/canvas-vue 19.13.0 → 19.14.1-alpha.1

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.
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ import { PropType, ConcreteComponent, Ref, ComputedRef } from 'vue-demi';
3
3
  import * as _uniformdev_canvas from '@uniformdev/canvas';
4
4
  import { ComponentInstance, ComponentParameter, RootComponentInstance, UpdateCompositionMessage, SubscribeToCompositionOptions } from '@uniformdev/canvas';
5
5
  export { createUniformApiEnhancer } from '@uniformdev/canvas';
6
+ import { RichTextNode } from '@uniformdev/richtext';
6
7
 
7
8
  type DefaultNotImplementedComponentProps = {
8
9
  component: ComponentInstance;
@@ -1446,6 +1447,84 @@ declare const UniformComposition: vue_demi.DefineComponent<{
1446
1447
  behaviorTracking: "onLoad" | "onView" | undefined;
1447
1448
  }>;
1448
1449
 
1450
+ type RichTextComponentProps<TNode extends RichTextNode = RichTextNode> = {
1451
+ node: TNode;
1452
+ };
1453
+ type RichTextRendererComponent<TNode extends RichTextNode = RichTextNode> = ConcreteComponent<RichTextComponentProps<TNode>>;
1454
+ /**
1455
+ * Function that maps a Rich Text node instance to its React component to render it.
1456
+ * The resolver would commonly inspect the `type` of the component to decide.
1457
+ */
1458
+ type RenderRichTextComponentResolver = (node: RichTextNode) => ConcreteComponent<RichTextComponentProps<RichTextNode>> | null | undefined;
1459
+
1460
+ declare const HeadingRichTextNode: RichTextRendererComponent;
1461
+
1462
+ declare const LinkRichTextNode: RichTextRendererComponent;
1463
+
1464
+ declare const ListItemRichTextNode: RichTextRendererComponent;
1465
+
1466
+ declare const ListRichTextNode: RichTextRendererComponent;
1467
+
1468
+ declare const ParagraphRichTextNode: RichTextRendererComponent;
1469
+
1470
+ declare const QuoteRichTextNode: RichTextRendererComponent;
1471
+
1472
+ declare const RootRichTextNode: RichTextRendererComponent;
1473
+
1474
+ declare const TextRichTextNode: RichTextRendererComponent;
1475
+
1476
+ type UniformRichTextProps = {
1477
+ parameterId: string;
1478
+ resolveRichTextRenderer?: RenderRichTextComponentResolver;
1479
+ };
1480
+ declare const UniformRichText: vue_demi.DefineComponent<{
1481
+ parameterId: {
1482
+ type: StringConstructor;
1483
+ required: true;
1484
+ };
1485
+ resolveRichTextRenderer: {
1486
+ type: PropType<RenderRichTextComponentResolver | undefined>;
1487
+ required: false;
1488
+ };
1489
+ }, (() => vue_demi.VNode<vue_demi.RendererNode, vue_demi.RendererElement, {
1490
+ [key: string]: any;
1491
+ }>) | (() => null), unknown, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, {}, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<vue_demi.ExtractPropTypes<{
1492
+ parameterId: {
1493
+ type: StringConstructor;
1494
+ required: true;
1495
+ };
1496
+ resolveRichTextRenderer: {
1497
+ type: PropType<RenderRichTextComponentResolver | undefined>;
1498
+ required: false;
1499
+ };
1500
+ }>>, {}>;
1501
+
1502
+ type UniformRichTextNodeProps = {
1503
+ node: RichTextNode;
1504
+ resolveRichTextRenderer?: RenderRichTextComponentResolver;
1505
+ };
1506
+ declare const UniformRichTextNode: vue_demi.DefineComponent<{
1507
+ node: {
1508
+ type: PropType<RichTextNode>;
1509
+ required: true;
1510
+ };
1511
+ resolveRichTextRenderer: {
1512
+ type: PropType<RenderRichTextComponentResolver | undefined>;
1513
+ required: false;
1514
+ };
1515
+ }, (() => null) | (() => vue_demi.VNode<vue_demi.RendererNode, vue_demi.RendererElement, {
1516
+ [key: string]: any;
1517
+ }>), unknown, {}, {}, vue_demi.ComponentOptionsMixin, vue_demi.ComponentOptionsMixin, {}, string, vue_demi.VNodeProps & vue_demi.AllowedComponentProps & vue_demi.ComponentCustomProps, Readonly<vue_demi.ExtractPropTypes<{
1518
+ node: {
1519
+ type: PropType<RichTextNode>;
1520
+ required: true;
1521
+ };
1522
+ resolveRichTextRenderer: {
1523
+ type: PropType<RenderRichTextComponentResolver | undefined>;
1524
+ required: false;
1525
+ };
1526
+ }>>, {}>;
1527
+
1449
1528
  type UniformSlotProps = {
1450
1529
  /** Name of the slot to render */
1451
1530
  name?: string;
@@ -1494,4 +1573,4 @@ declare const globalCompositionEnhancerInjectionKey = "uniformGlobalCompositionE
1494
1573
  */
1495
1574
  declare function convertComponentToProps<T = unknown>(component: ComponentInstance): ComponentProps<T>;
1496
1575
 
1497
- export { ComponentProps, DefaultNotImplementedComponent, DefaultNotImplementedComponentProps, PersonalizeComponent, ResolveRenderer, TestComponent, UniformComponent, UniformComponentProps, UniformComposition, UniformCompositionProps, UniformSlot, UniformSlotProps, UseCompositionEventEffectOptions, UseUniformContextualEditingProps, convertComponentToProps, globalCompositionEnhancerInjectionKey, useCompositionEventEffect, useUniformContextualEditing, useUniformCurrentComponent, useUniformCurrentComposition };
1576
+ export { ComponentProps, DefaultNotImplementedComponent, DefaultNotImplementedComponentProps, HeadingRichTextNode, LinkRichTextNode, ListItemRichTextNode, ListRichTextNode, ParagraphRichTextNode, PersonalizeComponent, QuoteRichTextNode, RenderRichTextComponentResolver, ResolveRenderer, RichTextComponentProps, RichTextRendererComponent, RootRichTextNode, TestComponent, TextRichTextNode, UniformComponent, UniformComponentProps, UniformComposition, UniformCompositionProps, UniformRichText, UniformRichTextNode, UniformRichTextNodeProps, UniformRichTextProps, UniformSlot, UniformSlotProps, UseCompositionEventEffectOptions, UseUniformContextualEditingProps, convertComponentToProps, globalCompositionEnhancerInjectionKey, useCompositionEventEffect, useUniformContextualEditing, useUniformCurrentComponent, useUniformCurrentComposition };
package/dist/index.esm.js CHANGED
@@ -381,6 +381,198 @@ var UniformComposition = defineComponent4({
381
381
  }
382
382
  });
383
383
 
384
+ // src/components/UniformRichText/nodes/HeadingRichTextNode.ts
385
+ import { h as h5 } from "vue-demi";
386
+ var HeadingRichTextNode = (props, context) => {
387
+ const { tag } = props.node;
388
+ return h5(tag != null ? tag : "h1", {}, context.slots);
389
+ };
390
+
391
+ // src/components/UniformRichText/nodes/LinkRichTextNode.ts
392
+ import { linkParamValueToHref } from "@uniformdev/richtext";
393
+ import { h as h6 } from "vue-demi";
394
+ var LinkRichTextNode = (props, context) => {
395
+ const { link } = props.node;
396
+ return h6(
397
+ "a",
398
+ {
399
+ href: linkParamValueToHref(link)
400
+ },
401
+ context.slots
402
+ );
403
+ };
404
+
405
+ // src/components/UniformRichText/nodes/ListItemRichTextNode.ts
406
+ import { h as h7 } from "vue-demi";
407
+ var ListItemRichTextNode = (props, context) => {
408
+ const { value } = props.node;
409
+ return h7(
410
+ "li",
411
+ {
412
+ value: Number.isFinite(value) && value > 0 ? value + 1 : void 0
413
+ },
414
+ context.slots
415
+ );
416
+ };
417
+
418
+ // src/components/UniformRichText/nodes/ListRichTextNode.ts
419
+ import { h as h8 } from "vue-demi";
420
+ var ListRichTextNode = (props, context) => {
421
+ const { tag } = props.node;
422
+ return h8(tag != null ? tag : "h1", {}, context.slots);
423
+ };
424
+
425
+ // src/components/UniformRichText/nodes/ParagraphRichTextNode.ts
426
+ import { isPureDirection, isPureTextAlign } from "@uniformdev/richtext";
427
+ import { h as h9 } from "vue-demi";
428
+ var ParagraphRichTextNode = (props, context) => {
429
+ const { format, direction } = props.node;
430
+ return h9(
431
+ "p",
432
+ {
433
+ dir: isPureDirection(direction) ? direction : void 0,
434
+ style: isPureTextAlign(format) ? { textAlign: format } : void 0
435
+ },
436
+ context.slots
437
+ );
438
+ };
439
+
440
+ // src/components/UniformRichText/nodes/QuoteRichTextNode.ts
441
+ import { h as h10 } from "vue-demi";
442
+ var QuoteRichTextNode = (props, context) => {
443
+ return h10("blockquote", {}, context.slots);
444
+ };
445
+
446
+ // src/components/UniformRichText/nodes/RootRichTextNode.ts
447
+ import { h as h11 } from "vue-demi";
448
+ var RootRichTextNode = (props, c) => {
449
+ return h11(() => c.slots.default ? c.slots.default() : null);
450
+ };
451
+
452
+ // src/components/UniformRichText/nodes/TextRichTextNode.ts
453
+ import { getRichTextTagsFromTextFormat } from "@uniformdev/richtext";
454
+ import { h as h12 } from "vue-demi";
455
+ var TextRichTextNode = (props) => {
456
+ const { format, text } = props.node;
457
+ const tags = getRichTextTagsFromTextFormat(format);
458
+ return tags.length > 0 ? tags.reduceRight(
459
+ (children, tag) => {
460
+ return h12(tag, null, children);
461
+ },
462
+ {
463
+ default: () => text
464
+ }
465
+ ) : h12(() => text);
466
+ };
467
+
468
+ // src/components/UniformRichText/UniformRichText.ts
469
+ import { isRichTextNode as isRichTextNode2 } from "@uniformdev/richtext";
470
+ import { computed as computed4, defineComponent as defineComponent6, h as h16 } from "vue-demi";
471
+
472
+ // src/components/UniformRichText/UniformRichTextNode.ts
473
+ import { isRichTextNode } from "@uniformdev/richtext";
474
+ import { defineComponent as defineComponent5, h as h15 } from "vue-demi";
475
+
476
+ // src/components/UniformRichText/nodes/LinebreakRichTextNode.ts
477
+ import { h as h13 } from "vue-demi";
478
+ var LinebreakRichTextNode = () => {
479
+ return h13("br", {});
480
+ };
481
+
482
+ // src/components/UniformRichText/nodes/TabRichTextNode.ts
483
+ import { h as h14 } from "vue-demi";
484
+ var TabRichTextNode = () => {
485
+ return h14("", {}, " ");
486
+ };
487
+
488
+ // src/components/UniformRichText/UniformRichTextNode.ts
489
+ var UniformRichTextNode = defineComponent5({
490
+ name: "UniformRichTextNode",
491
+ props: {
492
+ node: {
493
+ type: Object,
494
+ required: true
495
+ },
496
+ resolveRichTextRenderer: {
497
+ type: Function,
498
+ required: false
499
+ }
500
+ },
501
+ setup(props, context) {
502
+ var _a;
503
+ const node = props.node;
504
+ if (!isRichTextNode(node))
505
+ return () => null;
506
+ let NodeRenderer = node.type in context.slots ? context.slots[node.type] : (_a = props.resolveRichTextRenderer) == null ? void 0 : _a.call(props, node);
507
+ if (typeof NodeRenderer === "undefined") {
508
+ NodeRenderer = resolveRichTextDefaultRenderer(node);
509
+ }
510
+ if (!NodeRenderer) {
511
+ return () => null;
512
+ }
513
+ const children = node.children ? node.children.map(
514
+ (childNode) => h15(
515
+ UniformRichTextNode,
516
+ { node: childNode, resolveRichTextRenderer: props.resolveRichTextRenderer },
517
+ context.slots
518
+ )
519
+ ) : [];
520
+ return () => h15(NodeRenderer, { node, children: h15(() => children) }, () => children);
521
+ }
522
+ });
523
+ var rendererMap = /* @__PURE__ */ new Map([
524
+ ["heading", HeadingRichTextNode],
525
+ ["linebreak", LinebreakRichTextNode],
526
+ ["link", LinkRichTextNode],
527
+ ["list", ListRichTextNode],
528
+ ["listitem", ListItemRichTextNode],
529
+ ["paragraph", ParagraphRichTextNode],
530
+ ["quote", QuoteRichTextNode],
531
+ ["root", RootRichTextNode],
532
+ ["text", TextRichTextNode],
533
+ ["tab", TabRichTextNode]
534
+ ]);
535
+ var resolveRichTextDefaultRenderer = (node) => {
536
+ return rendererMap.get(node.type);
537
+ };
538
+
539
+ // src/components/UniformRichText/UniformRichText.ts
540
+ var UniformRichText = defineComponent6({
541
+ name: "UniformRichText",
542
+ props: {
543
+ parameterId: {
544
+ type: String,
545
+ required: true
546
+ },
547
+ resolveRichTextRenderer: {
548
+ type: Function,
549
+ required: false
550
+ }
551
+ },
552
+ setup(props, context) {
553
+ var _a;
554
+ const { data: componentData } = useUniformCurrentComponent();
555
+ const value = computed4(() => {
556
+ var _a2;
557
+ const parameter = (_a2 = componentData == null ? void 0 : componentData.parameters) == null ? void 0 : _a2[props.parameterId];
558
+ return parameter == null ? void 0 : parameter.value;
559
+ });
560
+ const root = (_a = value.value) == null ? void 0 : _a.root;
561
+ if (isRichTextNode2(root)) {
562
+ return () => h16(
563
+ UniformRichTextNode,
564
+ {
565
+ node: root,
566
+ resolveRichTextRenderer: props.resolveRichTextRenderer
567
+ },
568
+ context.slots
569
+ );
570
+ } else {
571
+ return () => null;
572
+ }
573
+ }
574
+ });
575
+
384
576
  // src/components/UniformSlot.ts
385
577
  import {
386
578
  CANVAS_PERSONALIZE_SLOT,
@@ -391,7 +583,7 @@ import {
391
583
  mapSlotToTestVariations
392
584
  } from "@uniformdev/canvas";
393
585
  import { Personalize, Test } from "@uniformdev/context-vue";
394
- import { computed as computed4, defineComponent as defineComponent5, h as h5 } from "vue-demi";
586
+ import { computed as computed5, defineComponent as defineComponent7, h as h17 } from "vue-demi";
395
587
 
396
588
  // src/utils/convertComponentToProps.ts
397
589
  function convertComponentToProps(component) {
@@ -416,7 +608,7 @@ function normalizePropName(name) {
416
608
  }
417
609
 
418
610
  // src/components/UniformSlot.ts
419
- var UniformSlot = defineComponent5({
611
+ var UniformSlot = defineComponent7({
420
612
  name: "UniformSlot",
421
613
  inheritAttrs: false,
422
614
  props: {
@@ -435,7 +627,7 @@ var UniformSlot = defineComponent5({
435
627
  if (!parentData || !resolveRenderer) {
436
628
  throw new Error("<UniformSlot /> can only be used inside a <UniformComposition />");
437
629
  }
438
- const slotItems = computed4(() => {
630
+ const slotItems = computed5(() => {
439
631
  var _a2, _b, _c;
440
632
  if (props.name) {
441
633
  return (_b = (_a2 = parentData.slots) == null ? void 0 : _a2[props.name]) != null ? _b : [];
@@ -462,7 +654,7 @@ function renderPersonalizeComponent(component, resolveRenderer) {
462
654
  const parameters = component == null ? void 0 : component.parameters;
463
655
  const processedVariants = mapSlotToPersonalizedVariations((_a = component.slots) == null ? void 0 : _a.pz);
464
656
  const name = (_d = (_c = (_b = component.parameters) == null ? void 0 : _b.trackingEventName) == null ? void 0 : _c.value) != null ? _d : "Untitled Personalization";
465
- return h5(Personalize, {
657
+ return h17(Personalize, {
466
658
  name,
467
659
  // TODO: Fix the `as unknown`
468
660
  component: (variant) => resolveRenderer(variant),
@@ -475,7 +667,7 @@ function renderTestComponent(component, resolveRenderer) {
475
667
  const variants = (_b = (_a = component == null ? void 0 : component.slots) == null ? void 0 : _a.test) != null ? _b : [];
476
668
  const testName = (_e = (_d = (_c = component == null ? void 0 : component.parameters) == null ? void 0 : _c.test) == null ? void 0 : _d.value) != null ? _e : "Untitled Test";
477
669
  const finalVariants = mapSlotToTestVariations(variants);
478
- return h5(Test, {
670
+ return h17(Test, {
479
671
  variations: finalVariants,
480
672
  name: testName,
481
673
  component: (variant) => resolveRenderer(variant)
@@ -529,13 +721,13 @@ function renderComponent({
529
721
  const resolvedComponent = resolveRenderer == null ? void 0 : resolveRenderer(component);
530
722
  if (resolvedComponent) {
531
723
  const props = convertComponentToProps(component);
532
- return h5(
724
+ return h17(
533
725
  UniformComponent,
534
726
  { data: component, resolveRenderer },
535
- () => h5(
727
+ () => h17(
536
728
  ContextualEditingComponentWrapper,
537
729
  { component, parentComponent, slotName, indexInSlot, slotChildrenCount },
538
- { default: () => h5(resolvedComponent, props), emptyPlaceholder }
730
+ { default: () => h17(resolvedComponent, props), emptyPlaceholder }
539
731
  )
540
732
  );
541
733
  }
@@ -543,7 +735,7 @@ function renderComponent({
543
735
  `[canvas] found component of type '${component.type}' which the 'resolveRenderer' prop returned no component for. Nothing will be rendered. The resolveRenderer function may need to be extended to handle the new type.`,
544
736
  component
545
737
  );
546
- return h5("");
738
+ return h17("");
547
739
  }
548
740
 
549
741
  // src/composables/useCompositionEventEffect.ts
@@ -584,8 +776,18 @@ async function useCompositionEventEffect({
584
776
  }
585
777
  export {
586
778
  DefaultNotImplementedComponent,
779
+ HeadingRichTextNode,
780
+ LinkRichTextNode,
781
+ ListItemRichTextNode,
782
+ ListRichTextNode,
783
+ ParagraphRichTextNode,
784
+ QuoteRichTextNode,
785
+ RootRichTextNode,
786
+ TextRichTextNode,
587
787
  UniformComponent,
588
788
  UniformComposition,
789
+ UniformRichText,
790
+ UniformRichTextNode,
589
791
  UniformSlot,
590
792
  convertComponentToProps,
591
793
  createUniformApiEnhancer,
package/dist/index.js CHANGED
@@ -21,8 +21,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  DefaultNotImplementedComponent: () => DefaultNotImplementedComponent,
24
+ HeadingRichTextNode: () => HeadingRichTextNode,
25
+ LinkRichTextNode: () => LinkRichTextNode,
26
+ ListItemRichTextNode: () => ListItemRichTextNode,
27
+ ListRichTextNode: () => ListRichTextNode,
28
+ ParagraphRichTextNode: () => ParagraphRichTextNode,
29
+ QuoteRichTextNode: () => QuoteRichTextNode,
30
+ RootRichTextNode: () => RootRichTextNode,
31
+ TextRichTextNode: () => TextRichTextNode,
24
32
  UniformComponent: () => UniformComponent,
25
33
  UniformComposition: () => UniformComposition,
34
+ UniformRichText: () => UniformRichText,
35
+ UniformRichTextNode: () => UniformRichTextNode,
26
36
  UniformSlot: () => UniformSlot,
27
37
  convertComponentToProps: () => convertComponentToProps,
28
38
  createUniformApiEnhancer: () => import_canvas3.createUniformApiEnhancer,
@@ -389,10 +399,202 @@ var UniformComposition = (0, import_vue_demi5.defineComponent)({
389
399
  }
390
400
  });
391
401
 
402
+ // src/components/UniformRichText/nodes/HeadingRichTextNode.ts
403
+ var import_vue_demi6 = require("vue-demi");
404
+ var HeadingRichTextNode = (props, context) => {
405
+ const { tag } = props.node;
406
+ return (0, import_vue_demi6.h)(tag != null ? tag : "h1", {}, context.slots);
407
+ };
408
+
409
+ // src/components/UniformRichText/nodes/LinkRichTextNode.ts
410
+ var import_richtext = require("@uniformdev/richtext");
411
+ var import_vue_demi7 = require("vue-demi");
412
+ var LinkRichTextNode = (props, context) => {
413
+ const { link } = props.node;
414
+ return (0, import_vue_demi7.h)(
415
+ "a",
416
+ {
417
+ href: (0, import_richtext.linkParamValueToHref)(link)
418
+ },
419
+ context.slots
420
+ );
421
+ };
422
+
423
+ // src/components/UniformRichText/nodes/ListItemRichTextNode.ts
424
+ var import_vue_demi8 = require("vue-demi");
425
+ var ListItemRichTextNode = (props, context) => {
426
+ const { value } = props.node;
427
+ return (0, import_vue_demi8.h)(
428
+ "li",
429
+ {
430
+ value: Number.isFinite(value) && value > 0 ? value + 1 : void 0
431
+ },
432
+ context.slots
433
+ );
434
+ };
435
+
436
+ // src/components/UniformRichText/nodes/ListRichTextNode.ts
437
+ var import_vue_demi9 = require("vue-demi");
438
+ var ListRichTextNode = (props, context) => {
439
+ const { tag } = props.node;
440
+ return (0, import_vue_demi9.h)(tag != null ? tag : "h1", {}, context.slots);
441
+ };
442
+
443
+ // src/components/UniformRichText/nodes/ParagraphRichTextNode.ts
444
+ var import_richtext2 = require("@uniformdev/richtext");
445
+ var import_vue_demi10 = require("vue-demi");
446
+ var ParagraphRichTextNode = (props, context) => {
447
+ const { format, direction } = props.node;
448
+ return (0, import_vue_demi10.h)(
449
+ "p",
450
+ {
451
+ dir: (0, import_richtext2.isPureDirection)(direction) ? direction : void 0,
452
+ style: (0, import_richtext2.isPureTextAlign)(format) ? { textAlign: format } : void 0
453
+ },
454
+ context.slots
455
+ );
456
+ };
457
+
458
+ // src/components/UniformRichText/nodes/QuoteRichTextNode.ts
459
+ var import_vue_demi11 = require("vue-demi");
460
+ var QuoteRichTextNode = (props, context) => {
461
+ return (0, import_vue_demi11.h)("blockquote", {}, context.slots);
462
+ };
463
+
464
+ // src/components/UniformRichText/nodes/RootRichTextNode.ts
465
+ var import_vue_demi12 = require("vue-demi");
466
+ var RootRichTextNode = (props, c) => {
467
+ return (0, import_vue_demi12.h)(() => c.slots.default ? c.slots.default() : null);
468
+ };
469
+
470
+ // src/components/UniformRichText/nodes/TextRichTextNode.ts
471
+ var import_richtext3 = require("@uniformdev/richtext");
472
+ var import_vue_demi13 = require("vue-demi");
473
+ var TextRichTextNode = (props) => {
474
+ const { format, text } = props.node;
475
+ const tags = (0, import_richtext3.getRichTextTagsFromTextFormat)(format);
476
+ return tags.length > 0 ? tags.reduceRight(
477
+ (children, tag) => {
478
+ return (0, import_vue_demi13.h)(tag, null, children);
479
+ },
480
+ {
481
+ default: () => text
482
+ }
483
+ ) : (0, import_vue_demi13.h)(() => text);
484
+ };
485
+
486
+ // src/components/UniformRichText/UniformRichText.ts
487
+ var import_richtext5 = require("@uniformdev/richtext");
488
+ var import_vue_demi17 = require("vue-demi");
489
+
490
+ // src/components/UniformRichText/UniformRichTextNode.ts
491
+ var import_richtext4 = require("@uniformdev/richtext");
492
+ var import_vue_demi16 = require("vue-demi");
493
+
494
+ // src/components/UniformRichText/nodes/LinebreakRichTextNode.ts
495
+ var import_vue_demi14 = require("vue-demi");
496
+ var LinebreakRichTextNode = () => {
497
+ return (0, import_vue_demi14.h)("br", {});
498
+ };
499
+
500
+ // src/components/UniformRichText/nodes/TabRichTextNode.ts
501
+ var import_vue_demi15 = require("vue-demi");
502
+ var TabRichTextNode = () => {
503
+ return (0, import_vue_demi15.h)("", {}, " ");
504
+ };
505
+
506
+ // src/components/UniformRichText/UniformRichTextNode.ts
507
+ var UniformRichTextNode = (0, import_vue_demi16.defineComponent)({
508
+ name: "UniformRichTextNode",
509
+ props: {
510
+ node: {
511
+ type: Object,
512
+ required: true
513
+ },
514
+ resolveRichTextRenderer: {
515
+ type: Function,
516
+ required: false
517
+ }
518
+ },
519
+ setup(props, context) {
520
+ var _a;
521
+ const node = props.node;
522
+ if (!(0, import_richtext4.isRichTextNode)(node))
523
+ return () => null;
524
+ let NodeRenderer = node.type in context.slots ? context.slots[node.type] : (_a = props.resolveRichTextRenderer) == null ? void 0 : _a.call(props, node);
525
+ if (typeof NodeRenderer === "undefined") {
526
+ NodeRenderer = resolveRichTextDefaultRenderer(node);
527
+ }
528
+ if (!NodeRenderer) {
529
+ return () => null;
530
+ }
531
+ const children = node.children ? node.children.map(
532
+ (childNode) => (0, import_vue_demi16.h)(
533
+ UniformRichTextNode,
534
+ { node: childNode, resolveRichTextRenderer: props.resolveRichTextRenderer },
535
+ context.slots
536
+ )
537
+ ) : [];
538
+ return () => (0, import_vue_demi16.h)(NodeRenderer, { node, children: (0, import_vue_demi16.h)(() => children) }, () => children);
539
+ }
540
+ });
541
+ var rendererMap = /* @__PURE__ */ new Map([
542
+ ["heading", HeadingRichTextNode],
543
+ ["linebreak", LinebreakRichTextNode],
544
+ ["link", LinkRichTextNode],
545
+ ["list", ListRichTextNode],
546
+ ["listitem", ListItemRichTextNode],
547
+ ["paragraph", ParagraphRichTextNode],
548
+ ["quote", QuoteRichTextNode],
549
+ ["root", RootRichTextNode],
550
+ ["text", TextRichTextNode],
551
+ ["tab", TabRichTextNode]
552
+ ]);
553
+ var resolveRichTextDefaultRenderer = (node) => {
554
+ return rendererMap.get(node.type);
555
+ };
556
+
557
+ // src/components/UniformRichText/UniformRichText.ts
558
+ var UniformRichText = (0, import_vue_demi17.defineComponent)({
559
+ name: "UniformRichText",
560
+ props: {
561
+ parameterId: {
562
+ type: String,
563
+ required: true
564
+ },
565
+ resolveRichTextRenderer: {
566
+ type: Function,
567
+ required: false
568
+ }
569
+ },
570
+ setup(props, context) {
571
+ var _a;
572
+ const { data: componentData } = useUniformCurrentComponent();
573
+ const value = (0, import_vue_demi17.computed)(() => {
574
+ var _a2;
575
+ const parameter = (_a2 = componentData == null ? void 0 : componentData.parameters) == null ? void 0 : _a2[props.parameterId];
576
+ return parameter == null ? void 0 : parameter.value;
577
+ });
578
+ const root = (_a = value.value) == null ? void 0 : _a.root;
579
+ if ((0, import_richtext5.isRichTextNode)(root)) {
580
+ return () => (0, import_vue_demi17.h)(
581
+ UniformRichTextNode,
582
+ {
583
+ node: root,
584
+ resolveRichTextRenderer: props.resolveRichTextRenderer
585
+ },
586
+ context.slots
587
+ );
588
+ } else {
589
+ return () => null;
590
+ }
591
+ }
592
+ });
593
+
392
594
  // src/components/UniformSlot.ts
393
595
  var import_canvas5 = require("@uniformdev/canvas");
394
596
  var import_context_vue2 = require("@uniformdev/context-vue");
395
- var import_vue_demi6 = require("vue-demi");
597
+ var import_vue_demi18 = require("vue-demi");
396
598
 
397
599
  // src/utils/convertComponentToProps.ts
398
600
  function convertComponentToProps(component) {
@@ -417,7 +619,7 @@ function normalizePropName(name) {
417
619
  }
418
620
 
419
621
  // src/components/UniformSlot.ts
420
- var UniformSlot = (0, import_vue_demi6.defineComponent)({
622
+ var UniformSlot = (0, import_vue_demi18.defineComponent)({
421
623
  name: "UniformSlot",
422
624
  inheritAttrs: false,
423
625
  props: {
@@ -436,7 +638,7 @@ var UniformSlot = (0, import_vue_demi6.defineComponent)({
436
638
  if (!parentData || !resolveRenderer) {
437
639
  throw new Error("<UniformSlot /> can only be used inside a <UniformComposition />");
438
640
  }
439
- const slotItems = (0, import_vue_demi6.computed)(() => {
641
+ const slotItems = (0, import_vue_demi18.computed)(() => {
440
642
  var _a2, _b, _c;
441
643
  if (props.name) {
442
644
  return (_b = (_a2 = parentData.slots) == null ? void 0 : _a2[props.name]) != null ? _b : [];
@@ -463,7 +665,7 @@ function renderPersonalizeComponent(component, resolveRenderer) {
463
665
  const parameters = component == null ? void 0 : component.parameters;
464
666
  const processedVariants = (0, import_canvas5.mapSlotToPersonalizedVariations)((_a = component.slots) == null ? void 0 : _a.pz);
465
667
  const name = (_d = (_c = (_b = component.parameters) == null ? void 0 : _b.trackingEventName) == null ? void 0 : _c.value) != null ? _d : "Untitled Personalization";
466
- return (0, import_vue_demi6.h)(import_context_vue2.Personalize, {
668
+ return (0, import_vue_demi18.h)(import_context_vue2.Personalize, {
467
669
  name,
468
670
  // TODO: Fix the `as unknown`
469
671
  component: (variant) => resolveRenderer(variant),
@@ -476,7 +678,7 @@ function renderTestComponent(component, resolveRenderer) {
476
678
  const variants = (_b = (_a = component == null ? void 0 : component.slots) == null ? void 0 : _a.test) != null ? _b : [];
477
679
  const testName = (_e = (_d = (_c = component == null ? void 0 : component.parameters) == null ? void 0 : _c.test) == null ? void 0 : _d.value) != null ? _e : "Untitled Test";
478
680
  const finalVariants = (0, import_canvas5.mapSlotToTestVariations)(variants);
479
- return (0, import_vue_demi6.h)(import_context_vue2.Test, {
681
+ return (0, import_vue_demi18.h)(import_context_vue2.Test, {
480
682
  variations: finalVariants,
481
683
  name: testName,
482
684
  component: (variant) => resolveRenderer(variant)
@@ -530,13 +732,13 @@ function renderComponent({
530
732
  const resolvedComponent = resolveRenderer == null ? void 0 : resolveRenderer(component);
531
733
  if (resolvedComponent) {
532
734
  const props = convertComponentToProps(component);
533
- return (0, import_vue_demi6.h)(
735
+ return (0, import_vue_demi18.h)(
534
736
  UniformComponent,
535
737
  { data: component, resolveRenderer },
536
- () => (0, import_vue_demi6.h)(
738
+ () => (0, import_vue_demi18.h)(
537
739
  ContextualEditingComponentWrapper,
538
740
  { component, parentComponent, slotName, indexInSlot, slotChildrenCount },
539
- { default: () => (0, import_vue_demi6.h)(resolvedComponent, props), emptyPlaceholder }
741
+ { default: () => (0, import_vue_demi18.h)(resolvedComponent, props), emptyPlaceholder }
540
742
  )
541
743
  );
542
744
  }
@@ -544,12 +746,12 @@ function renderComponent({
544
746
  `[canvas] found component of type '${component.type}' which the 'resolveRenderer' prop returned no component for. Nothing will be rendered. The resolveRenderer function may need to be extended to handle the new type.`,
545
747
  component
546
748
  );
547
- return (0, import_vue_demi6.h)("");
749
+ return (0, import_vue_demi18.h)("");
548
750
  }
549
751
 
550
752
  // src/composables/useCompositionEventEffect.ts
551
753
  var import_canvas6 = require("@uniformdev/canvas");
552
- var import_vue_demi7 = require("vue-demi");
754
+ var import_vue_demi19 = require("vue-demi");
553
755
  async function useCompositionEventEffect({
554
756
  enabled,
555
757
  projectId,
@@ -557,7 +759,7 @@ async function useCompositionEventEffect({
557
759
  effect
558
760
  }) {
559
761
  let unsubscribe;
560
- (0, import_vue_demi7.watch)(
762
+ (0, import_vue_demi19.watch)(
561
763
  [() => enabled, () => compositionIdRef.value, () => projectId],
562
764
  async () => {
563
765
  unsubscribe == null ? void 0 : unsubscribe();
@@ -582,8 +784,18 @@ async function useCompositionEventEffect({
582
784
  // Annotate the CommonJS export names for ESM import in node:
583
785
  0 && (module.exports = {
584
786
  DefaultNotImplementedComponent,
787
+ HeadingRichTextNode,
788
+ LinkRichTextNode,
789
+ ListItemRichTextNode,
790
+ ListRichTextNode,
791
+ ParagraphRichTextNode,
792
+ QuoteRichTextNode,
793
+ RootRichTextNode,
794
+ TextRichTextNode,
585
795
  UniformComponent,
586
796
  UniformComposition,
797
+ UniformRichText,
798
+ UniformRichTextNode,
587
799
  UniformSlot,
588
800
  convertComponentToProps,
589
801
  createUniformApiEnhancer,
package/dist/index.mjs CHANGED
@@ -381,6 +381,198 @@ var UniformComposition = defineComponent4({
381
381
  }
382
382
  });
383
383
 
384
+ // src/components/UniformRichText/nodes/HeadingRichTextNode.ts
385
+ import { h as h5 } from "vue-demi";
386
+ var HeadingRichTextNode = (props, context) => {
387
+ const { tag } = props.node;
388
+ return h5(tag != null ? tag : "h1", {}, context.slots);
389
+ };
390
+
391
+ // src/components/UniformRichText/nodes/LinkRichTextNode.ts
392
+ import { linkParamValueToHref } from "@uniformdev/richtext";
393
+ import { h as h6 } from "vue-demi";
394
+ var LinkRichTextNode = (props, context) => {
395
+ const { link } = props.node;
396
+ return h6(
397
+ "a",
398
+ {
399
+ href: linkParamValueToHref(link)
400
+ },
401
+ context.slots
402
+ );
403
+ };
404
+
405
+ // src/components/UniformRichText/nodes/ListItemRichTextNode.ts
406
+ import { h as h7 } from "vue-demi";
407
+ var ListItemRichTextNode = (props, context) => {
408
+ const { value } = props.node;
409
+ return h7(
410
+ "li",
411
+ {
412
+ value: Number.isFinite(value) && value > 0 ? value + 1 : void 0
413
+ },
414
+ context.slots
415
+ );
416
+ };
417
+
418
+ // src/components/UniformRichText/nodes/ListRichTextNode.ts
419
+ import { h as h8 } from "vue-demi";
420
+ var ListRichTextNode = (props, context) => {
421
+ const { tag } = props.node;
422
+ return h8(tag != null ? tag : "h1", {}, context.slots);
423
+ };
424
+
425
+ // src/components/UniformRichText/nodes/ParagraphRichTextNode.ts
426
+ import { isPureDirection, isPureTextAlign } from "@uniformdev/richtext";
427
+ import { h as h9 } from "vue-demi";
428
+ var ParagraphRichTextNode = (props, context) => {
429
+ const { format, direction } = props.node;
430
+ return h9(
431
+ "p",
432
+ {
433
+ dir: isPureDirection(direction) ? direction : void 0,
434
+ style: isPureTextAlign(format) ? { textAlign: format } : void 0
435
+ },
436
+ context.slots
437
+ );
438
+ };
439
+
440
+ // src/components/UniformRichText/nodes/QuoteRichTextNode.ts
441
+ import { h as h10 } from "vue-demi";
442
+ var QuoteRichTextNode = (props, context) => {
443
+ return h10("blockquote", {}, context.slots);
444
+ };
445
+
446
+ // src/components/UniformRichText/nodes/RootRichTextNode.ts
447
+ import { h as h11 } from "vue-demi";
448
+ var RootRichTextNode = (props, c) => {
449
+ return h11(() => c.slots.default ? c.slots.default() : null);
450
+ };
451
+
452
+ // src/components/UniformRichText/nodes/TextRichTextNode.ts
453
+ import { getRichTextTagsFromTextFormat } from "@uniformdev/richtext";
454
+ import { h as h12 } from "vue-demi";
455
+ var TextRichTextNode = (props) => {
456
+ const { format, text } = props.node;
457
+ const tags = getRichTextTagsFromTextFormat(format);
458
+ return tags.length > 0 ? tags.reduceRight(
459
+ (children, tag) => {
460
+ return h12(tag, null, children);
461
+ },
462
+ {
463
+ default: () => text
464
+ }
465
+ ) : h12(() => text);
466
+ };
467
+
468
+ // src/components/UniformRichText/UniformRichText.ts
469
+ import { isRichTextNode as isRichTextNode2 } from "@uniformdev/richtext";
470
+ import { computed as computed4, defineComponent as defineComponent6, h as h16 } from "vue-demi";
471
+
472
+ // src/components/UniformRichText/UniformRichTextNode.ts
473
+ import { isRichTextNode } from "@uniformdev/richtext";
474
+ import { defineComponent as defineComponent5, h as h15 } from "vue-demi";
475
+
476
+ // src/components/UniformRichText/nodes/LinebreakRichTextNode.ts
477
+ import { h as h13 } from "vue-demi";
478
+ var LinebreakRichTextNode = () => {
479
+ return h13("br", {});
480
+ };
481
+
482
+ // src/components/UniformRichText/nodes/TabRichTextNode.ts
483
+ import { h as h14 } from "vue-demi";
484
+ var TabRichTextNode = () => {
485
+ return h14("", {}, " ");
486
+ };
487
+
488
+ // src/components/UniformRichText/UniformRichTextNode.ts
489
+ var UniformRichTextNode = defineComponent5({
490
+ name: "UniformRichTextNode",
491
+ props: {
492
+ node: {
493
+ type: Object,
494
+ required: true
495
+ },
496
+ resolveRichTextRenderer: {
497
+ type: Function,
498
+ required: false
499
+ }
500
+ },
501
+ setup(props, context) {
502
+ var _a;
503
+ const node = props.node;
504
+ if (!isRichTextNode(node))
505
+ return () => null;
506
+ let NodeRenderer = node.type in context.slots ? context.slots[node.type] : (_a = props.resolveRichTextRenderer) == null ? void 0 : _a.call(props, node);
507
+ if (typeof NodeRenderer === "undefined") {
508
+ NodeRenderer = resolveRichTextDefaultRenderer(node);
509
+ }
510
+ if (!NodeRenderer) {
511
+ return () => null;
512
+ }
513
+ const children = node.children ? node.children.map(
514
+ (childNode) => h15(
515
+ UniformRichTextNode,
516
+ { node: childNode, resolveRichTextRenderer: props.resolveRichTextRenderer },
517
+ context.slots
518
+ )
519
+ ) : [];
520
+ return () => h15(NodeRenderer, { node, children: h15(() => children) }, () => children);
521
+ }
522
+ });
523
+ var rendererMap = /* @__PURE__ */ new Map([
524
+ ["heading", HeadingRichTextNode],
525
+ ["linebreak", LinebreakRichTextNode],
526
+ ["link", LinkRichTextNode],
527
+ ["list", ListRichTextNode],
528
+ ["listitem", ListItemRichTextNode],
529
+ ["paragraph", ParagraphRichTextNode],
530
+ ["quote", QuoteRichTextNode],
531
+ ["root", RootRichTextNode],
532
+ ["text", TextRichTextNode],
533
+ ["tab", TabRichTextNode]
534
+ ]);
535
+ var resolveRichTextDefaultRenderer = (node) => {
536
+ return rendererMap.get(node.type);
537
+ };
538
+
539
+ // src/components/UniformRichText/UniformRichText.ts
540
+ var UniformRichText = defineComponent6({
541
+ name: "UniformRichText",
542
+ props: {
543
+ parameterId: {
544
+ type: String,
545
+ required: true
546
+ },
547
+ resolveRichTextRenderer: {
548
+ type: Function,
549
+ required: false
550
+ }
551
+ },
552
+ setup(props, context) {
553
+ var _a;
554
+ const { data: componentData } = useUniformCurrentComponent();
555
+ const value = computed4(() => {
556
+ var _a2;
557
+ const parameter = (_a2 = componentData == null ? void 0 : componentData.parameters) == null ? void 0 : _a2[props.parameterId];
558
+ return parameter == null ? void 0 : parameter.value;
559
+ });
560
+ const root = (_a = value.value) == null ? void 0 : _a.root;
561
+ if (isRichTextNode2(root)) {
562
+ return () => h16(
563
+ UniformRichTextNode,
564
+ {
565
+ node: root,
566
+ resolveRichTextRenderer: props.resolveRichTextRenderer
567
+ },
568
+ context.slots
569
+ );
570
+ } else {
571
+ return () => null;
572
+ }
573
+ }
574
+ });
575
+
384
576
  // src/components/UniformSlot.ts
385
577
  import {
386
578
  CANVAS_PERSONALIZE_SLOT,
@@ -391,7 +583,7 @@ import {
391
583
  mapSlotToTestVariations
392
584
  } from "@uniformdev/canvas";
393
585
  import { Personalize, Test } from "@uniformdev/context-vue";
394
- import { computed as computed4, defineComponent as defineComponent5, h as h5 } from "vue-demi";
586
+ import { computed as computed5, defineComponent as defineComponent7, h as h17 } from "vue-demi";
395
587
 
396
588
  // src/utils/convertComponentToProps.ts
397
589
  function convertComponentToProps(component) {
@@ -416,7 +608,7 @@ function normalizePropName(name) {
416
608
  }
417
609
 
418
610
  // src/components/UniformSlot.ts
419
- var UniformSlot = defineComponent5({
611
+ var UniformSlot = defineComponent7({
420
612
  name: "UniformSlot",
421
613
  inheritAttrs: false,
422
614
  props: {
@@ -435,7 +627,7 @@ var UniformSlot = defineComponent5({
435
627
  if (!parentData || !resolveRenderer) {
436
628
  throw new Error("<UniformSlot /> can only be used inside a <UniformComposition />");
437
629
  }
438
- const slotItems = computed4(() => {
630
+ const slotItems = computed5(() => {
439
631
  var _a2, _b, _c;
440
632
  if (props.name) {
441
633
  return (_b = (_a2 = parentData.slots) == null ? void 0 : _a2[props.name]) != null ? _b : [];
@@ -462,7 +654,7 @@ function renderPersonalizeComponent(component, resolveRenderer) {
462
654
  const parameters = component == null ? void 0 : component.parameters;
463
655
  const processedVariants = mapSlotToPersonalizedVariations((_a = component.slots) == null ? void 0 : _a.pz);
464
656
  const name = (_d = (_c = (_b = component.parameters) == null ? void 0 : _b.trackingEventName) == null ? void 0 : _c.value) != null ? _d : "Untitled Personalization";
465
- return h5(Personalize, {
657
+ return h17(Personalize, {
466
658
  name,
467
659
  // TODO: Fix the `as unknown`
468
660
  component: (variant) => resolveRenderer(variant),
@@ -475,7 +667,7 @@ function renderTestComponent(component, resolveRenderer) {
475
667
  const variants = (_b = (_a = component == null ? void 0 : component.slots) == null ? void 0 : _a.test) != null ? _b : [];
476
668
  const testName = (_e = (_d = (_c = component == null ? void 0 : component.parameters) == null ? void 0 : _c.test) == null ? void 0 : _d.value) != null ? _e : "Untitled Test";
477
669
  const finalVariants = mapSlotToTestVariations(variants);
478
- return h5(Test, {
670
+ return h17(Test, {
479
671
  variations: finalVariants,
480
672
  name: testName,
481
673
  component: (variant) => resolveRenderer(variant)
@@ -529,13 +721,13 @@ function renderComponent({
529
721
  const resolvedComponent = resolveRenderer == null ? void 0 : resolveRenderer(component);
530
722
  if (resolvedComponent) {
531
723
  const props = convertComponentToProps(component);
532
- return h5(
724
+ return h17(
533
725
  UniformComponent,
534
726
  { data: component, resolveRenderer },
535
- () => h5(
727
+ () => h17(
536
728
  ContextualEditingComponentWrapper,
537
729
  { component, parentComponent, slotName, indexInSlot, slotChildrenCount },
538
- { default: () => h5(resolvedComponent, props), emptyPlaceholder }
730
+ { default: () => h17(resolvedComponent, props), emptyPlaceholder }
539
731
  )
540
732
  );
541
733
  }
@@ -543,7 +735,7 @@ function renderComponent({
543
735
  `[canvas] found component of type '${component.type}' which the 'resolveRenderer' prop returned no component for. Nothing will be rendered. The resolveRenderer function may need to be extended to handle the new type.`,
544
736
  component
545
737
  );
546
- return h5("");
738
+ return h17("");
547
739
  }
548
740
 
549
741
  // src/composables/useCompositionEventEffect.ts
@@ -584,8 +776,18 @@ async function useCompositionEventEffect({
584
776
  }
585
777
  export {
586
778
  DefaultNotImplementedComponent,
779
+ HeadingRichTextNode,
780
+ LinkRichTextNode,
781
+ ListItemRichTextNode,
782
+ ListRichTextNode,
783
+ ParagraphRichTextNode,
784
+ QuoteRichTextNode,
785
+ RootRichTextNode,
786
+ TextRichTextNode,
587
787
  UniformComponent,
588
788
  UniformComposition,
789
+ UniformRichText,
790
+ UniformRichTextNode,
589
791
  UniformSlot,
590
792
  convertComponentToProps,
591
793
  createUniformApiEnhancer,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/canvas-vue",
3
- "version": "19.13.0",
3
+ "version": "19.14.1-alpha.1+597b21eaa",
4
4
  "description": "Vue SDK for Uniform Canvas",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "main": "./dist/index.js",
@@ -23,9 +23,9 @@
23
23
  "document": "api-extractor run --local"
24
24
  },
25
25
  "dependencies": {
26
- "@uniformdev/canvas": "19.13.0",
27
- "@uniformdev/context-vue": "19.13.0",
28
- "@vue/test-utils": "2.3.2",
26
+ "@uniformdev/canvas": "19.14.1-alpha.1+597b21eaa",
27
+ "@uniformdev/context-vue": "19.14.1-alpha.1+597b21eaa",
28
+ "@uniformdev/richtext": "19.14.1-alpha.1+597b21eaa",
29
29
  "vue-demi": "^0.14.0"
30
30
  },
31
31
  "peerDependencies": {
@@ -41,6 +41,8 @@
41
41
  "@testing-library/vue": "7.0.0",
42
42
  "@types/uuid": "9.0.1",
43
43
  "@vue/server-test-utils": "1.3.0",
44
+ "@vue/test-utils": "2.3.2",
45
+ "@vue/vue3-jest": "^29.2.4",
44
46
  "vue": "3.2.45",
45
47
  "vue-server-renderer": "2.7.14",
46
48
  "vue-template-compiler": "2.7.14"
@@ -62,5 +64,5 @@
62
64
  "last 2 versions",
63
65
  "not dead"
64
66
  ],
65
- "gitHead": "1670a0e2475a7a98745ea737cd3b2b09649fe1a1"
67
+ "gitHead": "597b21eaa0a61271b8951de1d443019868f7699c"
66
68
  }