@mittwald/flow-remote-react-renderer 0.2.0-alpha.173 → 0.2.0-alpha.175

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.
@@ -4,10 +4,11 @@
4
4
  import { jsxs, Fragment, jsx } from "react/jsx-runtime";
5
5
  import { useAwaiter } from "./hooks/useAwaiter.mjs";
6
6
  import { useMergedComponents } from "./hooks/useMergedComponents.mjs";
7
+ import { useUpdateHostPathnameOnRemote } from "./hooks/useUpdateHostPathnameOnRemote.mjs";
7
8
  import { RemoteError, connectRemoteIframeRef } from "@mittwald/flow-remote-core";
8
9
  import { usePromise } from "@mittwald/react-use-promise";
9
10
  import { RemoteReceiver, RemoteRootRenderer } from "@mittwald/remote-dom-react/host";
10
- import { useState, useRef, useMemo, useLayoutEffect } from "react";
11
+ import { useState, useRef, useMemo } from "react";
11
12
  const hiddenIframeStyle = {
12
13
  visibility: "hidden",
13
14
  height: 0,
@@ -43,14 +44,7 @@ const RemoteRendererBrowser = (props) => {
43
44
  );
44
45
  return remoteReceiver;
45
46
  }, [src]);
46
- useLayoutEffect(() => {
47
- if (hostPathname && connection.current) {
48
- const { thread, version } = connection.current;
49
- if (version >= 2) {
50
- thread.imports.setPathname(hostPathname);
51
- }
52
- }
53
- }, [hostPathname]);
47
+ useUpdateHostPathnameOnRemote(hostPathname, connection.current);
54
48
  const connect = connectRemoteIframeRef({
55
49
  connection: receiver.connection,
56
50
  extBridgeImplementation,
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteRendererBrowser.mjs","sources":["../../src/RemoteRendererBrowser.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAwaiter } from \"@/hooks/useAwaiter\";\nimport { useMergedComponents } from \"@/hooks/useMergedComponents\";\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 {\n type CSSProperties,\n type FC,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} 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}\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 } = props;\n\n const renderAwaiter = useAwaiter([src]);\n const connectionAwaiter = useAwaiter([src]);\n const loadingAwaiter = useAwaiter([src]);\n\n const [connectedSrc, setConnectedSrc] = useState<string | null>(null);\n const [remoteError, setRemoteError] = useState<string | undefined>();\n const connection = useRef<HostToRemoteConnection | undefined>(undefined);\n\n if (remoteError) {\n throw new RemoteError(`Remote rendering failed: ${remoteError}`);\n }\n\n const remoteComponents = useMergedComponents(integrations);\n\n const receiver = useMemo(() => {\n const remoteReceiver = new RemoteReceiver();\n remoteReceiver.subscribe(\n { id: remoteReceiver.root.id },\n renderAwaiter.resolve,\n );\n return remoteReceiver;\n }, [src]);\n\n useLayoutEffect(() => {\n if (hostPathname && connection.current) {\n const { thread, version } = connection.current;\n if (version >= 2) {\n thread.imports.setPathname(hostPathname);\n }\n }\n }, [hostPathname]);\n\n const connect = connectRemoteIframeRef({\n connection: receiver.connection,\n extBridgeImplementation: extBridgeImplementation,\n onReady: connectionAwaiter.resolve,\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 loadingAwaiter.promise,\n timeoutPromise(\"Remote URL could not be loaded\"),\n ]),\n Promise.race([\n connectionAwaiter.promise,\n timeoutPromise(\"Could not establish remote connection\"),\n ]),\n Promise.race([\n renderAwaiter.promise,\n timeoutPromise(\"Remote rendering failed\"),\n ]),\n ]);\n\n const awaitLoadingPromise = connectedSrc === src;\n usePromise(overallLoading, awaitLoadingPromise ? [] : null, {\n loaderId: src,\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 setConnectedSrc(src);\n }}\n onLoad={loadingAwaiter.resolve}\n onError={loadingAwaiter.reject}\n style={hiddenIframeStyle}\n />\n </>\n );\n};\n\nexport default RemoteRendererBrowser;\n"],"names":[],"mappings":";;;;;;;;AAmCA,MAAM,oBAAmC;AAAA,EACvC,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AACd;AAEa,MAAA,wBAAwD,CACnE,UACG;AACG,QAAA;AAAA,IACJ,eAAe,CAAC;AAAA,IAChB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,gBAAgB,WAAW,CAAC,GAAG,CAAC;AACtC,QAAM,oBAAoB,WAAW,CAAC,GAAG,CAAC;AAC1C,QAAM,iBAAiB,WAAW,CAAC,GAAG,CAAC;AAEvC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAwB,IAAI;AACpE,QAAM,CAAC,aAAa,cAAc,IAAI,SAA6B;AAC7D,QAAA,aAAa,OAA2C,MAAS;AAEvE,MAAI,aAAa;AACf,UAAM,IAAI,YAAY,4BAA4B,WAAW,EAAE;AAAA,EAAA;AAG3D,QAAA,mBAAmB,oBAAoB,YAAY;AAEnD,QAAA,WAAW,QAAQ,MAAM;AACvB,UAAA,iBAAiB,IAAI,eAAe;AAC3B,mBAAA;AAAA,MACb,EAAE,IAAI,eAAe,KAAK,GAAG;AAAA,MAC7B,cAAc;AAAA,IAChB;AACO,WAAA;AAAA,EAAA,GACN,CAAC,GAAG,CAAC;AAER,kBAAgB,MAAM;AAChB,QAAA,gBAAgB,WAAW,SAAS;AACtC,YAAM,EAAE,QAAQ,QAAQ,IAAI,WAAW;AACvC,UAAI,WAAW,GAAG;AACT,eAAA,QAAQ,YAAY,YAAY;AAAA,MAAA;AAAA,IACzC;AAAA,EACF,GACC,CAAC,YAAY,CAAC;AAEjB,QAAM,UAAU,uBAAuB;AAAA,IACrC,YAAY,SAAS;AAAA,IACrB;AAAA,IACA,SAAS,kBAAkB;AAAA,IAC3B,SAAS;AAAA,IACT;AAAA,EAAA,CACD;AAED,QAAM,iBAAiB,CAAC,YACtB,IAAI,QAAQ,CAAC,GAAG,QAAQ;AACtB,eAAW,MAAM;AACf,UAAI,IAAI,YAAY,GAAG,OAAO,mBAAmB,CAAC;AAAA,OACjD,SAAS;AAAA,EAAA,CACb;AAEG,QAAA,iBAAiB,MACrB,QAAQ,IAAI;AAAA,IACV,QAAQ,KAAK;AAAA,MACX,eAAe;AAAA,MACf,eAAe,gCAAgC;AAAA,IAAA,CAChD;AAAA,IACD,QAAQ,KAAK;AAAA,MACX,kBAAkB;AAAA,MAClB,eAAe,uCAAuC;AAAA,IAAA,CACvD;AAAA,IACD,QAAQ,KAAK;AAAA,MACX,cAAc;AAAA,MACd,eAAe,yBAAyB;AAAA,IACzC,CAAA;AAAA,EAAA,CACF;AAEH,QAAM,sBAAsB,iBAAiB;AAC7C,aAAW,gBAAgB,sBAAsB,CAAA,IAAK,MAAM;AAAA,IAC1D,UAAU;AAAA,EAAA,CACX;AAED,SAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAC,oBAAA,oBAAA,EAAmB,YAAY,kBAAkB,SAAoB,CAAA;AAAA,IACtE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,KAAK,CAAC,QAAQ;AACD,qBAAA,UAAU,QAAQ,GAAG;AAChC,0BAAgB,GAAG;AAAA,QACrB;AAAA,QACA,QAAQ,eAAe;AAAA,QACvB,SAAS,eAAe;AAAA,QACxB,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,GACF;AAEJ;"}
1
+ {"version":3,"file":"RemoteRendererBrowser.mjs","sources":["../../src/RemoteRendererBrowser.tsx"],"sourcesContent":["\"use client\";\n\nimport { useAwaiter } from \"@/hooks/useAwaiter\";\nimport { useMergedComponents } from \"@/hooks/useMergedComponents\";\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}\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 } = props;\n\n const renderAwaiter = useAwaiter([src]);\n const connectionAwaiter = useAwaiter([src]);\n const loadingAwaiter = useAwaiter([src]);\n\n const [connectedSrc, setConnectedSrc] = useState<string | null>(null);\n const [remoteError, setRemoteError] = useState<string | undefined>();\n const connection = useRef<HostToRemoteConnection | undefined>(undefined);\n\n if (remoteError) {\n throw new RemoteError(`Remote rendering failed: ${remoteError}`);\n }\n\n const remoteComponents = useMergedComponents(integrations);\n\n const receiver = useMemo(() => {\n const remoteReceiver = new RemoteReceiver();\n remoteReceiver.subscribe(\n { id: remoteReceiver.root.id },\n renderAwaiter.resolve,\n );\n return remoteReceiver;\n }, [src]);\n\n useUpdateHostPathnameOnRemote(hostPathname, connection.current);\n\n const connect = connectRemoteIframeRef({\n connection: receiver.connection,\n extBridgeImplementation: extBridgeImplementation,\n onReady: connectionAwaiter.resolve,\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 loadingAwaiter.promise,\n timeoutPromise(\"Remote URL could not be loaded\"),\n ]),\n Promise.race([\n connectionAwaiter.promise,\n timeoutPromise(\"Could not establish remote connection\"),\n ]),\n Promise.race([\n renderAwaiter.promise,\n timeoutPromise(\"Remote rendering failed\"),\n ]),\n ]);\n\n const awaitLoadingPromise = connectedSrc === src;\n usePromise(overallLoading, awaitLoadingPromise ? [] : null, {\n loaderId: src,\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 setConnectedSrc(src);\n }}\n onLoad={loadingAwaiter.resolve}\n onError={loadingAwaiter.reject}\n style={hiddenIframeStyle}\n />\n </>\n );\n};\n\nexport default RemoteRendererBrowser;\n"],"names":[],"mappings":";;;;;;;;;AA6BA,MAAM,oBAAmC;AAAA,EACvC,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AACd;AAEa,MAAA,wBAAwD,CACnE,UACG;AACG,QAAA;AAAA,IACJ,eAAe,CAAC;AAAA,IAChB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,gBAAgB,WAAW,CAAC,GAAG,CAAC;AACtC,QAAM,oBAAoB,WAAW,CAAC,GAAG,CAAC;AAC1C,QAAM,iBAAiB,WAAW,CAAC,GAAG,CAAC;AAEvC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAwB,IAAI;AACpE,QAAM,CAAC,aAAa,cAAc,IAAI,SAA6B;AAC7D,QAAA,aAAa,OAA2C,MAAS;AAEvE,MAAI,aAAa;AACf,UAAM,IAAI,YAAY,4BAA4B,WAAW,EAAE;AAAA,EAAA;AAG3D,QAAA,mBAAmB,oBAAoB,YAAY;AAEnD,QAAA,WAAW,QAAQ,MAAM;AACvB,UAAA,iBAAiB,IAAI,eAAe;AAC3B,mBAAA;AAAA,MACb,EAAE,IAAI,eAAe,KAAK,GAAG;AAAA,MAC7B,cAAc;AAAA,IAChB;AACO,WAAA;AAAA,EAAA,GACN,CAAC,GAAG,CAAC;AAEsB,gCAAA,cAAc,WAAW,OAAO;AAE9D,QAAM,UAAU,uBAAuB;AAAA,IACrC,YAAY,SAAS;AAAA,IACrB;AAAA,IACA,SAAS,kBAAkB;AAAA,IAC3B,SAAS;AAAA,IACT;AAAA,EAAA,CACD;AAED,QAAM,iBAAiB,CAAC,YACtB,IAAI,QAAQ,CAAC,GAAG,QAAQ;AACtB,eAAW,MAAM;AACf,UAAI,IAAI,YAAY,GAAG,OAAO,mBAAmB,CAAC;AAAA,OACjD,SAAS;AAAA,EAAA,CACb;AAEG,QAAA,iBAAiB,MACrB,QAAQ,IAAI;AAAA,IACV,QAAQ,KAAK;AAAA,MACX,eAAe;AAAA,MACf,eAAe,gCAAgC;AAAA,IAAA,CAChD;AAAA,IACD,QAAQ,KAAK;AAAA,MACX,kBAAkB;AAAA,MAClB,eAAe,uCAAuC;AAAA,IAAA,CACvD;AAAA,IACD,QAAQ,KAAK;AAAA,MACX,cAAc;AAAA,MACd,eAAe,yBAAyB;AAAA,IACzC,CAAA;AAAA,EAAA,CACF;AAEH,QAAM,sBAAsB,iBAAiB;AAC7C,aAAW,gBAAgB,sBAAsB,CAAA,IAAK,MAAM;AAAA,IAC1D,UAAU;AAAA,EAAA,CACX;AAED,SAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAC,oBAAA,oBAAA,EAAmB,YAAY,kBAAkB,SAAoB,CAAA;AAAA,IACtE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,KAAK,CAAC,QAAQ;AACD,qBAAA,UAAU,QAAQ,GAAG;AAChC,0BAAgB,GAAG;AAAA,QACrB;AAAA,QACA,QAAQ,eAAe;AAAA,QACvB,SAAS,eAAe;AAAA,QACxB,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,GACF;AAEJ;"}
@@ -6,7 +6,6 @@ import { createRemoteComponentRenderer } from "@mittwald/remote-dom-react/host";
6
6
  import { flowComponents } from "./auto-generated/index.mjs";
7
7
  import { Form } from "./components/Form.mjs";
8
8
  import { SlotRootWrapper } from "./components/SlotRootWrapper.mjs";
9
- import { TunnelEntry } from "./components/TunnelEntry.mjs";
10
9
  import { NotificationRenderController } from "./components/NotificationRenderController.mjs";
11
10
  const htmlComponentsMap = {
12
11
  svg: createRemoteComponentRenderer(elementFactory("svg")),
@@ -31,10 +30,6 @@ const flowComponentsMap = {
31
30
  "flr-notification": createFlowRemoteComponentRenderer(
32
31
  "Notification",
33
32
  NotificationRenderController
34
- ),
35
- "flr-tunnel-entry": createFlowRemoteComponentRenderer(
36
- "TunnelEntry",
37
- TunnelEntry
38
33
  )
39
34
  };
40
35
  const components = {
@@ -1 +1 @@
1
- {"version":3,"file":"components.mjs","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, TunnelEntry } from \"@/components/\";\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 ul: createRemoteComponentRenderer(elementFactory(\"ul\")),\n ol: createRemoteComponentRenderer(elementFactory(\"ol\")),\n li: createRemoteComponentRenderer(elementFactory(\"li\")),\n small: createRemoteComponentRenderer(elementFactory(\"small\")),\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-slot-root-wrapper\": createFlowRemoteComponentRenderer(\n \"SlotRootWrapper\",\n SlotRootWrapper,\n ),\n \"flr-notification\": createFlowRemoteComponentRenderer(\n \"Notification\",\n NotificationRenderController,\n ),\n \"flr-tunnel-entry\": createFlowRemoteComponentRenderer(\n \"TunnelEntry\",\n TunnelEntry,\n ),\n};\n\nexport const components = {\n ...htmlComponentsMap,\n ...skippedComponentsMap,\n ...autoGenerated,\n ...flowComponentsMap,\n};\n"],"names":["autoGenerated"],"mappings":";;;;;;;;AAOA,MAAM,oBAAoB;AAAA,EACxB,KAAK,8BAA8B,eAAe,KAAK,CAAC;AAAA,EACxD,QAAQ,8BAA8B,eAAe,QAAQ,CAAC;AAAA,EAC9D,GAAG,8BAA8B,eAAe,GAAG,CAAC;AAAA,EACpD,MAAM,8BAA8B,eAAe,MAAM,CAAC;AAAA,EAC1D,QAAQ,8BAA8B,eAAe,QAAQ,CAAC;AAAA,EAC9D,IAAI,8BAA8B,eAAe,IAAI,CAAC;AAAA,EACtD,IAAI,8BAA8B,eAAe,IAAI,CAAC;AAAA,EACtD,IAAI,8BAA8B,eAAe,IAAI,CAAC;AAAA,EACtD,OAAO,8BAA8B,eAAe,OAAO,CAAC;AAC9D;AAMA,MAAM,uBAAuB;AAAA,EAC3B,QAAQ,MAAM;AAChB;AAEA,MAAM,oBAAoB;AAAA,EACxB,YAAY,kCAAkC,QAAQ,IAAI;AAAA,EAC1D,yBAAyB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,EAAA;AAEJ;AAEO,MAAM,aAAa;AAAA,EACxB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAGA;AAAAA,EACH,GAAG;AACL;"}
1
+ {"version":3,"file":"components.mjs","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 { 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 ul: createRemoteComponentRenderer(elementFactory(\"ul\")),\n ol: createRemoteComponentRenderer(elementFactory(\"ol\")),\n li: createRemoteComponentRenderer(elementFactory(\"li\")),\n small: createRemoteComponentRenderer(elementFactory(\"small\")),\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-slot-root-wrapper\": createFlowRemoteComponentRenderer(\n \"SlotRootWrapper\",\n SlotRootWrapper,\n ),\n \"flr-notification\": createFlowRemoteComponentRenderer(\n \"Notification\",\n NotificationRenderController,\n ),\n};\n\nexport const components = {\n ...htmlComponentsMap,\n ...skippedComponentsMap,\n ...autoGenerated,\n ...flowComponentsMap,\n};\n"],"names":["autoGenerated"],"mappings":";;;;;;;AAOA,MAAM,oBAAoB;AAAA,EACxB,KAAK,8BAA8B,eAAe,KAAK,CAAC;AAAA,EACxD,QAAQ,8BAA8B,eAAe,QAAQ,CAAC;AAAA,EAC9D,GAAG,8BAA8B,eAAe,GAAG,CAAC;AAAA,EACpD,MAAM,8BAA8B,eAAe,MAAM,CAAC;AAAA,EAC1D,QAAQ,8BAA8B,eAAe,QAAQ,CAAC;AAAA,EAC9D,IAAI,8BAA8B,eAAe,IAAI,CAAC;AAAA,EACtD,IAAI,8BAA8B,eAAe,IAAI,CAAC;AAAA,EACtD,IAAI,8BAA8B,eAAe,IAAI,CAAC;AAAA,EACtD,OAAO,8BAA8B,eAAe,OAAO,CAAC;AAC9D;AAMA,MAAM,uBAAuB;AAAA,EAC3B,QAAQ,MAAM;AAChB;AAEA,MAAM,oBAAoB;AAAA,EACxB,YAAY,kCAAkC,QAAQ,IAAI;AAAA,EAC1D,yBAAyB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,EAAA;AAEJ;AAEO,MAAM,aAAa;AAAA,EACxB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAGA;AAAAA,EACH,GAAG;AACL;"}
@@ -0,0 +1,19 @@
1
+ "use client"
2
+ /* */
3
+ import { Version } from "@mittwald/flow-remote-core";
4
+ import { useLayoutEffect } from "react";
5
+ const useUpdateHostPathnameOnRemote = (hostPathname, connection) => {
6
+ useLayoutEffect(() => {
7
+ if (hostPathname === void 0 || !connection) {
8
+ return;
9
+ }
10
+ const { thread, version } = connection;
11
+ if (version >= Version.v2) {
12
+ thread.imports.setPathname(hostPathname);
13
+ }
14
+ }, [hostPathname, connection]);
15
+ };
16
+ export {
17
+ useUpdateHostPathnameOnRemote
18
+ };
19
+ //# sourceMappingURL=useUpdateHostPathnameOnRemote.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateHostPathnameOnRemote.mjs","sources":["../../../src/hooks/useUpdateHostPathnameOnRemote.ts"],"sourcesContent":["import {\n Version,\n type HostToRemoteConnection,\n} 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 { thread, version } = connection;\n if (version >= Version.v2) {\n thread.imports.setPathname(hostPathname);\n }\n }, [hostPathname, connection]);\n};\n"],"names":[],"mappings":";;AAOa,MAAA,gCAAgC,CAC3C,cACA,eACG;AACH,kBAAgB,MAAM;AAChB,QAAA,iBAAiB,UAAa,CAAC,YAAY;AAC7C;AAAA,IAAA;AAGI,UAAA,EAAE,QAAQ,QAAA,IAAY;AACxB,QAAA,WAAW,QAAQ,IAAI;AAClB,aAAA,QAAQ,YAAY,YAAY;AAAA,IAAA;AAAA,EACzC,GACC,CAAC,cAAc,UAAU,CAAC;AAC/B;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteRendererBrowser.d.ts","sourceRoot":"","sources":["../../src/RemoteRendererBrowser.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAEL,KAAK,EAAE,EAKR,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,sBAAsB,CAAC;CAClD;AAWD,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CA+FhE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"RemoteRendererBrowser.d.ts","sourceRoot":"","sources":["../../src/RemoteRendererBrowser.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAAsB,KAAK,EAAE,EAA6B,MAAM,OAAO,CAAC;AAE/E,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,sBAAsB,CAAC;CAClD;AAWD,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAwFhE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1,4 +1,3 @@
1
1
  export * from './Form';
2
2
  export * from './SlotRootWrapper';
3
- export * from './TunnelEntry';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC"}
@@ -2,7 +2,6 @@ export declare const components: {
2
2
  "flr-form": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
3
3
  "flr-slot-root-wrapper": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
4
4
  "flr-notification": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
5
- "flr-tunnel-entry": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
6
5
  "flr-accent-box": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
7
6
  "flr-accordion": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
8
7
  "flr-action-group": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
@@ -111,6 +110,7 @@ export declare const components: {
111
110
  "flr-time-field": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
112
111
  "flr-tooltip": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
113
112
  "flr-tooltip-trigger": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
113
+ "flr-tunnel-entry": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
114
114
  "flr-x-axis": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
115
115
  "flr-y-axis": import('react').ComponentType<import('@mittwald/remote-dom-react/host').RemoteComponentRendererProps>;
116
116
  script: () => null;
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/components.ts"],"names":[],"mappings":"AA2CA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKtB,CAAC"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/components.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKtB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { HostToRemoteConnection } from '@mittwald/flow-remote-core';
2
+ /** Updates the host pathname in the remote connection. */
3
+ export declare const useUpdateHostPathnameOnRemote: (hostPathname?: string, connection?: HostToRemoteConnection) => void;
4
+ //# sourceMappingURL=useUpdateHostPathnameOnRemote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateHostPathnameOnRemote.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUpdateHostPathnameOnRemote.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AAGpC,0DAA0D;AAC1D,eAAO,MAAM,6BAA6B,GACxC,eAAe,MAAM,EACrB,aAAa,sBAAsB,SAYpC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mittwald/flow-remote-react-renderer",
3
- "version": "0.2.0-alpha.173",
3
+ "version": "0.2.0-alpha.175",
4
4
  "type": "module",
5
5
  "description": "React rendering for Flow Remote Elements",
6
6
  "homepage": "https://mittwald.github.io/flow",
@@ -28,9 +28,9 @@
28
28
  "test:compile": "tsc --noEmit"
29
29
  },
30
30
  "dependencies": {
31
- "@mittwald/ext-bridge": "0.2.0-alpha.173",
32
- "@mittwald/flow-remote-core": "0.2.0-alpha.173",
33
- "@mittwald/flow-remote-elements": "0.2.0-alpha.173",
31
+ "@mittwald/ext-bridge": "0.2.0-alpha.175",
32
+ "@mittwald/flow-remote-core": "0.2.0-alpha.175",
33
+ "@mittwald/flow-remote-elements": "0.2.0-alpha.175",
34
34
  "@mittwald/react-use-promise": "^3.0.4",
35
35
  "@mittwald/remote-dom-react": "1.2.2-mittwald.3",
36
36
  "@types/react": "^19",
@@ -39,7 +39,7 @@
39
39
  "remeda": "^2.21.1"
40
40
  },
41
41
  "devDependencies": {
42
- "@mittwald/flow-react-components": "0.2.0-alpha.173",
42
+ "@mittwald/flow-react-components": "0.2.0-alpha.175",
43
43
  "@mittwald/typescript-config": "",
44
44
  "@types/node": "^22.13.10",
45
45
  "nx": "^20.5.0",
@@ -67,5 +67,5 @@
67
67
  "optional": true
68
68
  }
69
69
  },
70
- "gitHead": "46eaeb137e386d7eb27b871265e6a25af4de000a"
70
+ "gitHead": "81ca7aeb4b7feb43d42c567ff2e803a5fee48eaa"
71
71
  }
@@ -1,15 +0,0 @@
1
- "use client"
2
- /* */
3
- import { jsx } from "react/jsx-runtime";
4
- import { TunnelEntry as TunnelEntry$1 } from "@mittwald/flow-react-components";
5
- import "react";
6
- const TunnelEntry = (props) => {
7
- const { id, ...restProps } = props;
8
- const prefixedId = `@flr-${id ?? "default"}`;
9
- return /* @__PURE__ */ jsx(TunnelEntry$1, { id: prefixedId, ...restProps });
10
- };
11
- export {
12
- TunnelEntry,
13
- TunnelEntry as default
14
- };
15
- //# sourceMappingURL=TunnelEntry.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TunnelEntry.mjs","sources":["../../../src/components/TunnelEntry.tsx"],"sourcesContent":["import type { TunnelEntryProps } from \"@mittwald/flow-react-components\";\nimport { TunnelEntry as FlowTunnelEntry } from \"@mittwald/flow-react-components\";\nimport { type FC } from \"react\";\n\nexport const TunnelEntry: FC<TunnelEntryProps> = (props) => {\n const { id, ...restProps } = props;\n // Prefix the id with '@flr-' to prevent overriding regular tunnels\n const prefixedId = `@flr-${id ?? \"default\"}`;\n return <FlowTunnelEntry id={prefixedId} {...restProps} />;\n};\n\nexport default TunnelEntry;\n"],"names":["FlowTunnelEntry"],"mappings":";;;AAIa,MAAA,cAAoC,CAAC,UAAU;AAC1D,QAAM,EAAE,IAAI,GAAG,UAAA,IAAc;AAEvB,QAAA,aAAa,QAAQ,MAAM,SAAS;AAC1C,SAAQ,oBAAAA,eAAA,EAAgB,IAAI,YAAa,GAAG,WAAW;AACzD;"}
@@ -1,5 +0,0 @@
1
- import { TunnelEntryProps } from '@mittwald/flow-react-components';
2
- import { FC } from 'react';
3
- export declare const TunnelEntry: FC<TunnelEntryProps>;
4
- export default TunnelEntry;
5
- //# sourceMappingURL=TunnelEntry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TunnelEntry.d.ts","sourceRoot":"","sources":["../../../src/components/TunnelEntry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAK5C,CAAC;AAEF,eAAe,WAAW,CAAC"}