@mittwald/flow-remote-react-renderer 1.1.0-next.2 → 1.1.0-next.3

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 (70) hide show
  1. package/dist/js/RemoteRenderer.mjs +1 -1
  2. package/dist/js/RemoteRenderer.mjs.map +1 -1
  3. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-core@1.7.0-mittwald.10_@preact_signals-core@1.14.2/node_modules/@mittwald/remote-dom-core/build/esm/connection.mjs +26 -0
  4. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-core@1.7.0-mittwald.10_@preact_signals-core@1.14.2/node_modules/@mittwald/remote-dom-core/build/esm/connection.mjs.map +1 -0
  5. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-core@1.7.0-mittwald.10_@preact_signals-core@1.14.2/node_modules/@mittwald/remote-dom-core/build/esm/receivers/RemoteReceiver.mjs +274 -0
  6. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-core@1.7.0-mittwald.10_@preact_signals-core@1.14.2/node_modules/@mittwald/remote-dom-core/build/esm/receivers/RemoteReceiver.mjs.map +1 -0
  7. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/RemoteRootRenderer.mjs +19 -0
  8. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/RemoteRootRenderer.mjs.map +1 -0
  9. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/RemoteTextRenderer.mjs +16 -0
  10. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/RemoteTextRenderer.mjs.map +1 -0
  11. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/component.mjs +68 -0
  12. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/component.mjs.map +1 -0
  13. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/constants.mjs +13 -0
  14. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/constants.mjs.map +1 -0
  15. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/hooks/props-for-element.mjs +45 -0
  16. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/hooks/props-for-element.mjs.map +1 -0
  17. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/hooks/remote-received.mjs +60 -0
  18. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/hooks/remote-received.mjs.map +1 -0
  19. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/node.mjs +33 -0
  20. package/dist/js/node_modules/.pnpm/@mittwald_remote-dom-react@1.2.2-mittwald.10_patch_hash_165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/node.mjs.map +1 -0
  21. package/dist/js/{RemoteRendererBrowser.mjs → packages/remote-react-renderer/src/RemoteRendererBrowser.mjs} +2 -1
  22. package/dist/js/packages/remote-react-renderer/src/RemoteRendererBrowser.mjs.map +1 -0
  23. package/dist/js/packages/remote-react-renderer/src/auto-generated/index.mjs.map +1 -0
  24. package/dist/js/packages/remote-react-renderer/src/components/Form.mjs.map +1 -0
  25. package/dist/js/packages/remote-react-renderer/src/components/HostRenderErrorBoundary.mjs.map +1 -0
  26. package/dist/js/packages/remote-react-renderer/src/components/NotificationRenderController.mjs.map +1 -0
  27. package/dist/js/packages/remote-react-renderer/src/components/SlotRootWrapper.mjs.map +1 -0
  28. package/dist/js/{components.mjs → packages/remote-react-renderer/src/components.mjs} +1 -1
  29. package/dist/js/packages/remote-react-renderer/src/components.mjs.map +1 -0
  30. package/dist/js/packages/remote-react-renderer/src/hooks/useControllableSuspenseTrigger.mjs.map +1 -0
  31. package/dist/js/packages/remote-react-renderer/src/hooks/useMergedComponents.mjs.map +1 -0
  32. package/dist/js/packages/remote-react-renderer/src/hooks/useUpdateHostPathnameOnRemote.mjs.map +1 -0
  33. package/dist/js/packages/remote-react-renderer/src/integrations/react-hook-form/Form.mjs.map +1 -0
  34. package/dist/js/packages/remote-react-renderer/src/lib/componentUsage.mjs.map +1 -0
  35. package/dist/js/{lib → packages/remote-react-renderer/src/lib}/createFlowRemoteComponentRenderer.mjs +1 -1
  36. package/dist/js/packages/remote-react-renderer/src/lib/createFlowRemoteComponentRenderer.mjs.map +1 -0
  37. package/dist/js/packages/remote-react-renderer/src/lib/elementFactory.mjs.map +1 -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.map +1 -0
  40. package/package.json +9 -9
  41. package/dist/js/RemoteRendererBrowser.mjs.map +0 -1
  42. package/dist/js/auto-generated/index.mjs.map +0 -1
  43. package/dist/js/components/Form.mjs.map +0 -1
  44. package/dist/js/components/HostRenderErrorBoundary.mjs.map +0 -1
  45. package/dist/js/components/NotificationRenderController.mjs.map +0 -1
  46. package/dist/js/components/SlotRootWrapper.mjs.map +0 -1
  47. package/dist/js/components.mjs.map +0 -1
  48. package/dist/js/hooks/useControllableSuspenseTrigger.mjs.map +0 -1
  49. package/dist/js/hooks/useMergedComponents.mjs.map +0 -1
  50. package/dist/js/hooks/useUpdateHostPathnameOnRemote.mjs.map +0 -1
  51. package/dist/js/integrations/react-hook-form/Form.mjs.map +0 -1
  52. package/dist/js/lib/componentUsage.mjs.map +0 -1
  53. package/dist/js/lib/createFlowRemoteComponentRenderer.mjs.map +0 -1
  54. package/dist/js/lib/elementFactory.mjs.map +0 -1
  55. package/dist/js/lib/mapAttributeToReactProperty.mjs.map +0 -1
  56. package/dist/js/lib/propClassifiers.mjs.map +0 -1
  57. /package/dist/js/{auto-generated → packages/remote-react-renderer/src/auto-generated}/index.mjs +0 -0
  58. /package/dist/js/{components → packages/remote-react-renderer/src/components}/Form.mjs +0 -0
  59. /package/dist/js/{components → packages/remote-react-renderer/src/components}/HostRenderErrorBoundary.mjs +0 -0
  60. /package/dist/js/{components → packages/remote-react-renderer/src/components}/NotificationRenderController.mjs +0 -0
  61. /package/dist/js/{components → packages/remote-react-renderer/src/components}/SlotRootWrapper.mjs +0 -0
  62. /package/dist/js/{components → packages/remote-react-renderer/src/components}/index.mjs +0 -0
  63. /package/dist/js/{hooks → packages/remote-react-renderer/src/hooks}/useControllableSuspenseTrigger.mjs +0 -0
  64. /package/dist/js/{hooks → packages/remote-react-renderer/src/hooks}/useMergedComponents.mjs +0 -0
  65. /package/dist/js/{hooks → packages/remote-react-renderer/src/hooks}/useUpdateHostPathnameOnRemote.mjs +0 -0
  66. /package/dist/js/{integrations → packages/remote-react-renderer/src/integrations}/react-hook-form/Form.mjs +0 -0
  67. /package/dist/js/{lib → packages/remote-react-renderer/src/lib}/componentUsage.mjs +0 -0
  68. /package/dist/js/{lib → packages/remote-react-renderer/src/lib}/elementFactory.mjs +0 -0
  69. /package/dist/js/{lib → packages/remote-react-renderer/src/lib}/mapAttributeToReactProperty.mjs +0 -0
  70. /package/dist/js/{lib → packages/remote-react-renderer/src/lib}/propClassifiers.mjs +0 -0
@@ -5,7 +5,7 @@ import { BrowserOnly } from "@mittwald/flow-react-components";
5
5
  import React from "react";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  //#region src/RemoteRenderer.tsx
8
- var RemoteRendererBrowser = React.lazy(() => import("./RemoteRendererBrowser.mjs"));
8
+ var RemoteRendererBrowser = React.lazy(() => import("./packages/remote-react-renderer/src/RemoteRendererBrowser.mjs"));
9
9
  var RemoteRenderer = (props) => {
10
10
  return /* @__PURE__ */ jsx(BrowserOnly, { children: /* @__PURE__ */ jsx(RemoteRendererBrowser, { ...props }) });
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteRenderer.mjs","names":[],"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"],"mappings":";;;;;;;AAaA,IAAM,wBAAwB,MAAM,WAC5B,OAAO,8BACf;AAEA,IAAa,kBAAkD,UAAU;CACvE,OACE,oBAAC,aAAD,EAAA,UACE,oBAAC,uBAAD,EAAuB,GAAI,MAAQ,CAAA,EACxB,CAAA;AAEjB"}
1
+ {"version":3,"file":"RemoteRenderer.mjs","names":[],"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"],"mappings":";;;;;;;AAaA,IAAM,wBAAwB,MAAM,WAC5B,OAAO,iEACf;AAEA,IAAa,kBAAkD,UAAU;CACvE,OACE,oBAAC,aAAD,EAAA,UACE,oBAAC,uBAAD,EAAuB,GAAI,MAAQ,CAAA,EACxB,CAAA;AAEjB"}
@@ -0,0 +1,26 @@
1
+ "use client"
2
+ /* */
3
+ //#region ../../node_modules/.pnpm/@mittwald+remote-dom-core@1.7.0-mittwald.10_@preact+signals-core@1.14.2/node_modules/@mittwald/remote-dom-core/build/esm/connection.mjs
4
+ /**
5
+ * A helper for creating a `RemoteConnection` object. The `RemoteConnection`
6
+ * protocol is pretty low-level; this function provides more human-friendly
7
+ * naming on top of the protocol.
8
+ */
9
+ function createRemoteConnection({ call, insertChild, removeChild, updateText, updateProperty }) {
10
+ const handlers = {
11
+ [0]: insertChild,
12
+ [1]: removeChild,
13
+ [2]: updateText,
14
+ [3]: updateProperty
15
+ };
16
+ return {
17
+ call,
18
+ mutate(records) {
19
+ for (const [type, ...args] of records) handlers[type](...args);
20
+ }
21
+ };
22
+ }
23
+ //#endregion
24
+ export { createRemoteConnection };
25
+
26
+ //# sourceMappingURL=connection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.mjs","names":[],"sources":["../../../../../../../../../../../../node_modules/.pnpm/@mittwald+remote-dom-core@1.7.0-mittwald.10_@preact+signals-core@1.14.2/node_modules/@mittwald/remote-dom-core/build/esm/connection.mjs"],"sourcesContent":["import { MUTATION_TYPE_INSERT_CHILD, MUTATION_TYPE_REMOVE_CHILD, MUTATION_TYPE_UPDATE_TEXT, MUTATION_TYPE_UPDATE_PROPERTY } from './constants.mjs';\n\n/**\n * A helper for creating a `RemoteConnection` object. The `RemoteConnection`\n * protocol is pretty low-level; this function provides more human-friendly\n * naming on top of the protocol.\n */\nfunction createRemoteConnection({\n call,\n insertChild,\n removeChild,\n updateText,\n updateProperty\n}) {\n const handlers = {\n [MUTATION_TYPE_INSERT_CHILD]: insertChild,\n [MUTATION_TYPE_REMOVE_CHILD]: removeChild,\n [MUTATION_TYPE_UPDATE_TEXT]: updateText,\n [MUTATION_TYPE_UPDATE_PROPERTY]: updateProperty\n };\n return {\n call,\n mutate(records) {\n for (const [type, ...args] of records) {\n handlers[type](...args);\n }\n }\n };\n}\n\nexport { createRemoteConnection };\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;AAOA,SAAS,uBAAuB,EAC9B,MACA,aACA,aACA,YACA,kBACC;CACD,MAAM,WAAW;GACe,IAAA;GACA,IAAA;GACD,IAAA;GACI,IAAA;CACnC;CACA,OAAO;EACL;EACA,OAAO,SAAS;GACd,KAAK,MAAM,CAAC,MAAM,GAAG,SAAS,SAC5B,SAAS,KAAK,CAAC,GAAG,IAAI;EAE1B;CACF;AACF"}
@@ -0,0 +1,274 @@
1
+ "use client"
2
+ /* */
3
+ import { createRemoteConnection } from "../connection.mjs";
4
+ //#region ../../node_modules/.pnpm/@mittwald+remote-dom-core@1.7.0-mittwald.10_@preact+signals-core@1.14.2/node_modules/@mittwald/remote-dom-core/build/esm/receivers/RemoteReceiver.mjs
5
+ /**
6
+ * Represents a text node of a remote tree in a plain JavaScript format, with
7
+ * the addition of a `version` property that is incremented whenever the
8
+ * node is updated.
9
+ */
10
+ /**
11
+ * Represents a comment node of a remote tree in a plain JavaScript format, with
12
+ * the addition of a `version` property that is incremented whenever the
13
+ * node is updated.
14
+ */
15
+ /**
16
+ * Represents an element node of a remote tree in a plain JavaScript format, with
17
+ * the addition of a `version` property that is incremented whenever the
18
+ * node is updated.
19
+ */
20
+ /**
21
+ * Represents the root node of the remote tree in a plain JavaScript format, with
22
+ * the addition of a `version` property that is incremented whenever the
23
+ * root is updated.
24
+ */
25
+ /**
26
+ * Represents any node that can be stored in the host representation of the remote tree.
27
+ */
28
+ /**
29
+ * Any node in the remote tree that can have children nodes.
30
+ */
31
+ /**
32
+ * A `RemoteReceiver` stores remote elements into a basic JavaScript representation,
33
+ * and allows subscribing to individual elements in the remote environment.
34
+ * This can be useful for mapping remote elements to components in a JavaScript
35
+ * framework; for example, the [`@remote-dom/react` library](https://github.com/Shopify/remote-dom/blob/main/packages/react#remoterenderer)
36
+ * uses this receiver to map remote elements to React components.
37
+ */
38
+ var RemoteReceiver = class {
39
+ /**
40
+ * Represents the root node of the remote tree. This node is always defined,
41
+ * and you will likely be most interested in its `children` property, which
42
+ * contains the top-level elements of the remote tree.
43
+ */
44
+ root = (() => ({
45
+ id: "~",
46
+ type: 9,
47
+ children: [],
48
+ version: 0,
49
+ properties: {},
50
+ attributes: {},
51
+ eventListeners: {}
52
+ }))();
53
+ /**
54
+ * An object that can synchronize a tree of elements between two JavaScript
55
+ * environments. This object acts as a “thin waist”, allowing for efficient
56
+ * communication of changes between a “remote” environment (usually, a JavaScript
57
+ * sandbox, such as an `iframe` or Web Worker) and a “host” environment
58
+ * (usually, a top-level browser page).
59
+ */
60
+ attached = (() => /* @__PURE__ */ new Map([["~", this.root]]))();
61
+ subscribers = (() => /* @__PURE__ */ new Map())();
62
+ parents = (() => /* @__PURE__ */ new Map())();
63
+ implementations = (() => /* @__PURE__ */ new Map())();
64
+ constructor({ retain, release, methods } = {}) {
65
+ const { attached, parents, subscribers } = this;
66
+ this.connection = createRemoteConnection({
67
+ call: (id, method, ...args) => {
68
+ const implementationMethod = this.implementations.get(id)?.[method];
69
+ if (typeof implementationMethod !== "function") throw new Error(`Node ${id} does not implement the ${method}() method`);
70
+ return implementationMethod(...args);
71
+ },
72
+ insertChild: (parentId, child, nextSiblingId) => {
73
+ const parent = attached.get(parentId);
74
+ const children = parent.children;
75
+ if (children.some((existing) => existing.id === child.id)) return;
76
+ const normalizedChild = attach(child, parent);
77
+ if (nextSiblingId === void 0) children.push(normalizedChild);
78
+ else {
79
+ const sibling = attached.get(nextSiblingId);
80
+ children.splice(children.indexOf(sibling), 0, normalizedChild);
81
+ }
82
+ parent.version += 1;
83
+ this.parents.set(child.id, parent.id);
84
+ runSubscribers(parent);
85
+ },
86
+ removeChild: (parentId, id) => {
87
+ const parent = attached.get(parentId);
88
+ const children = parent.children;
89
+ const node = attached.get(id);
90
+ const index = parent.children.indexOf(node);
91
+ const [removed] = children.splice(index, 1);
92
+ if (!removed) return;
93
+ parent.version += 1;
94
+ runSubscribers(parent);
95
+ detach(removed);
96
+ },
97
+ updateProperty: (id, property, value, type = 1) => {
98
+ const element = attached.get(id);
99
+ retain?.(value);
100
+ let updateObject;
101
+ switch (type) {
102
+ case 1:
103
+ updateObject = element.properties;
104
+ break;
105
+ case 2:
106
+ updateObject = element.attributes;
107
+ break;
108
+ case 3: updateObject = element.eventListeners;
109
+ }
110
+ const oldValue = updateObject[property];
111
+ updateObject[property] = value;
112
+ element.version += 1;
113
+ let parentForUpdate;
114
+ if (property === "slot") {
115
+ const parentId = this.parents.get(id);
116
+ parentForUpdate = parentId == null ? parentId : attached.get(parentId);
117
+ if (parentForUpdate) parentForUpdate.version += 1;
118
+ }
119
+ runSubscribers(element);
120
+ if (parentForUpdate) runSubscribers(parentForUpdate);
121
+ release?.(oldValue);
122
+ },
123
+ updateText: (id, newText) => {
124
+ const text = attached.get(id);
125
+ text.data = newText;
126
+ text.version += 1;
127
+ runSubscribers(text);
128
+ }
129
+ });
130
+ if (methods) this.implement(this.root, methods);
131
+ function runSubscribers(attached) {
132
+ const subscribed = subscribers.get(attached.id);
133
+ if (subscribed) for (const subscriber of subscribed) subscriber(attached);
134
+ }
135
+ function attach(child, parent) {
136
+ let normalizedChild;
137
+ switch (child.type) {
138
+ case 3:
139
+ case 8: {
140
+ const { id, type, data } = child;
141
+ normalizedChild = {
142
+ id,
143
+ type,
144
+ data,
145
+ version: 0
146
+ };
147
+ break;
148
+ }
149
+ case 1: {
150
+ const { id, type, element, children, properties, attributes, eventListeners } = child;
151
+ retain?.(properties);
152
+ retain?.(eventListeners);
153
+ const resolvedChildren = [];
154
+ normalizedChild = {
155
+ id,
156
+ type,
157
+ element,
158
+ version: 0,
159
+ children: resolvedChildren,
160
+ properties: { ...properties },
161
+ attributes: { ...attributes },
162
+ eventListeners: { ...eventListeners }
163
+ };
164
+ for (const grandChild of children) resolvedChildren.push(attach(grandChild, normalizedChild));
165
+ break;
166
+ }
167
+ default: throw new Error(`Unknown node type: ${JSON.stringify(child)}`);
168
+ }
169
+ attached.set(normalizedChild.id, normalizedChild);
170
+ parents.set(normalizedChild.id, parent.id);
171
+ return normalizedChild;
172
+ }
173
+ function detach(child) {
174
+ attached.delete(child.id);
175
+ parents.delete(child.id);
176
+ if (release) {
177
+ if ("properties" in child) release(child.properties);
178
+ if ("eventListeners" in child) release(child.eventListeners);
179
+ }
180
+ if ("children" in child) for (const grandChild of child.children) detach(grandChild);
181
+ }
182
+ }
183
+ /**
184
+ * Fetches the latest state of a remote element that has been
185
+ * received from the remote environment.
186
+ *
187
+ * @param node The remote node to fetch.
188
+ * @returns The current state of the remote node, or `undefined` if the node is not connected to the remote tree.
189
+ *
190
+ * @example
191
+ * import {RemoteReceiver} from '@mittwald/remote-dom-core/receivers';
192
+ *
193
+ * const receiver = new RemoteReceiver();
194
+ *
195
+ * receiver.get(receiver.root) === receiver.root; // true
196
+ */
197
+ get({ id }) {
198
+ return this.attached.get(id);
199
+ }
200
+ /**
201
+ * Lets you define how [remote methods](https://github.com/Shopify/remote-dom/blob/main/packages/core#remotemethods)
202
+ * are implemented for a particular element in the tree.
203
+ *
204
+ * @param node The remote node to subscribe for changes.
205
+ * @param implementation A record containing the methods to expose for the passed node.
206
+ *
207
+ * @example
208
+ * // In the host environment:
209
+ * import {RemoteReceiver} from '@mittwald/remote-dom-core/receivers';
210
+ *
211
+ * const receiver = new RemoteReceiver();
212
+ *
213
+ * receiver.implement(receiver.root, {
214
+ * alert(message) {
215
+ * window.alert(message);
216
+ * },
217
+ * });
218
+ *
219
+ * // In the remote environment:
220
+ * import {RemoteRootElement} from '@mittwald/remote-dom-core/elements';
221
+ *
222
+ * customElements.define('remote-root', RemoteRootElement);
223
+ *
224
+ * const root = document.createElement('remote-root');
225
+ * root.connect(receiver.connection);
226
+ *
227
+ * root.callRemoteMethod('alert', 'Hello, world!');
228
+ */
229
+ implement({ id }, implementation) {
230
+ if (implementation == null) this.implementations.delete(id);
231
+ else this.implementations.set(id, implementation);
232
+ }
233
+ /**
234
+ * Allows you to subscribe to changes in a remote element. This includes
235
+ * changes to the remote element’s properties and list of children, but
236
+ * note that you will not receive updates for properties or children of
237
+ * _nested_ elements.
238
+ *
239
+ * @param node The remote node to subscribe for changes.
240
+ * @param subscriber A function that will be called with the updated node on each change.
241
+ *
242
+ * @example
243
+ * import {RemoteReceiver} from '@mittwald/remote-dom-core/receivers';
244
+ *
245
+ * const abort = new AbortController();
246
+ * const receiver = new RemoteReceiver();
247
+ *
248
+ * // Subscribe to all changes in the top-level children, attached
249
+ * // directly to the remote “root”.
250
+ * receiver.subscribe(
251
+ * receiver.root,
252
+ * (root) => {
253
+ * console.log('Root changed!', root);
254
+ * },
255
+ * {signal: abort.signal},
256
+ * );
257
+ */
258
+ subscribe({ id }, subscriber, { signal } = {}) {
259
+ let subscribersSet = this.subscribers.get(id);
260
+ if (subscribersSet == null) {
261
+ subscribersSet = /* @__PURE__ */ new Set();
262
+ this.subscribers.set(id, subscribersSet);
263
+ }
264
+ subscribersSet.add(subscriber);
265
+ signal?.addEventListener("abort", () => {
266
+ subscribersSet.delete(subscriber);
267
+ if (subscribersSet.size === 0) this.subscribers.delete(id);
268
+ });
269
+ }
270
+ };
271
+ //#endregion
272
+ export { RemoteReceiver };
273
+
274
+ //# sourceMappingURL=RemoteReceiver.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteReceiver.mjs","names":[],"sources":["../../../../../../../../../../../../../node_modules/.pnpm/@mittwald+remote-dom-core@1.7.0-mittwald.10_@preact+signals-core@1.14.2/node_modules/@mittwald/remote-dom-core/build/esm/receivers/RemoteReceiver.mjs"],"sourcesContent":["import { createRemoteConnection } from '../connection.mjs';\nimport { ROOT_ID, NODE_TYPE_ROOT, UPDATE_PROPERTY_TYPE_EVENT_LISTENER, UPDATE_PROPERTY_TYPE_ATTRIBUTE, UPDATE_PROPERTY_TYPE_PROPERTY, NODE_TYPE_ELEMENT, NODE_TYPE_COMMENT, NODE_TYPE_TEXT } from '../constants.mjs';\n\n/**\n * Represents a text node of a remote tree in a plain JavaScript format, with\n * the addition of a `version` property that is incremented whenever the\n * node is updated.\n */\n\n/**\n * Represents a comment node of a remote tree in a plain JavaScript format, with\n * the addition of a `version` property that is incremented whenever the\n * node is updated.\n */\n\n/**\n * Represents an element node of a remote tree in a plain JavaScript format, with\n * the addition of a `version` property that is incremented whenever the\n * node is updated.\n */\n\n/**\n * Represents the root node of the remote tree in a plain JavaScript format, with\n * the addition of a `version` property that is incremented whenever the\n * root is updated.\n */\n\n/**\n * Represents any node that can be stored in the host representation of the remote tree.\n */\n\n/**\n * Any node in the remote tree that can have children nodes.\n */\n\n/**\n * A `RemoteReceiver` stores remote elements into a basic JavaScript representation,\n * and allows subscribing to individual elements in the remote environment.\n * This can be useful for mapping remote elements to components in a JavaScript\n * framework; for example, the [`@remote-dom/react` library](https://github.com/Shopify/remote-dom/blob/main/packages/react#remoterenderer)\n * uses this receiver to map remote elements to React components.\n */\nclass RemoteReceiver {\n /**\n * Represents the root node of the remote tree. This node is always defined,\n * and you will likely be most interested in its `children` property, which\n * contains the top-level elements of the remote tree.\n */\n root = (() => ({\n id: ROOT_ID,\n type: NODE_TYPE_ROOT,\n children: [],\n version: 0,\n properties: {},\n attributes: {},\n eventListeners: {}\n }))();\n\n /**\n * An object that can synchronize a tree of elements between two JavaScript\n * environments. This object acts as a “thin waist”, allowing for efficient\n * communication of changes between a “remote” environment (usually, a JavaScript\n * sandbox, such as an `iframe` or Web Worker) and a “host” environment\n * (usually, a top-level browser page).\n */\n\n attached = (() => new Map([[ROOT_ID, this.root]]))();\n subscribers = (() => new Map())();\n parents = (() => new Map())();\n implementations = (() => new Map())();\n constructor({\n retain,\n release,\n methods\n } = {}) {\n const {\n attached,\n parents,\n subscribers\n } = this;\n this.connection = createRemoteConnection({\n call: (id, method, ...args) => {\n const implementation = this.implementations.get(id);\n const implementationMethod = implementation?.[method];\n if (typeof implementationMethod !== 'function') {\n throw new Error(`Node ${id} does not implement the ${method}() method`);\n }\n return implementationMethod(...args);\n },\n insertChild: (parentId, child, nextSiblingId) => {\n const parent = attached.get(parentId);\n const children = parent.children;\n if (children.some(existing => existing.id === child.id)) {\n return;\n }\n const normalizedChild = attach(child, parent);\n if (nextSiblingId === undefined) {\n children.push(normalizedChild);\n } else {\n const sibling = attached.get(nextSiblingId);\n children.splice(children.indexOf(sibling), 0, normalizedChild);\n }\n parent.version += 1;\n this.parents.set(child.id, parent.id);\n runSubscribers(parent);\n },\n removeChild: (parentId, id) => {\n const parent = attached.get(parentId);\n const children = parent.children;\n const node = attached.get(id);\n const index = parent.children.indexOf(node);\n const [removed] = children.splice(index, 1);\n if (!removed) {\n return;\n }\n parent.version += 1;\n runSubscribers(parent);\n detach(removed);\n },\n updateProperty: (id, property, value, type = UPDATE_PROPERTY_TYPE_PROPERTY) => {\n const element = attached.get(id);\n retain?.(value);\n let updateObject;\n switch (type) {\n case UPDATE_PROPERTY_TYPE_PROPERTY:\n updateObject = element.properties;\n break;\n case UPDATE_PROPERTY_TYPE_ATTRIBUTE:\n updateObject = element.attributes;\n break;\n case UPDATE_PROPERTY_TYPE_EVENT_LISTENER:\n updateObject = element.eventListeners;\n break;\n }\n const oldValue = updateObject[property];\n updateObject[property] = value;\n element.version += 1;\n let parentForUpdate;\n\n // If the slot changes, inform parent nodes so they can\n // re-parent it appropriately.\n if (property === 'slot') {\n const parentId = this.parents.get(id);\n parentForUpdate = parentId == null ? parentId : attached.get(parentId);\n if (parentForUpdate) {\n parentForUpdate.version += 1;\n }\n }\n runSubscribers(element);\n if (parentForUpdate) runSubscribers(parentForUpdate);\n release?.(oldValue);\n },\n updateText: (id, newText) => {\n const text = attached.get(id);\n text.data = newText;\n text.version += 1;\n runSubscribers(text);\n }\n });\n if (methods) this.implement(this.root, methods);\n function runSubscribers(attached) {\n const subscribed = subscribers.get(attached.id);\n if (subscribed) {\n for (const subscriber of subscribed) {\n subscriber(attached);\n }\n }\n }\n function attach(child, parent) {\n let normalizedChild;\n switch (child.type) {\n case NODE_TYPE_TEXT:\n case NODE_TYPE_COMMENT:\n {\n const {\n id,\n type,\n data\n } = child;\n normalizedChild = {\n id,\n type,\n data,\n version: 0\n };\n break;\n }\n case NODE_TYPE_ELEMENT:\n {\n const {\n id,\n type,\n element,\n children,\n properties,\n attributes,\n eventListeners\n } = child;\n retain?.(properties);\n retain?.(eventListeners);\n const resolvedChildren = [];\n normalizedChild = {\n id,\n type,\n element,\n version: 0,\n children: resolvedChildren,\n properties: {\n ...properties\n },\n attributes: {\n ...attributes\n },\n eventListeners: {\n ...eventListeners\n }\n };\n for (const grandChild of children) {\n resolvedChildren.push(attach(grandChild, normalizedChild));\n }\n break;\n }\n default:\n {\n throw new Error(`Unknown node type: ${JSON.stringify(child)}`);\n }\n }\n attached.set(normalizedChild.id, normalizedChild);\n parents.set(normalizedChild.id, parent.id);\n return normalizedChild;\n }\n function detach(child) {\n attached.delete(child.id);\n parents.delete(child.id);\n if (release) {\n if ('properties' in child) release(child.properties);\n if ('eventListeners' in child) release(child.eventListeners);\n }\n if ('children' in child) {\n for (const grandChild of child.children) {\n detach(grandChild);\n }\n }\n }\n }\n\n /**\n * Fetches the latest state of a remote element that has been\n * received from the remote environment.\n *\n * @param node The remote node to fetch.\n * @returns The current state of the remote node, or `undefined` if the node is not connected to the remote tree.\n *\n * @example\n * import {RemoteReceiver} from '@mittwald/remote-dom-core/receivers';\n *\n * const receiver = new RemoteReceiver();\n *\n * receiver.get(receiver.root) === receiver.root; // true\n */\n get({\n id\n }) {\n return this.attached.get(id);\n }\n\n /**\n * Lets you define how [remote methods](https://github.com/Shopify/remote-dom/blob/main/packages/core#remotemethods)\n * are implemented for a particular element in the tree.\n *\n * @param node The remote node to subscribe for changes.\n * @param implementation A record containing the methods to expose for the passed node.\n *\n * @example\n * // In the host environment:\n * import {RemoteReceiver} from '@mittwald/remote-dom-core/receivers';\n *\n * const receiver = new RemoteReceiver();\n *\n * receiver.implement(receiver.root, {\n * alert(message) {\n * window.alert(message);\n * },\n * });\n *\n * // In the remote environment:\n * import {RemoteRootElement} from '@mittwald/remote-dom-core/elements';\n *\n * customElements.define('remote-root', RemoteRootElement);\n *\n * const root = document.createElement('remote-root');\n * root.connect(receiver.connection);\n *\n * root.callRemoteMethod('alert', 'Hello, world!');\n */\n implement({\n id\n }, implementation) {\n if (implementation == null) {\n this.implementations.delete(id);\n } else {\n this.implementations.set(id, implementation);\n }\n }\n\n /**\n * Allows you to subscribe to changes in a remote element. This includes\n * changes to the remote element’s properties and list of children, but\n * note that you will not receive updates for properties or children of\n * _nested_ elements.\n *\n * @param node The remote node to subscribe for changes.\n * @param subscriber A function that will be called with the updated node on each change.\n *\n * @example\n * import {RemoteReceiver} from '@mittwald/remote-dom-core/receivers';\n *\n * const abort = new AbortController();\n * const receiver = new RemoteReceiver();\n *\n * // Subscribe to all changes in the top-level children, attached\n * // directly to the remote “root”.\n * receiver.subscribe(\n * receiver.root,\n * (root) => {\n * console.log('Root changed!', root);\n * },\n * {signal: abort.signal},\n * );\n */\n subscribe({\n id\n }, subscriber, {\n signal\n } = {}) {\n let subscribersSet = this.subscribers.get(id);\n if (subscribersSet == null) {\n subscribersSet = new Set();\n this.subscribers.set(id, subscribersSet);\n }\n subscribersSet.add(subscriber);\n signal?.addEventListener('abort', () => {\n subscribersSet.delete(subscriber);\n if (subscribersSet.size === 0) {\n this.subscribers.delete(id);\n }\n });\n }\n}\n\nexport { RemoteReceiver };\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use client"
2
+ /* */
3
+ import { useRemoteReceived } from "./hooks/remote-received.mjs";
4
+ import { renderRemoteNode } from "./node.mjs";
5
+ import { Fragment, jsx } from "react/jsx-runtime";
6
+ //#region ../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/RemoteRootRenderer.mjs
7
+ /**
8
+ * A component that can be used to render a tree of UI elements from a remote
9
+ * environment.
10
+ */
11
+ function RemoteRootRenderer(props) {
12
+ const { receiver } = props;
13
+ const { children } = useRemoteReceived(receiver.root, receiver);
14
+ return /*#__PURE__*/ jsx(Fragment, { children: children.map((child) => renderRemoteNode(child, props)) });
15
+ }
16
+ //#endregion
17
+ export { RemoteRootRenderer };
18
+
19
+ //# sourceMappingURL=RemoteRootRenderer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteRootRenderer.mjs","names":[],"sources":["../../../../../../../../../../../../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/RemoteRootRenderer.mjs"],"sourcesContent":["import { useRemoteReceived } from './hooks/remote-received.mjs';\nimport { renderRemoteNode } from './node.mjs';\nimport { jsx, Fragment } from 'react/jsx-runtime';\n\n/**\n * A component that can be used to render a tree of UI elements from a remote\n * environment.\n */\nfunction RemoteRootRenderer(props) {\n const {\n receiver\n } = props;\n const {\n children\n } = useRemoteReceived(receiver.root, receiver);\n return /*#__PURE__*/jsx(Fragment, {\n children: children.map(child => renderRemoteNode(child, props))\n });\n}\n\nexport { RemoteRootRenderer };\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;AAQA,SAAS,mBAAmB,OAAO;CACjC,MAAM,EACJ,aACE;CACJ,MAAM,EACJ,aACE,kBAAkB,SAAS,MAAM,QAAQ;CAC7C,OAAoB,kBAAI,UAAU,EAChC,UAAU,SAAS,KAAI,UAAS,iBAAiB,OAAO,KAAK,CAAC,EAChE,CAAC;AACH"}
@@ -0,0 +1,16 @@
1
+ "use client"
2
+ /* */
3
+ import { useRemoteReceived } from "./hooks/remote-received.mjs";
4
+ import { Fragment, jsx } from "react/jsx-runtime";
5
+ //#region ../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/RemoteTextRenderer.mjs
6
+ /**
7
+ * Renders a remote React element to the host using React.
8
+ */
9
+ function RemoteTextRenderer({ remote, receiver }) {
10
+ const text = useRemoteReceived(remote, receiver);
11
+ return text ? /*#__PURE__*/ jsx(Fragment, { children: text.data }) : null;
12
+ }
13
+ //#endregion
14
+ export { RemoteTextRenderer };
15
+
16
+ //# sourceMappingURL=RemoteTextRenderer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteTextRenderer.mjs","names":[],"sources":["../../../../../../../../../../../../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/RemoteTextRenderer.mjs"],"sourcesContent":["import { useRemoteReceived } from './hooks/remote-received.mjs';\nimport { jsx, Fragment } from 'react/jsx-runtime';\n\n/**\n * Renders a remote React element to the host using React.\n */\nfunction RemoteTextRenderer({\n remote,\n receiver\n}) {\n const text = useRemoteReceived(remote, receiver);\n return text ? /*#__PURE__*/jsx(Fragment, {\n children: text.data\n }) : null;\n}\n\nexport { RemoteTextRenderer };\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;AAMA,SAAS,mBAAmB,EAC1B,QACA,YACC;CACD,MAAM,OAAO,kBAAkB,QAAQ,QAAQ;CAC/C,OAAO,OAAoB,kBAAI,UAAU,EACvC,UAAU,KAAK,KACjB,CAAC,IAAI;AACP"}
@@ -0,0 +1,68 @@
1
+ "use client"
2
+ /* */
3
+ import { useRemoteReceived } from "./hooks/remote-received.mjs";
4
+ import { usePropsForRemoteElement } from "./hooks/props-for-element.mjs";
5
+ import { REMOTE_ELEMENT_ATTACHED_PROP, REMOTE_ELEMENT_PROP } from "./constants.mjs";
6
+ import { memo, useEffect, useRef } from "react";
7
+ import { jsx } from "react/jsx-runtime";
8
+ //#region ../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/component.mjs
9
+ /**
10
+ * Takes a React component, and returns a new component that can be used to render that
11
+ * component from a remote element. This wrapper will handle subscribing to changes in that
12
+ * element, and will normalize the properties on that remote element before passing them
13
+ * to your React component.
14
+ */
15
+ function createRemoteComponentRenderer(Component, { name, eventProps } = {}) {
16
+ const RemoteComponentRenderer = /*#__PURE__*/ memo(function RemoteComponentRenderer({ element, receiver, components }) {
17
+ const internalsRef = useRef();
18
+ const attachedElement = useRemoteReceived(element, receiver);
19
+ const resolvedElement = attachedElement ?? element;
20
+ const resolvedId = resolvedElement.id;
21
+ const props = usePropsForRemoteElement(resolvedElement, {
22
+ receiver,
23
+ components,
24
+ eventProps
25
+ });
26
+ props[REMOTE_ELEMENT_PROP] = resolvedElement;
27
+ props[REMOTE_ELEMENT_ATTACHED_PROP] = attachedElement != null;
28
+ if (internalsRef.current == null) {
29
+ const internals = {
30
+ id: resolvedId,
31
+ receiver
32
+ };
33
+ internals.instanceRef = createImplementationRef(internals);
34
+ internalsRef.current = internals;
35
+ }
36
+ internalsRef.current.id = resolvedId;
37
+ internalsRef.current.receiver = receiver;
38
+ useEffect(() => {
39
+ const node = { id: resolvedId };
40
+ receiver.implement(node, internalsRef.current?.instanceRef.current);
41
+ return () => {
42
+ receiver.implement(node, null);
43
+ };
44
+ }, [resolvedId, receiver]);
45
+ return /*#__PURE__*/ jsx(Component, {
46
+ ref: internalsRef.current.instanceRef,
47
+ ...props
48
+ });
49
+ });
50
+ RemoteComponentRenderer.displayName = name ?? `RemoteComponentRenderer(${Component.displayName ?? Component.name ?? "Component"})`;
51
+ return RemoteComponentRenderer;
52
+ }
53
+ function createImplementationRef(internals) {
54
+ let current = null;
55
+ return {
56
+ get current() {
57
+ return current;
58
+ },
59
+ set current(implementation) {
60
+ current = implementation;
61
+ internals.receiver.implement(internals, implementation);
62
+ }
63
+ };
64
+ }
65
+ //#endregion
66
+ export { createRemoteComponentRenderer };
67
+
68
+ //# sourceMappingURL=component.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.mjs","names":[],"sources":["../../../../../../../../../../../../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/component.mjs"],"sourcesContent":["import { memo, useRef, useEffect } from 'react';\nimport { useRemoteReceived } from './hooks/remote-received.mjs';\nimport { usePropsForRemoteElement } from './hooks/props-for-element.mjs';\nimport { REMOTE_ELEMENT_PROP, REMOTE_ELEMENT_ATTACHED_PROP } from './constants.mjs';\nimport { jsx } from 'react/jsx-runtime';\n\n/**\n * Takes a React component, and returns a new component that can be used to render that\n * component from a remote element. This wrapper will handle subscribing to changes in that\n * element, and will normalize the properties on that remote element before passing them\n * to your React component.\n */\nfunction createRemoteComponentRenderer(Component, {\n name,\n eventProps\n} = {}) {\n const RemoteComponentRenderer = /*#__PURE__*/memo(function RemoteComponentRenderer({\n element,\n receiver,\n components\n }) {\n const internalsRef = useRef();\n const attachedElement = useRemoteReceived(element, receiver);\n const resolvedElement = attachedElement ?? element;\n const resolvedId = resolvedElement.id;\n const props = usePropsForRemoteElement(resolvedElement, {\n receiver,\n components,\n eventProps\n });\n props[REMOTE_ELEMENT_PROP] = resolvedElement;\n props[REMOTE_ELEMENT_ATTACHED_PROP] = attachedElement != null;\n if (internalsRef.current == null) {\n const internals = {\n id: resolvedId,\n receiver\n };\n internals.instanceRef = createImplementationRef(internals);\n internalsRef.current = internals;\n }\n internalsRef.current.id = resolvedId;\n internalsRef.current.receiver = receiver;\n useEffect(() => {\n const node = {\n id: resolvedId\n };\n receiver.implement(node, internalsRef.current?.instanceRef.current);\n return () => {\n receiver.implement(node, null);\n };\n }, [resolvedId, receiver]);\n return /*#__PURE__*/jsx(Component, {\n ref: internalsRef.current.instanceRef,\n ...props\n });\n });\n RemoteComponentRenderer.displayName = name ?? `RemoteComponentRenderer(${Component.displayName ?? Component.name ?? 'Component'})`;\n return RemoteComponentRenderer;\n}\nfunction createImplementationRef(internals) {\n let current = null;\n return {\n get current() {\n return current;\n },\n set current(implementation) {\n current = implementation;\n internals.receiver.implement(internals, implementation);\n }\n };\n}\n\nexport { createRemoteComponentRenderer };\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;AAYA,SAAS,8BAA8B,WAAW,EAChD,MACA,eACE,CAAC,GAAG;CACN,MAAM,0BAAuC,mBAAK,SAAS,wBAAwB,EACjF,SACA,UACA,cACC;EACD,MAAM,eAAe,OAAO;EAC5B,MAAM,kBAAkB,kBAAkB,SAAS,QAAQ;EAC3D,MAAM,kBAAkB,mBAAmB;EAC3C,MAAM,aAAa,gBAAgB;EACnC,MAAM,QAAQ,yBAAyB,iBAAiB;GACtD;GACA;GACA;EACF,CAAC;EACD,MAAM,uBAAuB;EAC7B,MAAM,gCAAgC,mBAAmB;EACzD,IAAI,aAAa,WAAW,MAAM;GAChC,MAAM,YAAY;IAChB,IAAI;IACJ;GACF;GACA,UAAU,cAAc,wBAAwB,SAAS;GACzD,aAAa,UAAU;EACzB;EACA,aAAa,QAAQ,KAAK;EAC1B,aAAa,QAAQ,WAAW;EAChC,gBAAgB;GACd,MAAM,OAAO,EACX,IAAI,WACN;GACA,SAAS,UAAU,MAAM,aAAa,SAAS,YAAY,OAAO;GAClE,aAAa;IACX,SAAS,UAAU,MAAM,IAAI;GAC/B;EACF,GAAG,CAAC,YAAY,QAAQ,CAAC;EACzB,OAAoB,kBAAI,WAAW;GACjC,KAAK,aAAa,QAAQ;GAC1B,GAAG;EACL,CAAC;CACH,CAAC;CACD,wBAAwB,cAAc,QAAQ,2BAA2B,UAAU,eAAe,UAAU,QAAQ,YAAY;CAChI,OAAO;AACT;AACA,SAAS,wBAAwB,WAAW;CAC1C,IAAI,UAAU;CACd,OAAO;EACL,IAAI,UAAU;GACZ,OAAO;EACT;EACA,IAAI,QAAQ,gBAAgB;GAC1B,UAAU;GACV,UAAU,SAAS,UAAU,WAAW,cAAc;EACxD;CACF;AACF"}
@@ -0,0 +1,13 @@
1
+ "use client"
2
+ /* */
3
+ //#region ../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/constants.mjs
4
+ /**
5
+ * The property name used to pass a remote element instance to the React component
6
+ * that is configured to render it.
7
+ */
8
+ var REMOTE_ELEMENT_PROP = Symbol.for("remote-dom.element");
9
+ var REMOTE_ELEMENT_ATTACHED_PROP = Symbol.for("remote-dom.element.attached");
10
+ //#endregion
11
+ export { REMOTE_ELEMENT_ATTACHED_PROP, REMOTE_ELEMENT_PROP };
12
+
13
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","names":[],"sources":["../../../../../../../../../../../../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/constants.mjs"],"sourcesContent":["/**\n * The property name used to pass a remote element instance to the React component\n * that is configured to render it.\n */\nconst REMOTE_ELEMENT_PROP = Symbol.for('remote-dom.element');\nconst REMOTE_ELEMENT_ATTACHED_PROP = Symbol.for('remote-dom.element.attached');\n\nexport { REMOTE_ELEMENT_ATTACHED_PROP, REMOTE_ELEMENT_PROP };\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;AAIA,IAAM,sBAAsB,OAAO,IAAI,oBAAoB;AAC3D,IAAM,+BAA+B,OAAO,IAAI,6BAA6B"}
@@ -0,0 +1,45 @@
1
+ "use client"
2
+ /* */
3
+ import { renderRemoteNode } from "../node.mjs";
4
+ import { Fragment, jsxs } from "react/jsx-runtime";
5
+ //#region ../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/hooks/props-for-element.mjs
6
+ function usePropsForRemoteElement(element, options) {
7
+ if (!element) return void 0;
8
+ const { children, properties, attributes, eventListeners } = element;
9
+ const reactChildren = [];
10
+ const resolvedProperties = {
11
+ ...properties,
12
+ ...attributes,
13
+ children: reactChildren
14
+ };
15
+ if (options.eventProps) for (const [prop, eventDescription] of Object.entries(options.eventProps)) {
16
+ const eventName = eventDescription?.event;
17
+ if (eventName == null) continue;
18
+ const listener = eventListeners[eventName];
19
+ if (listener) resolvedProperties[prop] = wrapEventListenerForCallback(listener);
20
+ }
21
+ else for (const [eventName, listener] of Object.entries(eventListeners)) {
22
+ if (!listener) continue;
23
+ resolvedProperties[`on${eventName[0].toUpperCase()}${eventName.slice(1)}`] = wrapEventListenerForCallback(listener);
24
+ }
25
+ for (const child of children) if (child.type === 1 && typeof child.attributes.slot === "string") {
26
+ const slot = child.attributes.slot;
27
+ const rendered = renderRemoteNode(child, options);
28
+ resolvedProperties[slot] = resolvedProperties[slot] ? /*#__PURE__*/ jsxs(Fragment, { children: [resolvedProperties[slot], rendered] }) : rendered;
29
+ } else reactChildren.push(renderRemoteNode(child, options));
30
+ return resolvedProperties;
31
+ }
32
+ function wrapEventListenerForCallback(listener) {
33
+ return function eventListenerCallbackWrapper(...args) {
34
+ if (args.length === 1 && args[0] instanceof Event) {
35
+ const event = args[0];
36
+ if (event.target !== event.currentTarget) return;
37
+ return "detail" in event ? listener(event.detail) : listener();
38
+ }
39
+ return listener(...args);
40
+ };
41
+ }
42
+ //#endregion
43
+ export { usePropsForRemoteElement };
44
+
45
+ //# sourceMappingURL=props-for-element.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props-for-element.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/hooks/props-for-element.mjs"],"sourcesContent":["import { renderRemoteNode } from '../node.mjs';\nimport { jsxs, Fragment } from 'react/jsx-runtime';\n\nfunction usePropsForRemoteElement(element, options) {\n if (!element) return undefined;\n const {\n children,\n properties,\n attributes,\n eventListeners\n } = element;\n const reactChildren = [];\n const resolvedProperties = {\n ...properties,\n ...attributes,\n children: reactChildren\n };\n if (options.eventProps) {\n for (const [prop, eventDescription] of Object.entries(options.eventProps)) {\n const eventName = eventDescription?.event;\n if (eventName == null) continue;\n const listener = eventListeners[eventName];\n if (listener) {\n resolvedProperties[prop] = wrapEventListenerForCallback(listener);\n }\n }\n } else {\n // Assume all event listeners are allowed, and write each one as a conventional\n // Preact callback prop.\n for (const [eventName, listener] of Object.entries(eventListeners)) {\n // A removed listener reaches the host as an update to `undefined`,\n // because RemoteReceiver assigns rather than deletes, so the key\n // outlives it. Wrapping that installs a callable prop that throws\n // when the event fires.\n if (!listener) continue;\n resolvedProperties[`on${eventName[0].toUpperCase()}${eventName.slice(1)}`] = wrapEventListenerForCallback(listener);\n }\n }\n for (const child of children) {\n if (child.type === 1 && typeof child.attributes.slot === 'string') {\n const slot = child.attributes.slot;\n const rendered = renderRemoteNode(child, options);\n resolvedProperties[slot] = resolvedProperties[slot] ? /*#__PURE__*/jsxs(Fragment, {\n children: [resolvedProperties[slot], rendered]\n }) : rendered;\n } else {\n reactChildren.push(renderRemoteNode(child, options));\n }\n }\n return resolvedProperties;\n}\nfunction wrapEventListenerForCallback(listener) {\n return function eventListenerCallbackWrapper(...args) {\n if (args.length === 1 && args[0] instanceof Event) {\n const event = args[0];\n if (event.target !== event.currentTarget) return;\n return 'detail' in event ? listener(event.detail) : listener();\n }\n return listener(...args);\n };\n}\n\nexport { usePropsForRemoteElement };\n"],"x_google_ignoreList":[0],"mappings":";;;;;AAGA,SAAS,yBAAyB,SAAS,SAAS;CAClD,IAAI,CAAC,SAAS,OAAO,KAAA;CACrB,MAAM,EACJ,UACA,YACA,YACA,mBACE;CACJ,MAAM,gBAAgB,CAAC;CACvB,MAAM,qBAAqB;EACzB,GAAG;EACH,GAAG;EACH,UAAU;CACZ;CACA,IAAI,QAAQ,YACV,KAAK,MAAM,CAAC,MAAM,qBAAqB,OAAO,QAAQ,QAAQ,UAAU,GAAG;EACzE,MAAM,YAAY,kBAAkB;EACpC,IAAI,aAAa,MAAM;EACvB,MAAM,WAAW,eAAe;EAChC,IAAI,UACF,mBAAmB,QAAQ,6BAA6B,QAAQ;CAEpE;MAIA,KAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QAAQ,cAAc,GAAG;EAKlE,IAAI,CAAC,UAAU;EACf,mBAAmB,KAAK,UAAU,EAAE,CAAC,YAAY,IAAI,UAAU,MAAM,CAAC,OAAO,6BAA6B,QAAQ;CACpH;CAEF,KAAK,MAAM,SAAS,UAClB,IAAI,MAAM,SAAS,KAAK,OAAO,MAAM,WAAW,SAAS,UAAU;EACjE,MAAM,OAAO,MAAM,WAAW;EAC9B,MAAM,WAAW,iBAAiB,OAAO,OAAO;EAChD,mBAAmB,QAAQ,mBAAmB,QAAqB,mBAAK,UAAU,EAChF,UAAU,CAAC,mBAAmB,OAAO,QAAQ,EAC/C,CAAC,IAAI;CACP,OACE,cAAc,KAAK,iBAAiB,OAAO,OAAO,CAAC;CAGvD,OAAO;AACT;AACA,SAAS,6BAA6B,UAAU;CAC9C,OAAO,SAAS,6BAA6B,GAAG,MAAM;EACpD,IAAI,KAAK,WAAW,KAAK,KAAK,cAAc,OAAO;GACjD,MAAM,QAAQ,KAAK;GACnB,IAAI,MAAM,WAAW,MAAM,eAAe;GAC1C,OAAO,YAAY,QAAQ,SAAS,MAAM,MAAM,IAAI,SAAS;EAC/D;EACA,OAAO,SAAS,GAAG,IAAI;CACzB;AACF"}
@@ -0,0 +1,60 @@
1
+ "use client"
2
+ /* */
3
+ import { useDebugValue, useEffect, useState } from "react";
4
+ //#region ../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/hooks/remote-received.mjs
5
+ /**
6
+ * Subscribes to a remote node’s updates and returns its current value.
7
+ */
8
+ function useRemoteReceived(remote, receiver) {
9
+ const [state, setState] = useState(() => {
10
+ const value = receiver.get(remote);
11
+ return {
12
+ id: remote.id,
13
+ version: value?.version,
14
+ value,
15
+ receiver
16
+ };
17
+ });
18
+ let returnValue = state.value;
19
+ if (state.receiver !== receiver || state.id !== remote.id) {
20
+ const updated = receiver.get(remote);
21
+ returnValue = updated;
22
+ setState({
23
+ receiver,
24
+ id: remote.id,
25
+ version: updated?.version,
26
+ value: returnValue
27
+ });
28
+ }
29
+ useDebugValue(returnValue);
30
+ useEffect(() => {
31
+ const abort = new AbortController();
32
+ const checkForUpdates = () => {
33
+ if (abort.signal.aborted) return;
34
+ setState((previousState) => {
35
+ const { id: previousId, version: previousVersion, receiver: previousReceiver } = previousState;
36
+ const { id } = remote;
37
+ if (previousReceiver !== receiver || previousId !== id) return previousState;
38
+ const value = receiver.get(remote);
39
+ const version = value?.version;
40
+ if (previousVersion === version) return previousState;
41
+ return {
42
+ receiver,
43
+ value,
44
+ id,
45
+ version
46
+ };
47
+ });
48
+ };
49
+ receiver.subscribe(remote, checkForUpdates, { signal: abort.signal });
50
+ checkForUpdates();
51
+ return () => {
52
+ abort.abort();
53
+ };
54
+ }, [receiver, remote.id]);
55
+ return returnValue;
56
+ }
57
+ //#endregion
58
+ export { useRemoteReceived };
59
+
60
+ //# sourceMappingURL=remote-received.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-received.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@mittwald+remote-dom-react@1.2.2-mittwald.10_patch_hash=165efefefb651960d4019e048af092f_d026c16774e8ba039112cc5604b77d04/node_modules/@mittwald/remote-dom-react/build/esm/host/hooks/remote-received.mjs"],"sourcesContent":["import { useState, useDebugValue, useEffect } from 'react';\n\n/**\n * Subscribes to a remote node’s updates and returns its current value.\n */\nfunction useRemoteReceived(remote, receiver) {\n const [state, setState] = useState(() => {\n const value = receiver.get(remote);\n return {\n id: remote.id,\n version: value?.version,\n value,\n receiver\n };\n });\n let returnValue = state.value;\n\n // If parameters have changed since our last render, schedule an update with its current value.\n if (state.receiver !== receiver || state.id !== remote.id) {\n // When the consumer of this hook changes receiver or attached node, the node they switched\n // to might already be unmounted. We guard against that by making sure we don’t get null\n // back from the receiver, and storing the “attached” node in state whether it is actually\n // attached or not, so we have a paper trail of how we got here.\n const updated = receiver.get(remote);\n\n // If the subscription has been updated, we'll schedule another update with React.\n // React will process this update immediately, so the old subscription value won't be committed.\n // It is still nice to avoid returning a mismatched value though, so let's override the return value.\n returnValue = updated;\n setState({\n receiver,\n id: remote.id,\n version: updated?.version,\n value: returnValue\n });\n }\n useDebugValue(returnValue);\n useEffect(() => {\n const abort = new AbortController();\n const checkForUpdates = () => {\n if (abort.signal.aborted) return;\n setState(previousState => {\n const {\n id: previousId,\n version: previousVersion,\n receiver: previousReceiver\n } = previousState;\n const {\n id\n } = remote;\n\n // Ignore values from stale sources\n if (previousReceiver !== receiver || previousId !== id) {\n return previousState;\n }\n\n // This function is also called as part of the initial useEffect() when the\n // component mounts. It’s possible that between the initial render (when the\n // remote component was for sure attached, to the best of the host’s knowledge)\n // and the effect, the component was removed from the remote tree. You’ll see that\n // the rest of this callback is careful to handle cases where the node is in this\n // state.\n const value = receiver.get(remote);\n const version = value?.version;\n\n // If the value hasn't changed, no update is needed.\n // Return state as-is so React can bail out and avoid an unnecessary render.\n if (previousVersion === version) {\n return previousState;\n }\n return {\n receiver,\n value,\n id,\n version\n };\n });\n };\n receiver.subscribe(remote, checkForUpdates, {\n signal: abort.signal\n });\n\n // Passive effect, so we need to check if anything has changed\n checkForUpdates();\n return () => {\n abort.abort();\n };\n }, [receiver, remote.id]);\n return returnValue;\n}\n\nexport { useRemoteReceived };\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;AAKA,SAAS,kBAAkB,QAAQ,UAAU;CAC3C,MAAM,CAAC,OAAO,YAAY,eAAe;EACvC,MAAM,QAAQ,SAAS,IAAI,MAAM;EACjC,OAAO;GACL,IAAI,OAAO;GACX,SAAS,OAAO;GAChB;GACA;EACF;CACF,CAAC;CACD,IAAI,cAAc,MAAM;CAGxB,IAAI,MAAM,aAAa,YAAY,MAAM,OAAO,OAAO,IAAI;EAKzD,MAAM,UAAU,SAAS,IAAI,MAAM;EAKnC,cAAc;EACd,SAAS;GACP;GACA,IAAI,OAAO;GACX,SAAS,SAAS;GAClB,OAAO;EACT,CAAC;CACH;CACA,cAAc,WAAW;CACzB,gBAAgB;EACd,MAAM,QAAQ,IAAI,gBAAgB;EAClC,MAAM,wBAAwB;GAC5B,IAAI,MAAM,OAAO,SAAS;GAC1B,UAAS,kBAAiB;IACxB,MAAM,EACJ,IAAI,YACJ,SAAS,iBACT,UAAU,qBACR;IACJ,MAAM,EACJ,OACE;IAGJ,IAAI,qBAAqB,YAAY,eAAe,IAClD,OAAO;IAST,MAAM,QAAQ,SAAS,IAAI,MAAM;IACjC,MAAM,UAAU,OAAO;IAIvB,IAAI,oBAAoB,SACtB,OAAO;IAET,OAAO;KACL;KACA;KACA;KACA;IACF;GACF,CAAC;EACH;EACA,SAAS,UAAU,QAAQ,iBAAiB,EAC1C,QAAQ,MAAM,OAChB,CAAC;EAGD,gBAAgB;EAChB,aAAa;GACX,MAAM,MAAM;EACd;CACF,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC;CACxB,OAAO;AACT"}