@uniformdev/canvas-react 12.0.1-alpha.94 → 12.2.1-alpha.122

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 (39) hide show
  1. package/LICENSE.txt +1 -1
  2. package/README.md +3 -3
  3. package/dist/index.d.ts +81 -0
  4. package/dist/index.esm.js +1 -0
  5. package/dist/index.js +1 -0
  6. package/dist/index.mjs +1 -0
  7. package/package.json +24 -24
  8. package/dist/cjs/components/Composition.d.ts +0 -24
  9. package/dist/cjs/components/Composition.js +0 -1
  10. package/dist/cjs/components/DefaultNotImplementedComponent.d.ts +0 -9
  11. package/dist/cjs/components/DefaultNotImplementedComponent.js +0 -1
  12. package/dist/cjs/components/Slot.d.ts +0 -22
  13. package/dist/cjs/components/Slot.js +0 -1
  14. package/dist/cjs/convertComponentToProps.d.ts +0 -9
  15. package/dist/cjs/convertComponentToProps.js +0 -1
  16. package/dist/cjs/defaultSystemComponentResolver.d.ts +0 -2
  17. package/dist/cjs/defaultSystemComponentResolver.js +0 -1
  18. package/dist/cjs/hooks/useCompositionEventEffect.d.ts +0 -7
  19. package/dist/cjs/hooks/useCompositionEventEffect.js +0 -1
  20. package/dist/cjs/index.d.ts +0 -5
  21. package/dist/cjs/index.js +0 -1
  22. package/dist/cjs/types.d.ts +0 -22
  23. package/dist/cjs/types.js +0 -1
  24. package/dist/esm/components/Composition.d.ts +0 -24
  25. package/dist/esm/components/Composition.js +0 -1
  26. package/dist/esm/components/DefaultNotImplementedComponent.d.ts +0 -9
  27. package/dist/esm/components/DefaultNotImplementedComponent.js +0 -1
  28. package/dist/esm/components/Slot.d.ts +0 -22
  29. package/dist/esm/components/Slot.js +0 -1
  30. package/dist/esm/convertComponentToProps.d.ts +0 -9
  31. package/dist/esm/convertComponentToProps.js +0 -1
  32. package/dist/esm/defaultSystemComponentResolver.d.ts +0 -2
  33. package/dist/esm/defaultSystemComponentResolver.js +0 -1
  34. package/dist/esm/hooks/useCompositionEventEffect.d.ts +0 -7
  35. package/dist/esm/hooks/useCompositionEventEffect.js +0 -1
  36. package/dist/esm/index.d.ts +0 -5
  37. package/dist/esm/index.js +0 -1
  38. package/dist/esm/types.d.ts +0 -22
  39. package/dist/esm/types.js +0 -0
package/LICENSE.txt CHANGED
@@ -1,2 +1,2 @@
1
- © 2021 Uniform Systems, Inc. All Rights Reserved.
1
+ © 2021 Uniform Systems, Inc. All Rights Reserved.
2
2
  See details of Uniform Systems, Inc. Master Subscription Agreement here: https://uniform.dev/eula
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
- React SDK for Uniform Canvas
2
-
3
- part of the [Uniform Platform](https://uniform.app). See our [documentation](https://docs.uniform.app) for more details.
1
+ React SDK for Uniform Canvas
2
+
3
+ part of the [Uniform Platform](https://uniform.app). See our [documentation](https://docs.uniform.app) for more details.
@@ -0,0 +1,81 @@
1
+ import { ComponentInstance, SubscribeToCompositionOptions } from '@uniformdev/canvas';
2
+ import { Key, ReactNode } from 'react';
3
+
4
+ /**
5
+ * Props passed to a Canvas component implementation.
6
+ * TProps is the Canvas component's parameters object after
7
+ * all enhancers have been applied.
8
+ */
9
+ declare type ComponentProps<TProps = unknown> = TProps & {
10
+ component: ComponentInstance;
11
+ };
12
+ /**
13
+ * Function that maps a Canvas component instance to its React component to render it.
14
+ * The resolver would commonly inspect the `type` and possibly `variant` of the component to decide.
15
+ */
16
+ declare type RenderComponentResolver = (component: ComponentInstance) => React.ComponentType<ComponentProps<any>> | null;
17
+ /** Function that renders Canvas system internals */
18
+ declare type SystemRenderFunction = (component: ComponentInstance, key: Key, renderChild: (component: ComponentInstance, key: Key) => JSX.Element | null) => JSX.Element | null;
19
+ /** Configures rendering of system components (tests, pz) */
20
+ declare type SystemRenderConfig = {
21
+ test: SystemRenderFunction;
22
+ personalization: SystemRenderFunction;
23
+ };
24
+
25
+ declare type CompositionProps<TRenderProps = unknown> = {
26
+ /** The root component in the composition */
27
+ data: ComponentInstance;
28
+ /** Resolves a React component to render a Canvas component, generally by inspecting type/variant */
29
+ resolveRenderer?: RenderComponentResolver;
30
+ /** Either markup to render the composition directly, or render props to provide the ComponentProps for the root component */
31
+ children: ReactNode | ((props: ComponentProps<TRenderProps>) => JSX.Element);
32
+ };
33
+ declare type CompositionContext = {
34
+ /** The parent composition */
35
+ composition: ComponentInstance;
36
+ /** The current function to translate component data into React components */
37
+ resolveRenderer: RenderComponentResolver;
38
+ };
39
+ /**
40
+ * Gets the parent Canvas composition of the current component.
41
+ * Note: this gets the direct parent, not necessarily the root of the composition.
42
+ */
43
+ declare function useComposition(): CompositionContext;
44
+ /** Forms a Canvas composition root, providing services to render a tree of Canvas components */
45
+ declare function Composition<TRenderProps = unknown>({ data, resolveRenderer, children, }: CompositionProps<TRenderProps>): JSX.Element | null;
46
+
47
+ declare type CustomSlotChildRenderFunc = (options: {
48
+ child: ReactNode;
49
+ component: ComponentInstance;
50
+ key: Key;
51
+ }) => JSX.Element;
52
+ declare type SlotProps<TSlotNames extends string> = {
53
+ /** Name of the slot to render */
54
+ name: TSlotNames;
55
+ /**
56
+ * Function to resolve the React component to render for a given Canvas component type.
57
+ * If not specified, the resolveRenderer function on the nearest Layout will be used, if any.
58
+ */
59
+ resolveRenderer?: RenderComponentResolver;
60
+ /** Optional render props enables wrapping all child components in the slot with some markup */
61
+ children?: CustomSlotChildRenderFunc;
62
+ };
63
+ /** Renders a named Slot within a Composition. */
64
+ declare function Slot<TSlotNames extends string = string>({ name, resolveRenderer, children, }: SlotProps<TSlotNames>): JSX.Element | null;
65
+
66
+ /**
67
+ * A default implementation of a component-not-implemented component.
68
+ * Useful for model-first workflows where frontend dev comes later.
69
+ * To make this work, it needs to be the default returned from the
70
+ * resolveRenderer() function when the component is unknown.
71
+ **/
72
+ declare function DefaultNotImplementedComponent(props: ComponentProps): JSX.Element | null;
73
+
74
+ declare type UseCompositionEventEffectOptions = Omit<Partial<SubscribeToCompositionOptions>, 'callback'> & {
75
+ enabled: boolean;
76
+ effect: () => void;
77
+ };
78
+ /** Hook to manage a subscription to a realtime event on a composition */
79
+ declare function useCompositionEventEffect({ enabled, projectId, compositionId, effect, }: UseCompositionEventEffectOptions): void;
80
+
81
+ export { ComponentProps, Composition, CompositionContext, CompositionProps, DefaultNotImplementedComponent, RenderComponentResolver, Slot, SlotProps, SystemRenderConfig, SystemRenderFunction, UseCompositionEventEffectOptions, useComposition, useCompositionEventEffect };
@@ -0,0 +1 @@
1
+ import{Track as R}from"@uniformdev/context-react";import{CANVAS_INTENT_TAG_PARAM as b}from"@uniformdev/canvas";import E,{createContext as h,useContext as w}from"react";function f(o){var t;let e=(t=o.parameters)!=null?t:{};return{...Object.keys(e).reduce((s,r)=>(s[r]=e[r].value,s),{}),...o.data,component:o}}var S=h({});function y(){return w(S)}function N({data:o,resolveRenderer:e,children:n}){var p,i;let t=y();if(!o)return process.env.NODE_ENV==="development"&&console.warn("[canvas-dev] Composition was rendered with no data, nothing will be output."),null;let s={composition:o,resolveRenderer:e!=null?e:t.resolveRenderer},r=(i=(p=o.parameters)==null?void 0:p[b])==null?void 0:i.value;return E.createElement(S.Provider,{value:s},E.createElement(R,{behavior:r==null?void 0:r.beh},typeof n=="function"?n(f(o)):n))}import v from"react";import{CANVAS_PERSONALIZE_TYPE as O,CANVAS_TEST_TYPE as V}from"@uniformdev/canvas";import{Personalize as A,Test as k}from"@uniformdev/context-react";import{mapSlotToPersonalizedVariations as _,mapSlotToTestVariations as I}from"@uniformdev/canvas";import*as T from"react";var g={test:(o,e,n)=>{var i,l,m;let t=o,s=(l=(i=t.slots)==null?void 0:i.test)!=null?l:[],r=((m=t.parameters.test)==null?void 0:m.value)||"Untitled Test",p=I(s);return T.createElement(k,{key:e,variations:p,name:r,component:d=>n(d,e)})},personalization:(o,e,n)=>{var r,p,i,l,m,d;let t=o,s=_((r=t==null?void 0:t.slots)==null?void 0:r.pz);return T.createElement(A,{key:e,variations:s,count:Number((l=(i=(p=t.parameters)==null?void 0:p.count)==null?void 0:i.value)!=null?l:1),trackingEventName:(d=(m=t.parameters)==null?void 0:m.trackingEventName)==null?void 0:d.value,component:C=>n(C,0)})}};function ro({name:o,resolveRenderer:e,children:n}){var m;let{composition:t,resolveRenderer:s}=y();if(!t)throw new Error("Cannot use Slot without a Composition wrapper.");let r=(m=t.slots)==null?void 0:m[o];if(!r||!Array.isArray(r))return process.env.NODE_ENV==="development"&&console.warn(`[canvas-dev] slot '${o}' was rendered, but it was not defined on its component. This is expected if the slot is optional, otherwise it may indicate a typo. Component:`,t),null;let p=e!=null?e:s,i=g,l=r.map((d,C)=>{let x=P({component:d,resolveRenderer:p,resolveSystem:i,key:C});return n?n({child:x,component:d,key:C}):x});return v.createElement(v.Fragment,void 0,l)}function P({component:o,resolveRenderer:e,resolveSystem:n,key:t=0}){let s=e==null?void 0:e(o);if(o.type===V)return n.test(o,t,(r,p)=>P({component:r,resolveRenderer:e,resolveSystem:n,key:p}));if(o.type===O)return n.personalization(o,t,(r,p)=>P({component:r,resolveRenderer:e,resolveSystem:n,key:p}));if(s){let r=f(o);return v.createElement(N,{key:t,data:o,resolveRenderer:e},v.createElement(s,{...r}))}else process.env.NODE_ENV!=="production"&&console.warn(`[canvas] found component of type '${o.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.`,o);return null}import a from"react";function io(o){var n;let e=(n=o.component)==null?void 0:n.type;return e?a.createElement("div",{style:{borderLeft:"10px solid #e42535!important",padding:"0.01em 16px 16px",borderRadius:"16px",backgroundColor:"rgba(122, 215, 218, 0.3)",color:"#1d3557"}},a.createElement("h2",null,"Component: ",e),a.createElement("p",null,a.createElement("strong",null,e)," has no React implementation. It may need to be added to your"," ",a.createElement("code",null,"resolveRenderer()")," function."),a.createElement("details",null,a.createElement("summary",null,"Props"),a.createElement("pre",null,JSON.stringify(o,null,2)))):null}import{CANVAS_DRAFT_STATE as z,createEventBus as D,subscribeToComposition as J}from"@uniformdev/canvas";import{useEffect as F}from"react";function uo({enabled:o,projectId:e,compositionId:n,effect:t}){F(()=>{if(!o||!n||!e)return;let s;return(async()=>{let p=await D();p&&(s=J({eventBus:p,compositionId:n,compositionState:z,projectId:e,callback:t,event:"updated"}))})(),()=>{s&&s()}},[n,o,e,t])}export{N as Composition,io as DefaultNotImplementedComponent,ro as Slot,y as useComposition,uo as useCompositionEventEffect};
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ var z=Object.create;var y=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var w=o=>y(o,"__esModule",{value:!0});var K=(o,e)=>{for(var t in e)y(o,t,{get:e[t],enumerable:!0})},A=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of J(e))!X.call(o,r)&&(t||r!=="default")&&y(o,r,{get:()=>e[r],enumerable:!(n=D(e,r))||n.enumerable});return o},T=(o,e)=>A(w(y(o!=null?z(F(o)):{},"default",!e&&o&&o.__esModule?{get:()=>o.default,enumerable:!0}:{value:o,enumerable:!0})),o),L=(o=>(e,t)=>o&&o.get(e)||(t=A(w({}),e,1),o&&o.set(e,t),t))(typeof WeakMap!="undefined"?new WeakMap:0);var $={};K($,{Composition:()=>g,DefaultNotImplementedComponent:()=>B,Slot:()=>U,useComposition:()=>x,useCompositionEventEffect:()=>Y});var k=require("@uniformdev/context-react"),_=require("@uniformdev/canvas"),c=T(require("react"));function P(o){var n;let e=(n=o.parameters)!=null?n:{};return{...Object.keys(e).reduce((r,s)=>(r[s]=e[s].value,r),{}),...o.data,component:o}}var I=(0,c.createContext)({});function x(){return(0,c.useContext)(I)}function g({data:o,resolveRenderer:e,children:t}){var p,i;let n=x();if(!o)return process.env.NODE_ENV==="development"&&console.warn("[canvas-dev] Composition was rendered with no data, nothing will be output."),null;let r={composition:o,resolveRenderer:e!=null?e:n.resolveRenderer},s=(i=(p=o.parameters)==null?void 0:p[_.CANVAS_INTENT_TAG_PARAM])==null?void 0:i.value;return c.default.createElement(I.Provider,{value:r},c.default.createElement(k.Track,{behavior:s==null?void 0:s.beh},typeof t=="function"?t(P(o)):t))}var f=T(require("react"));var N=require("@uniformdev/canvas");var E=require("@uniformdev/context-react"),S=require("@uniformdev/canvas"),R=T(require("react")),O={test:(o,e,t)=>{var i,l,a;let n=o,r=(l=(i=n.slots)==null?void 0:i.test)!=null?l:[],s=((a=n.parameters.test)==null?void 0:a.value)||"Untitled Test",p=(0,S.mapSlotToTestVariations)(r);return R.createElement(E.Test,{key:e,variations:p,name:s,component:d=>t(d,e)})},personalization:(o,e,t)=>{var s,p,i,l,a,d;let n=o,r=(0,S.mapSlotToPersonalizedVariations)((s=n==null?void 0:n.slots)==null?void 0:s.pz);return R.createElement(E.Personalize,{key:e,variations:r,count:Number((l=(i=(p=n.parameters)==null?void 0:p.count)==null?void 0:i.value)!=null?l:1),trackingEventName:(d=(a=n.parameters)==null?void 0:a.trackingEventName)==null?void 0:d.value,component:v=>t(v,0)})}};function U({name:o,resolveRenderer:e,children:t}){var a;let{composition:n,resolveRenderer:r}=x();if(!n)throw new Error("Cannot use Slot without a Composition wrapper.");let s=(a=n.slots)==null?void 0:a[o];if(!s||!Array.isArray(s))return process.env.NODE_ENV==="development"&&console.warn(`[canvas-dev] slot '${o}' was rendered, but it was not defined on its component. This is expected if the slot is optional, otherwise it may indicate a typo. Component:`,n),null;let p=e!=null?e:r,i=O,l=s.map((d,v)=>{let h=b({component:d,resolveRenderer:p,resolveSystem:i,key:v});return t?t({child:h,component:d,key:v}):h});return f.default.createElement(f.default.Fragment,void 0,l)}function b({component:o,resolveRenderer:e,resolveSystem:t,key:n=0}){let r=e==null?void 0:e(o);if(o.type===N.CANVAS_TEST_TYPE)return t.test(o,n,(s,p)=>b({component:s,resolveRenderer:e,resolveSystem:t,key:p}));if(o.type===N.CANVAS_PERSONALIZE_TYPE)return t.personalization(o,n,(s,p)=>b({component:s,resolveRenderer:e,resolveSystem:t,key:p}));if(r){let s=P(o);return f.default.createElement(g,{key:n,data:o,resolveRenderer:e},f.default.createElement(r,{...s}))}else process.env.NODE_ENV!=="production"&&console.warn(`[canvas] found component of type '${o.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.`,o);return null}var m=T(require("react"));function B(o){var t;let e=(t=o.component)==null?void 0:t.type;return e?m.default.createElement("div",{style:{borderLeft:"10px solid #e42535!important",padding:"0.01em 16px 16px",borderRadius:"16px",backgroundColor:"rgba(122, 215, 218, 0.3)",color:"#1d3557"}},m.default.createElement("h2",null,"Component: ",e),m.default.createElement("p",null,m.default.createElement("strong",null,e)," has no React implementation. It may need to be added to your"," ",m.default.createElement("code",null,"resolveRenderer()")," function."),m.default.createElement("details",null,m.default.createElement("summary",null,"Props"),m.default.createElement("pre",null,JSON.stringify(o,null,2)))):null}var C=require("@uniformdev/canvas"),V=require("react");function Y({enabled:o,projectId:e,compositionId:t,effect:n}){(0,V.useEffect)(()=>{if(!o||!t||!e)return;let r;return(async()=>{let p=await(0,C.createEventBus)();p&&(r=(0,C.subscribeToComposition)({eventBus:p,compositionId:t,compositionState:C.CANVAS_DRAFT_STATE,projectId:e,callback:n,event:"updated"}))})(),()=>{r&&r()}},[t,o,e,n])}module.exports=L($);0&&(module.exports={Composition,DefaultNotImplementedComponent,Slot,useComposition,useCompositionEventEffect});
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import{Track as R}from"@uniformdev/context-react";import{CANVAS_INTENT_TAG_PARAM as b}from"@uniformdev/canvas";import E,{createContext as h,useContext as w}from"react";function f(o){var t;let e=(t=o.parameters)!=null?t:{};return{...Object.keys(e).reduce((s,r)=>(s[r]=e[r].value,s),{}),...o.data,component:o}}var S=h({});function y(){return w(S)}function N({data:o,resolveRenderer:e,children:n}){var p,i;let t=y();if(!o)return process.env.NODE_ENV==="development"&&console.warn("[canvas-dev] Composition was rendered with no data, nothing will be output."),null;let s={composition:o,resolveRenderer:e!=null?e:t.resolveRenderer},r=(i=(p=o.parameters)==null?void 0:p[b])==null?void 0:i.value;return E.createElement(S.Provider,{value:s},E.createElement(R,{behavior:r==null?void 0:r.beh},typeof n=="function"?n(f(o)):n))}import v from"react";import{CANVAS_PERSONALIZE_TYPE as O,CANVAS_TEST_TYPE as V}from"@uniformdev/canvas";import{Personalize as A,Test as k}from"@uniformdev/context-react";import{mapSlotToPersonalizedVariations as _,mapSlotToTestVariations as I}from"@uniformdev/canvas";import*as T from"react";var g={test:(o,e,n)=>{var i,l,m;let t=o,s=(l=(i=t.slots)==null?void 0:i.test)!=null?l:[],r=((m=t.parameters.test)==null?void 0:m.value)||"Untitled Test",p=I(s);return T.createElement(k,{key:e,variations:p,name:r,component:d=>n(d,e)})},personalization:(o,e,n)=>{var r,p,i,l,m,d;let t=o,s=_((r=t==null?void 0:t.slots)==null?void 0:r.pz);return T.createElement(A,{key:e,variations:s,count:Number((l=(i=(p=t.parameters)==null?void 0:p.count)==null?void 0:i.value)!=null?l:1),trackingEventName:(d=(m=t.parameters)==null?void 0:m.trackingEventName)==null?void 0:d.value,component:C=>n(C,0)})}};function ro({name:o,resolveRenderer:e,children:n}){var m;let{composition:t,resolveRenderer:s}=y();if(!t)throw new Error("Cannot use Slot without a Composition wrapper.");let r=(m=t.slots)==null?void 0:m[o];if(!r||!Array.isArray(r))return process.env.NODE_ENV==="development"&&console.warn(`[canvas-dev] slot '${o}' was rendered, but it was not defined on its component. This is expected if the slot is optional, otherwise it may indicate a typo. Component:`,t),null;let p=e!=null?e:s,i=g,l=r.map((d,C)=>{let x=P({component:d,resolveRenderer:p,resolveSystem:i,key:C});return n?n({child:x,component:d,key:C}):x});return v.createElement(v.Fragment,void 0,l)}function P({component:o,resolveRenderer:e,resolveSystem:n,key:t=0}){let s=e==null?void 0:e(o);if(o.type===V)return n.test(o,t,(r,p)=>P({component:r,resolveRenderer:e,resolveSystem:n,key:p}));if(o.type===O)return n.personalization(o,t,(r,p)=>P({component:r,resolveRenderer:e,resolveSystem:n,key:p}));if(s){let r=f(o);return v.createElement(N,{key:t,data:o,resolveRenderer:e},v.createElement(s,{...r}))}else process.env.NODE_ENV!=="production"&&console.warn(`[canvas] found component of type '${o.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.`,o);return null}import a from"react";function io(o){var n;let e=(n=o.component)==null?void 0:n.type;return e?a.createElement("div",{style:{borderLeft:"10px solid #e42535!important",padding:"0.01em 16px 16px",borderRadius:"16px",backgroundColor:"rgba(122, 215, 218, 0.3)",color:"#1d3557"}},a.createElement("h2",null,"Component: ",e),a.createElement("p",null,a.createElement("strong",null,e)," has no React implementation. It may need to be added to your"," ",a.createElement("code",null,"resolveRenderer()")," function."),a.createElement("details",null,a.createElement("summary",null,"Props"),a.createElement("pre",null,JSON.stringify(o,null,2)))):null}import{CANVAS_DRAFT_STATE as z,createEventBus as D,subscribeToComposition as J}from"@uniformdev/canvas";import{useEffect as F}from"react";function uo({enabled:o,projectId:e,compositionId:n,effect:t}){F(()=>{if(!o||!n||!e)return;let s;return(async()=>{let p=await D();p&&(s=J({eventBus:p,compositionId:n,compositionState:z,projectId:e,callback:t,event:"updated"}))})(),()=>{s&&s()}},[n,o,e,t])}export{N as Composition,io as DefaultNotImplementedComponent,ro as Slot,y as useComposition,uo as useCompositionEventEffect};
package/package.json CHANGED
@@ -1,49 +1,49 @@
1
1
  {
2
2
  "name": "@uniformdev/canvas-react",
3
- "version": "12.0.1-alpha.94+0290763c",
3
+ "version": "12.2.1-alpha.122+78b1fc2b",
4
4
  "description": "React SDK for Uniform Canvas",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
- "main": "./dist/cjs/index.js",
7
- "module": "./dist/esm/index.js",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.esm.js",
8
8
  "exports": {
9
- "import": "./dist/esm/index.js",
10
- "require": "./dist/cjs/index.js"
9
+ "import": {
10
+ "node": "./dist/index.mjs",
11
+ "default": "./dist/index.esm.js"
12
+ },
13
+ "require": "./dist/index.js"
11
14
  },
12
- "types": "./dist/cjs/index.d.ts",
15
+ "types": "./dist/index.d.ts",
13
16
  "sideEffects": false,
14
17
  "scripts": {
15
- "build": "run-p build:cjs build:esm",
16
- "build:esm": "tsc",
17
- "build:cjs": "tsc -p ./tsconfig.cjs.json",
18
- "dev": "run-p dev:esm dev:cjs",
19
- "dev:esm": "tsc -w",
20
- "dev:cjs": "tsc -w -p ./tsconfig.cjs.json",
18
+ "build": "tsup",
19
+ "dev": "tsup --watch",
21
20
  "clean": "rimraf dist",
22
21
  "test": "jest --maxWorkers=1",
23
22
  "lint": "eslint \"src/**/*.{js,ts,tsx}\"",
24
23
  "format": "prettier --write \"src/**/*.{js,ts,tsx}\"",
25
24
  "ci:verify": "run-p lint test",
26
- "ci:build": "run-s clean build"
25
+ "ci:build": "tsup --minify --clean"
27
26
  },
28
27
  "dependencies": {
29
- "@uniformdev/canvas": "^12.0.1-alpha.94+0290763c",
30
- "@uniformdev/optimize-common": "^12.0.1-alpha.94+0290763c",
31
- "@uniformdev/optimize-tracker-react": "^12.0.1-alpha.94+0290763c"
28
+ "@uniformdev/canvas": "^12.2.1-alpha.122+78b1fc2b",
29
+ "@uniformdev/context": "^12.2.1-alpha.122+78b1fc2b",
30
+ "@uniformdev/context-react": "^12.2.1-alpha.122+78b1fc2b"
32
31
  },
33
32
  "peerDependencies": {
34
33
  "react": ">= 16"
35
34
  },
36
35
  "devDependencies": {
37
- "@types/jest": "27.0.2",
38
- "@types/node": "16.7.1",
39
- "eslint": "7.32.0",
40
- "eslint-plugin-react": "7.26.1",
41
- "eslint-plugin-react-hooks": "4.2.0",
42
- "jest": "27.3.1",
36
+ "@types/jest": "27.4.0",
37
+ "@types/node": "16.11.19",
38
+ "eslint": "8.6.0",
39
+ "eslint-plugin-react": "7.28.0",
40
+ "eslint-plugin-react-hooks": "4.3.0",
41
+ "jest": "27.4.7",
43
42
  "npm-run-all": "4.1.5",
44
43
  "react": "17.0.2",
45
44
  "rimraf": "3.0.2",
46
- "ts-jest": "27.0.7"
45
+ "ts-jest": "27.1.2",
46
+ "tsup": "5.11.11"
47
47
  },
48
48
  "files": [
49
49
  "/dist"
@@ -51,5 +51,5 @@
51
51
  "publishConfig": {
52
52
  "access": "public"
53
53
  },
54
- "gitHead": "0290763c5d9801ad4293fd59cb4cbeb35f5e1408"
54
+ "gitHead": "78b1fc2b13464a32c3d1256c1d98ca2a7f59fd34"
55
55
  }
@@ -1,24 +0,0 @@
1
- import { ComponentInstance } from '@uniformdev/canvas';
2
- import { ReactNode } from 'react';
3
- import { RenderComponentResolver, ComponentProps } from '../types';
4
- export declare type CompositionProps<TRenderProps = unknown> = {
5
- /** The root component in the composition */
6
- data: ComponentInstance;
7
- /** Resolves a React component to render a Canvas component, generally by inspecting type/variant */
8
- resolveRenderer?: RenderComponentResolver;
9
- /** Either markup to render the composition directly, or render props to provide the ComponentProps for the root component */
10
- children: ReactNode | ((props: ComponentProps<TRenderProps>) => JSX.Element);
11
- };
12
- export declare type CompositionContext = {
13
- /** The parent composition */
14
- composition: ComponentInstance;
15
- /** The current function to translate component data into React components */
16
- resolveRenderer: RenderComponentResolver;
17
- };
18
- /**
19
- * Gets the parent Canvas composition of the current component.
20
- * Note: this gets the direct parent, not necessarily the root of the composition.
21
- */
22
- export declare function useComposition(): CompositionContext;
23
- /** Forms a Canvas composition root, providing services to render a tree of Canvas components */
24
- export declare function Composition<TRenderProps = unknown>({ data, resolveRenderer, children, }: CompositionProps<TRenderProps>): JSX.Element | null;
@@ -1 +0,0 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,o,t,r){void 0===r&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return o[t]}})}:function(e,o,t,r){e[r=void 0===r?t:r]=o[t]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}:function(e,o){e.default=o}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var o={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&__createBinding(o,e,t);return __setModuleDefault(o,e),o};Object.defineProperty(exports,"__esModule",{value:!0}),exports.Composition=exports.useComposition=void 0;var optimize_tracker_react_1=require("@uniformdev/optimize-tracker-react"),canvas_1=require("@uniformdev/canvas"),react_1=__importStar(require("react")),convertComponentToProps_1=require("../convertComponentToProps"),CompositionContext=(0,react_1.createContext)({});function useComposition(){return(0,react_1.useContext)(CompositionContext)}function Composition(e){var o=e.data,t=e.resolveRenderer,r=e.children,n=useComposition();if((0,optimize_tracker_react_1.useBehaviorTracking)(null===(e=null===(e=null==o?void 0:o.parameters)||void 0===e?void 0:e[canvas_1.CANVAS_INTENT_TAG_PARAM])||void 0===e?void 0:e.value),!o)return"development"===process.env.NODE_ENV&&console.warn("[canvas-dev] Composition was rendered with no data, nothing will be output."),null;n={composition:o,resolveRenderer:null!=t?t:n.resolveRenderer};return react_1.default.createElement(CompositionContext.Provider,{value:n},"function"==typeof r?r((0,convertComponentToProps_1.convertComponentToProps)(o)):r)}exports.useComposition=useComposition,exports.Composition=Composition;
@@ -1,9 +0,0 @@
1
- /// <reference types="react" />
2
- import { ComponentProps } from '../types';
3
- /**
4
- * A default implementation of a component-not-implemented component.
5
- * Useful for model-first workflows where frontend dev comes later.
6
- * To make this work, it needs to be the default returned from the
7
- * resolveRenderer() function when the component is unknown.
8
- **/
9
- export declare function DefaultNotImplementedComponent(props: ComponentProps): JSX.Element | null;
@@ -1 +0,0 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DefaultNotImplementedComponent=void 0;var react_1=__importDefault(require("react"));function DefaultNotImplementedComponent(e){var t=null===(t=e.component)||void 0===t?void 0:t.type;return t?react_1.default.createElement("div",{style:{borderLeft:"10px solid #e42535!important",padding:"0.01em 16px 16px",borderRadius:"16px",backgroundColor:"rgba(122, 215, 218, 0.3)",color:"#1d3557"}},react_1.default.createElement("h2",null,"Component: ",t),react_1.default.createElement("p",null,react_1.default.createElement("strong",null,t)," has no React implementation. It may need to be added to your"," ",react_1.default.createElement("code",null,"resolveRenderer()")," function."),react_1.default.createElement("details",null,react_1.default.createElement("summary",null,"Props"),react_1.default.createElement("pre",null,JSON.stringify(e,null,2)))):null}exports.DefaultNotImplementedComponent=DefaultNotImplementedComponent;
@@ -1,22 +0,0 @@
1
- import { Key, ReactNode } from 'react';
2
- import { RenderComponentResolver } from '../types';
3
- import { ComponentInstance } from '@uniformdev/canvas';
4
- declare type CustomSlotChildRenderFunc = (options: {
5
- child: ReactNode;
6
- component: ComponentInstance;
7
- key: Key;
8
- }) => JSX.Element;
9
- export declare type SlotProps<TSlotNames extends string> = {
10
- /** Name of the slot to render */
11
- name: TSlotNames;
12
- /**
13
- * Function to resolve the React component to render for a given Canvas component type.
14
- * If not specified, the resolveRenderer function on the nearest Layout will be used, if any.
15
- */
16
- resolveRenderer?: RenderComponentResolver;
17
- /** Optional render props enables wrapping all child components in the slot with some markup */
18
- children?: CustomSlotChildRenderFunc;
19
- };
20
- /** Renders a named Slot within a Composition. */
21
- export declare function Slot<TSlotNames extends string = string>({ name, resolveRenderer, children, }: SlotProps<TSlotNames>): JSX.Element | null;
22
- export {};
@@ -1 +0,0 @@
1
- "use strict";var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(e){for(var o,n=1,t=arguments.length;n<t;n++)for(var r in o=arguments[n])Object.prototype.hasOwnProperty.call(o,r)&&(e[r]=o[r]);return e}).apply(this,arguments)},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.Slot=void 0;var react_1=__importDefault(require("react")),Composition_1=require("./Composition"),canvas_1=require("@uniformdev/canvas"),defaultSystemComponentResolver_1=require("../defaultSystemComponentResolver"),convertComponentToProps_1=require("../convertComponentToProps");function Slot(e){var o=e.name,n=e.resolveRenderer,t=e.children,r=(0,Composition_1.useComposition)(),s=r.composition,e=r.resolveRenderer;if(!s)throw new Error("Cannot use Slot without a Composition wrapper.");r=null===(r=s.slots)||void 0===r?void 0:r[o];if(!r||!Array.isArray(r))return"development"===process.env.NODE_ENV&&console.warn("[canvas-dev] slot '"+o+"' was rendered, but it was not defined on its component. This is expected if the slot is optional, otherwise it may indicate a typo. Component:",s),null;var i=null!=n?n:e,a=defaultSystemComponentResolver_1.defaultSystemComponentResolver,r=r.map(function(e,o){var n=renderComponent({component:e,resolveRenderer:i,resolveSystem:a,key:o});return t?t({child:n,component:e,key:o}):n});return react_1.default.createElement(react_1.default.Fragment,void 0,r)}function renderComponent(e){var o=e.component,n=e.resolveRenderer,t=e.resolveSystem,r=e.key,s=void 0===r?0:r,e=null==n?void 0:n(o);if(o.type===canvas_1.CANVAS_TEST_TYPE)return t.test(o,s,function(e,o){return renderComponent({component:e,resolveRenderer:n,resolveSystem:t,key:o})});if(o.type===canvas_1.CANVAS_PERSONALIZE_TYPE)return t.personalization(o,s,function(e,o){return renderComponent({component:e,resolveRenderer:n,resolveSystem:t,key:o})});if(e){r=(0,convertComponentToProps_1.convertComponentToProps)(o);return react_1.default.createElement(Composition_1.Composition,{key:s,data:o,resolveRenderer:n},react_1.default.createElement(e,__assign({},r)))}return"production"!==process.env.NODE_ENV&&console.warn("[canvas] found component of type '"+o.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.",o),null}exports.Slot=Slot;
@@ -1,9 +0,0 @@
1
- import { ComponentInstance } from '@uniformdev/canvas';
2
- import { ComponentProps } from './types';
3
- /**
4
- * Converts a raw Canvas component instance to React component props format.
5
- * This merges each parameter moved to the root object and removes the 'value' node,
6
- * hugely simplifying rendering code. For example if the raw object has parameters.foo.value,
7
- * then the final props have props.foo === raw.parameters.foo.value.
8
- */
9
- export declare function convertComponentToProps<T = unknown>(component: ComponentInstance): ComponentProps<T>;
@@ -1 +0,0 @@
1
- "use strict";var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(n){for(var o,e=1,t=arguments.length;e<t;e++)for(var r in o=arguments[e])Object.prototype.hasOwnProperty.call(o,r)&&(n[r]=o[r]);return n}).apply(this,arguments)};function convertComponentToProps(n){var o,e=null!==(o=n.parameters)&&void 0!==o?o:{};return __assign(__assign(__assign({},Object.keys(e).reduce(function(n,o){return n[o]=e[o].value,n},{})),n.data),{component:n})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.convertComponentToProps=void 0,exports.convertComponentToProps=convertComponentToProps;
@@ -1,2 +0,0 @@
1
- import { SystemRenderConfig } from './types';
2
- export declare const defaultSystemComponentResolver: SystemRenderConfig;
@@ -1 +0,0 @@
1
- "use strict";var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaultSystemComponentResolver=void 0;var optimize_tracker_react_1=require("@uniformdev/optimize-tracker-react"),canvas_1=require("@uniformdev/canvas"),react_1=__importDefault(require("react"));function paramValueIfString(e){if("string"==typeof(null==e?void 0:e.value))return e.value}exports.defaultSystemComponentResolver={test:function(e,t,r){var a=null!==(a=null===(a=e.slots)||void 0===a?void 0:a.test)&&void 0!==a?a:[],e=(null===(e=e.parameters.test)||void 0===e?void 0:e.value)||"Untitled Test",a=a.map(function(e,t){var r;return __assign(__assign({},e),{id:null!==(r=paramValueIfString(null===(r=e.parameters)||void 0===r?void 0:r.testId))&&void 0!==r?r:"variation-"+(t+1)+"-"+e.type})});return react_1.default.createElement(optimize_tracker_react_1.Test,{key:t,variations:a,name:e,component:function(e){return r(e,t)}})},personalization:function(e,t,r){var a=e,e=(0,canvas_1.mapSlotToPersonalizedVariations)(null===(e=null==a?void 0:a.slots)||void 0===e?void 0:e.pz);return react_1.default.createElement(optimize_tracker_react_1.Personalize,{key:t,variations:e,count:Number(null!==(e=null===(e=null===(e=a.parameters)||void 0===e?void 0:e.count)||void 0===e?void 0:e.value)&&void 0!==e?e:1),trackingEventName:null===(e=null===(e=a.parameters)||void 0===e?void 0:e.trackingEventName)||void 0===e?void 0:e.value,matchFilter:null===(a=a.parameters.matchFilter)||void 0===a?void 0:a.value,component:function(e){return r(e,0)}})}};
@@ -1,7 +0,0 @@
1
- import { SubscribeToCompositionOptions } from '@uniformdev/canvas';
2
- export declare type UseCompositionEventEffectOptions = Omit<Partial<SubscribeToCompositionOptions>, 'callback'> & {
3
- enabled: boolean;
4
- effect: () => void;
5
- };
6
- /** Hook to manage a subscription to a realtime event on a composition */
7
- export declare function useCompositionEventEffect({ enabled, projectId, compositionId, compositionState, effect, }: UseCompositionEventEffectOptions): void;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useCompositionEventEffect=void 0;var canvas_1=require("@uniformdev/canvas"),react_1=require("react");function useCompositionEventEffect(e){var o=e.enabled,n=e.projectId,i=e.compositionId,t=e.compositionState,c=void 0===t?0:t,s=e.effect;(0,react_1.useEffect)(function(){if(o&&i&&n){var e=(0,canvas_1.createEventBus)(),t=(0,canvas_1.subscribeToComposition)({eventBus:e,compositionId:i,compositionState:c,projectId:n,callback:s,event:"updated"});return function(){t(),e.client.disconnect()}}},[i,o,c,n,s])}exports.useCompositionEventEffect=useCompositionEventEffect;
@@ -1,5 +0,0 @@
1
- export * from './components/Composition';
2
- export * from './components/Slot';
3
- export * from './components/DefaultNotImplementedComponent';
4
- export * from './types';
5
- export * from './hooks/useCompositionEventEffect';
package/dist/cjs/index.js DELETED
@@ -1 +0,0 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,o){e[o=void 0===o?r:o]=t[r]}),__exportStar=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||__createBinding(t,e,r)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./components/Composition"),exports),__exportStar(require("./components/Slot"),exports),__exportStar(require("./components/DefaultNotImplementedComponent"),exports),__exportStar(require("./types"),exports),__exportStar(require("./hooks/useCompositionEventEffect"),exports);
@@ -1,22 +0,0 @@
1
- import { Key } from 'react';
2
- import { ComponentInstance } from '@uniformdev/canvas';
3
- /**
4
- * Props passed to a Canvas component implementation.
5
- * TProps is the Canvas component's parameters object after
6
- * all enhancers have been applied.
7
- */
8
- export declare type ComponentProps<TProps = unknown> = TProps & {
9
- component: ComponentInstance;
10
- };
11
- /**
12
- * Function that maps a Canvas component instance to its React component to render it.
13
- * The resolver would commonly inspect the `type` and possibly `variant` of the component to decide.
14
- */
15
- export declare type RenderComponentResolver = (component: ComponentInstance) => React.ComponentType<ComponentProps<unknown>> | null;
16
- /** Function that renders Canvas system internals */
17
- export declare type SystemRenderFunction = (component: ComponentInstance, key: Key, renderChild: (component: ComponentInstance, key: Key) => JSX.Element | null) => JSX.Element | null;
18
- /** Configures rendering of system components (tests, pz) */
19
- export declare type SystemRenderConfig = {
20
- test: SystemRenderFunction;
21
- personalization: SystemRenderFunction;
22
- };
package/dist/cjs/types.js DELETED
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1,24 +0,0 @@
1
- import { ComponentInstance } from '@uniformdev/canvas';
2
- import { ReactNode } from 'react';
3
- import { RenderComponentResolver, ComponentProps } from '../types';
4
- export declare type CompositionProps<TRenderProps = unknown> = {
5
- /** The root component in the composition */
6
- data: ComponentInstance;
7
- /** Resolves a React component to render a Canvas component, generally by inspecting type/variant */
8
- resolveRenderer?: RenderComponentResolver;
9
- /** Either markup to render the composition directly, or render props to provide the ComponentProps for the root component */
10
- children: ReactNode | ((props: ComponentProps<TRenderProps>) => JSX.Element);
11
- };
12
- export declare type CompositionContext = {
13
- /** The parent composition */
14
- composition: ComponentInstance;
15
- /** The current function to translate component data into React components */
16
- resolveRenderer: RenderComponentResolver;
17
- };
18
- /**
19
- * Gets the parent Canvas composition of the current component.
20
- * Note: this gets the direct parent, not necessarily the root of the composition.
21
- */
22
- export declare function useComposition(): CompositionContext;
23
- /** Forms a Canvas composition root, providing services to render a tree of Canvas components */
24
- export declare function Composition<TRenderProps = unknown>({ data, resolveRenderer, children, }: CompositionProps<TRenderProps>): JSX.Element | null;
@@ -1 +0,0 @@
1
- import{useBehaviorTracking}from"@uniformdev/optimize-tracker-react";import{CANVAS_INTENT_TAG_PARAM}from"@uniformdev/canvas";import React,{createContext,useContext}from"react";import{convertComponentToProps}from"../convertComponentToProps";var CompositionContext=createContext({});function useComposition(){return useContext(CompositionContext)}function Composition(o){var e=o.data,t=o.resolveRenderer,n=o.children,r=useComposition();if(useBehaviorTracking(null===(o=null===(o=null==e?void 0:e.parameters)||void 0===o?void 0:o[CANVAS_INTENT_TAG_PARAM])||void 0===o?void 0:o.value),!e)return"development"===process.env.NODE_ENV&&console.warn("[canvas-dev] Composition was rendered with no data, nothing will be output."),null;r={composition:e,resolveRenderer:null!=t?t:r.resolveRenderer};return React.createElement(CompositionContext.Provider,{value:r},"function"==typeof n?n(convertComponentToProps(e)):n)}export{useComposition,Composition};
@@ -1,9 +0,0 @@
1
- /// <reference types="react" />
2
- import { ComponentProps } from '../types';
3
- /**
4
- * A default implementation of a component-not-implemented component.
5
- * Useful for model-first workflows where frontend dev comes later.
6
- * To make this work, it needs to be the default returned from the
7
- * resolveRenderer() function when the component is unknown.
8
- **/
9
- export declare function DefaultNotImplementedComponent(props: ComponentProps): JSX.Element | null;
@@ -1 +0,0 @@
1
- import React from"react";function DefaultNotImplementedComponent(e){var t=null===(t=e.component)||void 0===t?void 0:t.type;return t?React.createElement("div",{style:{borderLeft:"10px solid #e42535!important",padding:"0.01em 16px 16px",borderRadius:"16px",backgroundColor:"rgba(122, 215, 218, 0.3)",color:"#1d3557"}},React.createElement("h2",null,"Component: ",t),React.createElement("p",null,React.createElement("strong",null,t)," has no React implementation. It may need to be added to your"," ",React.createElement("code",null,"resolveRenderer()")," function."),React.createElement("details",null,React.createElement("summary",null,"Props"),React.createElement("pre",null,JSON.stringify(e,null,2)))):null}export{DefaultNotImplementedComponent};
@@ -1,22 +0,0 @@
1
- import { Key, ReactNode } from 'react';
2
- import { RenderComponentResolver } from '../types';
3
- import { ComponentInstance } from '@uniformdev/canvas';
4
- declare type CustomSlotChildRenderFunc = (options: {
5
- child: ReactNode;
6
- component: ComponentInstance;
7
- key: Key;
8
- }) => JSX.Element;
9
- export declare type SlotProps<TSlotNames extends string> = {
10
- /** Name of the slot to render */
11
- name: TSlotNames;
12
- /**
13
- * Function to resolve the React component to render for a given Canvas component type.
14
- * If not specified, the resolveRenderer function on the nearest Layout will be used, if any.
15
- */
16
- resolveRenderer?: RenderComponentResolver;
17
- /** Optional render props enables wrapping all child components in the slot with some markup */
18
- children?: CustomSlotChildRenderFunc;
19
- };
20
- /** Renders a named Slot within a Composition. */
21
- export declare function Slot<TSlotNames extends string = string>({ name, resolveRenderer, children, }: SlotProps<TSlotNames>): JSX.Element | null;
22
- export {};
@@ -1 +0,0 @@
1
- var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(e){for(var o,n=1,r=arguments.length;n<r;n++)for(var t in o=arguments[n])Object.prototype.hasOwnProperty.call(o,t)&&(e[t]=o[t]);return e}).apply(this,arguments)};import React from"react";import{Composition,useComposition}from"./Composition";import{CANVAS_PERSONALIZE_TYPE,CANVAS_TEST_TYPE}from"@uniformdev/canvas";import{defaultSystemComponentResolver}from"../defaultSystemComponentResolver";import{convertComponentToProps}from"../convertComponentToProps";function Slot(e){var o=e.name,n=e.resolveRenderer,r=e.children,t=useComposition(),s=t.composition,e=t.resolveRenderer;if(!s)throw new Error("Cannot use Slot without a Composition wrapper.");t=null===(t=s.slots)||void 0===t?void 0:t[o];if(!t||!Array.isArray(t))return"development"===process.env.NODE_ENV&&console.warn("[canvas-dev] slot '"+o+"' was rendered, but it was not defined on its component. This is expected if the slot is optional, otherwise it may indicate a typo. Component:",s),null;var i=null!=n?n:e,p=defaultSystemComponentResolver,t=t.map(function(e,o){var n=renderComponent({component:e,resolveRenderer:i,resolveSystem:p,key:o});return r?r({child:n,component:e,key:o}):n});return React.createElement(React.Fragment,void 0,t)}function renderComponent(e){var o=e.component,n=e.resolveRenderer,r=e.resolveSystem,t=e.key,s=void 0===t?0:t,e=null==n?void 0:n(o);if(o.type===CANVAS_TEST_TYPE)return r.test(o,s,function(e,o){return renderComponent({component:e,resolveRenderer:n,resolveSystem:r,key:o})});if(o.type===CANVAS_PERSONALIZE_TYPE)return r.personalization(o,s,function(e,o){return renderComponent({component:e,resolveRenderer:n,resolveSystem:r,key:o})});if(e){t=convertComponentToProps(o);return React.createElement(Composition,{key:s,data:o,resolveRenderer:n},React.createElement(e,__assign({},t)))}return"production"!==process.env.NODE_ENV&&console.warn("[canvas] found component of type '"+o.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.",o),null}export{Slot};
@@ -1,9 +0,0 @@
1
- import { ComponentInstance } from '@uniformdev/canvas';
2
- import { ComponentProps } from './types';
3
- /**
4
- * Converts a raw Canvas component instance to React component props format.
5
- * This merges each parameter moved to the root object and removes the 'value' node,
6
- * hugely simplifying rendering code. For example if the raw object has parameters.foo.value,
7
- * then the final props have props.foo === raw.parameters.foo.value.
8
- */
9
- export declare function convertComponentToProps<T = unknown>(component: ComponentInstance): ComponentProps<T>;
@@ -1 +0,0 @@
1
- var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(n){for(var t,r=1,o=arguments.length;r<o;r++)for(var e in t=arguments[r])Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n}).apply(this,arguments)};function convertComponentToProps(n){var t,r=null!==(t=n.parameters)&&void 0!==t?t:{};return __assign(__assign(__assign({},Object.keys(r).reduce(function(n,t){return n[t]=r[t].value,n},{})),n.data),{component:n})}export{convertComponentToProps};
@@ -1,2 +0,0 @@
1
- import { SystemRenderConfig } from './types';
2
- export declare const defaultSystemComponentResolver: SystemRenderConfig;
@@ -1 +0,0 @@
1
- var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)};import{Personalize,Test}from"@uniformdev/optimize-tracker-react";import{mapSlotToPersonalizedVariations}from"@uniformdev/canvas";import React from"react";var defaultSystemComponentResolver={test:function(t,e,n){var a=null!==(a=null===(a=t.slots)||void 0===a?void 0:a.test)&&void 0!==a?a:[],t=(null===(t=t.parameters.test)||void 0===t?void 0:t.value)||"Untitled Test",a=a.map(function(t,e){var n;return __assign(__assign({},t),{id:null!==(n=paramValueIfString(null===(n=t.parameters)||void 0===n?void 0:n.testId))&&void 0!==n?n:"variation-"+(e+1)+"-"+t.type})});return React.createElement(Test,{key:e,variations:a,name:t,component:function(t){return n(t,e)}})},personalization:function(t,e,n){var a=t,t=mapSlotToPersonalizedVariations(null===(t=null==a?void 0:a.slots)||void 0===t?void 0:t.pz);return React.createElement(Personalize,{key:e,variations:t,count:Number(null!==(t=null===(t=null===(t=a.parameters)||void 0===t?void 0:t.count)||void 0===t?void 0:t.value)&&void 0!==t?t:1),trackingEventName:null===(t=null===(t=a.parameters)||void 0===t?void 0:t.trackingEventName)||void 0===t?void 0:t.value,matchFilter:null===(a=a.parameters.matchFilter)||void 0===a?void 0:a.value,component:function(t){return n(t,0)}})}};function paramValueIfString(t){if("string"==typeof(null==t?void 0:t.value))return t.value}export{defaultSystemComponentResolver};
@@ -1,7 +0,0 @@
1
- import { SubscribeToCompositionOptions } from '@uniformdev/canvas';
2
- export declare type UseCompositionEventEffectOptions = Omit<Partial<SubscribeToCompositionOptions>, 'callback'> & {
3
- enabled: boolean;
4
- effect: () => void;
5
- };
6
- /** Hook to manage a subscription to a realtime event on a composition */
7
- export declare function useCompositionEventEffect({ enabled, projectId, compositionId, compositionState, effect, }: UseCompositionEventEffectOptions): void;
@@ -1 +0,0 @@
1
- import{createEventBus,subscribeToComposition}from"@uniformdev/canvas";import{useEffect}from"react";function useCompositionEventEffect(o){var e=o.enabled,i=o.projectId,n=o.compositionId,t=o.compositionState,c=void 0===t?0:t,s=o.effect;useEffect(function(){if(e&&n&&i){var o=createEventBus(),t=subscribeToComposition({eventBus:o,compositionId:n,compositionState:c,projectId:i,callback:s,event:"updated"});return function(){t(),o.client.disconnect()}}},[n,e,c,i,s])}export{useCompositionEventEffect};
@@ -1,5 +0,0 @@
1
- export * from './components/Composition';
2
- export * from './components/Slot';
3
- export * from './components/DefaultNotImplementedComponent';
4
- export * from './types';
5
- export * from './hooks/useCompositionEventEffect';
package/dist/esm/index.js DELETED
@@ -1 +0,0 @@
1
- export*from"./components/Composition";export*from"./components/Slot";export*from"./components/DefaultNotImplementedComponent";export*from"./types";export*from"./hooks/useCompositionEventEffect";
@@ -1,22 +0,0 @@
1
- import { Key } from 'react';
2
- import { ComponentInstance } from '@uniformdev/canvas';
3
- /**
4
- * Props passed to a Canvas component implementation.
5
- * TProps is the Canvas component's parameters object after
6
- * all enhancers have been applied.
7
- */
8
- export declare type ComponentProps<TProps = unknown> = TProps & {
9
- component: ComponentInstance;
10
- };
11
- /**
12
- * Function that maps a Canvas component instance to its React component to render it.
13
- * The resolver would commonly inspect the `type` and possibly `variant` of the component to decide.
14
- */
15
- export declare type RenderComponentResolver = (component: ComponentInstance) => React.ComponentType<ComponentProps<unknown>> | null;
16
- /** Function that renders Canvas system internals */
17
- export declare type SystemRenderFunction = (component: ComponentInstance, key: Key, renderChild: (component: ComponentInstance, key: Key) => JSX.Element | null) => JSX.Element | null;
18
- /** Configures rendering of system components (tests, pz) */
19
- export declare type SystemRenderConfig = {
20
- test: SystemRenderFunction;
21
- personalization: SystemRenderFunction;
22
- };
package/dist/esm/types.js DELETED
File without changes