remote-components 0.4.12 → 0.4.13

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 (63) hide show
  1. package/dist/{chunk-3PR3SWYZ.js → chunk-3DR4Z24C.js} +24 -2
  2. package/dist/chunk-3DR4Z24C.js.map +1 -0
  3. package/dist/{chunk-BEGVH64U.js → chunk-5BBEO4SE.js} +2 -2
  4. package/dist/{chunk-24LEEDHP.js → chunk-CBEDRGC7.js} +3 -3
  5. package/dist/{chunk-CLO56ON2.js → chunk-CLB2ATH2.js} +82 -4
  6. package/dist/chunk-CLB2ATH2.js.map +1 -0
  7. package/dist/{chunk-M6ACTSVB.js → chunk-IE7FXNFJ.js} +2 -2
  8. package/dist/{chunk-XWRB6CEA.cjs → chunk-KMG54QXV.cjs} +3 -3
  9. package/dist/{chunk-SULMNRMJ.cjs → chunk-KP544TQH.cjs} +23 -23
  10. package/dist/{chunk-HXCW3WDT.cjs → chunk-OI37BBBU.cjs} +25 -25
  11. package/dist/{chunk-TGE3K3TR.cjs → chunk-OVD7BRLD.cjs} +18 -18
  12. package/dist/{chunk-6PZEDIAK.cjs → chunk-OZCVXVKU.cjs} +24 -2
  13. package/dist/chunk-OZCVXVKU.cjs.map +1 -0
  14. package/dist/{chunk-YSJ4FKGI.cjs → chunk-W7RJUCZQ.cjs} +97 -19
  15. package/dist/chunk-W7RJUCZQ.cjs.map +1 -0
  16. package/dist/{chunk-RZGFQTX6.js → chunk-XEO3XD67.js} +8 -8
  17. package/dist/config/nextjs.cjs +10 -10
  18. package/dist/config/nextjs.js +7 -7
  19. package/dist/config/tailwind.cjs +53 -0
  20. package/dist/config/tailwind.cjs.map +1 -0
  21. package/dist/config/tailwind.d.ts +21 -0
  22. package/dist/config/tailwind.js +53 -0
  23. package/dist/config/tailwind.js.map +1 -0
  24. package/dist/host/html.cjs +20 -20
  25. package/dist/host/html.js +8 -8
  26. package/dist/host/nextjs/app/client-only.cjs +12 -12
  27. package/dist/host/nextjs/app/client-only.js +7 -7
  28. package/dist/host/react.cjs +8 -8
  29. package/dist/host/react.js +7 -7
  30. package/dist/internal/host/nextjs/app-client.cjs +7 -3
  31. package/dist/internal/host/nextjs/app-client.cjs.map +1 -1
  32. package/dist/internal/host/nextjs/app-client.js +7 -3
  33. package/dist/internal/host/nextjs/app-client.js.map +1 -1
  34. package/dist/internal/host/shared/remote-image-loader.cjs +23 -1
  35. package/dist/internal/host/shared/remote-image-loader.cjs.map +1 -1
  36. package/dist/internal/host/shared/remote-image-loader.js +23 -1
  37. package/dist/internal/host/shared/remote-image-loader.js.map +1 -1
  38. package/dist/remote/react/utils/portal.cjs +58 -0
  39. package/dist/remote/react/utils/portal.cjs.map +1 -0
  40. package/dist/remote/react/utils/portal.d.ts +12 -0
  41. package/dist/remote/react/utils/portal.js +58 -0
  42. package/dist/remote/react/utils/portal.js.map +1 -0
  43. package/dist/{turbopack-5VGMYUL4.cjs → turbopack-5WAY6QIC.cjs} +11 -11
  44. package/dist/{turbopack-43N2UJNN.js → turbopack-Z744H3T4.js} +4 -4
  45. package/dist/{webpack-FSN5UBA2.cjs → webpack-3GSL5AZJ.cjs} +11 -11
  46. package/dist/{webpack-LXE2UWTA.js → webpack-IQKPPBGH.js} +4 -4
  47. package/package.json +18 -1
  48. package/dist/chunk-3PR3SWYZ.js.map +0 -1
  49. package/dist/chunk-6PZEDIAK.cjs.map +0 -1
  50. package/dist/chunk-CLO56ON2.js.map +0 -1
  51. package/dist/chunk-YSJ4FKGI.cjs.map +0 -1
  52. /package/dist/{chunk-BEGVH64U.js.map → chunk-5BBEO4SE.js.map} +0 -0
  53. /package/dist/{chunk-24LEEDHP.js.map → chunk-CBEDRGC7.js.map} +0 -0
  54. /package/dist/{chunk-M6ACTSVB.js.map → chunk-IE7FXNFJ.js.map} +0 -0
  55. /package/dist/{chunk-XWRB6CEA.cjs.map → chunk-KMG54QXV.cjs.map} +0 -0
  56. /package/dist/{chunk-SULMNRMJ.cjs.map → chunk-KP544TQH.cjs.map} +0 -0
  57. /package/dist/{chunk-HXCW3WDT.cjs.map → chunk-OI37BBBU.cjs.map} +0 -0
  58. /package/dist/{chunk-TGE3K3TR.cjs.map → chunk-OVD7BRLD.cjs.map} +0 -0
  59. /package/dist/{chunk-RZGFQTX6.js.map → chunk-XEO3XD67.js.map} +0 -0
  60. /package/dist/{turbopack-5VGMYUL4.cjs.map → turbopack-5WAY6QIC.cjs.map} +0 -0
  61. /package/dist/{turbopack-43N2UJNN.js.map → turbopack-Z744H3T4.js.map} +0 -0
  62. /package/dist/{webpack-FSN5UBA2.cjs.map → webpack-3GSL5AZJ.cjs.map} +0 -0
  63. /package/dist/{webpack-LXE2UWTA.js.map → webpack-IQKPPBGH.js.map} +0 -0
@@ -7,7 +7,7 @@
7
7
 
8
8
 
9
9
 
10
- var _chunkHXCW3WDTcjs = require('./chunk-HXCW3WDT.cjs');
10
+ var _chunkOI37BBBUcjs = require('./chunk-OI37BBBU.cjs');
11
11
 
12
12
 
13
13
  var _chunk3AX5WLZDcjs = require('./chunk-3AX5WLZD.cjs');
@@ -21,7 +21,7 @@ var _chunkN3SQTOSEcjs = require('./chunk-N3SQTOSE.cjs');
21
21
 
22
22
 
23
23
 
24
- var _chunk6PZEDIAKcjs = require('./chunk-6PZEDIAK.cjs');
24
+ var _chunkOZCVXVKUcjs = require('./chunk-OZCVXVKU.cjs');
25
25
 
26
26
 
27
27
  var _chunkZ2SLBFQLcjs = require('./chunk-Z2SLBFQL.cjs');
@@ -92,7 +92,7 @@ function setAttributesFromProps(el, props) {
92
92
  function useResolveClientUrl(prop, urlHref) {
93
93
  const { resolveClientUrl: contextValue } = _context.useRemoteComponentsContext.call(void 0, );
94
94
  const raw = _nullishCoalesce(prop, () => ( contextValue));
95
- return _react.useMemo.call(void 0, () => _chunkHXCW3WDTcjs.bindResolveClientUrl.call(void 0, raw, urlHref), [raw, urlHref]);
95
+ return _react.useMemo.call(void 0, () => _chunkOI37BBBUcjs.bindResolveClientUrl.call(void 0, raw, urlHref), [raw, urlHref]);
96
96
  }
97
97
 
98
98
  // src/host/react/hooks/use-shadow-root.ts
@@ -154,7 +154,7 @@ function getRemoteComponentHtml(html) {
154
154
  return ssrRemoteComponentContainer.innerHTML;
155
155
  }
156
156
  const remoteComponentContainer = temp.querySelectorAll(
157
- `div[data-bundle][data-route][data-runtime][id^="${_chunk6PZEDIAKcjs.DEFAULT_COMPONENT_NAME}"],div[data-bundle][data-route],div#__next,remote-component:not([src])`
157
+ `div[data-bundle][data-route][data-runtime][id^="${_chunkOZCVXVKUcjs.DEFAULT_COMPONENT_NAME}"],div[data-bundle][data-route],div#__next,remote-component:not([src])`
158
158
  );
159
159
  if (remoteComponentContainer.length > 0) {
160
160
  return `${Array.from(temp.querySelectorAll("link,script")).map((link) => link.outerHTML).join("")}${Array.from(remoteComponentContainer).map((container) => container.outerHTML).join("")}`;
@@ -179,7 +179,7 @@ function ConsumeRemoteComponent({
179
179
  mode = "open",
180
180
  reset,
181
181
  credentials: credentialsProp,
182
- name: nameProp = _chunk6PZEDIAKcjs.DEFAULT_COMPONENT_NAME,
182
+ name: nameProp = _chunkOZCVXVKUcjs.DEFAULT_COMPONENT_NAME,
183
183
  shared: sharedProp,
184
184
  children,
185
185
  onBeforeLoad,
@@ -195,22 +195,22 @@ function ConsumeRemoteComponent({
195
195
  const credentials = _nullishCoalesce(_nullishCoalesce(credentialsProp, () => ( contextCredentials)), () => ( "same-origin"));
196
196
  const shared = _nullishCoalesce(_nullishCoalesce(sharedProp, () => ( contextShared)), () => ( {}));
197
197
  const emitter = _react.useMemo.call(void 0,
198
- () => _chunkHXCW3WDTcjs.makeReactEmitter.call(void 0, { onBeforeLoad, onLoad, onError, onChange }),
198
+ () => _chunkOI37BBBUcjs.makeReactEmitter.call(void 0, { onBeforeLoad, onLoad, onError, onChange }),
199
199
  [onBeforeLoad, onLoad, onError, onChange]
200
200
  );
201
201
  const name = _react.useMemo.call(void 0,
202
- () => _chunkHXCW3WDTcjs.resolveNameFromSrc.call(void 0, src, nameProp),
202
+ () => _chunkOI37BBBUcjs.resolveNameFromSrc.call(void 0, src, nameProp),
203
203
  [src, nameProp]
204
204
  );
205
205
  const [data, setData] = _react.useState.call(void 0,
206
206
  null
207
207
  );
208
- const url = _react.useMemo.call(void 0, () => _chunkHXCW3WDTcjs.getClientOrServerUrl.call(void 0, src, DUMMY_FALLBACK), [src]);
208
+ const url = _react.useMemo.call(void 0, () => _chunkOI37BBBUcjs.getClientOrServerUrl.call(void 0, src, DUMMY_FALLBACK), [src]);
209
209
  const resolveClientUrl = useResolveClientUrl(resolveClientUrlProp, url.href);
210
210
  const id = url.origin === (typeof location !== "undefined" ? location.origin : DUMMY_FALLBACK) ? url.pathname : url.href;
211
- const keySuffix = `${_chunk6PZEDIAKcjs.escapeString.call(void 0, id)}_${_chunk6PZEDIAKcjs.escapeString.call(void 0,
211
+ const keySuffix = `${_chunkOZCVXVKUcjs.escapeString.call(void 0, id)}_${_chunkOZCVXVKUcjs.escapeString.call(void 0,
212
212
  _nullishCoalesce(_optionalChain([data, 'optionalAccess', _5 => _5.name]), () => ( name))
213
- )}_${_chunk6PZEDIAKcjs.escapeString.call(void 0, instanceId)}`;
213
+ )}_${_chunkOZCVXVKUcjs.escapeString.call(void 0, instanceId)}`;
214
214
  const [remoteComponent, setRemoteComponent] = _react.useState.call(void 0, null);
215
215
  const { shadowRoot, shadowRootContainerRef } = useShadowRoot({
216
216
  isolate,
@@ -222,6 +222,10 @@ function ConsumeRemoteComponent({
222
222
  `[data-remote-component-id="shadowroot_${keySuffix}"]`
223
223
  ), 'optionalAccess', _8 => _8.shadowRoot, 'optionalAccess', _9 => _9.innerHTML]), () => ( _optionalChain([document, 'access', _10 => _10.getElementById, 'call', _11 => _11(`__REMOTE_COMPONENT${name}`), 'optionalAccess', _12 => _12.innerHTML]))), () => ( _optionalChain([document, 'access', _13 => _13.querySelector, 'call', _14 => _14(`div[data-bundle][data-route][id^="${name}"]`), 'optionalAccess', _15 => _15.innerHTML]))), () => ( _optionalChain([document, 'access', _16 => _16.querySelector, 'call', _17 => _17("div[data-bundle][data-route]"), 'optionalAccess', _18 => _18.innerHTML]))) : null
224
224
  );
225
+ const initialSsrContentRef = _react.useRef.call(void 0, htmlRef.current != null);
226
+ const [stylesReady, setStylesReady] = _react.useState.call(void 0,
227
+ () => !(typeof document !== "undefined" && isolate !== false && Boolean(src) && !initialSsrContentRef.current)
228
+ );
225
229
  const endTemplateRef = _react.useRef.call(void 0, null);
226
230
  const childrenRef = _react.useRef.call(void 0,
227
231
  typeof document !== "undefined" ? (() => {
@@ -236,7 +240,7 @@ function ConsumeRemoteComponent({
236
240
  return elements;
237
241
  })() : []
238
242
  );
239
- const hostStateRef = _react.useRef.call(void 0, _chunkHXCW3WDTcjs.createHostState.call(void 0, ));
243
+ const hostStateRef = _react.useRef.call(void 0, _chunkOI37BBBUcjs.createHostState.call(void 0, ));
240
244
  const componentHydrationHtml = _react.useRef.call(void 0, null);
241
245
  const prevRemoteComponentContainerRef = _react.useRef.call(void 0, null);
242
246
  const unmountRef = _react.useRef.call(void 0, null);
@@ -276,6 +280,59 @@ function ConsumeRemoteComponent({
276
280
  }
277
281
  }
278
282
  }, [shadowRoot, remoteComponent, name]);
283
+ _react.useLayoutEffect.call(void 0, () => {
284
+ const currentSrc = src ? typeof src === "string" ? src : src.href : null;
285
+ if (stylesReady || initialSsrContentRef.current || !shadowRoot || !data || data.src !== currentSrc) {
286
+ return;
287
+ }
288
+ const expectedStylesheets = (_nullishCoalesce(data.links, () => ( []))).filter(
289
+ (link) => link.rel === "stylesheet"
290
+ );
291
+ if (expectedStylesheets.length === 0) {
292
+ setStylesReady(true);
293
+ return;
294
+ }
295
+ const expectedHrefs = new Set(
296
+ expectedStylesheets.map((link) => new URL(link.href, url).href)
297
+ );
298
+ const links = Array.from(
299
+ shadowRoot.querySelectorAll('link[rel="stylesheet"]')
300
+ ).filter((link) => expectedHrefs.has(link.href));
301
+ if (links.length < expectedHrefs.size) {
302
+ return;
303
+ }
304
+ if (links.length === 0) {
305
+ setStylesReady(true);
306
+ return;
307
+ }
308
+ let pending = links.length;
309
+ let settled = false;
310
+ const onSettled = () => {
311
+ pending -= 1;
312
+ if (!settled && pending <= 0) {
313
+ settled = true;
314
+ setStylesReady(true);
315
+ }
316
+ };
317
+ const cleanups = links.map((link) => {
318
+ if (link.sheet) {
319
+ onSettled();
320
+ return () => {
321
+ };
322
+ }
323
+ link.addEventListener("load", onSettled, { once: true });
324
+ link.addEventListener("error", onSettled, { once: true });
325
+ return () => {
326
+ link.removeEventListener("load", onSettled);
327
+ link.removeEventListener("error", onSettled);
328
+ };
329
+ });
330
+ return () => {
331
+ for (const cleanup of cleanups) {
332
+ cleanup();
333
+ }
334
+ };
335
+ }, [shadowRoot, data, stylesReady, src, url]);
279
336
  _react.useEffect.call(void 0, () => {
280
337
  if (src && src !== hostStateRef.current.prevSrc) {
281
338
  const previousSrc = hostStateRef.current.prevSrc;
@@ -289,6 +346,9 @@ function ConsumeRemoteComponent({
289
346
  const { signal } = hostStateRef.current.abortController;
290
347
  emitter.beforeLoad(src);
291
348
  hostStateRef.current.stage = "loading";
349
+ if (isolate !== false && !initialSsrContentRef.current) {
350
+ setStylesReady(false);
351
+ }
292
352
  _react.startTransition.call(void 0, async () => {
293
353
  try {
294
354
  let html = getRemoteComponentHtml(
@@ -302,7 +362,7 @@ function ConsumeRemoteComponent({
302
362
  _nullishCoalesce(_optionalChain([resolveClientUrl, 'optionalCall', _29 => _29(url.href)]), () => ( url.href)),
303
363
  location.href
304
364
  );
305
- const res = await _chunkHXCW3WDTcjs.fetchWithHooks.call(void 0, resolvedUrl, fetchInit, {
365
+ const res = await _chunkOI37BBBUcjs.fetchWithHooks.call(void 0, resolvedUrl, fetchInit, {
306
366
  onRequest,
307
367
  onResponse,
308
368
  abortController: hostStateRef.current.abortController
@@ -321,7 +381,7 @@ function ConsumeRemoteComponent({
321
381
  const userShared = await shared;
322
382
  if (signal.aborted)
323
383
  return;
324
- const prepared = _chunkHXCW3WDTcjs.preparePipeline.call(void 0, {
384
+ const prepared = _chunkOI37BBBUcjs.preparePipeline.call(void 0, {
325
385
  html,
326
386
  name,
327
387
  url,
@@ -362,11 +422,25 @@ function ConsumeRemoteComponent({
362
422
  href: new URL(_nullishCoalesce(link.getAttribute("href"), () => ( link.href)), url).href,
363
423
  ...link.getAttributeNames().reduce((acc, key) => {
364
424
  if (key !== "href") {
365
- acc[_nullishCoalesce(_chunk6PZEDIAKcjs.attrToProp[key], () => ( key))] = _nullishCoalesce(link.getAttribute(key), () => ( ""));
425
+ acc[_nullishCoalesce(_chunkOZCVXVKUcjs.attrToProp[key], () => ( key))] = _nullishCoalesce(link.getAttribute(key), () => ( ""));
366
426
  }
367
427
  return acc;
368
428
  }, {})
369
429
  }));
430
+ const stylesheetLinks = Array.from(linkElements).filter(
431
+ (link) => link.getAttribute("rel") === "stylesheet"
432
+ );
433
+ if (typeof _reactdom.preload === "function") {
434
+ for (const link of stylesheetLinks) {
435
+ _reactdom.preload.call(void 0,
436
+ new URL(_nullishCoalesce(link.getAttribute("href"), () => ( link.href)), url).href,
437
+ {
438
+ as: "style",
439
+ fetchPriority: "high"
440
+ }
441
+ );
442
+ }
443
+ }
370
444
  const inlineScripts = (isRemoteComponent ? component : doc).querySelectorAll(
371
445
  "script:not([src]):not([data-src]):not([id*='_rsc']):not([id='__NEXT_DATA__']):not([id='__REMOTE_NEXT_DATA__'])"
372
446
  );
@@ -424,7 +498,7 @@ function ConsumeRemoteComponent({
424
498
  });
425
499
  self.__next_s = prevNextScripts;
426
500
  }
427
- const rscName = rsc ? `__remote_component_rsc_${_chunk6PZEDIAKcjs.escapeString.call(void 0, id)}_${_chunk6PZEDIAKcjs.escapeString.call(void 0,
501
+ const rscName = rsc ? `__remote_component_rsc_${_chunkOZCVXVKUcjs.escapeString.call(void 0, id)}_${_chunkOZCVXVKUcjs.escapeString.call(void 0,
428
502
  remoteName
429
503
  )}` : void 0;
430
504
  if (rsc) {
@@ -495,9 +569,10 @@ function ConsumeRemoteComponent({
495
569
  );
496
570
  emitter.load(src);
497
571
  }
572
+ setStylesReady(true);
498
573
  hostStateRef.current.stage = "loaded";
499
574
  } else {
500
- const result = await _chunkHXCW3WDTcjs.loadPrepared.call(void 0, {
575
+ const result = await _chunkOI37BBBUcjs.loadPrepared.call(void 0, {
501
576
  prepared,
502
577
  url,
503
578
  signal,
@@ -566,8 +641,8 @@ function ConsumeRemoteComponent({
566
641
  const metadataJson = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "script", { "data-remote-component": true, type: "application/json", children: JSON.stringify({
567
642
  name: _optionalChain([data, 'optionalAccess', _33 => _33.name]) || name,
568
643
  bundle: _optionalChain([data, 'optionalAccess', _34 => _34.bundle]) || "default",
569
- route: _optionalChain([data, 'optionalAccess', _35 => _35.route]) || _chunk6PZEDIAKcjs.DEFAULT_ROUTE,
570
- runtime: hostStateRef.current.prevIsRemoteComponent ? _chunk6PZEDIAKcjs.RUNTIME_SCRIPT : _optionalChain([data, 'optionalAccess', _36 => _36.runtime]) || _chunk6PZEDIAKcjs.RUNTIME_WEBPACK
644
+ route: _optionalChain([data, 'optionalAccess', _35 => _35.route]) || _chunkOZCVXVKUcjs.DEFAULT_ROUTE,
645
+ runtime: hostStateRef.current.prevIsRemoteComponent ? _chunkOZCVXVKUcjs.RUNTIME_SCRIPT : _optionalChain([data, 'optionalAccess', _36 => _36.runtime]) || _chunkOZCVXVKUcjs.RUNTIME_WEBPACK
571
646
  }) });
572
647
  const resetStyle = reset ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "style", { "data-remote-components-reset": "react", children: `:host { all: initial; }` }) : null;
573
648
  const linksToRender = _optionalChain([data, 'optionalAccess', _37 => _37.links, 'optionalAccess', _38 => _38.map, 'call', _39 => _39((link) => /* @__PURE__ */ _react.createElement.call(void 0,
@@ -616,14 +691,17 @@ function ConsumeRemoteComponent({
616
691
  if (shadowRemoteComponentHtml) {
617
692
  shadowRemoteComponentHtml.remove();
618
693
  }
694
+ const hideForStyles = !initialSsrContentRef.current && !stylesReady;
619
695
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
620
696
  metadataJson,
697
+ hideForStyles ? children : null,
621
698
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
622
699
  "div",
623
700
  {
624
701
  "data-remote-component-id": `shadowroot_${keySuffix}`,
625
702
  id: `shadowroot_${_nullishCoalesce(_optionalChain([data, 'optionalAccess', _44 => _44.name]), () => ( name))}`,
626
703
  ref: shadowRootContainerRef,
704
+ style: hideForStyles ? { display: "none" } : void 0,
627
705
  children: [
628
706
  typeof document === "undefined" ? (
629
707
  // eslint-disable-next-line react/no-unknown-property
@@ -679,4 +757,4 @@ function ConsumeRemoteComponent({
679
757
 
680
758
 
681
759
  exports.useRemoteNavigate = useRemoteNavigate; exports.ConsumeRemoteComponent = ConsumeRemoteComponent;
682
- //# sourceMappingURL=chunk-YSJ4FKGI.cjs.map
760
+ //# sourceMappingURL=chunk-W7RJUCZQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/host/react/index.tsx","../src/runtime/html/set-attributes-from-props.ts","../src/host/react/hooks/use-resolve-client-url.ts","../src/host/react/hooks/use-shadow-root.ts","../src/host/react/utils/extract-remote-html.ts","../src/host/react/hooks/use-remote-navigate.ts"],"names":["useEffect","useLayoutEffect","useMemo","useRef","useState","useRemoteComponentsContext"],"mappings":"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","sourcesContent":["import {\n startTransition,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal, preload } from 'react-dom';\nimport { useRemoteComponentsContext } from '#internal/host/react/context';\nimport { fetchWithHooks } from '#internal/host/server/fetch-with-hooks';\nimport { getClientOrServerUrl } from '#internal/host/server/get-client-or-server-url';\nimport type { ConsumeRemoteComponentConfig } from '#internal/host/shared/config';\nimport { makeReactEmitter } from '#internal/host/shared/lifecycle';\nimport { loadPrepared, preparePipeline } from '#internal/host/shared/pipeline';\nimport type { ConsumeServerData } from '#internal/host/shared/server-handoff';\nimport { createHostState } from '#internal/host/shared/state';\nimport { resolveNameFromSrc } from '#internal/host/utils/resolve-name-from-src';\nimport {\n DEFAULT_COMPONENT_NAME,\n DEFAULT_ROUTE,\n RUNTIME_SCRIPT,\n RUNTIME_WEBPACK,\n} from '#internal/runtime/constants';\nimport { setAttributesFromProps } from '#internal/runtime/html/set-attributes-from-props';\nimport { loadStaticRemoteComponent } from '#internal/runtime/loaders/static-loader';\nimport { getNamespace } from '#internal/runtime/namespace';\nimport { attrToProp, escapeString } from '#internal/utils';\nimport { isAbortError } from '#internal/utils/abort';\nimport {\n errorFromFailedFetch,\n RemoteComponentsError,\n} from '#internal/utils/error';\nimport type { MountOrUnmountFunction } from '#remote-components/runtime/types';\nimport { useResolveClientUrl } from './hooks/use-resolve-client-url';\nimport { useShadowRoot } from './hooks/use-shadow-root';\nimport {\n DUMMY_FALLBACK,\n getRemoteComponentHtml,\n} from './utils/extract-remote-html';\n\n/**\n * Props for the React remote component host.\n *\n * Extends {@link ConsumeRemoteComponentConfig} with `children` for loading\n * fallback content.\n *\n * To react to navigations originating from embedded remote components, set up\n * a single top-level subscription with `onRemoteNavigate` from\n * `remote-components/host/navigation` and route the event to your host's\n * router.\n */\nexport interface ConsumeRemoteComponentProps\n extends ConsumeRemoteComponentConfig {\n /** Loading fallback content displayed while the remote component is being fetched. */\n children?: React.ReactNode;\n}\n\n/**\n * ConsumeRemoteComponent is a React component that fetches and renders a remote component.\n * It supports SSR and can isolate the remote component in a shadow DOM.\n *\n * @param props - The properties for the remote component.\n * @returns A React component that renders the remote component.\n *\n * @example\n *\n * Use the `<ConsumeRemoteComponent>` in your React application to consume a remote component from a remote application:\n *\n * ```tsx\n * import { ConsumeRemoteComponent } from 'remote-components/host/react';\n *\n * export default function App() {\n * return (\n * <>\n * <h1>Welcome to My App</h1>\n * <p>This page consumes a remote component from another application.</p>\n * <ConsumeRemoteComponent src=\"/nextjs-app-remote/components/header\" />\n * </>\n * );\n * }\n * ```\n *\n * To share modules, you can provide a shared module map with references to the shared modules:\n *\n * ```tsx\n * <ConsumeRemoteComponent\n * src=\"/nextjs-app-remote/components/header\"\n * shared={{\n * '@/components/provider': () => import('@/components/host-provider')\n * }}\n * />\n * ```\n */\nexport function ConsumeRemoteComponent({\n src,\n isolate,\n mode = 'open',\n reset,\n credentials: credentialsProp,\n name: nameProp = DEFAULT_COMPONENT_NAME,\n shared: sharedProp,\n children,\n onBeforeLoad,\n onLoad,\n onError,\n onChange,\n onRequest,\n onResponse,\n resolveClientUrl: resolveClientUrlProp,\n}: ConsumeRemoteComponentProps) {\n const instanceId = useId();\n\n const { credentials: contextCredentials, shared: contextShared } =\n useRemoteComponentsContext();\n const credentials = credentialsProp ?? contextCredentials ?? 'same-origin';\n const shared = sharedProp ?? contextShared ?? {};\n const emitter = useMemo(\n () => makeReactEmitter({ onBeforeLoad, onLoad, onError, onChange }),\n [onBeforeLoad, onLoad, onError, onChange],\n );\n\n const name = useMemo(\n () => resolveNameFromSrc(src, nameProp),\n [src, nameProp],\n );\n\n const [data, setData] = useState<Omit<ConsumeServerData, 'children'> | null>(\n null,\n );\n\n const url = useMemo(() => getClientOrServerUrl(src, DUMMY_FALLBACK), [src]);\n\n const resolveClientUrl = useResolveClientUrl(resolveClientUrlProp, url.href);\n\n // for relative src paths, use just the pathname as the unique id.\n // for static urls, use the full url as the unique id as the path may not be unique.\n // this id needs to be the same for server and client side rendering.\n // note that if this needs to be more unique, can pass through the bundle as an id prop and ammend it to this id.\n const id =\n url.origin ===\n (typeof location !== 'undefined' ? location.origin : DUMMY_FALLBACK)\n ? url.pathname\n : url.href;\n\n //instanceId prevents multiple components with the same src from sharing a shadow root\n const keySuffix = `${escapeString(id)}_${escapeString(\n data?.name ?? name,\n )}_${escapeString(instanceId)}`;\n\n const [remoteComponent, setRemoteComponent] = useState<\n React.ReactNode | Error\n >(null);\n\n const { shadowRoot, shadowRootContainerRef } = useShadowRoot({\n isolate,\n mode,\n keySuffix,\n });\n\n const htmlRef = useRef<string | null>(\n typeof document !== 'undefined'\n ? (document.querySelector(\n `[data-remote-component-id=\"shadowroot_${keySuffix}\"]`,\n )?.shadowRoot?.innerHTML ??\n document.getElementById(`__REMOTE_COMPONENT${name}`)?.innerHTML ??\n document.querySelector(`div[data-bundle][data-route][id^=\"${name}\"]`)\n ?.innerHTML ??\n document.querySelector('div[data-bundle][data-route]')?.innerHTML)\n : null,\n );\n // True when the shadow root already had SSR/declarative-shadow-DOM content at\n // mount — its styles are already present, so the FOUC-hiding below stays off.\n const initialSsrContentRef = useRef(htmlRef.current != null);\n\n // False until the remote's forwarded stylesheets load. A client-only shadow\n // root has no SSR style baseline, so the component would paint unstyled (FOUC)\n // before its `<link>`s load; we hide the host and show the `children`\n // placeholder until then. Starts \"not ready\" for client isolated loads so the\n // placeholder covers the whole fetch + style load, from first paint.\n const [stylesReady, setStylesReady] = useState(\n () =>\n !(\n typeof document !== 'undefined' &&\n isolate !== false &&\n Boolean(src) &&\n !initialSsrContentRef.current\n ),\n );\n\n const endTemplateRef = useRef<HTMLTemplateElement | null>(null);\n // collect initial content that needs to be removed after remote component renders\n const childrenRef = useRef(\n typeof document !== 'undefined'\n ? (() => {\n let el = document.querySelector(`template[id=\"${name}_start\"]`);\n const elements = [];\n while (el && el.id !== `${name}_end`) {\n if (\n el.id !== `${name}_start` &&\n !el.getAttribute('data-remote-component')\n ) {\n elements.push(el);\n }\n el = el.nextElementSibling as HTMLTemplateElement | null;\n }\n return elements;\n })()\n : [],\n );\n const hostStateRef = useRef(createHostState());\n const componentHydrationHtml = useRef<string | null>(null);\n const prevRemoteComponentContainerRef = useRef<HTMLDivElement | null>(null);\n const unmountRef = useRef<Set<MountOrUnmountFunction> | null>(null);\n\n // Clean up the shadow root cache on unmount to prevent memory leaks\n useLayoutEffect(() => {\n return () => {\n delete getNamespace().shadowRoots[keySuffix];\n };\n }, [keySuffix]);\n\n useLayoutEffect(() => {\n // Clear initial content after remote component renders\n if (childrenRef.current.length > 0 && remoteComponent) {\n childrenRef.current.forEach((el) => {\n el.remove();\n });\n childrenRef.current = [];\n }\n }, [remoteComponent]);\n\n useLayoutEffect(() => {\n if (shadowRoot && remoteComponent) {\n const resetStyles = shadowRoot.querySelectorAll(\n 'style[data-remote-components-reset]',\n );\n // ensure we only have one reset style in the shadow root\n if (resetStyles.length > 1) {\n resetStyles.forEach((style, index) => {\n if (\n index > 0 &&\n style.getAttribute('data-remote-components-reset') !== 'react'\n ) {\n style.remove();\n }\n });\n }\n\n // clear the html ref after hydration\n htmlRef.current = null;\n\n // clear all nodes except links and styles until the start marker\n // the marker gets only rendered on hydration\n let el: ChildNode | null = shadowRoot.childNodes[0] ?? null;\n while (el && (!('id' in el) || el.id !== `${name}_start`)) {\n const nextEl = el.nextSibling;\n if (el.nodeName !== 'LINK' && el.nodeName !== 'STYLE') {\n el.parentNode?.removeChild(el);\n }\n el = nextEl;\n }\n }\n }, [shadowRoot, remoteComponent, name]);\n\n // Reveal the hidden host once the remote's stylesheets are loaded. This reads\n // each `<link>`'s actual state rather than relying solely on `onLoad`, because\n // a `load` event does NOT fire for a stylesheet the browser already has cached\n // (e.g. on back-navigation, which reuses the same `<link>`) — so an onLoad-only\n // gate would stay hidden forever. An already-loaded link has a non-null\n // `.sheet`; for the rest we wait for `load`/`error` (error too, so a failed\n // sheet can't pin the host hidden). Runs whenever a load produces new `data`.\n useLayoutEffect(() => {\n const currentSrc = src ? (typeof src === 'string' ? src : src.href) : null;\n if (\n stylesReady ||\n initialSsrContentRef.current ||\n !shadowRoot ||\n !data ||\n data.src !== currentSrc\n ) {\n return;\n }\n const expectedStylesheets = (data.links ?? []).filter(\n (link) => link.rel === 'stylesheet',\n );\n if (expectedStylesheets.length === 0) {\n setStylesReady(true);\n return;\n }\n const expectedHrefs = new Set(\n expectedStylesheets.map((link) => new URL(link.href as string, url).href),\n );\n const links = Array.from(\n shadowRoot.querySelectorAll<HTMLLinkElement>('link[rel=\"stylesheet\"]'),\n ).filter((link) => expectedHrefs.has(link.href));\n // The expected links may not have been portaled into the shadow root yet.\n if (links.length < expectedHrefs.size) {\n return;\n }\n // Defensive: if the expected set collapsed to nothing, reveal rather than\n // risk pinning the host hidden.\n if (links.length === 0) {\n setStylesReady(true);\n return;\n }\n let pending = links.length;\n let settled = false;\n const onSettled = () => {\n pending -= 1;\n if (!settled && pending <= 0) {\n settled = true;\n setStylesReady(true);\n }\n };\n const cleanups = links.map((link) => {\n if (link.sheet) {\n onSettled();\n return () => {};\n }\n link.addEventListener('load', onSettled, { once: true });\n link.addEventListener('error', onSettled, { once: true });\n return () => {\n link.removeEventListener('load', onSettled);\n link.removeEventListener('error', onSettled);\n };\n });\n return () => {\n for (const cleanup of cleanups) {\n cleanup();\n }\n };\n }, [shadowRoot, data, stylesReady, src, url]);\n\n useEffect(() => {\n if (src && src !== hostStateRef.current.prevSrc) {\n const previousSrc = hostStateRef.current.prevSrc;\n const previousName = hostStateRef.current.prevName;\n hostStateRef.current.prevSrc = src;\n\n if (previousSrc !== null) {\n htmlRef.current = null;\n }\n\n // Abort any in-progress load so the latest src always wins.\n hostStateRef.current.abortController?.abort();\n hostStateRef.current.abortController = new AbortController();\n const { signal } = hostStateRef.current.abortController;\n\n emitter.beforeLoad(src);\n hostStateRef.current.stage = 'loading';\n\n // Re-show the placeholder for the whole of this load on client isolated renders.\n if (isolate !== false && !initialSsrContentRef.current) {\n setStylesReady(false);\n }\n\n startTransition(async () => {\n try {\n let html = getRemoteComponentHtml(\n htmlRef.current ??\n (endTemplateRef.current?.previousElementSibling?.tagName === 'div'\n ? endTemplateRef.current.previousElementSibling.innerHTML\n : ''),\n );\n\n if (!html && src) {\n // fetch the remote component\n const fetchInit = {\n credentials,\n } as RequestInit;\n\n const resolvedUrl = new URL(\n resolveClientUrl?.(url.href) ?? url.href,\n location.href,\n );\n const res = await fetchWithHooks(resolvedUrl, fetchInit, {\n onRequest,\n onResponse,\n abortController: hostStateRef.current.abortController,\n });\n\n if (!res || !res.ok) {\n throw await errorFromFailedFetch(url.href, resolvedUrl, res);\n }\n\n // get the full HTML content as a string\n const remoteHtml = await res.text();\n if (signal.aborted) return;\n htmlRef.current = remoteHtml;\n html = getRemoteComponentHtml(remoteHtml);\n }\n\n if (signal.aborted) return;\n\n const userShared = await shared;\n if (signal.aborted) return;\n\n const prepared = preparePipeline({\n html,\n name,\n url,\n shared: userShared,\n resolveClientUrl,\n });\n const { doc, parsed } = prepared;\n const {\n component,\n name: remoteName,\n isRemoteComponent,\n metadata,\n rsc,\n remoteShared,\n links: linkElements,\n } = parsed;\n\n if (hostStateRef.current.prevIsRemoteComponent) {\n if (shadowRoot) {\n shadowRoot.innerHTML = '';\n }\n const prevUrl = hostStateRef.current.prevUrl;\n if (prevUrl && getNamespace().unmountFns[prevUrl.href]) {\n const unmountPromises = Promise.all(\n Array.from(unmountRef.current ?? []).map(async (unmount) =>\n unmount(\n shadowRoot ?? prevRemoteComponentContainerRef.current,\n ),\n ),\n );\n unmountRef.current = null;\n await unmountPromises;\n }\n }\n hostStateRef.current.prevIsRemoteComponent = isRemoteComponent;\n hostStateRef.current.prevUrl = url;\n hostStateRef.current.prevName = remoteName;\n\n const links = linkElements.map((link) => ({\n href: new URL(link.getAttribute('href') ?? link.href, url).href,\n ...link\n .getAttributeNames()\n .reduce<Record<string, string>>((acc, key) => {\n if (key !== 'href') {\n acc[attrToProp[key] ?? key] = link.getAttribute(key) ?? '';\n }\n return acc;\n }, {}),\n }));\n\n const stylesheetLinks = Array.from(linkElements).filter(\n (link) => link.getAttribute('rel') === 'stylesheet',\n );\n\n // Preload the stylesheets now, before the remote's scripts are fetched\n // and evaluated below. The CSS download then overlaps that (much\n // larger) work instead of starting only when the shadow `<link>`s\n // render — so the reveal isn't waiting on CSS queued behind the JS.\n // The browser matches each preload to the later shadow `<link>` by\n // URL, so there's no double fetch. Matches the Next App Router host.\n if (typeof preload === 'function') {\n for (const link of stylesheetLinks) {\n preload(\n new URL(link.getAttribute('href') ?? link.href, url).href,\n {\n as: 'style',\n fetchPriority: 'high',\n },\n );\n }\n }\n\n // handle inline scripts in the remote component\n const inlineScripts = (\n isRemoteComponent ? component : doc\n ).querySelectorAll(\n \"script:not([src]):not([data-src]):not([id*='_rsc']):not([id='__NEXT_DATA__']):not([id='__REMOTE_NEXT_DATA__'])\",\n );\n\n if (!isRemoteComponent) {\n // Next.js Script support\n const self = globalThis as typeof globalThis & {\n __next_s: [string, Record<string, string>][];\n };\n const prevNextScripts = self.__next_s;\n const nextScripts = [] as [string, Record<string, string>][];\n // eslint-disable-next-line camelcase\n self.__next_s = nextScripts;\n\n // TODO: needs to be cancellable with a singular listener for the abort signal https://linear.app/vercel/issue/MFES-1253/handle-abortcontroller-clean-up-scenarios\n await Promise.all(\n Array.from(inlineScripts)\n .filter(\n (script) =>\n !(\n script.id.endsWith('_shared') &&\n script.getAttribute('type') === 'application/json' &&\n typeof script.getAttribute(\n 'data-remote-components-shared',\n ) === 'string'\n ),\n )\n .map((script) => {\n return new Promise((resolve) => {\n // only handle inline scripts with content, but not Next.js RSC scripts\n if (\n script.textContent &&\n !script.textContent.includes('self.__next_f=') &&\n !script.textContent.includes('self.__next_f.push')\n ) {\n // if script is inline javascript, then execute using blob\n if (\n !script.getAttribute('type') ||\n script.getAttribute('type') === 'text/javascript' ||\n script.getAttribute('type') === 'application/javascript'\n ) {\n const newScript = document.createElement('script');\n\n // scripts loaded from external sources needs this workaround\n const blob = new Blob([script.textContent], {\n type: 'application/javascript',\n });\n const blobUrl = URL.createObjectURL(blob);\n\n newScript.onload = () => {\n resolve(undefined);\n // script executed and safe to remove\n URL.revokeObjectURL(blobUrl);\n newScript.remove();\n };\n // on error we still want to resolve to not block the remote component loading\n newScript.onerror = () => {\n URL.revokeObjectURL(blobUrl);\n newScript.remove();\n resolve(undefined);\n };\n\n newScript.src = blobUrl;\n // TODO: needs to be cancellable https://linear.app/vercel/issue/MFES-1253/handle-abortcontroller-clean-up-scenarios\n document.body.appendChild(newScript);\n } else {\n resolve(undefined);\n document.body.appendChild(script);\n }\n } else {\n resolve(undefined);\n }\n });\n }),\n );\n // process the remote component Next.js Script container\n nextScripts.forEach(([scriptSrc, props]) => {\n const script = document.createElement('script');\n // when we have a script src, apply it (inline scripts have `0` as src)\n if (scriptSrc) {\n script.src = scriptSrc;\n }\n // apply Script props\n if (typeof props.children === 'string') {\n script.textContent = props.children;\n }\n setAttributesFromProps(script, props);\n document.head.appendChild(script);\n });\n // restore previous Next.js Script container\n // eslint-disable-next-line camelcase\n self.__next_s = prevNextScripts;\n }\n\n const rscName = rsc\n ? `__remote_component_rsc_${escapeString(id)}_${escapeString(\n remoteName,\n )}`\n : undefined;\n if (rsc) {\n rsc.textContent =\n rsc.textContent?.replace(\n new RegExp(`self\\\\[\"${remoteName}\"\\\\]`, 'g'),\n `self[\"${rscName}\"]`,\n ) ?? '';\n document.body.appendChild(rsc);\n }\n\n const newData = {\n ...metadata,\n links,\n remoteShared,\n src: typeof src === 'string' ? src : src.href,\n serverUrl: url.href,\n data: rsc\n ? (rsc.textContent || '').split('\\n').filter(Boolean)\n : [],\n };\n\n componentHydrationHtml.current = `${Array.from(\n doc.querySelectorAll('link,style'),\n )\n .map((link) => link.outerHTML)\n .join('')}${\n reset\n ? `<style data-remote-components-reset=\"\">:host { all: initial; }</style>`\n : ''\n }${component.innerHTML}`;\n\n if (isRemoteComponent) {\n // Only call onChange when not on first load (matching HTML implementation)\n if (previousSrc !== undefined) {\n emitter.change({\n previousSrc: previousSrc ?? null,\n nextSrc: src,\n previousName,\n nextName: remoteName,\n });\n }\n setData(newData);\n if (shadowRoot) {\n const shadowRootHtml = reset\n ? `<style data-remote-components-reset=\"\">:host { all: initial; }</style>${component.innerHTML}`\n : component.innerHTML;\n shadowRoot.innerHTML = shadowRootHtml;\n htmlRef.current = null;\n setRemoteComponent(null);\n const { mount, unmount } = await loadStaticRemoteComponent(\n Array.from(shadowRoot.querySelectorAll('script')),\n url,\n resolveClientUrl,\n );\n unmountRef.current = unmount;\n await Promise.all(\n Array.from(mount).map((mountFn) => mountFn(shadowRoot)),\n );\n emitter.load(src);\n } else if (isolate === false) {\n setRemoteComponent(\n // TODO: remove wrapper div by converting HTML to RSC or React tree\n <div\n dangerouslySetInnerHTML={{ __html: component.innerHTML }}\n ref={prevRemoteComponentContainerRef}\n />,\n );\n htmlRef.current = null;\n const { mount, unmount } = await loadStaticRemoteComponent(\n Array.from(component.querySelectorAll('script')),\n url,\n resolveClientUrl,\n );\n unmountRef.current = unmount;\n await Promise.all(\n Array.from(mount).map((mountFn) =>\n mountFn(prevRemoteComponentContainerRef.current),\n ),\n );\n emitter.load(src);\n }\n // Static remotes inject styles directly (no portal links → `onLoad`\n // never fires), so reveal now; the gate only covers the dynamic path.\n setStylesReady(true);\n hostStateRef.current.stage = 'loaded';\n } else {\n const result = await loadPrepared({\n prepared,\n url,\n signal,\n shared: userShared,\n resolveClientUrl,\n container: shadowRoot,\n rscName,\n });\n if (rsc) {\n rsc.remove();\n }\n\n setData(newData);\n // Only call onChange when not on first load (matching HTML implementation)\n if (previousSrc !== undefined) {\n emitter.change({\n previousSrc: previousSrc ?? null,\n nextSrc: src,\n previousName,\n nextName: remoteName,\n });\n }\n if (result.status === 'aborted') {\n return;\n }\n if (result.status === 'error') {\n hostStateRef.current.stage = 'error';\n setRemoteComponent(result.error);\n emitter.error(result.error);\n } else if (result.status === 'loaded') {\n hostStateRef.current.stage = 'loaded';\n setRemoteComponent(result.component);\n emitter.load(src);\n }\n }\n } catch (error) {\n // AbortError is expected when loading is cancelled - exit cleanly\n if (isAbortError(error)) {\n hostStateRef.current.stage = 'idle';\n return;\n }\n hostStateRef.current.stage = 'error';\n setRemoteComponent(error as Error);\n emitter.error(error);\n }\n });\n }\n }, [\n url,\n src,\n isolate,\n credentials,\n name,\n shared,\n shadowRoot,\n reset,\n id,\n emitter.beforeLoad,\n emitter.load,\n emitter.error,\n emitter.change,\n onRequest,\n onResponse,\n resolveClientUrl,\n ]);\n\n if (remoteComponent instanceof Error) {\n throw remoteComponent;\n }\n\n const metadataJson = (\n <script data-remote-component type=\"application/json\">\n {JSON.stringify({\n name: data?.name || name,\n bundle: data?.bundle || 'default',\n route: data?.route || DEFAULT_ROUTE,\n runtime: hostStateRef.current.prevIsRemoteComponent\n ? RUNTIME_SCRIPT\n : data?.runtime || RUNTIME_WEBPACK,\n })}\n </script>\n );\n const resetStyle = reset ? (\n <style data-remote-components-reset=\"react\">{`:host { all: initial; }`}</style>\n ) : null;\n const linksToRender: React.ReactNode[] | null =\n data?.links?.map((link) => (\n <link\n {...link}\n href={new URL(link.href as string, url).href}\n key={JSON.stringify(link)}\n />\n )) || null;\n const componentToRender = (\n <>\n {resetStyle}\n {linksToRender}\n {remoteComponent ?? children}\n </>\n );\n\n if (componentHydrationHtml.current && shadowRoot && !shadowRoot.innerHTML) {\n shadowRoot.innerHTML = componentHydrationHtml.current;\n componentHydrationHtml.current = null;\n\n if (hostStateRef.current.prevIsRemoteComponent) {\n // ensure we load static resources when hydrating a remote component in shadow DOM\n loadStaticRemoteComponent(\n Array.from(shadowRoot.querySelectorAll('script')),\n url,\n resolveClientUrl,\n )\n .then(({ mount }) => {\n return Promise.all(\n Array.from(mount).map((mountFn) => mountFn(shadowRoot)),\n );\n })\n .then(() => {\n if (src) {\n emitter.load(src);\n }\n })\n .catch((e) => {\n const error = new RemoteComponentsError(\n `Error mounting remote component from \"${url.href}\"`,\n {\n cause: e,\n },\n );\n setRemoteComponent(error);\n emitter.error(error);\n });\n }\n }\n\n if (isolate !== false) {\n const shadowRemoteComponentHtml =\n shadowRoot?.querySelector(`#__REMOTE_COMPONENT${name}`) ??\n shadowRoot?.querySelector('div[data-bundle][data-route]');\n if (shadowRemoteComponentHtml) {\n shadowRemoteComponentHtml.remove();\n }\n\n // While stylesheets are pending, `display: none` the shadow host (its\n // `<link>`s still load, so `onLoad` fires) and render the `children`\n // placeholder in the light DOM, where the host page styles it.\n const hideForStyles = !initialSsrContentRef.current && !stylesReady;\n\n return (\n <>\n {metadataJson}\n {hideForStyles ? children : null}\n <div\n data-remote-component-id={`shadowroot_${keySuffix}`}\n id={`shadowroot_${data?.name ?? name}`}\n ref={shadowRootContainerRef}\n style={hideForStyles ? { display: 'none' } : undefined}\n >\n {typeof document === 'undefined' ? (\n // eslint-disable-next-line react/no-unknown-property\n <template shadowrootmode={mode}>\n {typeof document === 'undefined' ? (\n <div\n dangerouslySetInnerHTML={{\n __html: `<img\n alt=\"\" decoding=\"async\" style=\"display:none\"\n src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==\"\n onload=\"(function(el){\n // Capture the shadow root during SSR hydration so the client-side\n // useShadowRoot hook can find it.\n const root = el.getRootNode();\n globalThis.__remote_components_shadowroot_${keySuffix}=root;\n el.parentElement.remove();\n })(this)\"\n />`,\n }}\n />\n ) : null}\n {resetStyle}\n {linksToRender}\n {children}\n </template>\n ) : null}\n {shadowRoot && remoteComponent\n ? createPortal(\n <>\n <template id={`${name}_start`} />\n {resetStyle}\n {linksToRender}\n {remoteComponent}\n <template id={`${name}_end`} ref={endTemplateRef} />\n </>,\n shadowRoot,\n )\n : null}\n </div>\n </>\n );\n }\n htmlRef.current = null;\n\n // render start/end markers for the remote component\n return (\n <>\n <template id={`${name}_start`} />\n {metadataJson}\n {componentToRender}\n <template id={`${name}_end`} ref={endTemplateRef} />\n </>\n );\n}\n\nexport type {\n HookOptions,\n OnRequestHook,\n OnResponseHook,\n} from '#internal/host/shared/fetch-interceptors';\nexport type { RemoteNavigateEvent } from '#internal/host/shared/navigate-event';\nexport { useRemoteNavigate } from './hooks/use-remote-navigate';\n","// extracted from Next.js source at https://github.com/vercel/next.js/blob/canary/packages/next/src/client/set-attributes-from-props.ts\n\nconst DOMAttributeNames: Record<string, string> = {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv',\n noModule: 'noModule',\n};\n\nconst ignoreProps = [\n 'onLoad',\n 'onReady',\n 'dangerouslySetInnerHTML',\n 'children',\n 'onError',\n 'strategy',\n 'stylesheets',\n];\n\nfunction isBooleanScriptAttribute(\n attr: string,\n): attr is 'async' | 'defer' | 'noModule' {\n return ['async', 'defer', 'noModule'].includes(attr);\n}\n\nexport function setAttributesFromProps(el: HTMLElement, props: object) {\n for (const [p, value] of Object.entries(props)) {\n if (!Object.hasOwn(props, p)) continue;\n if (ignoreProps.includes(p)) continue;\n\n // we don't render undefined props to the DOM\n if (value === undefined) {\n continue;\n }\n\n const attr = DOMAttributeNames[p] || p.toLowerCase();\n\n if (el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr)) {\n // Correctly assign boolean script attributes\n // https://github.com/vercel/next.js/pull/20748\n (el as HTMLScriptElement)[attr] = Boolean(value);\n } else {\n el.setAttribute(attr, String(value));\n }\n\n // Remove falsy non-zero boolean attributes so they are correctly interpreted\n // (e.g. if we set them to false, this coerces to the string \"false\", which the browser interprets as true)\n if (\n value === false ||\n (el.tagName === 'SCRIPT' &&\n isBooleanScriptAttribute(attr) &&\n (!value || value === 'false'))\n ) {\n // Call setAttribute before, as we need to set and unset the attribute to override force async:\n // https://html.spec.whatwg.org/multipage/scripting.html#script-force-async\n el.setAttribute(attr, '');\n el.removeAttribute(attr);\n }\n }\n}\n","import { useMemo } from 'react';\nimport { useRemoteComponentsContext } from '#internal/host/react/context';\nimport { bindResolveClientUrl } from '#internal/runtime/url/default-resolve-client-url';\nimport type { ResolveClientUrl } from '#internal/runtime/url/resolve-client-url';\n\nexport function useResolveClientUrl(\n prop: ResolveClientUrl | undefined,\n urlHref: string,\n) {\n const { resolveClientUrl: contextValue } = useRemoteComponentsContext();\n const raw = prop ?? contextValue;\n return useMemo(() => bindResolveClientUrl(raw, urlHref), [raw, urlHref]);\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { getNamespace } from '#internal/runtime/namespace';\n\ninterface UseShadowRootOptions {\n /** Whether CSS isolation is enabled */\n isolate: boolean | undefined;\n /** Shadow DOM mode */\n mode: 'open' | 'closed';\n /** Unique key suffix for identifying this shadow root */\n keySuffix: string;\n}\n\ninterface UseShadowRootResult {\n /** The shadow root element, or null if not isolated */\n shadowRoot: ShadowRoot | null;\n /** Ref to attach to the shadow host container element */\n shadowRootContainerRef: React.RefObject<HTMLDivElement | null>;\n}\n\n/**\n * Manages shadow root lifecycle for CSS isolation.\n *\n * Handles:\n * - Initial shadow root discovery from SSR or declarative shadow DOM\n * - Creating shadow root as fallback for browsers without declarative shadow DOM support\n * - Cleanup when isolation is disabled\n * - Re-attachment when isolation is re-enabled\n */\nexport function useShadowRoot({\n isolate,\n mode,\n keySuffix,\n}: UseShadowRootOptions): UseShadowRootResult {\n const shadowRootContainerRef = useRef<HTMLDivElement | null>(null);\n\n const [shadowRoot, setShadowRoot] = useState<ShadowRoot | null>(() => {\n const shadowRoots = getNamespace().shadowRoots;\n const ssrShadowRoot =\n typeof document !== 'undefined'\n ? (document.querySelector(\n `[data-remote-component-id=\"shadowroot_${keySuffix}\"]`,\n )?.shadowRoot ??\n shadowRoots[keySuffix] ??\n null)\n : null;\n // Clear the reference after reading it\n shadowRoots[keySuffix] = null;\n return ssrShadowRoot;\n });\n\n useLayoutEffect(() => {\n const shadowRoots = getNamespace().shadowRoots;\n if (\n isolate !== false &&\n typeof document !== 'undefined' &&\n (!shadowRoot || !shadowRoot.isConnected)\n ) {\n let shadowRootElement: ShadowRoot | null = null;\n const element = document.querySelector(\n `[data-remote-component-id=\"shadowroot_${keySuffix}\"]`,\n );\n shadowRootElement = shadowRoots[keySuffix] ?? element?.shadowRoot ?? null;\n\n if (!shadowRootElement && element) {\n // Create a shadow root if it doesn't exist.\n // This is a fallback for browsers that don't support declarative shadow DOM.\n try {\n shadowRootElement = element.attachShadow({ mode });\n shadowRoots[keySuffix] = shadowRootElement;\n } catch {\n // Do nothing if attachShadow fails because of existing shadow root\n }\n }\n\n if (shadowRootElement) {\n // Remove all nodes from the shadow root except links (preserves stylesheets)\n shadowRootElement.querySelectorAll('*:not(link)').forEach((node) => {\n node.remove();\n });\n setShadowRoot(shadowRootElement);\n }\n } else if (isolate === false && shadowRoot) {\n shadowRoots[keySuffix] = null;\n setShadowRoot(null);\n }\n }, [isolate, shadowRoot, mode, keySuffix]);\n\n return { shadowRoot, shadowRootContainerRef };\n}\n","import { DEFAULT_COMPONENT_NAME } from '#internal/runtime/constants';\n\n/**\n * Dummy URL used as a fallback base for URL parsing when no real base URL is available.\n * This is used during SSR or when location is not defined.\n */\nexport const DUMMY_FALLBACK = 'http://remote-components-dummy-fallback';\n\n/**\n * Extracts the relevant HTML content from a remote component response.\n *\n * Handles multiple remote component formats:\n * - Next.js Pages Router SSR wrapper (`div[id^=\"__REMOTE_COMPONENT\"]`)\n * - App Router remote components (`div[data-bundle][data-route]`)\n * - Next.js pages (`div#__next`)\n * - Web component format (`remote-component:not([src])`)\n *\n * @param html - Raw HTML string from the remote component response\n * @returns Extracted HTML content with links and scripts, or empty string if not found\n */\nexport function getRemoteComponentHtml(html: string): string {\n if (typeof document === 'undefined') return html;\n\n const parser = new DOMParser();\n const temp = parser.parseFromString(html, 'text/html');\n\n // Used by the Next.js Pages Router remote as a wrapper\n const ssrRemoteComponentContainer = temp.querySelector(\n 'div[id^=\"__REMOTE_COMPONENT\"]',\n );\n if (ssrRemoteComponentContainer) {\n return ssrRemoteComponentContainer.innerHTML;\n }\n\n // Remote component content from various sources\n const remoteComponentContainer = temp.querySelectorAll(\n `div[data-bundle][data-route][data-runtime][id^=\"${DEFAULT_COMPONENT_NAME}\"],div[data-bundle][data-route],div#__next,remote-component:not([src])`,\n );\n if (remoteComponentContainer.length > 0) {\n return `${Array.from(temp.querySelectorAll('link,script'))\n .map((link) => link.outerHTML)\n .join('')}${Array.from(remoteComponentContainer)\n .map((container) => container.outerHTML)\n .join('')}`;\n }\n\n return '';\n}\n","import { useEffect, useRef } from 'react';\nimport { onRemoteNavigate } from '#internal/host/navigation';\nimport type { RemoteNavigateEvent } from '#internal/host/shared/navigate-event';\n\n/**\n * Subscribe to remote component navigations. The callback is captured in a ref\n * so the listener is registered once — no `useCallback` or dep array needed.\n *\n * @example React Router\n * ```tsx\n * const navigate = useNavigate();\n * // Always replace — the polyfill already pushed/replaced the browser history entry.\n * useRemoteNavigate((e) => navigate(e.pathname + e.search, { replace: true }));\n * ```\n */\nexport function useRemoteNavigate(\n callback: (event: RemoteNavigateEvent) => void,\n): void {\n const callbackRef = useRef(callback);\n // Written during render (not in an effect) — the standard useCallbackRef\n // pattern. Safe under concurrent rendering: navigation events are user-driven\n // and can't fire mid-render.\n callbackRef.current = callback;\n useEffect(() => onRemoteNavigate((event) => callbackRef.current(event)), []);\n}\n"]}
@@ -1,15 +1,18 @@
1
+ import {
2
+ remoteFetchHeaders
3
+ } from "./chunk-GAXJTFBV.js";
1
4
  import {
2
5
  loadScripts
3
- } from "./chunk-M6ACTSVB.js";
6
+ } from "./chunk-IE7FXNFJ.js";
4
7
  import {
5
8
  setupRemoteScope
6
- } from "./chunk-24LEEDHP.js";
9
+ } from "./chunk-CBEDRGC7.js";
7
10
  import {
8
11
  applySharedModules,
9
12
  buildWebpackResolve,
10
13
  initializeSharedModules,
11
14
  nextClientPagesLoader
12
- } from "./chunk-BEGVH64U.js";
15
+ } from "./chunk-5BBEO4SE.js";
13
16
  import {
14
17
  loadStaticRemoteComponent
15
18
  } from "./chunk-LEKG4YWI.js";
@@ -24,7 +27,7 @@ import {
24
27
  collapseDoubleSlashes,
25
28
  escapeString,
26
29
  getMissingSharedModulesMessage
27
- } from "./chunk-3PR3SWYZ.js";
30
+ } from "./chunk-3DR4Z24C.js";
28
31
  import {
29
32
  RemoteComponentsError,
30
33
  logDebug,
@@ -32,9 +35,6 @@ import {
32
35
  multipleRemoteComponentsError,
33
36
  warnCrossOriginFetchError
34
37
  } from "./chunk-ULXU6XWH.js";
35
- import {
36
- remoteFetchHeaders
37
- } from "./chunk-GAXJTFBV.js";
38
38
 
39
39
  // src/host/server/fetch-with-hooks.ts
40
40
  async function fetchWithWarning(url, init) {
@@ -709,4 +709,4 @@ export {
709
709
  resolveNameFromSrc,
710
710
  bindResolveClientUrl
711
711
  };
712
- //# sourceMappingURL=chunk-RZGFQTX6.js.map
712
+ //# sourceMappingURL=chunk-XEO3XD67.js.map
@@ -2,21 +2,21 @@
2
2
 
3
3
 
4
4
 
5
- var _chunk6PZEDIAKcjs = require('../chunk-6PZEDIAK.cjs');
6
- require('../chunk-Z2SLBFQL.cjs');
7
- require('../chunk-5KTAEO52.cjs');
8
5
 
6
+ var _chunkN5VQR2PWcjs = require('../chunk-N5VQR2PW.cjs');
9
7
 
10
8
 
11
9
 
12
- var _chunkBBXVML3Dcjs = require('../chunk-BBXVML3D.cjs');
13
- require('../chunk-KE7QPAQ4.cjs');
14
10
 
11
+ var _chunkOZCVXVKUcjs = require('../chunk-OZCVXVKU.cjs');
12
+ require('../chunk-Z2SLBFQL.cjs');
13
+ require('../chunk-5KTAEO52.cjs');
15
14
 
16
15
 
17
16
 
18
17
 
19
- var _chunkN5VQR2PWcjs = require('../chunk-N5VQR2PW.cjs');
18
+ var _chunkBBXVML3Dcjs = require('../chunk-BBXVML3D.cjs');
19
+ require('../chunk-KE7QPAQ4.cjs');
20
20
  require('../chunk-SHFJ5OQA.cjs');
21
21
 
22
22
  // src/config/nextjs/index.ts
@@ -155,7 +155,7 @@ function withRemoteComponentsConfig(nextConfig, options) {
155
155
  ".remote-components/shared/pages-host.tsx"
156
156
  );
157
157
  const appShared = /* @__PURE__ */ new Set([
158
- ..._chunk6PZEDIAKcjs.CORE_REACT_SHARED_KEYS,
158
+ ..._chunkOZCVXVKUcjs.CORE_REACT_SHARED_KEYS,
159
159
  "next/navigation",
160
160
  "next/dist/client/components/navigation",
161
161
  "next/link",
@@ -169,7 +169,7 @@ function withRemoteComponentsConfig(nextConfig, options) {
169
169
  ..._nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.shared]), () => ( []))
170
170
  ]);
171
171
  const pagesShared = /* @__PURE__ */ new Set([
172
- ..._chunk6PZEDIAKcjs.CORE_REACT_SHARED_KEYS,
172
+ ..._chunkOZCVXVKUcjs.CORE_REACT_SHARED_KEYS,
173
173
  "next/router",
174
174
  "next/link",
175
175
  "next/dist/shared/lib/image-loader",
@@ -177,7 +177,7 @@ function withRemoteComponentsConfig(nextConfig, options) {
177
177
  "next/form",
178
178
  ..._nullishCoalesce(_optionalChain([options, 'optionalAccess', _2 => _2.shared]), () => ( []))
179
179
  ]);
180
- const vendorShared = { ..._chunk6PZEDIAKcjs.VENDOR_SHARED };
180
+ const vendorShared = { ..._chunkOZCVXVKUcjs.VENDOR_SHARED };
181
181
  const resolve = _enhancedresolve2.default.create.sync({
182
182
  conditionNames: ["browser", "import", "module", "require"],
183
183
  ..._fs.existsSync.call(void 0, _path.join.call(void 0, process.cwd(), "tsconfig.json")) ? {
@@ -248,7 +248,7 @@ ${sharedManifest ? `export const sharedManifest = ${sharedManifest};
248
248
  ).join(",\n");
249
249
  return generateSharedModule({
250
250
  sharedEntries,
251
- sharedManifest: `{ protocol: '${_chunk6PZEDIAKcjs.SHARED_MODULE_MANIFEST_PROTOCOL}', requirements: [
251
+ sharedManifest: `{ protocol: '${_chunkOZCVXVKUcjs.SHARED_MODULE_MANIFEST_PROTOCOL}', requirements: [
252
252
  ${requirements}
253
253
  ] }`
254
254
  });
@@ -1,8 +1,14 @@
1
+ import {
2
+ ConditionalExecPlugin,
3
+ ModuleIdEmbedPlugin,
4
+ PatchRequirePlugin,
5
+ RemoteWebpackRequirePlugin
6
+ } from "../chunk-CTUJSWCM.js";
1
7
  import {
2
8
  CORE_REACT_SHARED_KEYS,
3
9
  SHARED_MODULE_MANIFEST_PROTOCOL,
4
10
  VENDOR_SHARED
5
- } from "../chunk-3PR3SWYZ.js";
11
+ } from "../chunk-3DR4Z24C.js";
6
12
  import "../chunk-D5GNZB6O.js";
7
13
  import "../chunk-STIJO4AG.js";
8
14
  import {
@@ -11,12 +17,6 @@ import {
11
17
  logWarn
12
18
  } from "../chunk-ULXU6XWH.js";
13
19
  import "../chunk-X6YKUJKH.js";
14
- import {
15
- ConditionalExecPlugin,
16
- ModuleIdEmbedPlugin,
17
- PatchRequirePlugin,
18
- RemoteWebpackRequirePlugin
19
- } from "../chunk-CTUJSWCM.js";
20
20
  import "../chunk-ENYGL5CO.js";
21
21
 
22
22
  // src/config/nextjs/index.ts
@@ -0,0 +1,53 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/config/tailwind/index.ts
2
+ var DEFAULT_SELECTORS = [
3
+ ":host",
4
+ ":host *",
5
+ ":host *::before",
6
+ ":host *::after",
7
+ ":host *::backdrop",
8
+ ":host *::file-selector-button"
9
+ ];
10
+ function remoteComponentsTailwindShadowDom(options = {}) {
11
+ return {
12
+ postcssPlugin: "remote-components-tailwind-shadow-dom",
13
+ Once(root) {
14
+ const declarations = /* @__PURE__ */ new Map();
15
+ root.walkAtRules("property", (atRule) => {
16
+ const propertyName = atRule.params.trim();
17
+ if (!propertyName.startsWith("--tw-")) {
18
+ return;
19
+ }
20
+ atRule.walkDecls("initial-value", (declaration) => {
21
+ declarations.set(propertyName, declaration.value);
22
+ });
23
+ });
24
+ if (declarations.size === 0) {
25
+ return;
26
+ }
27
+ root.append({
28
+ type: "atrule",
29
+ name: "layer",
30
+ params: "properties",
31
+ raws: {},
32
+ nodes: [
33
+ {
34
+ type: "rule",
35
+ raws: {},
36
+ selector: (_nullishCoalesce(options.selectors, () => ( DEFAULT_SELECTORS))).join(",\n"),
37
+ nodes: Array.from(declarations, ([prop, value]) => ({
38
+ type: "decl",
39
+ raws: {},
40
+ prop,
41
+ value
42
+ }))
43
+ }
44
+ ]
45
+ });
46
+ }
47
+ };
48
+ }
49
+ remoteComponentsTailwindShadowDom.postcss = true;
50
+
51
+
52
+ exports.remoteComponentsTailwindShadowDom = remoteComponentsTailwindShadowDom;
53
+ //# sourceMappingURL=tailwind.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/tailwind/index.ts"],"names":[],"mappings":";AAsBA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,kCACd,UAAoD,CAAC,GACrD;AACA,SAAO;AAAA,IACL,eAAe;AAAA,IACf,KAAK,MAAmB;AACtB,YAAM,eAAe,oBAAI,IAAoB;AAE7C,WAAK,YAAY,YAAY,CAAC,WAAW;AACvC,cAAM,eAAe,OAAO,OAAO,KAAK;AAExC,YAAI,CAAC,aAAa,WAAW,OAAO,GAAG;AACrC;AAAA,QACF;AAEA,eAAO,UAAU,iBAAiB,CAAC,gBAAgB;AACjD,uBAAa,IAAI,cAAc,YAAY,KAAK;AAAA,QAClD,CAAC;AAAA,MACH,CAAC;AAED,UAAI,aAAa,SAAS,GAAG;AAC3B;AAAA,MACF;AAEA,WAAK,OAAO;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,MAAM,CAAC;AAAA,QACP,OAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,MAAM,CAAC;AAAA,YACP,WAAW,QAAQ,aAAa,mBAAmB,KAAK,KAAK;AAAA,YAC7D,OAAO,MAAM,KAAK,cAAc,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,cAClD,MAAM;AAAA,cACN,MAAM,CAAC;AAAA,cACP;AAAA,cACA;AAAA,YACF,EAAE;AAAA,UACJ;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAGE,kCAGA,UAAU","sourcesContent":["export interface RemoteComponentsTailwindShadowDomOptions {\n selectors?: string[];\n}\n\ninterface PostCssDeclaration {\n prop: string;\n value: string;\n}\n\ninterface PostCssAtRule {\n params: string;\n walkDecls(\n name: string,\n callback: (declaration: PostCssDeclaration) => void,\n ): void;\n}\n\ninterface PostCssRoot {\n walkAtRules(name: string, callback: (atRule: PostCssAtRule) => void): void;\n append(node: unknown): void;\n}\n\nconst DEFAULT_SELECTORS = [\n ':host',\n ':host *',\n ':host *::before',\n ':host *::after',\n ':host *::backdrop',\n ':host *::file-selector-button',\n];\n\nexport function remoteComponentsTailwindShadowDom(\n options: RemoteComponentsTailwindShadowDomOptions = {},\n) {\n return {\n postcssPlugin: 'remote-components-tailwind-shadow-dom',\n Once(root: PostCssRoot) {\n const declarations = new Map<string, string>();\n\n root.walkAtRules('property', (atRule) => {\n const propertyName = atRule.params.trim();\n\n if (!propertyName.startsWith('--tw-')) {\n return;\n }\n\n atRule.walkDecls('initial-value', (declaration) => {\n declarations.set(propertyName, declaration.value);\n });\n });\n\n if (declarations.size === 0) {\n return;\n }\n\n root.append({\n type: 'atrule',\n name: 'layer',\n params: 'properties',\n raws: {},\n nodes: [\n {\n type: 'rule',\n raws: {},\n selector: (options.selectors ?? DEFAULT_SELECTORS).join(',\\n'),\n nodes: Array.from(declarations, ([prop, value]) => ({\n type: 'decl',\n raws: {},\n prop,\n value,\n })),\n },\n ],\n });\n },\n };\n}\n\n(\n remoteComponentsTailwindShadowDom as typeof remoteComponentsTailwindShadowDom & {\n postcss?: boolean;\n }\n).postcss = true;\n"]}
@@ -0,0 +1,21 @@
1
+ interface RemoteComponentsTailwindShadowDomOptions {
2
+ selectors?: string[];
3
+ }
4
+ interface PostCssDeclaration {
5
+ prop: string;
6
+ value: string;
7
+ }
8
+ interface PostCssAtRule {
9
+ params: string;
10
+ walkDecls(name: string, callback: (declaration: PostCssDeclaration) => void): void;
11
+ }
12
+ interface PostCssRoot {
13
+ walkAtRules(name: string, callback: (atRule: PostCssAtRule) => void): void;
14
+ append(node: unknown): void;
15
+ }
16
+ declare function remoteComponentsTailwindShadowDom(options?: RemoteComponentsTailwindShadowDomOptions): {
17
+ postcssPlugin: string;
18
+ Once(root: PostCssRoot): void;
19
+ };
20
+
21
+ export { RemoteComponentsTailwindShadowDomOptions, remoteComponentsTailwindShadowDom };