@mittwald/flow-remote-react-renderer 0.2.0-alpha.781 → 0.2.0-alpha.782

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 (74) hide show
  1. package/dist/js/RemoteRenderer.mjs +11 -12
  2. package/dist/js/RemoteRenderer.mjs.map +1 -1
  3. package/dist/js/_virtual/_rolldown/runtime.mjs +26 -0
  4. package/dist/js/index.mjs +2 -2
  5. package/dist/js/node_modules/.pnpm/invariant@2.2.4/node_modules/invariant/browser.mjs +55 -0
  6. package/dist/js/node_modules/.pnpm/invariant@2.2.4/node_modules/invariant/browser.mjs.map +1 -0
  7. package/dist/js/packages/core/src/file.mjs +19 -0
  8. package/dist/js/packages/core/src/file.mjs.map +1 -0
  9. package/dist/js/packages/core/src/index.mjs +3 -0
  10. package/dist/js/packages/remote-react-renderer/src/RemoteRendererBrowser.mjs +89 -0
  11. package/dist/js/packages/remote-react-renderer/src/RemoteRendererBrowser.mjs.map +1 -0
  12. package/dist/js/packages/remote-react-renderer/src/auto-generated/index.mjs +136 -0
  13. package/dist/js/packages/remote-react-renderer/src/auto-generated/index.mjs.map +1 -0
  14. package/dist/js/packages/remote-react-renderer/src/components/Form.mjs +28 -0
  15. package/dist/js/packages/remote-react-renderer/src/components/Form.mjs.map +1 -0
  16. package/dist/js/packages/remote-react-renderer/src/components/NotificationRenderController.mjs +24 -0
  17. package/dist/js/packages/remote-react-renderer/src/components/NotificationRenderController.mjs.map +1 -0
  18. package/dist/js/packages/remote-react-renderer/src/components/SlotRootWrapper.mjs +11 -0
  19. package/dist/js/packages/remote-react-renderer/src/components/SlotRootWrapper.mjs.map +1 -0
  20. package/dist/js/packages/remote-react-renderer/src/components/index.mjs +4 -0
  21. package/dist/js/packages/remote-react-renderer/src/components/lib/prepareFormData.mjs +22 -0
  22. package/dist/js/packages/remote-react-renderer/src/components/lib/prepareFormData.mjs.map +1 -0
  23. package/dist/js/packages/remote-react-renderer/src/components.mjs +48 -0
  24. package/dist/js/packages/remote-react-renderer/src/components.mjs.map +1 -0
  25. package/dist/js/packages/remote-react-renderer/src/hooks/useControllableSuspenseTrigger.mjs +27 -0
  26. package/dist/js/packages/remote-react-renderer/src/hooks/useControllableSuspenseTrigger.mjs.map +1 -0
  27. package/dist/js/packages/remote-react-renderer/src/hooks/useMergedComponents.mjs +14 -0
  28. package/dist/js/packages/remote-react-renderer/src/hooks/useMergedComponents.mjs.map +1 -0
  29. package/dist/js/packages/remote-react-renderer/src/hooks/useUpdateHostPathnameOnRemote.mjs +17 -0
  30. package/dist/js/packages/remote-react-renderer/src/hooks/useUpdateHostPathnameOnRemote.mjs.map +1 -0
  31. package/dist/js/packages/remote-react-renderer/src/integrations/react-hook-form/Form.mjs +26 -0
  32. package/dist/js/packages/remote-react-renderer/src/integrations/react-hook-form/Form.mjs.map +1 -0
  33. package/dist/js/packages/remote-react-renderer/src/lib/createFlowRemoteComponentRenderer.mjs +32 -0
  34. package/dist/js/packages/remote-react-renderer/src/lib/createFlowRemoteComponentRenderer.mjs.map +1 -0
  35. package/dist/js/packages/remote-react-renderer/src/lib/elementFactory.mjs +19 -0
  36. package/dist/js/packages/remote-react-renderer/src/lib/elementFactory.mjs.map +1 -0
  37. package/dist/js/packages/remote-react-renderer/src/lib/mapAttributeToReactProperty.mjs +13 -0
  38. package/dist/js/packages/remote-react-renderer/src/lib/mapAttributeToReactProperty.mjs.map +1 -0
  39. package/dist/js/packages/remote-react-renderer/src/lib/propClassifiers.mjs +9 -0
  40. package/dist/js/packages/remote-react-renderer/src/lib/propClassifiers.mjs.map +1 -0
  41. package/package.json +8 -8
  42. package/dist/js/core/src/file.mjs +0 -17
  43. package/dist/js/core/src/file.mjs.map +0 -1
  44. package/dist/js/index.mjs.map +0 -1
  45. package/dist/js/remote-react-renderer/src/RemoteRendererBrowser.mjs +0 -131
  46. package/dist/js/remote-react-renderer/src/RemoteRendererBrowser.mjs.map +0 -1
  47. package/dist/js/remote-react-renderer/src/auto-generated/index.mjs +0 -327
  48. package/dist/js/remote-react-renderer/src/auto-generated/index.mjs.map +0 -1
  49. package/dist/js/remote-react-renderer/src/components/Form.mjs +0 -37
  50. package/dist/js/remote-react-renderer/src/components/Form.mjs.map +0 -1
  51. package/dist/js/remote-react-renderer/src/components/NotificationRenderController.mjs +0 -25
  52. package/dist/js/remote-react-renderer/src/components/NotificationRenderController.mjs.map +0 -1
  53. package/dist/js/remote-react-renderer/src/components/SlotRootWrapper.mjs +0 -10
  54. package/dist/js/remote-react-renderer/src/components/SlotRootWrapper.mjs.map +0 -1
  55. package/dist/js/remote-react-renderer/src/components/lib/prepareFormData.mjs +0 -29
  56. package/dist/js/remote-react-renderer/src/components/lib/prepareFormData.mjs.map +0 -1
  57. package/dist/js/remote-react-renderer/src/components.mjs +0 -55
  58. package/dist/js/remote-react-renderer/src/components.mjs.map +0 -1
  59. package/dist/js/remote-react-renderer/src/hooks/useControllableSuspenseTrigger.mjs +0 -30
  60. package/dist/js/remote-react-renderer/src/hooks/useControllableSuspenseTrigger.mjs.map +0 -1
  61. package/dist/js/remote-react-renderer/src/hooks/useMergedComponents.mjs +0 -24
  62. package/dist/js/remote-react-renderer/src/hooks/useMergedComponents.mjs.map +0 -1
  63. package/dist/js/remote-react-renderer/src/hooks/useUpdateHostPathnameOnRemote.mjs +0 -17
  64. package/dist/js/remote-react-renderer/src/hooks/useUpdateHostPathnameOnRemote.mjs.map +0 -1
  65. package/dist/js/remote-react-renderer/src/integrations/react-hook-form/Form.mjs +0 -16
  66. package/dist/js/remote-react-renderer/src/integrations/react-hook-form/Form.mjs.map +0 -1
  67. package/dist/js/remote-react-renderer/src/lib/createFlowRemoteComponentRenderer.mjs +0 -47
  68. package/dist/js/remote-react-renderer/src/lib/createFlowRemoteComponentRenderer.mjs.map +0 -1
  69. package/dist/js/remote-react-renderer/src/lib/elementFactory.mjs +0 -23
  70. package/dist/js/remote-react-renderer/src/lib/elementFactory.mjs.map +0 -1
  71. package/dist/js/remote-react-renderer/src/lib/mapAttributeToReactProperty.mjs +0 -14
  72. package/dist/js/remote-react-renderer/src/lib/mapAttributeToReactProperty.mjs.map +0 -1
  73. package/dist/js/remote-react-renderer/src/lib/propClassifiers.mjs +0 -7
  74. package/dist/js/remote-react-renderer/src/lib/propClassifiers.mjs.map +0 -1
@@ -0,0 +1,48 @@
1
+ "use client"
2
+ /* */
3
+ import { createFlowRemoteComponentRenderer } from "./lib/createFlowRemoteComponentRenderer.mjs";
4
+ import { elementFactory } from "./lib/elementFactory.mjs";
5
+ import flowComponents from "./auto-generated/index.mjs";
6
+ import { Form } from "./components/Form.mjs";
7
+ import SlotRootWrapper from "./components/SlotRootWrapper.mjs";
8
+ import "./components/index.mjs";
9
+ import { Form as Form$1 } from "./integrations/react-hook-form/Form.mjs";
10
+ import { NotificationRenderController } from "./components/NotificationRenderController.mjs";
11
+ import { createRemoteComponentRenderer } from "@mittwald/remote-dom-react/host";
12
+ //#region src/components.ts
13
+ var htmlComponentsMap = {
14
+ svg: createRemoteComponentRenderer(elementFactory("svg")),
15
+ circle: createRemoteComponentRenderer(elementFactory("circle")),
16
+ g: createRemoteComponentRenderer(elementFactory("g")),
17
+ path: createRemoteComponentRenderer(elementFactory("path")),
18
+ strong: createRemoteComponentRenderer(elementFactory("strong")),
19
+ s: createRemoteComponentRenderer(elementFactory("s")),
20
+ ul: createRemoteComponentRenderer(elementFactory("ul")),
21
+ ol: createRemoteComponentRenderer(elementFactory("ol")),
22
+ li: createRemoteComponentRenderer(elementFactory("li")),
23
+ small: createRemoteComponentRenderer(elementFactory("small")),
24
+ i: createRemoteComponentRenderer(elementFactory("i")),
25
+ br: createRemoteComponentRenderer(elementFactory("br", { isVoidElement: true }))
26
+ };
27
+ /**
28
+ * Components that are allowed to be used remotely but should not be rendered on
29
+ * the host.
30
+ */
31
+ var skippedComponentsMap = { script: () => null };
32
+ var flowComponentsMap = {
33
+ "flr-form": createFlowRemoteComponentRenderer("Form", Form),
34
+ "flr-rhf-form": createFlowRemoteComponentRenderer("RhfForm", Form$1),
35
+ "flr-slot-root-wrapper": createFlowRemoteComponentRenderer("SlotRootWrapper", SlotRootWrapper),
36
+ "flr-notification": createFlowRemoteComponentRenderer("Notification", NotificationRenderController),
37
+ "flr-clear-props-context-content": createFlowRemoteComponentRenderer("ClearPropsContextContent", SlotRootWrapper)
38
+ };
39
+ var components = {
40
+ ...htmlComponentsMap,
41
+ ...skippedComponentsMap,
42
+ ...flowComponents,
43
+ ...flowComponentsMap
44
+ };
45
+ //#endregion
46
+ export { components };
47
+
48
+ //# sourceMappingURL=components.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.mjs","names":[],"sources":["../../../../../src/components.ts"],"sourcesContent":["import { createFlowRemoteComponentRenderer } from \"@/lib/createFlowRemoteComponentRenderer\";\nimport { elementFactory } from \"@/lib/elementFactory\";\nimport { createRemoteComponentRenderer } from \"@mittwald/remote-dom-react/host\";\nimport autoGenerated from \"./auto-generated\";\nimport { Form, SlotRootWrapper } from \"@/components/\";\nimport { Form as RhfForm } from \"@/integrations/react-hook-form/Form\";\nimport { NotificationRenderController } from \"@/components/NotificationRenderController\";\n\nconst htmlComponentsMap = {\n svg: createRemoteComponentRenderer(elementFactory(\"svg\")),\n circle: createRemoteComponentRenderer(elementFactory(\"circle\")),\n g: createRemoteComponentRenderer(elementFactory(\"g\")),\n path: createRemoteComponentRenderer(elementFactory(\"path\")),\n strong: createRemoteComponentRenderer(elementFactory(\"strong\")),\n s: createRemoteComponentRenderer(elementFactory(\"s\")),\n ul: createRemoteComponentRenderer(elementFactory(\"ul\")),\n ol: createRemoteComponentRenderer(elementFactory(\"ol\")),\n li: createRemoteComponentRenderer(elementFactory(\"li\")),\n small: createRemoteComponentRenderer(elementFactory(\"small\")),\n i: createRemoteComponentRenderer(elementFactory(\"i\")),\n br: createRemoteComponentRenderer(\n elementFactory(\"br\", { isVoidElement: true }),\n ),\n} as const;\n\n/**\n * Components that are allowed to be used remotely but should not be rendered on\n * the host.\n */\nconst skippedComponentsMap = {\n script: () => null,\n} as const;\n\nconst flowComponentsMap = {\n \"flr-form\": createFlowRemoteComponentRenderer(\"Form\", Form),\n \"flr-rhf-form\": createFlowRemoteComponentRenderer(\"RhfForm\", RhfForm),\n \"flr-slot-root-wrapper\": createFlowRemoteComponentRenderer(\n \"SlotRootWrapper\",\n SlotRootWrapper,\n ),\n \"flr-notification\": createFlowRemoteComponentRenderer(\n \"Notification\",\n NotificationRenderController,\n ),\n \"flr-clear-props-context-content\": createFlowRemoteComponentRenderer(\n \"ClearPropsContextContent\",\n SlotRootWrapper,\n ),\n};\n\nexport const components = {\n ...htmlComponentsMap,\n ...skippedComponentsMap,\n ...autoGenerated,\n ...flowComponentsMap,\n};\n"],"mappings":";;;;;;;;;;AAQA,IAAM,oBAAoB;CACxB,KAAK,8BAA8B,eAAe,MAAM,CAAC;CACzD,QAAQ,8BAA8B,eAAe,SAAS,CAAC;CAC/D,GAAG,8BAA8B,eAAe,IAAI,CAAC;CACrD,MAAM,8BAA8B,eAAe,OAAO,CAAC;CAC3D,QAAQ,8BAA8B,eAAe,SAAS,CAAC;CAC/D,GAAG,8BAA8B,eAAe,IAAI,CAAC;CACrD,IAAI,8BAA8B,eAAe,KAAK,CAAC;CACvD,IAAI,8BAA8B,eAAe,KAAK,CAAC;CACvD,IAAI,8BAA8B,eAAe,KAAK,CAAC;CACvD,OAAO,8BAA8B,eAAe,QAAQ,CAAC;CAC7D,GAAG,8BAA8B,eAAe,IAAI,CAAC;CACrD,IAAI,8BACF,eAAe,MAAM,EAAE,eAAe,MAAM,CAAC,CAC9C;CACF;;;;;AAMD,IAAM,uBAAuB,EAC3B,cAAc,MACf;AAED,IAAM,oBAAoB;CACxB,YAAY,kCAAkC,QAAQ,KAAK;CAC3D,gBAAgB,kCAAkC,WAAW,OAAQ;CACrE,yBAAyB,kCACvB,mBACA,gBACD;CACD,oBAAoB,kCAClB,gBACA,6BACD;CACD,mCAAmC,kCACjC,4BACA,gBACD;CACF;AAED,IAAa,aAAa;CACxB,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ"}
@@ -0,0 +1,27 @@
1
+ "use client"
2
+ /* */
3
+ import { useId, useRef, useState } from "react";
4
+ import { usePromise } from "@mittwald/react-use-promise";
5
+ //#region src/hooks/useControllableSuspenseTrigger.ts
6
+ var useControllableSuspenseTrigger = () => {
7
+ const localId = useId();
8
+ const promise = useRef(null);
9
+ const [startedCount, setStartedCount] = useState(0);
10
+ usePromise((promise) => promise, promise.current ? [promise.current.promise] : null, {
11
+ keepValueWhileLoading: false,
12
+ loaderId: localId + startedCount
13
+ });
14
+ return {
15
+ start: () => {
16
+ promise.current = Promise.withResolvers();
17
+ setStartedCount((c) => c + 1);
18
+ },
19
+ stop: () => {
20
+ promise.current?.resolve();
21
+ }
22
+ };
23
+ };
24
+ //#endregion
25
+ export { useControllableSuspenseTrigger };
26
+
27
+ //# sourceMappingURL=useControllableSuspenseTrigger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControllableSuspenseTrigger.mjs","names":[],"sources":["../../../../../../src/hooks/useControllableSuspenseTrigger.ts"],"sourcesContent":["import { usePromise } from \"@mittwald/react-use-promise\";\nimport { useId, useRef, useState } from \"react\";\n\nexport const useControllableSuspenseTrigger = () => {\n const localId = useId();\n const promise = useRef<PromiseWithResolvers<void>>(null);\n const [startedCount, setStartedCount] = useState(0);\n\n usePromise(\n (promise: Promise<void>) => promise,\n promise.current ? [promise.current.promise] : null,\n {\n keepValueWhileLoading: false,\n loaderId: localId + startedCount,\n },\n );\n\n return {\n start: () => {\n promise.current = Promise.withResolvers<void>();\n setStartedCount((c) => c + 1);\n },\n stop: () => {\n promise.current?.resolve();\n },\n };\n};\n"],"mappings":";;;AAGA,IAAa,uCAAuC;CAClD,MAAM,UAAU,OAAO;CACvB,MAAM,UAAU,OAAmC,KAAK;CACxD,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;AAEnD,aACG,YAA2B,SAC5B,QAAQ,UAAU,CAAC,QAAQ,QAAQ,QAAQ,GAAG,MAC9C;EACE,uBAAuB;EACvB,UAAU,UAAU;EACrB,CACF;AAED,QAAO;EACL,aAAa;AACX,WAAQ,UAAU,QAAQ,eAAqB;AAC/C,oBAAiB,MAAM,IAAI,EAAE;;EAE/B,YAAY;AACV,WAAQ,SAAS,SAAS;;EAE7B"}
@@ -0,0 +1,14 @@
1
+ "use client"
2
+ /* */
3
+ import { components } from "../components.mjs";
4
+ import { useMemo } from "react";
5
+ import { reduce } from "remeda";
6
+ //#region src/hooks/useMergedComponents.ts
7
+ var useMergedComponents = (integrations) => useMemo(() => new Map(Object.entries(reduce([...integrations, components], (merged, current) => ({
8
+ ...merged,
9
+ ...current
10
+ }), {}))), [...integrations]);
11
+ //#endregion
12
+ export { useMergedComponents };
13
+
14
+ //# sourceMappingURL=useMergedComponents.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMergedComponents.mjs","names":[],"sources":["../../../../../../src/hooks/useMergedComponents.ts"],"sourcesContent":["import { components } from \"@/components\";\nimport type { RemoteComponentsMap } from \"@/lib/types\";\nimport type { RemoteComponentRendererProps } from \"@mittwald/remote-dom-react/host\";\nimport { type ComponentType, useMemo } from \"react\";\nimport { reduce } from \"remeda\";\n\nexport const useMergedComponents = (\n integrations: RemoteComponentsMap<never>[],\n) =>\n useMemo(\n () =>\n new Map<string, ComponentType<RemoteComponentRendererProps>>(\n Object.entries(\n reduce(\n [...integrations, components],\n (merged, current) => ({\n ...merged,\n ...current,\n }),\n {},\n ),\n ),\n ),\n [...integrations],\n );\n"],"mappings":";;;;AAMA,IAAa,uBACX,iBAEA,cAEI,IAAI,IACF,OAAO,QACL,OACE,CAAC,GAAG,cAAc,WAAW,GAC5B,QAAQ,aAAa;CACpB,GAAG;CACH,GAAG;CACJ,GACD,EAAE,CACH,CACF,CACF,EACH,CAAC,GAAG,aAAa,CAClB"}
@@ -0,0 +1,17 @@
1
+ "use client"
2
+ /* */
3
+ import { useLayoutEffect } from "react";
4
+ import "@mittwald/flow-remote-core";
5
+ //#region src/hooks/useUpdateHostPathnameOnRemote.ts
6
+ /** Updates the host pathname in the remote connection. */
7
+ var useUpdateHostPathnameOnRemote = (hostPathname, connection) => {
8
+ useLayoutEffect(() => {
9
+ if (hostPathname === void 0 || !connection) return;
10
+ const { updateHostPathname } = connection;
11
+ updateHostPathname(hostPathname);
12
+ }, [hostPathname, connection]);
13
+ };
14
+ //#endregion
15
+ export { useUpdateHostPathnameOnRemote };
16
+
17
+ //# sourceMappingURL=useUpdateHostPathnameOnRemote.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateHostPathnameOnRemote.mjs","names":[],"sources":["../../../../../../src/hooks/useUpdateHostPathnameOnRemote.ts"],"sourcesContent":["import { type HostToRemoteConnection } from \"@mittwald/flow-remote-core\";\nimport { useLayoutEffect } from \"react\";\n\n/** Updates the host pathname in the remote connection. */\nexport const useUpdateHostPathnameOnRemote = (\n hostPathname?: string,\n connection?: HostToRemoteConnection,\n) => {\n useLayoutEffect(() => {\n if (hostPathname === undefined || !connection) {\n return;\n }\n\n const { updateHostPathname } = connection;\n updateHostPathname(hostPathname);\n }, [hostPathname, connection]);\n};\n"],"mappings":";;;;AAIA,IAAa,iCACX,cACA,eACG;AACH,uBAAsB;AACpB,MAAI,iBAAiB,KAAA,KAAa,CAAC,WACjC;EAGF,MAAM,EAAE,uBAAuB;AAC/B,qBAAmB,aAAa;IAC/B,CAAC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use client"
2
+ /* */
3
+ import "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/integrations/react-hook-form/Form.tsx
6
+ /**
7
+ * ReactHookForm won't send the data over onSubmit, the form state is
8
+ * transferred over onChange. To avoid sending unnecessary data, this RemoteForm
9
+ * sends only the onSubmit without any formData.
10
+ */
11
+ var Form = (props) => {
12
+ const { onSubmit: onSubmitFromProps, ref, ...rest } = props;
13
+ const onSubmit = async (event) => {
14
+ event.preventDefault();
15
+ await onSubmitFromProps?.();
16
+ };
17
+ return /* @__PURE__ */ jsx("form", {
18
+ ...rest,
19
+ ref,
20
+ onSubmit
21
+ });
22
+ };
23
+ //#endregion
24
+ export { Form };
25
+
26
+ //# sourceMappingURL=Form.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.mjs","names":[],"sources":["../../../../../../../src/integrations/react-hook-form/Form.tsx"],"sourcesContent":["import {\n type FC,\n type FormEvent,\n type PropsWithChildren,\n type Ref,\n} from \"react\";\n\ntype FormProps = {\n onSubmit?: () => void | Promise<void>;\n ref?: Ref<HTMLFormElement>;\n} & PropsWithChildren;\n\n/**\n * ReactHookForm won't send the data over onSubmit, the form state is\n * transferred over onChange. To avoid sending unnecessary data, this RemoteForm\n * sends only the onSubmit without any formData.\n */\nexport const Form: FC<FormProps> = (props) => {\n const { onSubmit: onSubmitFromProps, ref, ...rest } = props;\n\n const onSubmit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n await onSubmitFromProps?.();\n };\n\n return <form {...rest} ref={ref} onSubmit={onSubmit} />;\n};\n"],"mappings":";;;;;;;;AAiBA,IAAa,QAAuB,UAAU;CAC5C,MAAM,EAAE,UAAU,mBAAmB,KAAK,GAAG,SAAS;CAEtD,MAAM,WAAW,OAAO,UAAsC;AAC5D,QAAM,gBAAgB;AACtB,QAAM,qBAAqB;;AAG7B,QAAO,oBAAC,QAAD;EAAM,GAAI;EAAW;EAAe;EAAY,CAAA"}
@@ -0,0 +1,32 @@
1
+ "use client"
2
+ /* */
3
+ import { isReactSuspendedStyle, isStyleProp } from "./propClassifiers.mjs";
4
+ import "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import { createRemoteComponentRenderer } from "@mittwald/remote-dom-react/host";
7
+ import { FlowRemoteElement } from "@mittwald/flow-remote-elements";
8
+ import { Version } from "@mittwald/flow-remote-core";
9
+ import { mapValues } from "remeda";
10
+ //#region src/lib/createFlowRemoteComponentRenderer.tsx
11
+ var mapProperty = (val, key) => {
12
+ if (isStyleProp(key)) {
13
+ if (isReactSuspendedStyle(val)) return { display: "none" };
14
+ return {};
15
+ }
16
+ return val;
17
+ };
18
+ var createFlowRemoteComponentRenderer = (name, Component) => {
19
+ function HostComponent(props) {
20
+ const { [FlowRemoteElement.versionPropertyName]: version = Version.v1, [FlowRemoteElement.initializationPropertyName]: initialized = false, ...restProps } = mapValues(props, (v, k) => mapProperty(v, k));
21
+ if (version >= Version.v3) {
22
+ if (!initialized) return null;
23
+ }
24
+ return /* @__PURE__ */ jsx(Component, { ...restProps });
25
+ }
26
+ HostComponent.displayName = `FlowRemoteRenderer(${name})`;
27
+ return createRemoteComponentRenderer(HostComponent, { name: `RemoteRenderer(${name})` });
28
+ };
29
+ //#endregion
30
+ export { createFlowRemoteComponentRenderer };
31
+
32
+ //# sourceMappingURL=createFlowRemoteComponentRenderer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFlowRemoteComponentRenderer.mjs","names":[],"sources":["../../../../../../src/lib/createFlowRemoteComponentRenderer.tsx"],"sourcesContent":["import { isReactSuspendedStyle, isStyleProp } from \"@/lib/propClassifiers\";\nimport type { RemoteComponentRendererProps } from \"@mittwald/remote-dom-react/host\";\nimport { createRemoteComponentRenderer } from \"@mittwald/remote-dom-react/host\";\nimport { FlowRemoteElement } from \"@mittwald/flow-remote-elements\";\nimport type { FlowRemoteElementMetaData } from \"@mittwald/flow-remote-elements\";\nimport { Version } from \"@mittwald/flow-remote-core\";\nimport { type ComponentType } from \"react\";\nimport { mapValues } from \"remeda\";\n\nconst mapProperty = (val: unknown, key: string) => {\n if (isStyleProp(key)) {\n if (isReactSuspendedStyle(val)) {\n return {\n display: \"none\",\n };\n }\n return {};\n }\n return val;\n};\n\nexport const createFlowRemoteComponentRenderer = <P extends object>(\n name: string,\n Component: ComponentType<P>,\n): ComponentType<RemoteComponentRendererProps> => {\n function HostComponent(props: P & FlowRemoteElementMetaData) {\n const hostComponentProps = mapValues(props, (v, k) =>\n mapProperty(v, k),\n ) as P & FlowRemoteElementMetaData;\n\n const {\n [FlowRemoteElement.versionPropertyName]: version = Version.v1,\n [FlowRemoteElement.initializationPropertyName]: initialized = false,\n ...restProps\n } = hostComponentProps;\n\n if (version >= Version.v3) {\n // \"initialized\" handling introduced in version 3\n if (!initialized) {\n return null;\n }\n }\n\n return <Component {...(restProps as P)} />;\n }\n HostComponent.displayName = `FlowRemoteRenderer(${name})`;\n return createRemoteComponentRenderer(HostComponent, {\n name: `RemoteRenderer(${name})`,\n });\n};\n"],"mappings":";;;;;;;;AASA,IAAM,eAAe,KAAc,QAAgB;AACjD,KAAI,YAAY,IAAI,EAAE;AACpB,MAAI,sBAAsB,IAAI,CAC5B,QAAO,EACL,SAAS,QACV;AAEH,SAAO,EAAE;;AAEX,QAAO;;AAGT,IAAa,qCACX,MACA,cACgD;CAChD,SAAS,cAAc,OAAsC;EAK3D,MAAM,GACH,kBAAkB,sBAAsB,UAAU,QAAQ,KAC1D,kBAAkB,6BAA6B,cAAc,OAC9D,GAAG,cAPsB,UAAU,QAAQ,GAAG,MAC9C,YAAY,GAAG,EAAE,CAClB;AAQD,MAAI,WAAW,QAAQ;OAEjB,CAAC,YACH,QAAO;;AAIX,SAAO,oBAAC,WAAD,EAAW,GAAK,WAAmB,CAAA;;AAE5C,eAAc,cAAc,sBAAsB,KAAK;AACvD,QAAO,8BAA8B,eAAe,EAClD,MAAM,kBAAkB,KAAK,IAC9B,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use client"
2
+ /* */
3
+ import { mapAttributeToReactProperty } from "./mapAttributeToReactProperty.mjs";
4
+ import { createElement } from "react";
5
+ import { mapKeys } from "remeda";
6
+ import clsx from "clsx";
7
+ //#region src/lib/elementFactory.ts
8
+ var elementFactory = (element, options = {}) => (props) => {
9
+ const result = { ...props };
10
+ const { isVoidElement = false } = options;
11
+ if (isVoidElement) delete result["children"];
12
+ result["className"] = clsx("className" in result && String(result["className"]), "class" in result && String(result["class"]));
13
+ delete result["class"];
14
+ return createElement(element, mapKeys(result, mapAttributeToReactProperty));
15
+ };
16
+ //#endregion
17
+ export { elementFactory };
18
+
19
+ //# sourceMappingURL=elementFactory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementFactory.mjs","names":[],"sources":["../../../../../../src/lib/elementFactory.ts"],"sourcesContent":["import { mapAttributeToReactProperty } from \"@/lib/mapAttributeToReactProperty\";\nimport clsx from \"clsx\";\nimport { createElement } from \"react\";\nimport { mapKeys } from \"remeda\";\n\ntype ElementTagNameMap = HTMLElementTagNameMap &\n Pick<\n SVGElementTagNameMap,\n Exclude<keyof SVGElementTagNameMap, keyof HTMLElementTagNameMap>\n >;\n\ninterface Options {\n isVoidElement?: boolean;\n}\n\nexport const elementFactory =\n <E extends keyof ElementTagNameMap>(element: E, options: Options = {}) =>\n (props: Record<string, unknown>) => {\n const result = { ...props };\n const { isVoidElement = false } = options;\n\n if (isVoidElement) {\n delete result[\"children\"];\n }\n\n // merge className and class\n result[\"className\"] = clsx(\n \"className\" in result && String(result[\"className\"]),\n \"class\" in result && String(result[\"class\"]),\n );\n\n delete result[\"class\"];\n\n return createElement(element, mapKeys(result, mapAttributeToReactProperty));\n };\n"],"mappings":";;;;;AAeA,IAAa,kBACyB,SAAY,UAAmB,EAAE,MACpE,UAAmC;CAClC,MAAM,SAAS,EAAE,GAAG,OAAO;CAC3B,MAAM,EAAE,gBAAgB,UAAU;AAElC,KAAI,cACF,QAAO,OAAO;AAIhB,QAAO,eAAe,KACpB,eAAe,UAAU,OAAO,OAAO,aAAa,EACpD,WAAW,UAAU,OAAO,OAAO,SAAS,CAC7C;AAED,QAAO,OAAO;AAEd,QAAO,cAAc,SAAS,QAAQ,QAAQ,4BAA4B,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use client"
2
+ /* */
3
+ import { toCamelCase } from "remeda";
4
+ //#region src/lib/mapAttributeToReactProperty.ts
5
+ var keepWhenStartsWith = ["aria-", "data-"];
6
+ var mapAttributeToReactProperty = (key) => {
7
+ if (keepWhenStartsWith.some((prefix) => key.startsWith(prefix))) return key;
8
+ return toCamelCase(key);
9
+ };
10
+ //#endregion
11
+ export { mapAttributeToReactProperty };
12
+
13
+ //# sourceMappingURL=mapAttributeToReactProperty.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapAttributeToReactProperty.mjs","names":[],"sources":["../../../../../../src/lib/mapAttributeToReactProperty.ts"],"sourcesContent":["import { toCamelCase } from \"remeda\";\n\nconst keepWhenStartsWith = [\"aria-\", \"data-\"];\n\nexport const mapAttributeToReactProperty = (key: string) => {\n if (keepWhenStartsWith.some((prefix) => key.startsWith(prefix))) {\n return key;\n }\n\n return toCamelCase(key);\n};\n"],"mappings":";;AAEA,IAAM,qBAAqB,CAAC,SAAS,QAAQ;AAE7C,IAAa,+BAA+B,QAAgB;AAC1D,KAAI,mBAAmB,MAAM,WAAW,IAAI,WAAW,OAAO,CAAC,CAC7D,QAAO;AAGT,QAAO,YAAY,IAAI"}
@@ -0,0 +1,9 @@
1
+ "use client"
2
+ /* */
3
+ //#region src/lib/propClassifiers.ts
4
+ var isStyleProp = (name) => name === "style";
5
+ var isReactSuspendedStyle = (value) => value === "display: none !important;";
6
+ //#endregion
7
+ export { isReactSuspendedStyle, isStyleProp };
8
+
9
+ //# sourceMappingURL=propClassifiers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propClassifiers.mjs","names":[],"sources":["../../../../../../src/lib/propClassifiers.ts"],"sourcesContent":["export const isStyleProp = (name: string): boolean => name === \"style\";\n\nexport const isReactSuspendedStyle = (value: unknown): boolean =>\n value === \"display: none !important;\";\n"],"mappings":";AAAA,IAAa,eAAe,SAA0B,SAAS;AAE/D,IAAa,yBAAyB,UACpC,UAAU"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mittwald/flow-remote-react-renderer",
3
- "version": "0.2.0-alpha.781",
3
+ "version": "0.2.0-alpha.782",
4
4
  "type": "module",
5
5
  "description": "React rendering for Flow Remote Elements",
6
6
  "homepage": "https://mittwald.github.io/flow",
@@ -27,9 +27,9 @@
27
27
  "test:compile": "tsc --noEmit"
28
28
  },
29
29
  "dependencies": {
30
- "@mittwald/ext-bridge": "0.2.0-alpha.781",
31
- "@mittwald/flow-remote-core": "0.2.0-alpha.781",
32
- "@mittwald/flow-remote-elements": "0.2.0-alpha.781",
30
+ "@mittwald/ext-bridge": "0.2.0-alpha.782",
31
+ "@mittwald/flow-remote-core": "0.2.0-alpha.782",
32
+ "@mittwald/flow-remote-elements": "0.2.0-alpha.782",
33
33
  "@mittwald/react-use-promise": "^4.2.2",
34
34
  "@mittwald/remote-dom-react": "1.2.2-mittwald.10",
35
35
  "@types/react": "^19.2",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@mittwald/flow-core": "",
42
- "@mittwald/flow-react-components": "0.2.0-alpha.781",
42
+ "@mittwald/flow-react-components": "0.2.0-alpha.782",
43
43
  "@mittwald/typescript-config": "",
44
44
  "@types/node": "^24.10.9",
45
45
  "nx": "^22.4.4",
@@ -50,14 +50,14 @@
50
50
  "rimraf": "^6.1.2",
51
51
  "rollup-preserve-directives": "^1.1.3",
52
52
  "typescript": "^5.9.3",
53
- "vite": "^7.3.1",
53
+ "vite": "^8.0.8",
54
54
  "vite-plugin-banner": "^0.8.1",
55
55
  "vite-plugin-checker": "^0.12.0",
56
56
  "vite-plugin-dts": "^4.5.4",
57
57
  "vite-plugin-externalize-deps": "^0.10.0"
58
58
  },
59
59
  "peerDependencies": {
60
- "@mittwald/flow-react-components": "0.2.0-alpha.780",
60
+ "@mittwald/flow-react-components": "0.2.0-alpha.781",
61
61
  "react": "^19.2.0",
62
62
  "react-dom": "^19.2.0",
63
63
  "react-hook-form": "*"
@@ -67,5 +67,5 @@
67
67
  "optional": true
68
68
  }
69
69
  },
70
- "gitHead": "2d4789273645f8fd492c8988fcf40cb7d44bd180"
70
+ "gitHead": "064502040a73940325804ff924f88c5f618fb15b"
71
71
  }
@@ -1,17 +0,0 @@
1
- "use client"
2
- /* */
3
- const Key = "mittwald.flow-core.file.awaitedArrayBuffer";
4
- function isFileWithAwaitedArrayBuffer(file) {
5
- return Key in file && file[Key] instanceof ArrayBuffer && !file[Key].detached;
6
- }
7
- const addAwaitedArrayBuffer = async (file) => {
8
- if (isFileWithAwaitedArrayBuffer(file)) {
9
- return file;
10
- }
11
- const arrayBuffer = await file.arrayBuffer();
12
- Object.assign(file, { [Key]: arrayBuffer });
13
- return file;
14
- };
15
-
16
- export { addAwaitedArrayBuffer, isFileWithAwaitedArrayBuffer };
17
- //# sourceMappingURL=file.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.mjs","sources":["../../../../../core/src/file.ts"],"sourcesContent":["import invariant from \"invariant\";\n\nconst Key = \"mittwald.flow-core.file.awaitedArrayBuffer\";\n\nexport type FileWithAwaitedArrayBuffer = File & {\n [Key]: ArrayBuffer;\n};\n\nexport function isFileWithAwaitedArrayBuffer(\n file: File | FileWithAwaitedArrayBuffer,\n): file is FileWithAwaitedArrayBuffer {\n return Key in file && file[Key] instanceof ArrayBuffer && !file[Key].detached;\n}\n\nexport const addAwaitedArrayBuffer = async (file: File) => {\n if (isFileWithAwaitedArrayBuffer(file)) {\n return file;\n }\n\n const arrayBuffer = await file.arrayBuffer();\n Object.assign(file, { [Key]: arrayBuffer });\n\n return file;\n};\n\nexport const getAwaitArrayBuffer = (\n file: File | FileWithAwaitedArrayBuffer,\n) => {\n invariant(\n isFileWithAwaitedArrayBuffer(file),\n \"Could not get awaited ArrayBuffer from file\",\n );\n return file[Key];\n};\n"],"names":[],"mappings":"AAEA,MAAM,GAAA,GAAM,4CAAA;AAML,SAAS,6BACd,IAAA,EACoC;AACpC,EAAA,OAAO,GAAA,IAAO,QAAQ,IAAA,CAAK,GAAG,aAAa,WAAA,IAAe,CAAC,IAAA,CAAK,GAAG,CAAA,CAAE,QAAA;AACvE;AAEO,MAAM,qBAAA,GAAwB,OAAO,IAAA,KAAe;AACzD,EAAA,IAAI,4BAAA,CAA6B,IAAI,CAAA,EAAG;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,WAAA,EAAY;AAC3C,EAAA,MAAA,CAAO,OAAO,IAAA,EAAM,EAAE,CAAC,GAAG,GAAG,aAAa,CAAA;AAE1C,EAAA,OAAO,IAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,131 +0,0 @@
1
- "use client"
2
- /* */
3
- 'use client';
4
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
- import { useMergedComponents } from './hooks/useMergedComponents.mjs';
6
- import { useControllableSuspenseTrigger } from './hooks/useControllableSuspenseTrigger.mjs';
7
- import { useUpdateHostPathnameOnRemote } from './hooks/useUpdateHostPathnameOnRemote.mjs';
8
- import { RemoteError, connectRemoteIframeRef } from '@mittwald/flow-remote-core';
9
- import { usePromise } from '@mittwald/react-use-promise';
10
- import { RemoteRootRenderer, RemoteReceiver } from '@mittwald/remote-dom-react/host';
11
- import { useMemo, useState, useRef } from 'react';
12
-
13
- const hiddenIframeStyle = {
14
- visibility: "hidden",
15
- height: 0,
16
- width: 0,
17
- border: "none",
18
- position: "absolute",
19
- marginLeft: "-9999px"
20
- };
21
- const RemoteRendererBrowser = (props) => {
22
- const {
23
- integrations = [],
24
- timeoutMs = 1e4,
25
- src,
26
- extBridgeImplementation,
27
- onNavigationStateChanged,
28
- hostPathname,
29
- __remoteReceiver: remoteReceiverFromProps
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
- if (!src) {
42
- throw new RemoteError("'src' prop is required");
43
- }
44
- const renderPromise = useMemo(() => Promise.withResolvers(), [src]);
45
- const connectionPromise = useMemo(() => Promise.withResolvers(), [src]);
46
- const loadingPromise = useMemo(() => Promise.withResolvers(), [src]);
47
- const suspenseTrigger = useControllableSuspenseTrigger();
48
- const [connectionSrc, setConnectionSrc] = useState(null);
49
- const connection = useRef(void 0);
50
- const [remoteError, setRemoteError] = useState();
51
- if (remoteError) {
52
- throw new RemoteError(`Remote rendering failed: ${remoteError}`);
53
- }
54
- const [receiver, rendererSubscriber] = useMemo(() => {
55
- const remoteReceiver = new RemoteReceiver();
56
- const controller = new AbortController();
57
- remoteReceiver.subscribe(
58
- { id: remoteReceiver.root.id },
59
- () => renderPromise.resolve(),
60
- { signal: controller.signal }
61
- );
62
- return [remoteReceiver, controller];
63
- }, [src]);
64
- useUpdateHostPathnameOnRemote(hostPathname, connection.current);
65
- const connect = connectRemoteIframeRef({
66
- connection: receiver.connection,
67
- extBridgeImplementation,
68
- onReady: (establishedConnection) => {
69
- establishedConnection.updateHostPathname(hostPathname);
70
- connectionPromise.resolve();
71
- },
72
- onLoadingChanged: (isLoading) => {
73
- if (isLoading) {
74
- suspenseTrigger.start();
75
- } else {
76
- suspenseTrigger.stop();
77
- }
78
- },
79
- onError: setRemoteError,
80
- onNavigationStateChanged
81
- });
82
- const timeoutPromise = (message) => new Promise((_, rej) => {
83
- setTimeout(() => {
84
- rej(new RemoteError(`${message}: Timeout reached`));
85
- }, timeoutMs);
86
- });
87
- const overallLoading = () => Promise.all([
88
- Promise.race([
89
- loadingPromise.promise,
90
- timeoutPromise("Remote URL could not be loaded")
91
- ]),
92
- Promise.race([
93
- connectionPromise.promise,
94
- timeoutPromise("Could not establish remote connection")
95
- ]),
96
- Promise.race([
97
- renderPromise.promise,
98
- timeoutPromise("Remote rendering failed")
99
- ])
100
- ]);
101
- const awaitLoadingPromise = connectionSrc === src;
102
- usePromise(
103
- async () => {
104
- await overallLoading();
105
- rendererSubscriber.abort();
106
- },
107
- awaitLoadingPromise ? [] : null,
108
- {
109
- loaderId: src
110
- }
111
- );
112
- return /* @__PURE__ */ jsxs(Fragment, { children: [
113
- /* @__PURE__ */ jsx(RemoteRootRenderer, { components: remoteComponents, receiver }),
114
- /* @__PURE__ */ jsx(
115
- "iframe",
116
- {
117
- src,
118
- ref: (ref) => {
119
- connection.current = connect(ref);
120
- setConnectionSrc(src);
121
- },
122
- onLoad: () => loadingPromise.resolve(),
123
- onError: () => loadingPromise.reject(),
124
- style: hiddenIframeStyle
125
- }
126
- )
127
- ] });
128
- };
129
-
130
- export { RemoteRendererBrowser, RemoteRendererBrowser as default };
131
- //# sourceMappingURL=RemoteRendererBrowser.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RemoteRendererBrowser.mjs","sources":["../../../../src/RemoteRendererBrowser.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMergedComponents } from \"@/hooks/useMergedComponents\";\nimport { useControllableSuspenseTrigger } from \"@/hooks/useControllableSuspenseTrigger\";\nimport { useUpdateHostPathnameOnRemote } from \"@/hooks/useUpdateHostPathnameOnRemote\";\nimport type { RemoteComponentsMap } from \"@/lib/types\";\nimport type { ExtBridgeConnectionApi } from \"@mittwald/ext-bridge\";\nimport {\n connectRemoteIframeRef,\n RemoteError,\n type HostToRemoteConnection,\n type NavigationState,\n} from \"@mittwald/flow-remote-core\";\nimport { usePromise } from \"@mittwald/react-use-promise\";\nimport {\n RemoteReceiver,\n RemoteRootRenderer,\n} from \"@mittwald/remote-dom-react/host\";\nimport { type CSSProperties, type FC, useMemo, useRef, useState } from \"react\";\n\nexport interface RemoteRendererBrowserProps {\n integrations?: RemoteComponentsMap<never>[];\n src?: string;\n timeoutMs?: number;\n onNavigationStateChanged?: (state: NavigationState) => void;\n hostPathname?: string;\n extBridgeImplementation?: ExtBridgeConnectionApi;\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 timeoutMs = 10_000,\n src,\n extBridgeImplementation,\n onNavigationStateChanged,\n hostPathname,\n __remoteReceiver: remoteReceiverFromProps,\n } = props;\n\n const remoteComponents = useMergedComponents(integrations);\n\n if (remoteReceiverFromProps) {\n return (\n <RemoteRootRenderer\n components={remoteComponents}\n receiver={remoteReceiverFromProps}\n />\n );\n }\n\n if (!src) {\n throw new RemoteError(\"'src' prop is required\");\n }\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 if (remoteError) {\n throw new RemoteError(`Remote rendering failed: ${remoteError}`);\n }\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 connect = connectRemoteIframeRef({\n connection: receiver.connection,\n extBridgeImplementation: extBridgeImplementation,\n onReady: (establishedConnection) => {\n establishedConnection.updateHostPathname(hostPathname);\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 });\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 usePromise(\n async () => {\n await overallLoading();\n rendererSubscriber.abort();\n },\n awaitLoadingPromise ? [] : null,\n {\n loaderId: src,\n },\n );\n\n return (\n <>\n <RemoteRootRenderer components={remoteComponents} receiver={receiver} />\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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"}