@mittwald/flow-remote-react-renderer 0.2.0-alpha.102 → 0.2.0-alpha.1020

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 (89) hide show
  1. package/README.md +2 -2
  2. package/dist/js/RemoteRenderer.mjs +11 -11
  3. package/dist/js/RemoteRenderer.mjs.map +1 -1
  4. package/dist/js/RemoteRendererBrowser.mjs +191 -0
  5. package/dist/js/RemoteRendererBrowser.mjs.map +1 -0
  6. package/dist/js/auto-generated/index.mjs +340 -110
  7. package/dist/js/auto-generated/index.mjs.map +1 -1
  8. package/dist/js/components/Form.mjs +24 -14
  9. package/dist/js/components/Form.mjs.map +1 -1
  10. package/dist/js/components/HostRenderErrorBoundary.mjs +44 -0
  11. package/dist/js/components/HostRenderErrorBoundary.mjs.map +1 -0
  12. package/dist/js/components/NotificationRenderController.mjs +25 -0
  13. package/dist/js/components/NotificationRenderController.mjs.map +1 -0
  14. package/dist/js/components/SlotRootWrapper.mjs +10 -0
  15. package/dist/js/components/SlotRootWrapper.mjs.map +1 -0
  16. package/dist/js/components.mjs +41 -12
  17. package/dist/js/components.mjs.map +1 -1
  18. package/dist/js/hooks/useControllableSuspenseTrigger.mjs +30 -0
  19. package/dist/js/hooks/useControllableSuspenseTrigger.mjs.map +1 -0
  20. package/dist/js/hooks/useMergedComponents.mjs +24 -0
  21. package/dist/js/hooks/useMergedComponents.mjs.map +1 -0
  22. package/dist/js/hooks/useUpdateHostPathnameOnRemote.mjs +17 -0
  23. package/dist/js/hooks/useUpdateHostPathnameOnRemote.mjs.map +1 -0
  24. package/dist/js/index.mjs +2 -4
  25. package/dist/js/integrations/react-hook-form/Form.mjs +16 -0
  26. package/dist/js/integrations/react-hook-form/Form.mjs.map +1 -0
  27. package/dist/js/lib/componentUsage.mjs +9 -0
  28. package/dist/js/lib/componentUsage.mjs.map +1 -0
  29. package/dist/js/lib/createFlowRemoteComponentRenderer.mjs +26 -15
  30. package/dist/js/lib/createFlowRemoteComponentRenderer.mjs.map +1 -1
  31. package/dist/js/lib/elementFactory.mjs +12 -8
  32. package/dist/js/lib/elementFactory.mjs.map +1 -1
  33. package/dist/js/lib/mapAttributeToReactProperty.mjs +4 -4
  34. package/dist/js/lib/mapAttributeToReactProperty.mjs.map +1 -1
  35. package/dist/js/lib/propClassifiers.mjs +2 -8
  36. package/dist/js/lib/propClassifiers.mjs.map +1 -1
  37. package/dist/types/RemoteRenderer.d.ts +6 -2
  38. package/dist/types/RemoteRenderer.d.ts.map +1 -1
  39. package/dist/types/RemoteRendererBrowser.d.ts +21 -0
  40. package/dist/types/RemoteRendererBrowser.d.ts.map +1 -0
  41. package/dist/types/auto-generated/index.d.ts +131 -103
  42. package/dist/types/auto-generated/index.d.ts.map +1 -1
  43. package/dist/types/components/Form.d.ts +8 -2
  44. package/dist/types/components/Form.d.ts.map +1 -1
  45. package/dist/types/components/HostRenderErrorBoundary.d.ts +17 -0
  46. package/dist/types/components/HostRenderErrorBoundary.d.ts.map +1 -0
  47. package/dist/types/components/NotificationRenderController.d.ts +4 -0
  48. package/dist/types/components/NotificationRenderController.d.ts.map +1 -0
  49. package/dist/types/components/SlotRootWrapper.d.ts +4 -0
  50. package/dist/types/components/SlotRootWrapper.d.ts.map +1 -0
  51. package/dist/types/components/index.d.ts +3 -0
  52. package/dist/types/components/index.d.ts.map +1 -0
  53. package/dist/types/components.d.ts +148 -109
  54. package/dist/types/components.d.ts.map +1 -1
  55. package/dist/types/hooks/useControllableSuspenseTrigger.d.ts +5 -0
  56. package/dist/types/hooks/useControllableSuspenseTrigger.d.ts.map +1 -0
  57. package/dist/types/hooks/useMergedComponents.d.ts +5 -0
  58. package/dist/types/hooks/useMergedComponents.d.ts.map +1 -0
  59. package/dist/types/hooks/useUpdateHostPathnameOnRemote.d.ts +4 -0
  60. package/dist/types/hooks/useUpdateHostPathnameOnRemote.d.ts.map +1 -0
  61. package/dist/types/index.d.ts +1 -0
  62. package/dist/types/index.d.ts.map +1 -1
  63. package/dist/types/integrations/react-hook-form/Form.d.ts +13 -0
  64. package/dist/types/integrations/react-hook-form/Form.d.ts.map +1 -0
  65. package/dist/types/lib/componentUsage.d.ts +21 -0
  66. package/dist/types/lib/componentUsage.d.ts.map +1 -0
  67. package/dist/types/lib/componentUsage.test.d.ts +2 -0
  68. package/dist/types/lib/componentUsage.test.d.ts.map +1 -0
  69. package/dist/types/lib/createFlowRemoteComponentRenderer.d.ts +2 -2
  70. package/dist/types/lib/createFlowRemoteComponentRenderer.d.ts.map +1 -1
  71. package/dist/types/lib/elementFactory.d.ts +4 -1
  72. package/dist/types/lib/elementFactory.d.ts.map +1 -1
  73. package/dist/types/lib/propClassifiers.d.ts +0 -2
  74. package/dist/types/lib/propClassifiers.d.ts.map +1 -1
  75. package/dist/types/lib/types.d.ts +1 -1
  76. package/dist/types/lib/types.d.ts.map +1 -1
  77. package/package.json +34 -30
  78. package/dist/js/RemoteRendererClient.mjs +0 -109
  79. package/dist/js/RemoteRendererClient.mjs.map +0 -1
  80. package/dist/js/components/lib/getFormDataObject.mjs +0 -7
  81. package/dist/js/components/lib/getFormDataObject.mjs.map +0 -1
  82. package/dist/js/hooks/useIsMounted.mjs +0 -14
  83. package/dist/js/hooks/useIsMounted.mjs.map +0 -1
  84. package/dist/types/RemoteRendererClient.d.ts +0 -10
  85. package/dist/types/RemoteRendererClient.d.ts.map +0 -1
  86. package/dist/types/components/lib/getFormDataObject.d.ts +0 -2
  87. package/dist/types/components/lib/getFormDataObject.d.ts.map +0 -1
  88. package/dist/types/lib/stringChildrenExtractor.d.ts +0 -3
  89. package/dist/types/lib/stringChildrenExtractor.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # @mittwald/flow-remote-react-renderer
2
2
 
3
3
  This package is part of
4
- [Flow – mittwald design system](https://mittwald.github.io/flow/). See the
5
- homepage for more details.
4
+ [Flow – mittwald design system](https://flow.mittwald.de/). See the homepage for
5
+ more details.
@@ -1,16 +1,16 @@
1
1
  "use client"
2
2
  /* */
3
- "use client";
4
- import { jsx } from "react/jsx-runtime";
5
- import React from "react";
6
- import { useIsMounted } from "./hooks/useIsMounted.mjs";
7
- const RemoteRendererClient = React.lazy(() => import("./RemoteRendererClient.mjs"));
3
+ 'use client';
4
+ import { jsx } from 'react/jsx-runtime';
5
+ import { BrowserOnly } from '@mittwald/flow-react-components';
6
+ import React from 'react';
7
+
8
+ const RemoteRendererBrowser = React.lazy(
9
+ () => import('./RemoteRendererBrowser.mjs')
10
+ );
8
11
  const RemoteRenderer = (props) => {
9
- const isMounted = useIsMounted();
10
- return isMounted ? /* @__PURE__ */ jsx(RemoteRendererClient, { ...props }) : null;
11
- };
12
- export {
13
- RemoteRenderer,
14
- RemoteRenderer as default
12
+ return /* @__PURE__ */ jsx(BrowserOnly, { children: /* @__PURE__ */ jsx(RemoteRendererBrowser, { ...props }) });
15
13
  };
14
+
15
+ export { RemoteRenderer, RemoteRenderer as default };
16
16
  //# sourceMappingURL=RemoteRenderer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteRenderer.mjs","sources":["../../src/RemoteRenderer.tsx"],"sourcesContent":["\"use client\";\nimport { type FC } from \"react\";\nimport React from \"react\";\nimport { useIsMounted } from \"@/hooks/useIsMounted\";\nimport type { RemoteRendererProps } from \"@/RemoteRendererClient\";\n\nconst RemoteRendererClient = React.lazy(() => import(\"./RemoteRendererClient\"));\n\nexport const RemoteRenderer: FC<RemoteRendererProps> = (props) => {\n const isMounted = useIsMounted();\n return isMounted ? <RemoteRendererClient {...props} /> : null;\n};\n\nexport default RemoteRenderer;\n"],"names":[],"mappings":";;;;AAMA,MAAM,uBAAuB,MAAM,KAAK,MAAM,OAAO,4BAAwB,CAAC;AAEjE,MAAA,iBAA0C,CAAC,UAAU;AAChE,QAAM,YAAY,aAAa;AAC/B,SAAO,YAAY,oBAAC,sBAAsB,EAAA,GAAG,MAAO,CAAA,IAAK;AAC3D;"}
1
+ {"version":3,"file":"RemoteRenderer.mjs","sources":["../../src/RemoteRenderer.tsx"],"sourcesContent":["\"use client\";\nimport type { RemoteRendererBrowserProps } from \"@/RemoteRendererBrowser\";\nimport { BrowserOnly } from \"@mittwald/flow-react-components\";\nimport type { RemoteReadyEvent } from \"@mittwald/flow-remote-core\";\nimport React, { type FC } from \"react\";\n\nexport type { RemoteRendererBrowserProps } from \"@/RemoteRendererBrowser\";\nexport type {\n ComponentUsageEvent,\n ComponentUsageHandler,\n} from \"@/lib/componentUsage\";\nexport type { RemoteReadyEvent };\n\nconst RemoteRendererBrowser = React.lazy(\n () => import(\"./RemoteRendererBrowser\"),\n);\n\nexport const RemoteRenderer: FC<RemoteRendererBrowserProps> = (props) => {\n return (\n <BrowserOnly>\n <RemoteRendererBrowser {...props} />\n </BrowserOnly>\n );\n};\n\nexport default RemoteRenderer;\n"],"names":[],"mappings":";;;;;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAwB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAyB;AACxC,CAAA;AAEO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU;AACvE,CAAA,CAAA,2BACG,WAAA,CAAA,CAAA,CAAA,CACC,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAuB,CAAA,CAAA,CAAG,OAAO,CAAA,EACpC,CAAA;AAEJ,CAAA;;"}
@@ -0,0 +1,191 @@
1
+ "use client"
2
+ /* */
3
+ 'use client';
4
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
+ import { HostRenderErrorBoundary } from './components/HostRenderErrorBoundary.mjs';
6
+ import { useMergedComponents } from './hooks/useMergedComponents.mjs';
7
+ import { toComponentUsageEvent } from './lib/componentUsage.mjs';
8
+ import { getFlowComponentStatus } from '@mittwald/flow-react-components/internal';
9
+ import { useControllableSuspenseTrigger } from './hooks/useControllableSuspenseTrigger.mjs';
10
+ import { useUpdateHostPathnameOnRemote } from './hooks/useUpdateHostPathnameOnRemote.mjs';
11
+ import { RemoteError, connectRemoteIframeRef } from '@mittwald/flow-remote-core';
12
+ import { refresh, usePromise } from '@mittwald/react-use-promise';
13
+ import { RemoteRootRenderer, RemoteReceiver } from '@mittwald/remote-dom-react/host';
14
+ import { useMemo, useState, useRef, useEffect } from 'react';
15
+ import { useLanguage, useTheme } from '@mittwald/flow-react-components';
16
+
17
+ const hiddenIframeStyle = {
18
+ visibility: "hidden",
19
+ height: 0,
20
+ width: 0,
21
+ border: "none",
22
+ position: "absolute",
23
+ marginLeft: "-9999px"
24
+ };
25
+ const RemoteRendererBrowser = (props) => {
26
+ const {
27
+ integrations = [],
28
+ __remoteReceiver: remoteReceiverFromProps,
29
+ ...connectedProps
30
+ } = props;
31
+ const remoteComponents = useMergedComponents(integrations);
32
+ if (remoteReceiverFromProps) {
33
+ return /* @__PURE__ */ jsx(
34
+ RemoteRootRenderer,
35
+ {
36
+ components: remoteComponents,
37
+ receiver: remoteReceiverFromProps
38
+ }
39
+ );
40
+ }
41
+ const { src } = connectedProps;
42
+ if (!src) {
43
+ throw new RemoteError("'src' prop is required");
44
+ }
45
+ return /* @__PURE__ */ jsx(
46
+ RemoteRendererConnected,
47
+ {
48
+ ...connectedProps,
49
+ src,
50
+ remoteComponents
51
+ }
52
+ );
53
+ };
54
+ const RemoteRendererConnected = (props) => {
55
+ const {
56
+ timeoutMs = 1e4,
57
+ src,
58
+ extBridgeImplementation,
59
+ onNavigationStateChanged,
60
+ onConnected,
61
+ onDeprecation,
62
+ onComponentUsage,
63
+ hostPathname,
64
+ remoteComponents
65
+ } = props;
66
+ const language = useLanguage();
67
+ const theme = useTheme();
68
+ const renderPromise = useMemo(() => Promise.withResolvers(), [src]);
69
+ const connectionPromise = useMemo(() => Promise.withResolvers(), [src]);
70
+ const loadingPromise = useMemo(() => Promise.withResolvers(), [src]);
71
+ const suspenseTrigger = useControllableSuspenseTrigger();
72
+ const [connectionSrc, setConnectionSrc] = useState(null);
73
+ const connection = useRef(void 0);
74
+ const [remoteError, setRemoteError] = useState();
75
+ const [receiver, rendererSubscriber] = useMemo(() => {
76
+ const remoteReceiver = new RemoteReceiver();
77
+ const controller = new AbortController();
78
+ remoteReceiver.subscribe(
79
+ { id: remoteReceiver.root.id },
80
+ () => renderPromise.resolve(),
81
+ { signal: controller.signal }
82
+ );
83
+ return [remoteReceiver, controller];
84
+ }, [src]);
85
+ useUpdateHostPathnameOnRemote(hostPathname, connection.current);
86
+ const hostConfig = {
87
+ language,
88
+ theme
89
+ };
90
+ const connect = connectRemoteIframeRef({
91
+ connection: receiver.connection,
92
+ extBridgeImplementation,
93
+ hostConfig,
94
+ onReady: ({ connection: establishedConnection, remoteReadyEvent }) => {
95
+ establishedConnection.updateHostPathname(hostPathname);
96
+ onConnected?.(remoteReadyEvent);
97
+ connectionPromise.resolve();
98
+ },
99
+ onLoadingChanged: (isLoading) => {
100
+ if (isLoading) {
101
+ suspenseTrigger.start();
102
+ } else {
103
+ suspenseTrigger.stop();
104
+ }
105
+ },
106
+ onError: setRemoteError,
107
+ onNavigationStateChanged,
108
+ onDeprecation,
109
+ onEvent: (event) => {
110
+ if (event.event === "ComponentRendered") {
111
+ onComponentUsage?.(
112
+ toComponentUsageEvent(event, getFlowComponentStatus)
113
+ );
114
+ }
115
+ }
116
+ });
117
+ const timeoutPromise = (message) => new Promise((_, rej) => {
118
+ setTimeout(() => {
119
+ rej(new RemoteError(`${message}: Timeout reached`));
120
+ }, timeoutMs);
121
+ });
122
+ const overallLoading = () => Promise.all([
123
+ Promise.race([
124
+ loadingPromise.promise,
125
+ timeoutPromise("Remote URL could not be loaded")
126
+ ]),
127
+ Promise.race([
128
+ connectionPromise.promise,
129
+ timeoutPromise("Could not establish remote connection")
130
+ ]),
131
+ Promise.race([
132
+ renderPromise.promise,
133
+ timeoutPromise("Remote rendering failed")
134
+ ])
135
+ ]);
136
+ const awaitLoadingPromise = connectionSrc === src;
137
+ const loaderResourceTag = `mittwald/remote-react-renderer/connect/${src}`;
138
+ useEffect(
139
+ () => () => {
140
+ refresh({
141
+ tag: loaderResourceTag
142
+ });
143
+ },
144
+ [src]
145
+ );
146
+ usePromise(
147
+ async () => {
148
+ await overallLoading();
149
+ rendererSubscriber.abort();
150
+ },
151
+ // Disabled while erroring so the error is thrown below instead of the
152
+ // loader suspending indefinitely.
153
+ awaitLoadingPromise && !remoteError ? [] : null,
154
+ {
155
+ loaderId: src,
156
+ tags: [loaderResourceTag]
157
+ }
158
+ );
159
+ if (remoteError) {
160
+ throw new RemoteError(`Remote rendering failed: ${remoteError}`);
161
+ }
162
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
163
+ /* @__PURE__ */ jsx(
164
+ HostRenderErrorBoundary,
165
+ {
166
+ onNoComponentError: async (error) => {
167
+ await connection.current?.reportHostError(
168
+ error instanceof Error ? error.message : String(error)
169
+ );
170
+ },
171
+ children: /* @__PURE__ */ jsx(RemoteRootRenderer, { components: remoteComponents, receiver })
172
+ }
173
+ ),
174
+ /* @__PURE__ */ jsx(
175
+ "iframe",
176
+ {
177
+ src,
178
+ ref: (ref) => {
179
+ connection.current = connect(ref);
180
+ setConnectionSrc(src);
181
+ },
182
+ onLoad: () => loadingPromise.resolve(),
183
+ onError: () => loadingPromise.reject(),
184
+ style: hiddenIframeStyle
185
+ }
186
+ )
187
+ ] });
188
+ };
189
+
190
+ export { RemoteRendererBrowser, RemoteRendererBrowser as default };
191
+ //# sourceMappingURL=RemoteRendererBrowser.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteRendererBrowser.mjs","sources":["../../src/RemoteRendererBrowser.tsx"],"sourcesContent":["\"use client\";\n\nimport { HostRenderErrorBoundary } from \"@/components/HostRenderErrorBoundary\";\nimport { useMergedComponents } from \"@/hooks/useMergedComponents\";\nimport {\n toComponentUsageEvent,\n type ComponentUsageHandler,\n} from \"@/lib/componentUsage\";\nimport { getFlowComponentStatus } from \"@mittwald/flow-react-components/internal\";\nimport { useControllableSuspenseTrigger } from \"@/hooks/useControllableSuspenseTrigger\";\nimport { useUpdateHostPathnameOnRemote } from \"@/hooks/useUpdateHostPathnameOnRemote\";\nimport type { RemoteComponentsMap } from \"@/lib/types\";\nimport {\n connectRemoteIframeRef,\n RemoteError,\n type HostToRemoteConnection,\n type NavigationState,\n type RemoteExtBridgeConnectionApi,\n type RemoteReadyEvent,\n} from \"@mittwald/flow-remote-core\";\nimport { refresh, usePromise } from \"@mittwald/react-use-promise\";\nimport {\n RemoteReceiver,\n RemoteRootRenderer,\n} from \"@mittwald/remote-dom-react/host\";\nimport {\n type CSSProperties,\n type FC,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useLanguage, useTheme } from \"@mittwald/flow-react-components\";\nimport type { HostConfig } from \"@mittwald/flow-core\";\n\nexport interface RemoteRendererBrowserProps {\n integrations?: RemoteComponentsMap<never>[];\n src?: string;\n timeoutMs?: number;\n onNavigationStateChanged?: (state: NavigationState) => void;\n onConnected?: (event: RemoteReadyEvent) => void;\n onDeprecation?: (message: string) => void;\n onComponentUsage?: ComponentUsageHandler;\n hostPathname?: string;\n extBridgeImplementation?: RemoteExtBridgeConnectionApi;\n /** Internal use only */\n __remoteReceiver?: RemoteReceiver;\n}\n\nconst hiddenIframeStyle: CSSProperties = {\n visibility: \"hidden\",\n height: 0,\n width: 0,\n border: \"none\",\n position: \"absolute\",\n marginLeft: \"-9999px\",\n};\n\nexport const RemoteRendererBrowser: FC<RemoteRendererBrowserProps> = (\n props,\n) => {\n const {\n integrations = [],\n __remoteReceiver: remoteReceiverFromProps,\n ...connectedProps\n } = props;\n\n const remoteComponents = useMergedComponents(integrations);\n\n // The two branches use disjoint sets of hooks, so the connection path lives\n // in a dedicated component. This keeps each component's hook order stable\n // (Rules of Hooks) while preserving the exact rendering of both paths.\n // Note that the receiver path has no connection, so it reports no usage.\n if (remoteReceiverFromProps) {\n return (\n <RemoteRootRenderer\n components={remoteComponents}\n receiver={remoteReceiverFromProps}\n />\n );\n }\n\n const { src } = connectedProps;\n if (!src) {\n throw new RemoteError(\"'src' prop is required\");\n }\n\n return (\n <RemoteRendererConnected\n {...connectedProps}\n src={src}\n remoteComponents={remoteComponents}\n />\n );\n};\n\ninterface RemoteRendererConnectedProps extends Omit<\n RemoteRendererBrowserProps,\n \"integrations\" | \"__remoteReceiver\" | \"src\"\n> {\n src: string;\n remoteComponents: ReturnType<typeof useMergedComponents>;\n}\n\nconst RemoteRendererConnected: FC<RemoteRendererConnectedProps> = (props) => {\n const {\n timeoutMs = 10_000,\n src,\n extBridgeImplementation,\n onNavigationStateChanged,\n onConnected,\n onDeprecation,\n onComponentUsage,\n hostPathname,\n remoteComponents,\n } = props;\n\n const language = useLanguage();\n const theme = useTheme();\n\n const renderPromise = useMemo(() => Promise.withResolvers<void>(), [src]);\n const connectionPromise = useMemo(() => Promise.withResolvers<void>(), [src]);\n const loadingPromise = useMemo(() => Promise.withResolvers<void>(), [src]);\n const suspenseTrigger = useControllableSuspenseTrigger();\n\n const [connectionSrc, setConnectionSrc] = useState<string | null>(null);\n const connection = useRef<HostToRemoteConnection>(undefined);\n const [remoteError, setRemoteError] = useState<string | undefined>();\n\n const [receiver, rendererSubscriber] = useMemo(() => {\n const remoteReceiver = new RemoteReceiver();\n const controller = new AbortController();\n remoteReceiver.subscribe(\n { id: remoteReceiver.root.id },\n () => renderPromise.resolve(),\n { signal: controller.signal },\n );\n return [remoteReceiver, controller];\n }, [src]);\n\n useUpdateHostPathnameOnRemote(hostPathname, connection.current);\n\n const hostConfig: HostConfig = {\n language,\n theme,\n };\n\n const connect = connectRemoteIframeRef({\n connection: receiver.connection,\n extBridgeImplementation,\n hostConfig,\n onReady: ({ connection: establishedConnection, remoteReadyEvent }) => {\n establishedConnection.updateHostPathname(hostPathname);\n onConnected?.(remoteReadyEvent);\n connectionPromise.resolve();\n },\n onLoadingChanged: (isLoading) => {\n if (isLoading) {\n suspenseTrigger.start();\n } else {\n suspenseTrigger.stop();\n }\n },\n onError: setRemoteError,\n onNavigationStateChanged,\n onDeprecation,\n onEvent: (event) => {\n if (event.event === \"ComponentRendered\") {\n onComponentUsage?.(\n toComponentUsageEvent(event, getFlowComponentStatus),\n );\n }\n },\n });\n\n const timeoutPromise = (message: string) =>\n new Promise((_, rej) => {\n setTimeout(() => {\n rej(new RemoteError(`${message}: Timeout reached`));\n }, timeoutMs);\n });\n\n const overallLoading = () =>\n Promise.all([\n Promise.race([\n loadingPromise.promise,\n timeoutPromise(\"Remote URL could not be loaded\"),\n ]),\n Promise.race([\n connectionPromise.promise,\n timeoutPromise(\"Could not establish remote connection\"),\n ]),\n Promise.race([\n renderPromise.promise,\n timeoutPromise(\"Remote rendering failed\"),\n ]),\n ]);\n\n const awaitLoadingPromise = connectionSrc === src;\n\n const loaderResourceTag = `mittwald/remote-react-renderer/connect/${src}`;\n\n // refresh on remount\n useEffect(\n () => () => {\n refresh({\n tag: loaderResourceTag,\n });\n },\n [src],\n );\n\n usePromise(\n async () => {\n await overallLoading();\n rendererSubscriber.abort();\n },\n // Disabled while erroring so the error is thrown below instead of the\n // loader suspending indefinitely.\n awaitLoadingPromise && !remoteError ? [] : null,\n {\n loaderId: src,\n tags: [loaderResourceTag],\n },\n );\n\n if (remoteError) {\n throw new RemoteError(`Remote rendering failed: ${remoteError}`);\n }\n\n return (\n <>\n <HostRenderErrorBoundary\n onNoComponentError={async (error) => {\n await connection.current?.reportHostError(\n error instanceof Error ? error.message : String(error),\n );\n }}\n >\n <RemoteRootRenderer components={remoteComponents} receiver={receiver} />\n </HostRenderErrorBoundary>\n <iframe\n src={src}\n ref={(ref) => {\n connection.current = connect(ref);\n setConnectionSrc(src);\n }}\n onLoad={() => loadingPromise.resolve()}\n onError={() => loadingPromise.reject()}\n style={hiddenIframeStyle}\n />\n </>\n );\n};\n\nexport default RemoteRendererBrowser;\n"],"names":[],"mappings":"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"}