@khairold/xml-render 0.1.1 → 0.1.4

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 (62) hide show
  1. package/README.md +29 -5
  2. package/dist/index.d.ts +0 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/parser.d.ts +2 -86
  5. package/dist/parser.d.ts.map +1 -1
  6. package/dist/parser.js +138 -82
  7. package/dist/parser.js.map +1 -1
  8. package/dist/react/ErrorBoundary.d.ts +2 -15
  9. package/dist/react/ErrorBoundary.d.ts.map +1 -1
  10. package/dist/react/ErrorBoundary.js +18 -43
  11. package/dist/react/ErrorBoundary.js.map +1 -1
  12. package/dist/react/XmlRender.d.ts +4 -2
  13. package/dist/react/XmlRender.d.ts.map +1 -1
  14. package/dist/react/XmlRender.js +4 -28
  15. package/dist/react/XmlRender.js.map +1 -1
  16. package/dist/react/catalog.d.ts +2 -77
  17. package/dist/react/catalog.d.ts.map +1 -1
  18. package/dist/react/catalog.js +3 -34
  19. package/dist/react/catalog.js.map +1 -1
  20. package/dist/react/context.d.ts +2 -47
  21. package/dist/react/context.d.ts.map +1 -1
  22. package/dist/react/context.js +2 -44
  23. package/dist/react/context.js.map +1 -1
  24. package/dist/react-native/ErrorBoundary.d.ts +2 -15
  25. package/dist/react-native/ErrorBoundary.d.ts.map +1 -1
  26. package/dist/react-native/ErrorBoundary.js +9 -34
  27. package/dist/react-native/ErrorBoundary.js.map +1 -1
  28. package/dist/react-native/XmlRender.d.ts +4 -2
  29. package/dist/react-native/XmlRender.d.ts.map +1 -1
  30. package/dist/react-native/XmlRender.js +4 -28
  31. package/dist/react-native/XmlRender.js.map +1 -1
  32. package/dist/react-native/catalog.d.ts +2 -77
  33. package/dist/react-native/catalog.d.ts.map +1 -1
  34. package/dist/react-native/catalog.js +3 -34
  35. package/dist/react-native/catalog.js.map +1 -1
  36. package/dist/react-native/context.d.ts +2 -47
  37. package/dist/react-native/context.d.ts.map +1 -1
  38. package/dist/react-native/context.js +2 -44
  39. package/dist/react-native/context.js.map +1 -1
  40. package/dist/registry.d.ts +2 -51
  41. package/dist/registry.d.ts.map +1 -1
  42. package/dist/registry.js.map +1 -1
  43. package/dist/shared/ErrorBoundary.d.ts +43 -0
  44. package/dist/shared/ErrorBoundary.d.ts.map +1 -0
  45. package/dist/shared/ErrorBoundary.js +38 -0
  46. package/dist/shared/ErrorBoundary.js.map +1 -0
  47. package/dist/shared/catalog.d.ts +79 -0
  48. package/dist/shared/catalog.d.ts.map +1 -0
  49. package/dist/shared/catalog.js +32 -0
  50. package/dist/shared/catalog.js.map +1 -0
  51. package/dist/shared/context.d.ts +42 -0
  52. package/dist/shared/context.d.ts.map +1 -0
  53. package/dist/shared/context.js +39 -0
  54. package/dist/shared/context.js.map +1 -0
  55. package/dist/shared/renderSegment.d.ts +26 -0
  56. package/dist/shared/renderSegment.d.ts.map +1 -0
  57. package/dist/shared/renderSegment.js +30 -0
  58. package/dist/shared/renderSegment.js.map +1 -0
  59. package/dist/types.d.ts +32 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/types.js.map +1 -1
  62. package/package.json +9 -2
@@ -1 +1 @@
1
- {"version":3,"file":"XmlRender.d.ts","sourceRoot":"","sources":["../../src/react/XmlRender.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAc,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,cAAc;IAC1D,yCAAyC;IACzC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACvE,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,CAAC;CAClE;AAqED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAS,cAAc,EAAE,EACtD,QAAQ,EACR,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,aAAa,GACd,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAwBtC"}
1
+ {"version":3,"file":"XmlRender.d.ts","sourceRoot":"","sources":["../../src/react/XmlRender.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAc,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,cAAc;IAC1D,yCAAyC;IACzC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACvE,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,CAAC;IACjE,kDAAkD;IAClD,cAAc,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;CACxC;AA6BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAS,cAAc,EAAE,EACtD,QAAQ,EACR,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,aAAa,EACb,cAAc,GACf,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAyCtC"}
@@ -1,6 +1,7 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useXmlRenderContext } from "./context";
3
3
  import { ErrorBoundary } from "./ErrorBoundary";
4
+ import { renderSegmentContent } from "../shared/renderSegment";
4
5
  /**
5
6
  * Default text renderer - renders plain text in a span
6
7
  */
@@ -11,36 +12,11 @@ function DefaultTextRenderer({ segment, }) {
11
12
  * Default fallback renderer for unknown segment types
12
13
  */
13
14
  function DefaultFallback({ segment, }) {
14
- // In development, show a warning; in production, render content as text
15
15
  if (process.env.NODE_ENV === "development") {
16
16
  console.warn(`XmlRender: No renderer found for segment type "${String(segment.type)}"`);
17
17
  }
18
18
  return _jsx("span", { children: segment.content });
19
19
  }
20
- /**
21
- * Render a single segment using the catalog (without key or ErrorBoundary wrapper)
22
- */
23
- function renderSegmentContent(segment, index, catalog, fallback) {
24
- const segmentType = segment.type;
25
- // Handle text segments
26
- if (segmentType === "text") {
27
- const TextRenderer = catalog.getTextRenderer();
28
- if (TextRenderer) {
29
- return (_jsx(TextRenderer, { segment: segment, index: index }));
30
- }
31
- return _jsx(DefaultTextRenderer, { segment: segment });
32
- }
33
- // Handle registered tag segments
34
- const Renderer = catalog.getRenderer(segmentType);
35
- if (Renderer) {
36
- return _jsx(Renderer, { segment: segment, index: index });
37
- }
38
- // Use fallback for unknown segment types
39
- if (fallback) {
40
- return fallback(segment, index);
41
- }
42
- return _jsx(DefaultFallback, { segment: segment });
43
- }
44
20
  /**
45
21
  * Renders an array of parsed XML segments using the component catalog.
46
22
  *
@@ -78,13 +54,13 @@ function renderSegmentContent(segment, index, catalog, fallback) {
78
54
  * />
79
55
  * ```
80
56
  */
81
- export function XmlRender({ segments, fallback, catalog: catalogProp, errorFallback, }) {
57
+ export function XmlRender({ segments, fallback, catalog: catalogProp, errorFallback, partialSegment, }) {
82
58
  // Use provided catalog or get from context
83
59
  const contextValue = catalogProp ? null : useXmlRenderContext();
84
60
  const catalog = catalogProp ?? contextValue?.catalog;
85
61
  if (!catalog) {
86
62
  throw new Error("XmlRender requires a catalog prop or must be used within XmlRenderProvider");
87
63
  }
88
- return (_jsx(_Fragment, { children: segments.map((segment, index) => (_jsx(ErrorBoundary, { segmentType: String(segment.type), fallback: errorFallback, children: renderSegmentContent(segment, index, catalog, fallback) }, index))) }));
64
+ return (_jsxs(_Fragment, { children: [segments.map((segment, index) => (_jsx(ErrorBoundary, { segmentType: String(segment.type), fallback: errorFallback, children: renderSegmentContent(segment, index, catalog, DefaultTextRenderer, DefaultFallback, fallback) }, index))), partialSegment && (_jsx(ErrorBoundary, { segmentType: String(partialSegment.type), fallback: errorFallback, children: renderSegmentContent(partialSegment, segments.length, catalog, DefaultTextRenderer, DefaultFallback, fallback, true) }, "partial"))] }));
89
65
  }
90
66
  //# sourceMappingURL=XmlRender.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"XmlRender.js","sourceRoot":"","sources":["../../src/react/XmlRender.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgBhD;;GAEG;AACH,SAAS,mBAAmB,CAA+B,EACzD,OAAO,GAGR;IACC,OAAO,yBAAO,OAAO,CAAC,OAAO,GAAQ,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAA+B,EACrD,OAAO,GAGR;IACC,wEAAwE;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CACV,kDAAkD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,yBAAO,OAAO,CAAC,OAAO,GAAQ,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,OAA6B,EAC7B,KAAa,EACb,OAAuB,EACvB,QAAsE;IAEtE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjC,uBAAuB;IACvB,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC/C,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CACL,KAAC,YAAY,IACX,OAAO,EAAE,OAAuC,EAChD,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;QACJ,CAAC;QACD,OAAO,KAAC,mBAAmB,IAAC,OAAO,EAAE,OAAuC,GAAI,CAAC;IACnF,CAAC;IAED,iCAAiC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAA0B,CAAC,CAAC;IACjE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,KAAC,QAAQ,IAAC,OAAO,EAAE,OAA4C,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;IAC3F,CAAC;IAED,yCAAyC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,KAAC,eAAe,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,SAAS,CAA+B,EACtD,QAAQ,EACR,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,aAAa,GACS;IACtB,2CAA2C;IAC3C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAS,CAAC;IACvE,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY,EAAE,OAAO,CAAC;IAErD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,CACL,4BACG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,KAAC,aAAa,IAEZ,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EACjC,QAAQ,EAAE,aAAa,YAEtB,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,IAJnD,KAAK,CAKI,CACjB,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"XmlRender.js","sourceRoot":"","sources":["../../src/react/XmlRender.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAkB/D;;GAEG;AACH,SAAS,mBAAmB,CAA+B,EACzD,OAAO,GAGR;IACC,OAAO,yBAAO,OAAO,CAAC,OAAO,GAAQ,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAA+B,EACrD,OAAO,GAGR;IACC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CACV,kDAAkD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,yBAAO,OAAO,CAAC,OAAO,GAAQ,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,SAAS,CAA+B,EACtD,QAAQ,EACR,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,aAAa,EACb,cAAc,GACQ;IACtB,2CAA2C;IAC3C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAS,CAAC;IACvE,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY,EAAE,OAAO,CAAC;IAErD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,CACL,8BACG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,KAAC,aAAa,IAEZ,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EACjC,QAAQ,EAAE,aAAa,YAEtB,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,QAAQ,CAAC,IAJzF,KAAK,CAKI,CACjB,CAAC,EACD,cAAc,IAAI,CACjB,KAAC,aAAa,IAEZ,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EACxC,QAAQ,EAAE,aAAa,YAEtB,oBAAoB,CACnB,cAAiD,EACjD,QAAQ,CAAC,MAAM,EACf,OAAO,EACP,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,IAAI,CACL,IAZG,SAAS,CAaC,CACjB,IACA,CACJ,CAAC;AACJ,CAAC"}
@@ -1,72 +1,7 @@
1
1
  /**
2
2
  * Component Catalog for React XML Renderer
3
3
  *
4
- * Creates a type-safe mapping from segment types to React components.
5
- * The catalog ensures that each registered tag type has a corresponding
6
- * renderer component with properly typed props.
7
- */
8
- import type { ComponentType } from "react";
9
- import type { TagDefinitions, Registry } from "../registry";
10
- import type { ParsedSegment } from "../parser";
11
- /**
12
- * Props passed to segment renderer components
13
- */
14
- export interface SegmentProps<TDefs extends TagDefinitions, TType extends keyof TDefs | "text"> {
15
- /** The segment being rendered */
16
- segment: ParsedSegment<TDefs, TType>;
17
- /** Index of this segment in the segments array */
18
- index: number;
19
- }
20
- /**
21
- * Props for the text segment renderer
22
- */
23
- export interface TextSegmentProps<TDefs extends TagDefinitions> {
24
- segment: ParsedSegment<TDefs, "text">;
25
- index: number;
26
- }
27
- /**
28
- * A component that renders a specific segment type
29
- */
30
- export type SegmentRenderer<TDefs extends TagDefinitions, TType extends keyof TDefs> = ComponentType<SegmentProps<TDefs, TType>>;
31
- /**
32
- * A component that renders text segments
33
- */
34
- export type TextRenderer<TDefs extends TagDefinitions> = ComponentType<TextSegmentProps<TDefs>>;
35
- /**
36
- * Component definitions for the catalog - maps tag names to renderers
37
- */
38
- export type CatalogComponents<TDefs extends TagDefinitions> = {
39
- [K in keyof TDefs]: SegmentRenderer<TDefs, K>;
40
- };
41
- /**
42
- * The catalog interface returned by createCatalog
43
- */
44
- export interface Catalog<TDefs extends TagDefinitions> {
45
- /** Get the renderer component for a specific segment type */
46
- getRenderer<K extends keyof TDefs>(type: K): SegmentRenderer<TDefs, K> | undefined;
47
- /** Get the text segment renderer */
48
- getTextRenderer(): TextRenderer<TDefs> | undefined;
49
- /** Check if a renderer exists for a segment type */
50
- hasRenderer(type: keyof TDefs | "text"): boolean;
51
- /** The registry this catalog is based on */
52
- readonly registry: Registry<TDefs>;
53
- /** All registered component renderers */
54
- readonly components: Readonly<Partial<CatalogComponents<TDefs>>>;
55
- }
56
- /**
57
- * Options for creating a catalog
58
- */
59
- export interface CatalogOptions<TDefs extends TagDefinitions> {
60
- /** Component renderers for each tag type */
61
- components: Partial<CatalogComponents<TDefs>>;
62
- /** Optional text segment renderer (default renders plain text in a span) */
63
- textRenderer?: TextRenderer<TDefs>;
64
- }
65
- /**
66
- * Create a component catalog for rendering XML segments.
67
- *
68
- * The catalog maps registered tag types to React components that render them.
69
- * TypeScript ensures that component props match the tag's attribute schema.
4
+ * Re-exports the shared catalog implementation.
70
5
  *
71
6
  * @example
72
7
  * ```tsx
@@ -80,20 +15,10 @@ export interface CatalogOptions<TDefs extends TagDefinitions> {
80
15
  * {segment.content}
81
16
  * </div>
82
17
  * ),
83
- * chart: ({ segment }) => (
84
- * <ChartComponent
85
- * type={segment.attributes?.type}
86
- * data={segment.content}
87
- * />
88
- * ),
89
18
  * },
90
19
  * textRenderer: ({ segment }) => <span>{segment.content}</span>,
91
20
  * });
92
21
  * ```
93
- *
94
- * @param registry - The tag registry defining valid segment types
95
- * @param options - Component renderers and optional text renderer
96
- * @returns A catalog instance for use with XmlRenderProvider
97
22
  */
98
- export declare function createCatalog<TDefs extends TagDefinitions>(registry: Registry<TDefs>, options: CatalogOptions<TDefs>): Catalog<TDefs>;
23
+ export { createCatalog, type Catalog, type CatalogOptions, type CatalogComponents, type SegmentProps, type SegmentRenderer, type TextRenderer, type TextSegmentProps, } from "../shared/catalog";
99
24
  //# sourceMappingURL=catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/react/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EAET,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,YAAY,CAC3B,KAAK,SAAS,cAAc,EAC5B,KAAK,SAAS,MAAM,KAAK,GAAG,MAAM;IAElC,iCAAiC;IACjC,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,KAAK,SAAS,cAAc;IAC5D,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,CACzB,KAAK,SAAS,cAAc,EAC5B,KAAK,SAAS,MAAM,KAAK,IACvB,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,cAAc,IAAI,aAAa,CACpE,gBAAgB,CAAC,KAAK,CAAC,CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,cAAc,IAAI;KAC3D,CAAC,IAAI,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;CAC9C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,OAAO,CAAC,KAAK,SAAS,cAAc;IACnD,6DAA6D;IAC7D,WAAW,CAAC,CAAC,SAAS,MAAM,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAEnF,oCAAoC;IACpC,eAAe,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAEnD,oDAAoD;IACpD,WAAW,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAEjD,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEnC,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,cAAc;IAC1D,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,4EAA4E;IAC5E,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,aAAa,CAAC,KAAK,SAAS,cAAc,EACxD,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EACzB,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,GAC7B,OAAO,CAAC,KAAK,CAAC,CA4BhB"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/react/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EACL,aAAa,EACb,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC"}
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Create a component catalog for rendering XML segments.
2
+ * Component Catalog for React XML Renderer
3
3
  *
4
- * The catalog maps registered tag types to React components that render them.
5
- * TypeScript ensures that component props match the tag's attribute schema.
4
+ * Re-exports the shared catalog implementation.
6
5
  *
7
6
  * @example
8
7
  * ```tsx
@@ -16,40 +15,10 @@
16
15
  * {segment.content}
17
16
  * </div>
18
17
  * ),
19
- * chart: ({ segment }) => (
20
- * <ChartComponent
21
- * type={segment.attributes?.type}
22
- * data={segment.content}
23
- * />
24
- * ),
25
18
  * },
26
19
  * textRenderer: ({ segment }) => <span>{segment.content}</span>,
27
20
  * });
28
21
  * ```
29
- *
30
- * @param registry - The tag registry defining valid segment types
31
- * @param options - Component renderers and optional text renderer
32
- * @returns A catalog instance for use with XmlRenderProvider
33
22
  */
34
- export function createCatalog(registry, options) {
35
- const { components, textRenderer } = options;
36
- const frozenComponents = Object.freeze({ ...components });
37
- const catalog = {
38
- registry,
39
- components: frozenComponents,
40
- getRenderer(type) {
41
- return frozenComponents[type];
42
- },
43
- getTextRenderer() {
44
- return textRenderer;
45
- },
46
- hasRenderer(type) {
47
- if (type === "text") {
48
- return textRenderer !== undefined;
49
- }
50
- return type in frozenComponents;
51
- },
52
- };
53
- return Object.freeze(catalog);
54
- }
23
+ export { createCatalog, } from "../shared/catalog";
55
24
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/react/catalog.ts"],"names":[],"mappings":"AAwFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAyB,EACzB,OAA8B;IAE9B,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAE7C,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAEvD,CAAC;IAEF,MAAM,OAAO,GAAmB;QAC9B,QAAQ;QACR,UAAU,EAAE,gBAAgB;QAE5B,WAAW,CAAwB,IAAO;YACxC,OAAO,gBAAgB,CAAC,IAAI,CAA0C,CAAC;QACzE,CAAC;QAED,eAAe;YACb,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,WAAW,CAAC,IAA0B;YACpC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO,YAAY,KAAK,SAAS,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,IAAI,gBAAgB,CAAC;QAClC,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/react/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EACL,aAAa,GAQd,MAAM,mBAAmB,CAAC"}
@@ -1,32 +1,7 @@
1
1
  /**
2
2
  * React Context for XML Render
3
3
  *
4
- * Provides the component catalog to the render tree via React Context.
5
- * This allows XmlRender components to access the catalog without prop drilling.
6
- */
7
- import React, { type ReactNode } from "react";
8
- import type { TagDefinitions } from "../registry";
9
- import type { Catalog } from "./catalog";
10
- /**
11
- * Context value type containing the catalog
12
- */
13
- interface XmlRenderContextValue<TDefs extends TagDefinitions> {
14
- catalog: Catalog<TDefs>;
15
- }
16
- /**
17
- * Props for XmlRenderProvider
18
- */
19
- export interface XmlRenderProviderProps<TDefs extends TagDefinitions> {
20
- /** The component catalog to provide to the tree */
21
- catalog: Catalog<TDefs>;
22
- /** Child components that can use XmlRender */
23
- children: ReactNode;
24
- }
25
- /**
26
- * Provider component that makes the catalog available to XmlRender components.
27
- *
28
- * Wrap your application or component tree with this provider to enable
29
- * XML segment rendering.
4
+ * Re-exports the shared context implementation.
30
5
  *
31
6
  * @example
32
7
  * ```tsx
@@ -42,25 +17,5 @@ export interface XmlRenderProviderProps<TDefs extends TagDefinitions> {
42
17
  * }
43
18
  * ```
44
19
  */
45
- export declare function XmlRenderProvider<TDefs extends TagDefinitions>({ catalog, children, }: XmlRenderProviderProps<TDefs>): React.ReactElement;
46
- /**
47
- * Hook to access the XML render catalog from context.
48
- *
49
- * Must be used within an XmlRenderProvider.
50
- *
51
- * @throws Error if used outside of XmlRenderProvider
52
- * @returns The current catalog from context
53
- *
54
- * @example
55
- * ```tsx
56
- * import { useXmlRenderContext } from '@khairold/xml-render/react';
57
- *
58
- * function CustomRenderer() {
59
- * const { catalog } = useXmlRenderContext();
60
- * // Use catalog to look up renderers...
61
- * }
62
- * ```
63
- */
64
- export declare function useXmlRenderContext<TDefs extends TagDefinitions = TagDefinitions>(): XmlRenderContextValue<TDefs>;
65
- export {};
20
+ export { XmlRenderProvider, useXmlRenderContext, type XmlRenderProviderProps, } from "../shared/context";
66
21
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/react/context.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;GAEG;AACH,UAAU,qBAAqB,CAAC,KAAK,SAAS,cAAc;IAC1D,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;CACzB;AAeD;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,KAAK,SAAS,cAAc;IAClE,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,cAAc,EAAE,EAC9D,OAAO,EACP,QAAQ,GACT,EAAE,sBAAsB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,CAQpD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,SAAS,cAAc,GAAG,cAAc,KAC1C,qBAAqB,CAAC,KAAK,CAAC,CAWhC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/react/context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAC"}
@@ -1,20 +1,7 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
1
  /**
3
2
  * React Context for XML Render
4
3
  *
5
- * Provides the component catalog to the render tree via React Context.
6
- * This allows XmlRender components to access the catalog without prop drilling.
7
- */
8
- import { createContext, useContext } from "react";
9
- /**
10
- * Internal context - stores catalog as unknown, typed at provider/consumer level
11
- */
12
- const XmlRenderContext = createContext(null);
13
- /**
14
- * Provider component that makes the catalog available to XmlRender components.
15
- *
16
- * Wrap your application or component tree with this provider to enable
17
- * XML segment rendering.
4
+ * Re-exports the shared context implementation.
18
5
  *
19
6
  * @example
20
7
  * ```tsx
@@ -30,34 +17,5 @@ const XmlRenderContext = createContext(null);
30
17
  * }
31
18
  * ```
32
19
  */
33
- export function XmlRenderProvider({ catalog, children, }) {
34
- const value = { catalog };
35
- return (_jsx(XmlRenderContext.Provider, { value: value, children: children }));
36
- }
37
- /**
38
- * Hook to access the XML render catalog from context.
39
- *
40
- * Must be used within an XmlRenderProvider.
41
- *
42
- * @throws Error if used outside of XmlRenderProvider
43
- * @returns The current catalog from context
44
- *
45
- * @example
46
- * ```tsx
47
- * import { useXmlRenderContext } from '@khairold/xml-render/react';
48
- *
49
- * function CustomRenderer() {
50
- * const { catalog } = useXmlRenderContext();
51
- * // Use catalog to look up renderers...
52
- * }
53
- * ```
54
- */
55
- export function useXmlRenderContext() {
56
- const context = useContext(XmlRenderContext);
57
- if (!context) {
58
- throw new Error("useXmlRenderContext must be used within an XmlRenderProvider");
59
- }
60
- // Cast the internal unknown catalog back to the typed version
61
- return { catalog: context.catalog };
62
- }
20
+ export { XmlRenderProvider, useXmlRenderContext, } from "../shared/context";
63
21
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/react/context.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAc,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAmBzE;;GAEG;AACH,MAAM,gBAAgB,GAAG,aAAa,CAA8B,IAAI,CAAC,CAAC;AAY1E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAA+B,EAC9D,OAAO,EACP,QAAQ,GACsB;IAC9B,MAAM,KAAK,GAAyB,EAAE,OAAO,EAAE,CAAC;IAEhD,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACpC,QAAQ,GACiB,CAC7B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB;IAGjC,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAyB,EAAE,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/react/context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Catches render errors in segment components and displays a fallback UI.
5
5
  * Prevents a single segment error from crashing the entire content area.
6
6
  */
7
- import { Component, type ReactNode, type ErrorInfo } from "react";
7
+ import React, { type ReactNode } from "react";
8
8
  /**
9
9
  * Props for the ErrorBoundary component
10
10
  */
@@ -16,13 +16,6 @@ export interface ErrorBoundaryProps {
16
16
  /** Optional custom fallback renderer */
17
17
  fallback?: (error: Error, segmentType: string) => ReactNode;
18
18
  }
19
- /**
20
- * State for the ErrorBoundary component
21
- */
22
- interface ErrorBoundaryState {
23
- hasError: boolean;
24
- error: Error | null;
25
- }
26
19
  /**
27
20
  * Error boundary component that catches render errors in child components.
28
21
  *
@@ -50,11 +43,5 @@ interface ErrorBoundaryState {
50
43
  * </ErrorBoundary>
51
44
  * ```
52
45
  */
53
- export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
54
- constructor(props: ErrorBoundaryProps);
55
- static getDerivedStateFromError(error: Error): ErrorBoundaryState;
56
- componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
57
- render(): ReactNode;
58
- }
59
- export {};
46
+ export declare function ErrorBoundary({ children, segmentType, fallback }: ErrorBoundaryProps): React.ReactElement;
60
47
  //# sourceMappingURL=ErrorBoundary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/react-native/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAc,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,QAAQ,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,CAAC;CAC7D;AAED;;GAEG;AACH,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,aAAc,SAAQ,SAAS,CAC1C,kBAAkB,EAClB,kBAAkB,CACnB;gBACa,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;IAIjE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAS3D,MAAM,IAAI,SAAS;CAwBpB"}
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/react-native/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,QAAQ,EAAE,SAAS,CAAC;IACpB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,CAAC;CAC7D;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAWzG"}
@@ -1,12 +1,12 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * ErrorBoundary Component for React Native
4
- *
5
- * Catches render errors in segment components and displays a fallback UI.
6
- * Prevents a single segment error from crashing the entire content area.
7
- */
8
- import { Component } from "react";
9
2
  import { View, Text, StyleSheet } from "react-native";
3
+ import { ErrorBoundaryBase } from "../shared/ErrorBoundary";
4
+ function renderDevError(error, segmentType) {
5
+ return (_jsx(View, { style: styles.errorContainer, children: _jsxs(Text, { style: styles.errorText, children: ["Error in [", segmentType, "]: ", error.message] }) }));
6
+ }
7
+ function renderProdFallback() {
8
+ return _jsx(View, { style: styles.hidden });
9
+ }
10
10
  /**
11
11
  * Error boundary component that catches render errors in child components.
12
12
  *
@@ -34,33 +34,8 @@ import { View, Text, StyleSheet } from "react-native";
34
34
  * </ErrorBoundary>
35
35
  * ```
36
36
  */
37
- export class ErrorBoundary extends Component {
38
- constructor(props) {
39
- super(props);
40
- this.state = { hasError: false, error: null };
41
- }
42
- static getDerivedStateFromError(error) {
43
- return { hasError: true, error };
44
- }
45
- componentDidCatch(error, errorInfo) {
46
- // Log the error for debugging
47
- console.error(`XmlRender ErrorBoundary: Failed to render segment type "${this.props.segmentType}"`, error, errorInfo.componentStack);
48
- }
49
- render() {
50
- if (this.state.hasError && this.state.error) {
51
- // Use custom fallback if provided
52
- if (this.props.fallback) {
53
- return this.props.fallback(this.state.error, this.props.segmentType);
54
- }
55
- // Development: show detailed error info
56
- if (process.env.NODE_ENV === "development") {
57
- return (_jsx(View, { style: styles.errorContainer, children: _jsxs(Text, { style: styles.errorText, children: ["Error in [", this.props.segmentType, "]: ", this.state.error.message] }) }));
58
- }
59
- // Production: minimal hidden fallback
60
- return _jsx(View, { style: styles.hidden });
61
- }
62
- return this.props.children;
63
- }
37
+ export function ErrorBoundary({ children, segmentType, fallback }) {
38
+ return (_jsx(ErrorBoundaryBase, { segmentType: segmentType, fallback: fallback, renderDevError: renderDevError, renderProdFallback: renderProdFallback, children: children }));
64
39
  }
65
40
  const styles = StyleSheet.create({
66
41
  errorContainer: {
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorBoundary.js","sourceRoot":"","sources":["../../src/react-native/ErrorBoundary.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAc,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAsBtD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,aAAc,SAAQ,SAGlC;IACC,YAAY,KAAyB;QACnC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,KAAY;QAC1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,SAAoB;QAClD,8BAA8B;QAC9B,OAAO,CAAC,KAAK,CACX,2DAA2D,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EACpF,KAAK,EACL,SAAS,CAAC,cAAc,CACzB,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5C,kCAAkC;YAClC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvE,CAAC;YAED,wCAAwC;YACxC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;gBAC3C,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,cAAc,YAChC,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,2BAChB,IAAI,CAAC,KAAK,CAAC,WAAW,SAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IACzD,GACF,CACR,CAAC;YACJ,CAAC;YAED,sCAAsC;YACtC,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAI,CAAC;QACxC,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,cAAc,EAAE;QACd,OAAO,EAAE,CAAC;QACV,eAAe,EAAE,SAAS;QAC1B,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,CAAC;KAChB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,WAAW;KACxB;IACD,MAAM,EAAE;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"ErrorBoundary.js","sourceRoot":"","sources":["../../src/react-native/ErrorBoundary.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAc5D,SAAS,cAAc,CAAC,KAAY,EAAE,WAAmB;IACvD,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,cAAc,YAChC,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,2BAChB,WAAW,SAAK,KAAK,CAAC,OAAO,IACnC,GACF,CACR,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAI,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAsB;IACnF,OAAO,CACL,KAAC,iBAAiB,IAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,YAErC,QAAQ,GACS,CACrB,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,cAAc,EAAE;QACd,OAAO,EAAE,CAAC;QACV,eAAe,EAAE,SAAS;QAC1B,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,CAAC;KAChB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,WAAW;KACxB;IACD,MAAM,EAAE;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC,CAAC"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { type ReactElement, type ReactNode } from "react";
8
8
  import type { TagDefinitions } from "../registry";
9
- import type { Segments, ParsedSegment } from "../parser";
9
+ import type { Segments, ParsedSegment, PartialSegment } from "../parser";
10
10
  import type { Catalog } from "./catalog";
11
11
  /**
12
12
  * Props for the XmlRender component
@@ -20,6 +20,8 @@ export interface XmlRenderProps<TDefs extends TagDefinitions> {
20
20
  catalog?: Catalog<TDefs>;
21
21
  /** Optional custom error fallback renderer */
22
22
  errorFallback?: (error: Error, segmentType: string) => ReactNode;
23
+ /** Optional in-progress segment being streamed */
24
+ partialSegment?: PartialSegment<TDefs>;
23
25
  }
24
26
  /**
25
27
  * Renders an array of parsed XML segments using the component catalog.
@@ -58,5 +60,5 @@ export interface XmlRenderProps<TDefs extends TagDefinitions> {
58
60
  * />
59
61
  * ```
60
62
  */
61
- export declare function XmlRender<TDefs extends TagDefinitions>({ segments, fallback, catalog: catalogProp, errorFallback, }: XmlRenderProps<TDefs>): ReactElement;
63
+ export declare function XmlRender<TDefs extends TagDefinitions>({ segments, fallback, catalog: catalogProp, errorFallback, partialSegment, }: XmlRenderProps<TDefs>): ReactElement;
62
64
  //# sourceMappingURL=XmlRender.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"XmlRender.d.ts","sourceRoot":"","sources":["../../src/react-native/XmlRender.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAc,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,cAAc;IAC1D,yCAAyC;IACzC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACvE,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,CAAC;CAClE;AAqED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAS,cAAc,EAAE,EACtD,QAAQ,EACR,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,aAAa,GACd,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAwBtC"}
1
+ {"version":3,"file":"XmlRender.d.ts","sourceRoot":"","sources":["../../src/react-native/XmlRender.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAc,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,cAAc;IAC1D,yCAAyC;IACzC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACvE,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,CAAC;IACjE,kDAAkD;IAClD,cAAc,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;CACxC;AA6BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAS,cAAc,EAAE,EACtD,QAAQ,EACR,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,aAAa,EACb,cAAc,GACf,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAyCtC"}
@@ -1,7 +1,8 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { View, Text } from "react-native";
3
3
  import { useXmlRenderContext } from "./context";
4
4
  import { ErrorBoundary } from "./ErrorBoundary";
5
+ import { renderSegmentContent } from "../shared/renderSegment";
5
6
  /**
6
7
  * Default text renderer - renders plain text in a Text component
7
8
  */
@@ -12,36 +13,11 @@ function DefaultTextRenderer({ segment, }) {
12
13
  * Default fallback renderer for unknown segment types
13
14
  */
14
15
  function DefaultFallback({ segment, }) {
15
- // In development, show a warning; in production, render content as text
16
16
  if (process.env.NODE_ENV === "development") {
17
17
  console.warn(`XmlRender: No renderer found for segment type "${String(segment.type)}"`);
18
18
  }
19
19
  return _jsx(Text, { children: segment.content });
20
20
  }
21
- /**
22
- * Render a single segment using the catalog (without key or ErrorBoundary wrapper)
23
- */
24
- function renderSegmentContent(segment, index, catalog, fallback) {
25
- const segmentType = segment.type;
26
- // Handle text segments
27
- if (segmentType === "text") {
28
- const TextRenderer = catalog.getTextRenderer();
29
- if (TextRenderer) {
30
- return (_jsx(TextRenderer, { segment: segment, index: index }));
31
- }
32
- return _jsx(DefaultTextRenderer, { segment: segment });
33
- }
34
- // Handle registered tag segments
35
- const Renderer = catalog.getRenderer(segmentType);
36
- if (Renderer) {
37
- return _jsx(Renderer, { segment: segment, index: index });
38
- }
39
- // Use fallback for unknown segment types
40
- if (fallback) {
41
- return fallback(segment, index);
42
- }
43
- return _jsx(DefaultFallback, { segment: segment });
44
- }
45
21
  /**
46
22
  * Renders an array of parsed XML segments using the component catalog.
47
23
  *
@@ -79,13 +55,13 @@ function renderSegmentContent(segment, index, catalog, fallback) {
79
55
  * />
80
56
  * ```
81
57
  */
82
- export function XmlRender({ segments, fallback, catalog: catalogProp, errorFallback, }) {
58
+ export function XmlRender({ segments, fallback, catalog: catalogProp, errorFallback, partialSegment, }) {
83
59
  // Use provided catalog or get from context
84
60
  const contextValue = catalogProp ? null : useXmlRenderContext();
85
61
  const catalog = catalogProp ?? contextValue?.catalog;
86
62
  if (!catalog) {
87
63
  throw new Error("XmlRender requires a catalog prop or must be used within XmlRenderProvider");
88
64
  }
89
- return (_jsx(View, { children: segments.map((segment, index) => (_jsx(ErrorBoundary, { segmentType: String(segment.type), fallback: errorFallback, children: renderSegmentContent(segment, index, catalog, fallback) }, index))) }));
65
+ return (_jsxs(View, { children: [segments.map((segment, index) => (_jsx(ErrorBoundary, { segmentType: String(segment.type), fallback: errorFallback, children: renderSegmentContent(segment, index, catalog, DefaultTextRenderer, DefaultFallback, fallback) }, index))), partialSegment && (_jsx(ErrorBoundary, { segmentType: String(partialSegment.type), fallback: errorFallback, children: renderSegmentContent(partialSegment, segments.length, catalog, DefaultTextRenderer, DefaultFallback, fallback, true) }, "partial"))] }));
90
66
  }
91
67
  //# sourceMappingURL=XmlRender.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"XmlRender.js","sourceRoot":"","sources":["../../src/react-native/XmlRender.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgBhD;;GAEG;AACH,SAAS,mBAAmB,CAA+B,EACzD,OAAO,GAGR;IACC,OAAO,KAAC,IAAI,cAAE,OAAO,CAAC,OAAO,GAAQ,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAA+B,EACrD,OAAO,GAGR;IACC,wEAAwE;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CACV,kDAAkD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,KAAC,IAAI,cAAE,OAAO,CAAC,OAAO,GAAQ,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,OAA6B,EAC7B,KAAa,EACb,OAAuB,EACvB,QAAsE;IAEtE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjC,uBAAuB;IACvB,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC/C,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CACL,KAAC,YAAY,IACX,OAAO,EAAE,OAAuC,EAChD,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;QACJ,CAAC;QACD,OAAO,KAAC,mBAAmB,IAAC,OAAO,EAAE,OAAuC,GAAI,CAAC;IACnF,CAAC;IAED,iCAAiC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAA0B,CAAC,CAAC;IACjE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,KAAC,QAAQ,IAAC,OAAO,EAAE,OAA4C,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;IAC3F,CAAC;IAED,yCAAyC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,KAAC,eAAe,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,SAAS,CAA+B,EACtD,QAAQ,EACR,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,aAAa,GACS;IACtB,2CAA2C;IAC3C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAS,CAAC;IACvE,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY,EAAE,OAAO,CAAC;IAErD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,IAAI,cACF,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,KAAC,aAAa,IAEZ,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EACjC,QAAQ,EAAE,aAAa,YAEtB,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,IAJnD,KAAK,CAKI,CACjB,CAAC,GACG,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"XmlRender.js","sourceRoot":"","sources":["../../src/react-native/XmlRender.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAkB/D;;GAEG;AACH,SAAS,mBAAmB,CAA+B,EACzD,OAAO,GAGR;IACC,OAAO,KAAC,IAAI,cAAE,OAAO,CAAC,OAAO,GAAQ,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAA+B,EACrD,OAAO,GAGR;IACC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CACV,kDAAkD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,KAAC,IAAI,cAAE,OAAO,CAAC,OAAO,GAAQ,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,SAAS,CAA+B,EACtD,QAAQ,EACR,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,aAAa,EACb,cAAc,GACQ;IACtB,2CAA2C;IAC3C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAS,CAAC;IACvE,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY,EAAE,OAAO,CAAC;IAErD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,IAAI,eACF,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,KAAC,aAAa,IAEZ,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EACjC,QAAQ,EAAE,aAAa,YAEtB,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,QAAQ,CAAC,IAJzF,KAAK,CAKI,CACjB,CAAC,EACD,cAAc,IAAI,CACjB,KAAC,aAAa,IAEZ,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EACxC,QAAQ,EAAE,aAAa,YAEtB,oBAAoB,CACnB,cAAiD,EACjD,QAAQ,CAAC,MAAM,EACf,OAAO,EACP,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,IAAI,CACL,IAZG,SAAS,CAaC,CACjB,IACI,CACR,CAAC;AACJ,CAAC"}