@remkoj/optimizely-cms-react 4.0.0 → 4.1.0

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.
@@ -6,9 +6,15 @@ import { type CmsContentComponent } from './cms-content/client.js';
6
6
  import { type OptimizelyCompositionComponent } from './visual-builder/index.js';
7
7
  import { type RichTextComponent } from './rich-text/index.js';
8
8
  export type { BaseStyleDefinition, ElementStyleDefinition, LayoutProps, LayoutPropsSetting, LayoutPropsSettingChoices, LayoutPropsSettingKeys, LayoutPropsSettingValues, NodeStyleDefinition, StyleDefinition, StyleSetting } from "./cms-styles/index.js";
9
+ export { isNode, isElementNode, isComponentNode, isComponentNodeOfType, isStructureNode } from "./visual-builder/functions.js";
9
10
  export { extractSettings, readSetting } from "./cms-styles/index.js";
10
- export { DefaultComponents as RichTextComponentDictionary } from './rich-text/components.js';
11
- export type { TypedNode, RichTextNode, StringNode, NodeInput } from "./rich-text/index.js";
11
+ /**
12
+ * Client side renderer for Rich Text
13
+ */
14
+ export declare const RichText: RichTextComponent;
15
+ export type { RichTextComponent, RichTextProps, RichTextNode, StringNode, TypedNode, NodeInput } from "./rich-text/index.js";
16
+ export { DefaultComponents as RichTextComponentDictionary, createHtmlComponent } from './rich-text/components.js';
17
+ export { isNodeInput, isNonEmptyString, isRichTextNode, isStringNode, isText, isTypedNode } from "./rich-text/utils.js";
12
18
  /**
13
19
  * Wrapper function to turn context dependant components into easy to use
14
20
  * client components
@@ -39,7 +45,3 @@ export type { CmsContentAreaClassMapper, CmsContentAreaComponent, CmsContentArea
39
45
  * dictionary.
40
46
  */
41
47
  export declare const OptimizelyComposition: OptimizelyCompositionComponent;
42
- /**
43
- * Client side renderer for Rich Text
44
- */
45
- export declare const RichText: RichTextComponent;
@@ -7,9 +7,14 @@ import { CmsEditable as BaseEditable } from './cms-editable/index.js'; // Both R
7
7
  import { CmsContent as BaseCmsContent } from './cms-content/client.js'; // Different components for RSC & Client
8
8
  import { OptimizelyComposition as BaseOptimizelyComposition } from './visual-builder/index.js'; // Both RSC & Client capable
9
9
  import { RichText as BaseRichText } from './rich-text/index.js';
10
+ export { isNode, isElementNode, isComponentNode, isComponentNodeOfType, isStructureNode } from "./visual-builder/functions.js";
10
11
  export { extractSettings, readSetting } from "./cms-styles/index.js";
11
- // Export dictionary & pass through RichText Types
12
- export { DefaultComponents as RichTextComponentDictionary } from './rich-text/components.js';
12
+ /**
13
+ * Client side renderer for Rich Text
14
+ */
15
+ export const RichText = clientContextAware(BaseRichText);
16
+ export { DefaultComponents as RichTextComponentDictionary, createHtmlComponent } from './rich-text/components.js';
17
+ export { isNodeInput, isNonEmptyString, isRichTextNode, isStringNode, isText, isTypedNode } from "./rich-text/utils.js";
13
18
  /**
14
19
  * Wrapper function to turn context dependant components into easy to use
15
20
  * client components
@@ -45,8 +50,4 @@ export const CmsContentArea = cmsContentAware(clientContextAware(BaseContentArea
45
50
  * dictionary.
46
51
  */
47
52
  export const OptimizelyComposition = cmsContentAware(clientContextAware(BaseOptimizelyComposition), CmsContent);
48
- /**
49
- * Client side renderer for Rich Text
50
- */
51
- export const RichText = BaseRichText;
52
53
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/components/client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,cAAc,IAAI,eAAe,EAAgC,MAAM,6BAA6B,CAAA,CAAC,4BAA4B;AAC1I,OAAO,EAAE,WAAW,IAAI,YAAY,EAA6B,MAAM,yBAAyB,CAAA,CAAC,4BAA4B;AAC7H,OAAO,EAAE,UAAU,IAAI,cAAc,EAA4B,MAAM,yBAAyB,CAAA,CAAC,wCAAwC;AACzI,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAuC,MAAM,2BAA2B,CAAA,CAAC,4BAA4B;AAChK,OAAO,EAAE,QAAQ,IAAI,YAAY,EAA0B,MAAM,sBAAsB,CAAA;AAIvF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEpE,kDAAkD;AAClD,OAAO,EAAE,iBAAiB,IAAI,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAG5F;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAU,SAA6C;IAErF,MAAM,aAAa,GAAG,SAAS,CAAA;IAC/B,MAAM,qBAAqB,GAAG,CAAC,KAAQ,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;QAC9B,OAAO,KAAC,aAAa,IAAC,GAAG,EAAE,GAAG,KAAO,KAAK,GAAK,CAAA;IACnD,CAAC,CAAA;IACD,OAAO,qBAAqB,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAyB,CAAA;AAGnF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAc,CAAwB,CAAA;AAGnF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,UAAU,CAA4B,CAAA;AAGzH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,EAAE,UAAU,CAAmC,CAAA;AAEjJ;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAiC,CAAA"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/components/client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,cAAc,IAAI,eAAe,EAAgC,MAAM,6BAA6B,CAAA,CAAC,4BAA4B;AAC1I,OAAO,EAAE,WAAW,IAAI,YAAY,EAA6B,MAAM,yBAAyB,CAAA,CAAC,4BAA4B;AAC7H,OAAO,EAAE,UAAU,IAAI,cAAc,EAA4B,MAAM,yBAAyB,CAAA,CAAC,wCAAwC;AACzI,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAuC,MAAM,2BAA2B,CAAA,CAAC,4BAA4B;AAChK,OAAO,EAAE,QAAQ,IAAI,YAAY,EAA0B,MAAM,sBAAsB,CAAA;AAIvF,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC9H,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEpE;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAsB,CAAA;AAE7E,OAAO,EAAE,iBAAiB,IAAI,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACjH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAG,MAAM,sBAAsB,CAAA;AAExH;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAU,SAA6C;IAErF,MAAM,aAAa,GAAG,SAAS,CAAA;IAC/B,MAAM,qBAAqB,GAAG,CAAC,KAAQ,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;QAC9B,OAAO,KAAC,aAAa,IAAC,GAAG,EAAE,GAAG,KAAO,KAAK,GAAK,CAAA;IACnD,CAAC,CAAA;IACD,OAAO,qBAAqB,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAyB,CAAA;AAGnF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAc,CAAwB,CAAA;AAGnF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,UAAU,CAA4B,CAAA;AAGzH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,EAAE,UAAU,CAAmC,CAAA"}
@@ -1,6 +1,21 @@
1
1
  import { type FunctionComponent, type PropsWithChildren } from "react";
2
2
  import { ComponentTypeDictionary } from "../../factory/types.js";
3
3
  import type { TextNode, TypedNode } from "./types.js";
4
+ /**
5
+ * Create a React Component to render an element within a Rich-Text area.
6
+ * The generated React Component contains the logic to transform the attributes
7
+ * provided by the Rich Text structured data to the appropriate React
8
+ * attributes for rendering.
9
+ *
10
+ * @param element The HTML element
11
+ * @param ignoreChildren If set to `true`, it will output a self-closing
12
+ * element and fully ignoring the children
13
+ * @param defaultProps Override the default attributes that should always
14
+ * be applied, the CSS Classess (defined by the
15
+ * `className` property) will be merged
16
+ *
17
+ * @returns The React Component
18
+ */
4
19
  export declare function createHtmlComponent<E extends keyof JSX.IntrinsicElements>(element: E, ignoreChildren?: boolean, defaultProps?: JSX.IntrinsicElements[E] & Record<string, string>): ({ children, node, ...props }: PropsWithChildren<JSX.IntrinsicElements[E] & {
5
20
  node: TypedNode;
6
21
  }>) => import("react/jsx-runtime").JSX.Element;
@@ -1,20 +1,40 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { decodeHTML } from 'entities';
3
+ // Global constants
4
+ const reservedProps = ['url', 'class', 'children', 'type', 'internal', 'base'];
3
5
  //#region HTML Components
6
+ /**
7
+ * Create a React Component to render an element within a Rich-Text area.
8
+ * The generated React Component contains the logic to transform the attributes
9
+ * provided by the Rich Text structured data to the appropriate React
10
+ * attributes for rendering.
11
+ *
12
+ * @param element The HTML element
13
+ * @param ignoreChildren If set to `true`, it will output a self-closing
14
+ * element and fully ignoring the children
15
+ * @param defaultProps Override the default attributes that should always
16
+ * be applied, the CSS Classess (defined by the
17
+ * `className` property) will be merged
18
+ *
19
+ * @returns The React Component
20
+ */
4
21
  export function createHtmlComponent(element, ignoreChildren = false, defaultProps) {
5
22
  const HtmlElement = element;
6
- const reservedProps = ['url', 'class', 'children', 'type'];
7
23
  const component = ({ children, node, ...props }) => {
8
24
  const nodeProps = {};
9
25
  const renderProps = Object.getOwnPropertyNames(node);
26
+ // Copy over non-reserved Props
10
27
  renderProps.filter(x => !reservedProps.includes(x)).forEach(x => nodeProps[x] = node[x]);
28
+ // Move CSS Class definition into React property name
11
29
  if (renderProps.includes('class'))
12
30
  nodeProps['className'] = node['class'];
31
+ // Handle URLs
13
32
  if (renderProps.includes('url')) {
14
33
  switch (node.type) {
15
34
  case 'link':
16
35
  nodeProps['href'] = node['url'];
17
36
  break;
37
+ case 'video':
18
38
  case 'image':
19
39
  nodeProps['src'] = node['url'];
20
40
  break;
@@ -23,7 +43,10 @@ export function createHtmlComponent(element, ignoreChildren = false, defaultProp
23
43
  break;
24
44
  }
25
45
  }
26
- return ignoreChildren ? _jsx(HtmlElement, { ...defaultProps, ...nodeProps, ...props }) : _jsx(HtmlElement, { ...defaultProps, ...nodeProps, ...props, children: children });
46
+ // Render element
47
+ return ignoreChildren ?
48
+ _jsx(HtmlElement, { ...defaultProps, ...nodeProps, ...props }) :
49
+ _jsx(HtmlElement, { ...defaultProps, ...nodeProps, ...props, children: children });
27
50
  };
28
51
  return component;
29
52
  }
@@ -42,10 +65,11 @@ export const DefaultTextNode = ({ node }) => {
42
65
  * into React, using the component library shared across the react SDK.
43
66
  */
44
67
  export const DefaultComponents = [
68
+ // System types
45
69
  { type: 'RichText/richText', component: createHtmlComponent("div", false, { className: "cms:rich-text" }) },
70
+ { type: 'RichText/text', component: DefaultTextNode },
71
+ // Aliased tags
46
72
  { type: 'RichText/paragraph', component: createHtmlComponent("p") },
47
- { type: 'RichText/span', component: createHtmlComponent("span") },
48
- { type: 'RichText/div', component: createHtmlComponent("div") },
49
73
  { type: 'RichText/heading-one', component: createHtmlComponent("h1") },
50
74
  { type: 'RichText/heading-two', component: createHtmlComponent("h2") },
51
75
  { type: 'RichText/heading-three', component: createHtmlComponent("h3") },
@@ -53,12 +77,11 @@ export const DefaultComponents = [
53
77
  { type: 'RichText/heading-five', component: createHtmlComponent("h5") },
54
78
  { type: 'RichText/heading-six', component: createHtmlComponent("h6") },
55
79
  { type: 'RichText/link', component: createHtmlComponent("a") },
56
- { type: 'RichText/image', component: createHtmlComponent("img", true) },
57
- { type: 'RichText/text', component: DefaultTextNode },
58
- { type: 'RichText/br', component: createHtmlComponent("br", true) },
59
80
  { type: 'RichText/bulleted-list', component: createHtmlComponent("ul") },
60
81
  { type: 'RichText/numbered-list', component: createHtmlComponent("ol") },
61
82
  { type: 'RichText/list-item', component: createHtmlComponent("li") },
62
- { type: 'RichText/address', component: createHtmlComponent("address") }
83
+ { type: 'RichText/image', component: createHtmlComponent("img", true) },
84
+ // Self-closing tags
85
+ { type: 'RichText/br', component: createHtmlComponent("br", true) },
63
86
  ];
64
87
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/components/rich-text/components.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/components/rich-text/components.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type FunctionComponent } from "react";
2
2
  import type { RichTextProps } from "./types.js";
3
+ import { type PropsWithContext } from "../../context/types.js";
3
4
  export * from "./types.js";
4
- export declare const RichText: FunctionComponent<RichTextProps>;
5
+ export declare const RichText: FunctionComponent<PropsWithContext<RichTextProps>>;
@@ -2,17 +2,23 @@ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as Utils from './utils.js';
3
3
  import { DefaultComponentFactory } from "../../factory/default.js";
4
4
  import { DefaultComponents, DefaultTextNode, createHtmlComponent } from "./components.js";
5
+ import { CmsEditable } from "../cms-editable/index.js";
5
6
  export * from "./types.js";
6
- export const RichText = ({ factory, text = "{ \"type\": \"richText\" }", className = 'rich-text', as: Wrapper = "div", debug = false, noWrapper = false, ...props }) => {
7
+ export const RichText = ({ factory, text = "{ \"type\": \"richText\" }", className = 'rich-text', as: Wrapper = "div", debug = false, noWrapper = false, cmsFieldName = null, cmsId = null, ctx, ...props }) => {
7
8
  const id = Utils.getRandomId("rich-text");
8
- const richTextFactory = factory ?? new DefaultComponentFactory(DefaultComponents);
9
+ const richTextFactory = factory ?? ctx.factory ?? new DefaultComponentFactory(DefaultComponents);
10
+ const { inEditMode } = ctx;
9
11
  try {
10
12
  const data = Utils.processNodeInput(text);
11
13
  const textContent = (data?.children || []).map((child, idx) => {
12
14
  const elementId = id + '::' + idx;
13
15
  return _jsx(RichTextElement, { factory: richTextFactory, node: child, idPrefix: elementId + '::' }, elementId);
14
16
  });
15
- return noWrapper ? _jsx(_Fragment, { children: textContent }) : _jsx(Wrapper, { className: className, ...props, children: textContent });
17
+ if (noWrapper)
18
+ return _jsx(_Fragment, { children: textContent });
19
+ if (inEditMode && (cmsId || cmsFieldName))
20
+ return _jsx(CmsEditable, { as: Wrapper, className: className, cmsId: cmsId || undefined, cmsFieldName: cmsFieldName || undefined, ctx: ctx, ...props, children: textContent });
21
+ return _jsx(Wrapper, { className: className, ...props, children: textContent });
16
22
  }
17
23
  catch {
18
24
  if (debug)
@@ -22,27 +28,33 @@ export const RichText = ({ factory, text = "{ \"type\": \"richText\" }", classNa
22
28
  };
23
29
  //#region Supportive React components
24
30
  const RichTextElement = ({ factory, node, idPrefix, debug }) => {
31
+ // Render text
25
32
  if (Utils.isText(node)) {
26
33
  if (node.text.length == 0)
27
34
  return null;
28
35
  const TextComponent = factory?.resolve(`RichText/text`) ?? DefaultTextNode;
29
36
  return _jsx(TextComponent, { node: node });
30
37
  }
38
+ // Ignore incorrect data
31
39
  if (!Utils.isTypedNode(node)) {
32
40
  if (debug)
33
41
  console.warn('🟠 [Rich Text] Invalid rich text element data received:', node);
34
42
  return null;
35
43
  }
36
- const childData = node.children?.map((child, idx) => {
44
+ // Process children
45
+ const childData = node.children && (node.children.length > 0) ? node.children.map((child, idx) => {
37
46
  const elementId = idPrefix + idx;
38
47
  return _jsx(RichTextElement, { factory: factory, node: child, idPrefix: elementId + '::' }, elementId);
39
- });
40
- if (!factory?.has(`RichText/${node.type}`)) {
41
- console.warn('🟠 [Rich Text] No renderer for node type, falling back to "div":', `RichText/${node.type}`);
42
- const DivComponent = createHtmlComponent("div", false, { "data-type": node.type });
43
- return _jsx(DivComponent, { node: node, children: childData });
48
+ }) : undefined;
49
+ // Resolve component (and add to factory if not yet present)
50
+ let Component = factory?.resolve(`RichText/${node.type}`);
51
+ if (!Component) {
52
+ if (debug)
53
+ console.warn(`🟠 [Rich Text] No renderer for node type, using and registering HtmlComponent for "${node.type}": RichText/${node.type}`);
54
+ Component = createHtmlComponent(node.type);
55
+ factory?.register(`RichText/${node.type}`, Component);
44
56
  }
45
- const Component = factory?.resolve(`RichText/${node.type}`) ?? 'div';
46
- return _jsx(Component, { node: node, children: childData });
57
+ // Return component
58
+ return _jsx(Component, { node: node, children: childData && (childData.length > 0) ? childData : undefined });
47
59
  };
48
60
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/rich-text/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/rich-text/index.tsx"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import type { ComponentFactory, ComponentType } from "../../factory/types.js";
3
3
  export type RichTextProps = {
4
4
  /**
5
5
  * The component factory used for this rich text content
6
+ *
7
+ * @deprecated The factory from the context will be used
6
8
  */
7
9
  factory?: ComponentFactory;
8
10
  /**
@@ -55,19 +57,30 @@ export type RichTextElementProps = Readonly<{
55
57
  idPrefix: string;
56
58
  }>;
57
59
  export type Node = {};
60
+ /**
61
+ * Structured HTML node type for text data
62
+ */
58
63
  export type TextNode = Node & {
59
64
  text: string;
60
65
  } & Record<string, string | number | boolean>;
66
+ /**
67
+ * Structured HTML root node
68
+ */
61
69
  export type RichTextNode = Node & {
62
70
  type: "richText";
63
71
  children: Array<Node>;
64
72
  };
73
+ /**
74
+ * Structured HTML node for structured
75
+ * text
76
+ */
65
77
  export type StringNode = Node & {
66
78
  type: "string";
67
79
  children: Array<Node>;
68
80
  };
69
81
  /**
70
- * Node within Optimizely CMS Rich content field
82
+ * Structured HTML node type with a specific
83
+ * type defined
71
84
  */
72
85
  export type TypedNode = NodeWithChildren<Node & {
73
86
  type: string;
@@ -75,4 +88,8 @@ export type TypedNode = NodeWithChildren<Node & {
75
88
  export type NodeWithChildren<T extends Node> = T & {
76
89
  children?: Array<Node>;
77
90
  };
91
+ /**
92
+ * Allowable data type to provide to the RichText
93
+ * component
94
+ */
78
95
  export type NodeInput = string | RichTextNode | StringNode;
@@ -1,10 +1,11 @@
1
1
  import type { TextNode, TypedNode, Node, NodeInput, RichTextNode, StringNode } from './types.js';
2
2
  export declare function isText(toTest: Node | null | undefined): toTest is TextNode;
3
3
  export declare function isTypedNode(toTest: Node | null | undefined): toTest is TypedNode;
4
- export declare function processNodeInput(input: NodeInput | null | undefined): RichTextNode | StringNode | undefined;
5
- export declare function getRandomId(scope?: string): string;
6
4
  export declare function isRichTextNode(toTest: any): toTest is RichTextNode;
7
5
  export declare function isStringNode(toTest: any): toTest is StringNode;
6
+ export declare function isNonEmptyString(toTest: any): toTest is string;
7
+ export declare function processNodeInput(input: NodeInput | null | undefined): RichTextNode | StringNode | undefined;
8
+ export declare function getRandomId(scope?: string): string;
8
9
  /**
9
10
  * Test if the provided value is a valid output of the XHTML field-type within
10
11
  * Optimizely CMS
@@ -10,6 +10,15 @@ export function isTypedNode(toTest) {
10
10
  (typeof toTest.type) == 'string' &&
11
11
  toTest.type.length > 0);
12
12
  }
13
+ export function isRichTextNode(toTest) {
14
+ return isTypedNode(toTest) && toTest.type == 'richText';
15
+ }
16
+ export function isStringNode(toTest) {
17
+ return isTypedNode(toTest) && toTest.type == 'string';
18
+ }
19
+ export function isNonEmptyString(toTest) {
20
+ return typeof (toTest) == 'string' && toTest.length > 0;
21
+ }
13
22
  export function processNodeInput(input) {
14
23
  if (!input)
15
24
  return undefined;
@@ -21,12 +30,6 @@ export function processNodeInput(input) {
21
30
  export function getRandomId(scope = "richText") {
22
31
  return `${scope}::${Math.round(Math.random() * 100000)}`;
23
32
  }
24
- export function isRichTextNode(toTest) {
25
- return isTypedNode(toTest) && toTest.type == 'richText';
26
- }
27
- export function isStringNode(toTest) {
28
- return isTypedNode(toTest) && toTest.type == 'string';
29
- }
30
33
  /**
31
34
  * Test if the provided value is a valid output of the XHTML field-type within
32
35
  * Optimizely CMS
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/rich-text/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CAAC,MAA+B;IAElD,OAAO,CACH,OAAO,MAAM,IAAI,QAAQ;QACzB,MAAM,IAAI,IAAI;QACd,CAAC,OAAQ,MAAmB,CAAC,IAAI,CAAC,IAAI,QAAQ;QAC7C,MAAmB,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CACxC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAA+B;IAEvD,OAAO,CACH,OAAO,MAAM,IAAI,QAAQ;QACzB,MAAM,IAAI,IAAI;QACd,CAAC,OAAQ,MAAoB,CAAC,IAAI,CAAC,IAAI,QAAQ;QAC9C,MAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CACxC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAmC;IAEhE,IAAI,CAAC,KAAK;QACN,OAAO,SAAS,CAAA;IACpB,MAAM,UAAU,GAAG,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAA8B,CAAC,CAAC,CAAC,KAAK,CAAA;IACpG,IAAI,UAAU,EAAE,IAAI,IAAI,UAAU,IAAI,UAAU,EAAE,IAAI,IAAI,QAAQ;QAC9D,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IAC3E,OAAO,UAAU,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,UAAU;IAElD,OAAO,GAAG,KAAK,KAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAE,EAAE,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAW;IAEtC,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,UAAU,CAAA;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAW;IAEpC,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAA;AACzD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,MAAW;IAEnC,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;AACzD,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/rich-text/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CAAC,MAA+B;IAElD,OAAO,CACH,OAAO,MAAM,IAAI,QAAQ;QACzB,MAAM,IAAI,IAAI;QACd,CAAC,OAAQ,MAAmB,CAAC,IAAI,CAAC,IAAI,QAAQ;QAC7C,MAAmB,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CACxC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAA+B;IAEvD,OAAO,CACH,OAAO,MAAM,IAAI,QAAQ;QACzB,MAAM,IAAI,IAAI;QACd,CAAC,OAAQ,MAAoB,CAAC,IAAI,CAAC,IAAI,QAAQ;QAC9C,MAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CACxC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAW;IAEtC,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,UAAU,CAAA;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAW;IAEpC,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAW;IAExC,OAAO,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAmC;IAEhE,IAAI,CAAC,KAAK;QACN,OAAO,SAAS,CAAA;IACpB,MAAM,UAAU,GAAG,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAA8B,CAAC,CAAC,CAAC,KAAK,CAAA;IACpG,IAAI,UAAU,EAAE,IAAI,IAAI,UAAU,IAAI,UAAU,EAAE,IAAI,IAAI,QAAQ;QAC9D,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IAC3E,OAAO,UAAU,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,UAAU;IAElD,OAAO,GAAG,KAAK,KAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAE,EAAE,CAAA;AAC9D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,MAAW;IAEnC,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;AACzD,CAAC"}
@@ -6,10 +6,10 @@ import { type CmsEditableComponent } from './cms-editable/index.js';
6
6
  import { type CmsContentComponent } from './cms-content/rsc.js';
7
7
  import { type OptimizelyCompositionComponent } from './visual-builder/index.js';
8
8
  import { type RichTextComponent } from './rich-text/index.js';
9
+ export type { BaseStyleDefinition, ElementStyleDefinition, LayoutProps, LayoutPropsSetting, LayoutPropsSettingChoices, LayoutPropsSettingKeys, LayoutPropsSettingValues, NodeStyleDefinition, StyleDefinition, StyleSetting } from "./cms-styles/index.js";
10
+ export { extractSettings, readSetting } from "./cms-styles/index.js";
9
11
  export * from "./cms-styles/index.js";
10
12
  export { isNode, isComponentNode, isComponentNodeOfType, isStructureNode, isElementNode } from "./visual-builder/functions.js";
11
- export { DefaultComponents as RichTextComponentDictionary } from './rich-text/components.js';
12
- export type { TypedNode, RichTextNode, StringNode, NodeInput } from "./rich-text/index.js";
13
13
  /**
14
14
  * Fallback while RSC hasn't been moved from Canary to Main
15
15
  */
@@ -48,3 +48,6 @@ export declare const OptimizelyComposition: OptimizelyCompositionComponent;
48
48
  * Client side renderer for Rich Text
49
49
  */
50
50
  export declare const RichText: RichTextComponent;
51
+ export type { RichTextComponent, RichTextProps, RichTextNode, StringNode, TypedNode, NodeInput } from "./rich-text/index.js";
52
+ export { DefaultComponents as RichTextComponentDictionary, createHtmlComponent } from './rich-text/components.js';
53
+ export { isNodeInput, isNonEmptyString, isRichTextNode, isStringNode, isText, isTypedNode } from "./rich-text/utils.js";
@@ -7,11 +7,10 @@ import { CmsEditable as BaseEditable } from './cms-editable/index.js'; // Both R
7
7
  import { CmsContent as BaseCmsContent } from './cms-content/rsc.js'; // Different components for RSC & Client
8
8
  import { OptimizelyComposition as BaseOptimizelyComposition } from './visual-builder/index.js'; // Both RSC & Client capable
9
9
  import { RichText as BaseRichText } from './rich-text/index.js';
10
- // Pass through Style functions types
10
+ export { extractSettings, readSetting } from "./cms-styles/index.js";
11
11
  export * from "./cms-styles/index.js";
12
+ // Visual Builder items
12
13
  export { isNode, isComponentNode, isComponentNodeOfType, isStructureNode, isElementNode } from "./visual-builder/functions.js";
13
- // Export dictionary & pass through RichText Types
14
- export { DefaultComponents as RichTextComponentDictionary } from './rich-text/components.js';
15
14
  /**
16
15
  * Wrapper function to turn context dependant components into easy to use
17
16
  * server components
@@ -23,6 +22,8 @@ export function serverContextAware(component) {
23
22
  const BaseComponent = component;
24
23
  const ServerContextInjector = (props) => {
25
24
  const ctx = getServerContext();
25
+ if (!ctx)
26
+ console.log(`🔴 [ServerContextAware] Context for context aware component ${BaseComponent.displayName ?? BaseComponent.name ?? '[ANONYMOUS]'} is not defined!`, ctx);
26
27
  return _jsx(BaseComponent, { ctx: ctx, ...props });
27
28
  };
28
29
  ServerContextInjector.displayName = "Server Context Injector";
@@ -51,5 +52,7 @@ export const OptimizelyComposition = cmsContentAware(serverContextAware(BaseOpti
51
52
  /**
52
53
  * Client side renderer for Rich Text
53
54
  */
54
- export const RichText = BaseRichText;
55
+ export const RichText = serverContextAware(BaseRichText);
56
+ export { DefaultComponents as RichTextComponentDictionary, createHtmlComponent } from './rich-text/components.js';
57
+ export { isNodeInput, isNonEmptyString, isRichTextNode, isStringNode, isText, isTypedNode } from "./rich-text/utils.js";
55
58
  //# sourceMappingURL=rsc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsc.js","sourceRoot":"","sources":["../../src/components/rsc.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,cAAc,IAAI,eAAe,EAAgC,MAAM,6BAA6B,CAAA,CAAC,4BAA4B;AAC1I,OAAO,EAAE,WAAW,IAAI,YAAY,EAA6B,MAAM,yBAAyB,CAAA,CAAC,4BAA4B;AAC7H,OAAO,EAAE,UAAU,IAAI,cAAc,EAA0D,MAAM,sBAAsB,CAAA,CAAC,wCAAwC;AACpK,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAuC,MAAM,2BAA2B,CAAA,CAAC,4BAA4B;AAChK,OAAO,EAAE,QAAQ,IAAI,YAAY,EAA0B,MAAM,sBAAsB,CAAA;AAEvF,qCAAqC;AACrC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE9H,kDAAkD;AAClD,OAAO,EAAE,iBAAiB,IAAI,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAQ5F;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAU,SAAwD;IAEhG,MAAM,aAAa,GAAG,SAA+C,CAAA;IACrE,MAAM,qBAAqB,GAAsB,CAAC,KAAQ,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;QAC9B,OAAO,KAAC,aAAa,IAAC,GAAG,EAAE,GAAG,KAAO,KAAK,GAAK,CAAA;IACnD,CAAC,CAAA;IACD,qBAAqB,CAAC,WAAW,GAAG,yBAAyB,CAAA;IAC7D,OAAO,qBAAqB,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAyB,CAAA;AAGnF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAoD,CAAwB,CAAA;AAGzH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,UAAU,CAA4B,CAAA;AAGzH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,EAAE,UAAU,CAAmC,CAAA;AAEjJ;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAiC,CAAA"}
1
+ {"version":3,"file":"rsc.js","sourceRoot":"","sources":["../../src/components/rsc.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,cAAc,IAAI,eAAe,EAAgC,MAAM,6BAA6B,CAAA,CAAC,4BAA4B;AAC1I,OAAO,EAAE,WAAW,IAAI,YAAY,EAA6B,MAAM,yBAAyB,CAAA,CAAC,4BAA4B;AAC7H,OAAO,EAAE,UAAU,IAAI,cAAc,EAA0D,MAAM,sBAAsB,CAAA,CAAC,wCAAwC;AACpK,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAuC,MAAM,2BAA2B,CAAA,CAAC,4BAA4B;AAChK,OAAO,EAAE,QAAQ,IAAI,YAAY,EAA0B,MAAM,sBAAsB,CAAA;AAIvF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACpE,cAAc,uBAAuB,CAAA;AAErC,uBAAuB;AACvB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAO9H;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAU,SAAwD;IAEhG,MAAM,aAAa,GAAG,SAA+C,CAAA;IACrE,MAAM,qBAAqB,GAAsB,CAAC,KAAQ,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;QAC9B,IAAI,CAAC,GAAG;YACJ,OAAO,CAAC,GAAG,CAAC,+DAAgE,aAAa,CAAC,WAAW,IAAI,aAAa,CAAC,IAAI,IAAI,aAAa,kBAAkB,EAAE,GAAG,CAAC,CAAA;QACxK,OAAO,KAAC,aAAa,IAAC,GAAG,EAAE,GAAG,KAAO,KAAK,GAAK,CAAA;IACnD,CAAC,CAAA;IACD,qBAAqB,CAAC,WAAW,GAAG,yBAAyB,CAAA;IAC7D,OAAO,qBAAqB,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAyB,CAAA;AAGnF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAoD,CAAwB,CAAA;AAGzH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,UAAU,CAA4B,CAAA;AAGzH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,EAAE,UAAU,CAAmC,CAAA;AAEjJ;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAsB,CAAA;AAE7E,OAAO,EAAE,iBAAiB,IAAI,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACjH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAG,MAAM,sBAAsB,CAAA"}
@@ -2,9 +2,11 @@
2
2
  * @deprecated The `@remkoj/optimizely-cms-react/components` export has been deprecated
3
3
  */
4
4
  /**
5
- * @deprecated The `@remkoj/optimizely-cms-react/components` export has been deprecated
5
+ * @deprecated The `@remkoj/optimizely-cms-react/components` export has been
6
+ * deprecated, use either `@remkoj/optimizely-cms-react` or
7
+ * `@remkoj/optimizely-cms-react/rsc`, dependingn on your context
6
8
  */
7
- export { RichText } from "./components/rich-text/index.js";
9
+ export declare const RichText: import("react").ComponentType<import("./rsc.js").RichTextProps>;
8
10
  /**
9
11
  * @deprecated The `@remkoj/optimizely-cms-react/components` export has been deprecated
10
12
  */
@@ -1,10 +1,14 @@
1
1
  /**
2
2
  * @deprecated The `@remkoj/optimizely-cms-react/components` export has been deprecated
3
3
  */
4
+ import { RichText as BaseRichText } from "./components/rich-text/index.js";
5
+ import { serverContextAware } from "./rsc.js";
4
6
  /**
5
- * @deprecated The `@remkoj/optimizely-cms-react/components` export has been deprecated
7
+ * @deprecated The `@remkoj/optimizely-cms-react/components` export has been
8
+ * deprecated, use either `@remkoj/optimizely-cms-react` or
9
+ * `@remkoj/optimizely-cms-react/rsc`, dependingn on your context
6
10
  */
7
- export { RichText } from "./components/rich-text/index.js";
11
+ export const RichText = serverContextAware(BaseRichText);
8
12
  /**
9
13
  * @deprecated The `@remkoj/optimizely-cms-react/components` export has been deprecated
10
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC9G;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,iCAAiC,CAAA;AASxD;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAA;AACxD;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC9G;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,iCAAiC,CAAA;AASxD;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA"}
@@ -20,4 +20,5 @@ export declare class DefaultComponentFactory implements ComponentFactory {
20
20
  has(type: ComponentTypeHandle): boolean;
21
21
  resolve(type: ComponentTypeHandle): undefined | ComponentType;
22
22
  extract(): ComponentTypeDictionary;
23
+ remove(type: ComponentTypeHandle): boolean;
23
24
  }
@@ -64,13 +64,18 @@ export class DefaultComponentFactory {
64
64
  return Suspended;
65
65
  }
66
66
  extract() {
67
- return Array.from(this.registry.entries()).map(e => {
68
- return {
69
- ...e[1],
70
- type: e[0]
71
- };
67
+ return Array.from(this.registry.entries()).map(([key, entry]) => {
68
+ return { ...entry, type: key };
72
69
  });
73
70
  }
71
+ remove(type) {
72
+ const registryKey = processComponentTypeHandle(type);
73
+ if (this.dbg)
74
+ console.log(`🔎 [DefaultComponentFactory] Removing ${registryKey}`);
75
+ if (!this.registry.has(registryKey))
76
+ return true;
77
+ return this.registry.delete(registryKey);
78
+ }
74
79
  }
75
80
  function processComponentTypeHandle(handle) {
76
81
  if (typeof (handle) == 'string')
@@ -1 +1 @@
1
- {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/factory/default.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/factory/default.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;AAE/B,MAAM,CAAC,MAAM,oBAAoB,GAAI,cAAc,CAAA;AAEnD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAIhC;;;;;OAKG;IACH,YAAmB,iBAA2C;QATtD,aAAQ,GAAG,IAAI,GAAG,EAAwC,CAAA;QAW9D,qBAAqB;QACrB,IAAI,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAA;QAClD,CAAC;QAAC,MAAM,CAAC;YACL,IAAI,CAAC,GAAG,GAAG,KAAK,CAAA;QACpB,CAAC;QAED,kCAAkC;QAClC,IAAI,iBAAiB;YACjB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;IAC3C,CAAC;IAED,QAAQ,CAAC,IAAyB,EAAE,SAAwB,EAAE,cAAuB,KAAK,EAAE,MAAsB;QAE9G,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,sCAAuC,WAAY,EAAE,CAAC,CAAA;QAChF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,WAAW,CAAC,UAAmC;QAE3C,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACnB,MAAM,WAAW,GAAG,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACtD,IAAI,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,sCAAuC,WAAY,EAAE,CAAC,CAAA;YAChF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,GAAG,CAAC,IAAyB;QAEzB,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,6CAA8C,WAAY,EAAE,CAAC,CAAA;QACvF,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,CAAC,IAAyB;QAE7B,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,yCAA0C,WAAY,EAAE,CAAC,CAAA;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAA,CAAC,2CAA2C;QACxE,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,SAAS,CAAA,CAAC,6DAA6D;QAEnH,6CAA6C;QAC7C,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAA;QACtC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAA;QAChC,SAAS,SAAS,CAAC,KAAyB;YACxC,OAAO,KAAC,QAAQ,IAAC,QAAQ,EAAG,WAAW,IAAI,KAAC,WAAW,OAAM,KAAK,GAAK,YACnE,KAAC,cAAc,OAAM,KAAK,GAAI,GACvB,CAAA;QACf,CAAC;QACD,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,OAAO;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC5D,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;QAClC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,MAAM,CAAC,IAAyB;QAE5B,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,yCAA0C,WAAY,EAAE,CAAC,CAAA;QACnF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;YAC/B,OAAO,IAAI,CAAA;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAC5C,CAAC;CACJ;AAED,SAAS,0BAA0B,CAAC,MAA2B;IAE3D,IAAI,OAAM,CAAC,MAAM,CAAC,IAAI,QAAQ;QAC1B,OAAO,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAA;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACjE,OAAO,MAAM;aACR,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,iCAAiC;aACpF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,CAAU,iCAAiC;aACpF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAO,0BAA0B;aAC7E,IAAI,CAAC,YAAY,CAAC,CAAA,CAAiC,kCAAkC;IAC9F,MAAM,IAAI,KAAK,CAAC,kCAAmC,OAAM,CAAC,MAAM,CAAE,EAAE,CAAC,CAAA;AACzE,CAAC"}
@@ -38,7 +38,8 @@ export interface ComponentFactory {
38
38
  */
39
39
  has(type: ComponentTypeHandle): boolean;
40
40
  /**
41
- * Register an individual component
41
+ * Register an individual component. When the component type has already
42
+ * been registered it will be updated.
42
43
  *
43
44
  * @param type The component type to register
44
45
  * @param component The component to bind to the type
@@ -47,11 +48,21 @@ export interface ComponentFactory {
47
48
  */
48
49
  register(type: ComponentTypeHandle, component: ComponentType, useSuspense?: boolean, loader?: ComponentType): void;
49
50
  /**
50
- * Register all components provided through the dictionary
51
+ * Register all components provided through the dictionary. When the
52
+ * component type has already been registered it will be updated.
51
53
  *
52
54
  * @param components The components to register
53
55
  */
54
56
  registerAll(components: ComponentTypeDictionary): void;
57
+ /**
58
+ * Allows removing of a component type from the factory, but only when
59
+ * the implemenation supports it.
60
+ *
61
+ * @param type The component type to remove
62
+ * @returns `true` If the component was not found or removed, `false`
63
+ * otherwise
64
+ */
65
+ remove?: (type: ComponentTypeHandle) => boolean;
55
66
  /**
56
67
  * Resolve a component type
57
68
  *
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remkoj/optimizely-cms-react",
3
3
  "license": "Apache-2.0",
4
- "version": "4.0.0",
4
+ "version": "4.1.0",
5
5
  "repository": "https://github.com/remkoj/optimizely-dxp-clients.git",
6
6
  "author": "Remko Jantzen <693172+remkoj@users.noreply.github.com>",
7
7
  "homepage": "https://github.com/remkoj/optimizely-dxp-clients/tree/main/packages/optimizely-cms-react",
@@ -27,13 +27,13 @@
27
27
  }
28
28
  },
29
29
  "devDependencies": {
30
- "@remkoj/optimizely-graph-client": "4.0.0",
30
+ "@remkoj/optimizely-graph-client": "4.1.0",
31
31
  "@types/crypto-js": "^4.2.2",
32
- "@types/node": "^22.10.1",
33
- "@types/react": "^18.3.14",
34
- "@types/react-dom": "18.3.2",
32
+ "@types/node": "^22.10.2",
33
+ "@types/react": "^18.3.17",
34
+ "@types/react-dom": "18.3.5",
35
35
  "entities": "^5.0.0",
36
- "graphql": "^16.9.0",
36
+ "graphql": "^16.10.0",
37
37
  "graphql-request": "^6.1.0",
38
38
  "prop-types": "^15.8.1",
39
39
  "react": "^18.3.1",