@tamagui/portal 2.7.7 → 3.0.0-beta.643.1

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 (90) hide show
  1. package/dist/cjs/GorhomPortal.cjs +132 -164
  2. package/dist/cjs/GorhomPortal.native.cjs +202 -0
  3. package/dist/cjs/GorhomPortal.native.js +166 -211
  4. package/dist/cjs/GorhomPortal.native.js.map +1 -1
  5. package/dist/cjs/GorhomPortalItem.cjs +58 -58
  6. package/dist/cjs/GorhomPortalItem.native.cjs +105 -0
  7. package/dist/cjs/GorhomPortalItem.native.js +85 -106
  8. package/dist/cjs/GorhomPortalItem.native.js.map +1 -1
  9. package/dist/cjs/Portal.cjs +52 -60
  10. package/dist/cjs/Portal.native.cjs +57 -0
  11. package/dist/cjs/Portal.native.js +39 -44
  12. package/dist/cjs/Portal.native.js.map +1 -1
  13. package/dist/cjs/PortalProps.cjs +10 -11
  14. package/dist/cjs/PortalProps.native.cjs +19 -0
  15. package/dist/cjs/PortalProps.native.js +10 -10
  16. package/dist/cjs/PortalProps.native.js.map +1 -1
  17. package/dist/cjs/constants.cjs +24 -25
  18. package/dist/cjs/constants.native.cjs +44 -0
  19. package/dist/cjs/constants.native.js +26 -26
  20. package/dist/cjs/constants.native.js.map +1 -1
  21. package/dist/cjs/helpers.cjs +23 -24
  22. package/dist/cjs/helpers.native.cjs +39 -0
  23. package/dist/cjs/helpers.native.js +23 -23
  24. package/dist/cjs/helpers.native.js.map +1 -1
  25. package/dist/cjs/index.cjs +16 -17
  26. package/dist/cjs/index.native.cjs +36 -0
  27. package/dist/cjs/index.native.js +16 -16
  28. package/dist/cjs/index.native.js.map +1 -1
  29. package/dist/cjs/native-portal.cjs +32 -35
  30. package/dist/cjs/native-portal.native.cjs +51 -0
  31. package/dist/cjs/native-portal.native.js +37 -39
  32. package/dist/cjs/native-portal.native.js.map +1 -1
  33. package/dist/cjs/types.cjs +10 -11
  34. package/dist/cjs/types.native.cjs +19 -0
  35. package/dist/cjs/types.native.js +10 -10
  36. package/dist/cjs/types.native.js.map +1 -1
  37. package/dist/esm/GorhomPortal.mjs +112 -136
  38. package/dist/esm/GorhomPortal.mjs.map +1 -1
  39. package/dist/esm/GorhomPortal.native.js +146 -184
  40. package/dist/esm/GorhomPortal.native.js.map +1 -1
  41. package/dist/esm/GorhomPortalItem.mjs +46 -41
  42. package/dist/esm/GorhomPortalItem.mjs.map +1 -1
  43. package/dist/esm/GorhomPortalItem.native.js +74 -91
  44. package/dist/esm/GorhomPortalItem.native.js.map +1 -1
  45. package/dist/esm/Portal.mjs +38 -36
  46. package/dist/esm/Portal.mjs.map +1 -1
  47. package/dist/esm/Portal.native.js +28 -29
  48. package/dist/esm/Portal.native.js.map +1 -1
  49. package/dist/esm/PortalProps.mjs +0 -2
  50. package/dist/esm/PortalProps.native.js +0 -2
  51. package/dist/esm/constants.mjs +8 -6
  52. package/dist/esm/constants.mjs.map +1 -1
  53. package/dist/esm/constants.native.js +10 -8
  54. package/dist/esm/constants.native.js.map +1 -1
  55. package/dist/esm/helpers.mjs +9 -7
  56. package/dist/esm/helpers.mjs.map +1 -1
  57. package/dist/esm/helpers.native.js +9 -7
  58. package/dist/esm/helpers.native.js.map +1 -1
  59. package/dist/esm/index.js +10 -6
  60. package/dist/esm/index.mjs +10 -6
  61. package/dist/esm/index.native.js +10 -6
  62. package/dist/esm/native-portal.mjs +23 -17
  63. package/dist/esm/native-portal.mjs.map +1 -1
  64. package/dist/esm/native-portal.native.js +28 -22
  65. package/dist/esm/native-portal.native.js.map +1 -1
  66. package/dist/esm/types.mjs +0 -2
  67. package/dist/esm/types.native.js +0 -2
  68. package/package.json +11 -10
  69. package/src/GorhomPortalItem.tsx +11 -2
  70. package/src/Portal.tsx +31 -7
  71. package/src/PortalProps.tsx +7 -0
  72. package/types/GorhomPortal.d.ts +3 -2
  73. package/types/GorhomPortal.d.ts.map +1 -1
  74. package/types/GorhomPortalItem.d.ts.map +1 -1
  75. package/types/GorhomPortalItem.native.d.ts +1 -1
  76. package/types/GorhomPortalItem.native.d.ts.map +1 -1
  77. package/types/Portal.d.ts.map +1 -1
  78. package/types/Portal.native.d.ts +1 -1
  79. package/types/Portal.native.d.ts.map +1 -1
  80. package/types/PortalProps.d.ts +7 -1
  81. package/types/PortalProps.d.ts.map +1 -1
  82. package/types/helpers.d.ts +1 -1
  83. package/types/helpers.d.ts.map +1 -1
  84. package/dist/esm/PortalProps.mjs.map +0 -1
  85. package/dist/esm/PortalProps.native.js.map +0 -1
  86. package/dist/esm/index.js.map +0 -1
  87. package/dist/esm/index.mjs.map +0 -1
  88. package/dist/esm/index.native.js.map +0 -1
  89. package/dist/esm/types.mjs.map +0 -1
  90. package/dist/esm/types.native.js.map +0 -1
@@ -1,22 +1,28 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
2
+ if (typeof require !== "undefined") return require.apply(this, arguments);
3
+ throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
4
+ });
5
+
1
6
  const IS_FABRIC = typeof global !== "undefined" && Boolean(global._IS_FABRIC ?? global.nativeFabricUIManager);
2
7
  const setupNativePortal = () => {
3
- const g = globalThis;
4
- if (g.__tamagui_portal_create) return;
5
- if (IS_FABRIC) {
6
- try {
7
- const mod = require("react-native/Libraries/Renderer/shims/ReactFabric");
8
- g.__tamagui_portal_create = mod?.default?.createPortal ?? mod.createPortal;
9
- } catch (err) {
10
- console.info(`Note: error importing fabric portal, native portals disabled`, err);
11
- }
12
- return;
13
- }
14
- try {
15
- const mod = require("react-native/Libraries/Renderer/shims/ReactNative");
16
- g.__tamagui_portal_create = mod?.default?.createPortal ?? mod.createPortal;
17
- } catch (err) {
18
- console.info(`Note: error importing native portal, native portals disabled`, err);
19
- }
8
+ const g = globalThis;
9
+ if (g.__tamagui_portal_create) return;
10
+ if (IS_FABRIC) {
11
+ try {
12
+ const mod = __require("react-native/Libraries/Renderer/shims/ReactFabric");
13
+ g.__tamagui_portal_create = mod?.default?.createPortal ?? mod.createPortal;
14
+ } catch (err) {
15
+ console.info(`Note: error importing fabric portal, native portals disabled`, err);
16
+ }
17
+ return;
18
+ }
19
+ try {
20
+ const mod = __require("react-native/Libraries/Renderer/shims/ReactNative");
21
+ g.__tamagui_portal_create = mod?.default?.createPortal ?? mod.createPortal;
22
+ } catch (err) {
23
+ console.info(`Note: error importing native portal, native portals disabled`, err);
24
+ }
20
25
  };
26
+
21
27
  export { setupNativePortal };
22
28
  //# sourceMappingURL=native-portal.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["IS_FABRIC","global","Boolean","_IS_FABRIC","nativeFabricUIManager","setupNativePortal","g","globalThis","__tamagui_portal_create","mod","require","default","createPortal","err","console","info"],"sources":["../../src/native-portal.ts"],"sourcesContent":[null],"mappings":"AAIA,MAAMA,SAAA,GACJ,OAAOC,MAAA,KAAW,eAClBC,OAAA,CAASD,MAAA,CAAeE,UAAA,IAAeF,MAAA,CAAeG,qBAAqB;AAStE,MAAMC,iBAAA,GAAoBA,CAAA,KAAY;EAC3C,MAAMC,CAAA,GAAIC,UAAA;EACV,IAAID,CAAA,CAAEE,uBAAA,EAAyB;EAE/B,IAAIR,SAAA,EAAW;IACb,IAAI;MACF,MAAMS,GAAA,GAAMC,OAAA,CAAQ,mDAAmD;MACvEJ,CAAA,CAAEE,uBAAA,GAA0BC,GAAA,EAAKE,OAAA,EAASC,YAAA,IAAgBH,GAAA,CAAIG,YAAA;IAChE,SAASC,GAAA,EAAK;MACZC,OAAA,CAAQC,IAAA,CAAK,gEAAgEF,GAAG;IAClF;IACA;EACF;EAEA,IAAI;IACF,MAAMJ,GAAA,GAAMC,OAAA,CAAQ,mDAAmD;IACvEJ,CAAA,CAAEE,uBAAA,GAA0BC,GAAA,EAAKE,OAAA,EAASC,YAAA,IAAgBH,GAAA,CAAIG,YAAA;EAChE,SAASC,GAAA,EAAK;IACZC,OAAA,CAAQC,IAAA,CAAK,gEAAgEF,GAAG;EAClF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"native-portal.js","names":[],"sources":["esm/native-portal.js"],"sourcesContent":["const IS_FABRIC = typeof global !== \"undefined\" && Boolean(global._IS_FABRIC ?? global.nativeFabricUIManager);\nconst setupNativePortal = () => {\n const g = globalThis;\n if (g.__tamagui_portal_create) return;\n if (IS_FABRIC) {\n try {\n const mod = require(\"react-native/Libraries/Renderer/shims/ReactFabric\");\n g.__tamagui_portal_create = mod?.default?.createPortal ?? mod.createPortal;\n } catch (err) {\n console.info(`Note: error importing fabric portal, native portals disabled`, err);\n }\n return;\n }\n try {\n const mod = require(\"react-native/Libraries/Renderer/shims/ReactNative\");\n g.__tamagui_portal_create = mod?.default?.createPortal ?? mod.createPortal;\n } catch (err) {\n console.info(`Note: error importing native portal, native portals disabled`, err);\n }\n};\nexport {\n setupNativePortal\n};\n//# sourceMappingURL=native-portal.js.map\n"],"mappings":";;;;;;;;AAAA,MAAM,YAAY,OAAO,WAAW,eAAe,QAAQ,OAAO,cAAc,OAAO,qBAAqB;AAC5G,MAAM,0BAA0B;CAC9B,MAAM,IAAI;CACV,IAAI,EAAE,yBAAyB;CAC/B,IAAI,WAAW;EACb,IAAI;GACF,MAAM,gBAAc,mDAAmD;GACvE,EAAE,0BAA0B,KAAK,SAAS,gBAAgB,IAAI;EAChE,SAAS,KAAK;GACZ,QAAQ,KAAK,gEAAgE,GAAG;EAClF;EACA;CACF;CACA,IAAI;EACF,MAAM,gBAAc,mDAAmD;EACvE,EAAE,0BAA0B,KAAK,SAAS,gBAAgB,IAAI;CAChE,SAAS,KAAK;EACZ,QAAQ,KAAK,gEAAgE,GAAG;CAClF;AACF"}
@@ -1,27 +1,33 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
2
+ if (typeof require !== "undefined") return require.apply(this, arguments);
3
+ throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
4
+ });
5
+
1
6
  var _global__IS_FABRIC;
2
7
  var IS_FABRIC = typeof global !== "undefined" && Boolean((_global__IS_FABRIC = global._IS_FABRIC) !== null && _global__IS_FABRIC !== void 0 ? _global__IS_FABRIC : global.nativeFabricUIManager);
3
- var setupNativePortal = function () {
4
- var g = globalThis;
5
- if (g.__tamagui_portal_create) return;
6
- if (IS_FABRIC) {
7
- try {
8
- var _mod_default;
9
- var mod = require("react-native/Libraries/Renderer/shims/ReactFabric");
10
- var _mod_default_createPortal;
11
- g.__tamagui_portal_create = (_mod_default_createPortal = mod === null || mod === void 0 ? void 0 : (_mod_default = mod.default) === null || _mod_default === void 0 ? void 0 : _mod_default.createPortal) !== null && _mod_default_createPortal !== void 0 ? _mod_default_createPortal : mod.createPortal;
12
- } catch (err) {
13
- console.info(`Note: error importing fabric portal, native portals disabled`, err);
14
- }
15
- return;
16
- }
17
- try {
18
- var _mod_default1;
19
- var mod1 = require("react-native/Libraries/Renderer/shims/ReactNative");
20
- var _mod_default_createPortal1;
21
- g.__tamagui_portal_create = (_mod_default_createPortal1 = mod1 === null || mod1 === void 0 ? void 0 : (_mod_default1 = mod1.default) === null || _mod_default1 === void 0 ? void 0 : _mod_default1.createPortal) !== null && _mod_default_createPortal1 !== void 0 ? _mod_default_createPortal1 : mod1.createPortal;
22
- } catch (err) {
23
- console.info(`Note: error importing native portal, native portals disabled`, err);
24
- }
8
+ var setupNativePortal = function() {
9
+ var g = globalThis;
10
+ if (g.__tamagui_portal_create) return;
11
+ if (IS_FABRIC) {
12
+ try {
13
+ var _mod_default;
14
+ var mod = require("react-native/Libraries/Renderer/shims/ReactFabric");
15
+ var _mod_default_createPortal;
16
+ g.__tamagui_portal_create = (_mod_default_createPortal = mod === null || mod === void 0 ? void 0 : (_mod_default = mod.default) === null || _mod_default === void 0 ? void 0 : _mod_default.createPortal) !== null && _mod_default_createPortal !== void 0 ? _mod_default_createPortal : mod.createPortal;
17
+ } catch (err) {
18
+ console.info(`Note: error importing fabric portal, native portals disabled`, err);
19
+ }
20
+ return;
21
+ }
22
+ try {
23
+ var _mod_default1;
24
+ var mod1 = require("react-native/Libraries/Renderer/shims/ReactNative");
25
+ var _mod_default_createPortal1;
26
+ g.__tamagui_portal_create = (_mod_default_createPortal1 = mod1 === null || mod1 === void 0 ? void 0 : (_mod_default1 = mod1.default) === null || _mod_default1 === void 0 ? void 0 : _mod_default1.createPortal) !== null && _mod_default_createPortal1 !== void 0 ? _mod_default_createPortal1 : mod1.createPortal;
27
+ } catch (err) {
28
+ console.info(`Note: error importing native portal, native portals disabled`, err);
29
+ }
25
30
  };
31
+
26
32
  export { setupNativePortal };
27
33
  //# sourceMappingURL=native-portal.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_global__IS_FABRIC","IS_FABRIC","global","Boolean","_IS_FABRIC","nativeFabricUIManager","setupNativePortal","g","globalThis","__tamagui_portal_create","_mod_default","mod","require","_mod_default_createPortal","default","createPortal","err","console","info","_mod_default1","mod1","_mod_default_createPortal1"],"sources":["../../src/native-portal.ts"],"sourcesContent":[null],"mappings":"AAIA,IAAAA,kBACE;AAUK,IAAAC,SAAM,UAAAC,MAAoB,KAAY,eAAAC,OAAA,EAAAH,kBAAA,GAAAE,MAAA,CAAAE,UAAA,cAAAJ,kBAAA,cAAAA,kBAAA,GAAAE,MAAA,CAAAG,qBAAA;AAC3C,IAAAC,iBAAU,YAAAA,CAAA;EACV,IAAIC,CAAA,GAAEC,UAAA;EAEN,IAAID,CAAA,CAAAE,uBAAW;EACb,IAAAR,SAAI;IACF;MACA,IAAES,YAAA;MACJ,IAAAC,GAAS,GAAAC,OAAK;MACZ,IAAAC,yBAAa;MACfN,CAAA,CAAAE,uBAAA,IAAAI,yBAAA,GAAAF,GAAA,aAAAA,GAAA,wBAAAD,YAAA,GAAAC,GAAA,CAAAG,OAAA,cAAAJ,YAAA,uBAAAA,YAAA,CAAAK,YAAA,cAAAF,yBAAA,cAAAA,yBAAA,GAAAF,GAAA,CAAAI,YAAA;IACA,SAAAC,GAAA;MACFC,OAAA,CAAAC,IAAA,iEAAAF,GAAA;IAEA;IACE;EACA;EACF;IACE,IAAAG,aAAa;IACf,IAAAC,IAAA,GAAAR,OAAA;IACF,IAAAS,0BAAA","ignoreList":[]}
1
+ {"version":3,"file":"native-portal.native.js","names":[],"sources":["esm/native-portal.native.js"],"sourcesContent":["var _global__IS_FABRIC;\nvar IS_FABRIC = typeof global !== \"undefined\" && Boolean((_global__IS_FABRIC = global._IS_FABRIC) !== null && _global__IS_FABRIC !== void 0 ? _global__IS_FABRIC : global.nativeFabricUIManager);\nvar setupNativePortal = function() {\n var g = globalThis;\n if (g.__tamagui_portal_create) return;\n if (IS_FABRIC) {\n try {\n var _mod_default;\n var mod = require(\"react-native/Libraries/Renderer/shims/ReactFabric\");\n var _mod_default_createPortal;\n g.__tamagui_portal_create = (_mod_default_createPortal = mod === null || mod === void 0 ? void 0 : (_mod_default = mod.default) === null || _mod_default === void 0 ? void 0 : _mod_default.createPortal) !== null && _mod_default_createPortal !== void 0 ? _mod_default_createPortal : mod.createPortal;\n } catch (err) {\n console.info(`Note: error importing fabric portal, native portals disabled`, err);\n }\n return;\n }\n try {\n var _mod_default1;\n var mod1 = require(\"react-native/Libraries/Renderer/shims/ReactNative\");\n var _mod_default_createPortal1;\n g.__tamagui_portal_create = (_mod_default_createPortal1 = mod1 === null || mod1 === void 0 ? void 0 : (_mod_default1 = mod1.default) === null || _mod_default1 === void 0 ? void 0 : _mod_default1.createPortal) !== null && _mod_default_createPortal1 !== void 0 ? _mod_default_createPortal1 : mod1.createPortal;\n } catch (err) {\n console.info(`Note: error importing native portal, native portals disabled`, err);\n }\n};\nexport {\n setupNativePortal\n};\n//# sourceMappingURL=native-portal.js.map\n"],"mappings":";;;;;;;;AAAA,IAAI;AACJ,IAAI,YAAY,OAAO,WAAW,eAAe,SAAS,qBAAqB,OAAO,gBAAgB,QAAQ,uBAAuB,KAAK,IAAI,qBAAqB,OAAO,qBAAqB;AAC/L,IAAI,oBAAoB,WAAW;CACjC,IAAI,IAAI;CACR,IAAI,EAAE,yBAAyB;CAC/B,IAAI,WAAW;EACb,IAAI;GACF,IAAI;GACJ,IAAI,gBAAc,mDAAmD;GACrE,IAAI;GACJ,EAAE,2BAA2B,4BAA4B,QAAQ,QAAQ,QAAQ,KAAK,IAAI,KAAK,KAAK,eAAe,IAAI,aAAa,QAAQ,iBAAiB,KAAK,IAAI,KAAK,IAAI,aAAa,kBAAkB,QAAQ,8BAA8B,KAAK,IAAI,4BAA4B,IAAI;EAC/R,SAAS,KAAK;GACZ,QAAQ,KAAK,gEAAgE,GAAG;EAClF;EACA;CACF;CACA,IAAI;EACF,IAAI;EACJ,IAAI,iBAAe,mDAAmD;EACtE,IAAI;EACJ,EAAE,2BAA2B,6BAA6B,SAAS,QAAQ,SAAS,KAAK,IAAI,KAAK,KAAK,gBAAgB,KAAK,aAAa,QAAQ,kBAAkB,KAAK,IAAI,KAAK,IAAI,cAAc,kBAAkB,QAAQ,+BAA+B,KAAK,IAAI,6BAA6B,KAAK;CACzS,SAAS,KAAK;EACZ,QAAQ,KAAK,gEAAgE,GAAG;CAClF;AACF"}
@@ -1,2 +0,0 @@
1
-
2
- //# sourceMappingURL=types.mjs.map
@@ -1,2 +0,0 @@
1
-
2
- //# sourceMappingURL=types.native.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/portal",
3
- "version": "2.7.7",
3
+ "version": "3.0.0-beta.643.1",
4
4
  "source": "src/index.ts",
5
5
  "files": [
6
6
  "src",
@@ -34,19 +34,20 @@
34
34
  "clean:build": "tamagui-build clean:build"
35
35
  },
36
36
  "dependencies": {
37
- "@tamagui/constants": "2.7.7",
38
- "@tamagui/core": "2.7.7",
39
- "@tamagui/native": "2.7.7",
40
- "@tamagui/start-transition": "2.7.7",
41
- "@tamagui/use-event": "2.7.7",
42
- "@tamagui/web": "2.7.7",
43
- "@tamagui/z-index-stack": "2.7.7"
37
+ "@tamagui/constants": "3.0.0-beta.643.1",
38
+ "@tamagui/core": "3.0.0-beta.643.1",
39
+ "@tamagui/native": "3.0.0-beta.643.1",
40
+ "@tamagui/polyfill-dev": "3.0.0-beta.643.1",
41
+ "@tamagui/start-transition": "3.0.0-beta.643.1",
42
+ "@tamagui/use-event": "3.0.0-beta.643.1",
43
+ "@tamagui/web": "3.0.0-beta.643.1",
44
+ "@tamagui/z-index-stack": "3.0.0-beta.643.1"
44
45
  },
45
46
  "devDependencies": {
46
- "@tamagui/build": "2.7.7",
47
+ "@tamagui/build": "3.0.0-beta.643.1",
47
48
  "react": ">=19",
48
49
  "react-dom": "*",
49
- "react-native": "0.83.2"
50
+ "react-native": "0.86.2"
50
51
  },
51
52
  "peerDependencies": {
52
53
  "react": ">=19",
@@ -1,5 +1,5 @@
1
1
  import { useIsomorphicLayoutEffect } from '@tamagui/constants'
2
- import { TamaguiRoot, useThemeName } from '@tamagui/web'
2
+ import { formatDiagnostic, TamaguiRoot, useThemeName } from '@tamagui/web'
3
3
  import { useState } from 'react'
4
4
  import { createPortal } from 'react-dom'
5
5
  import { allPortalHosts, portalListeners } from './constants'
@@ -10,7 +10,16 @@ export const GorhomPortalItem = (props: PortalItemProps) => {
10
10
 
11
11
  if (process.env.NODE_ENV === 'development') {
12
12
  if (!props.hostName && !props.passThrough) {
13
- console.warn(`No hostName`)
13
+ console.warn(
14
+ formatDiagnostic(
15
+ 'TAMAGUI_PORTAL_HOST',
16
+ 'GorhomPortalItem',
17
+ 'hostName is required when passThrough is false',
18
+ 'Set hostName or enable passThrough',
19
+ 'hostName,passThrough',
20
+ { hostName: props.hostName, passThrough: props.passThrough }
21
+ )
22
+ )
14
23
  }
15
24
  }
16
25
 
package/src/Portal.tsx CHANGED
@@ -1,7 +1,7 @@
1
1
  import '@tamagui/polyfill-dev'
2
2
 
3
3
  import { isServer } from '@tamagui/constants'
4
- import { TamaguiRoot, useDidFinishSSR, useThemeName } from '@tamagui/web'
4
+ import { TamaguiRoot, Theme, useDidFinishSSR, usePortalThemeState } from '@tamagui/web'
5
5
  import { useStackedZIndex, ZIndexHardcodedContext } from '@tamagui/z-index-stack'
6
6
  import * as React from 'react'
7
7
  import { createPortal } from 'react-dom'
@@ -9,9 +9,9 @@ import { getStackedZIndexProps } from './helpers'
9
9
  import type { PortalProps } from './PortalProps'
10
10
 
11
11
  export const Portal = React.memo((propsIn: PortalProps) => {
12
- const { children, passThrough, style, open } = propsIn
12
+ const { children, passThrough, style, open, hidden } = propsIn
13
13
 
14
- const themeName = useThemeName()
14
+ const { name: themeName, layers: themeLayers } = usePortalThemeState()
15
15
  const didHydrate = useDidFinishSSR()
16
16
  const zIndex = useStackedZIndex(getStackedZIndexProps(propsIn))
17
17
 
@@ -32,16 +32,40 @@ export const Portal = React.memo((propsIn: PortalProps) => {
32
32
  inset: 0,
33
33
  contain: 'strict',
34
34
  pointerEvents: open ? 'auto' : 'none',
35
+ // ios 26 safari colors the status-bar strip by hit-testing the top edge
36
+ // of the viewport: a full-viewport fixed host whose children are all
37
+ // invisible (opacity 0) samples as a solid white bar. visibility:hidden
38
+ // boxes are never hit-tested, and unlike display:none they keep layout,
39
+ // so closed-but-mounted content can still be measured. consumers pass
40
+ // hidden while closed AND not animating out (a childless host is
41
+ // already exempt from sampling, so default undefined is fine).
42
+ visibility: hidden ? 'hidden' : undefined,
35
43
  // prevent mobile browser from scrolling/moving this fixed element
36
44
  touchAction: 'none',
37
45
  display: 'flex',
38
46
  ...style,
39
47
  }}
40
48
  >
41
- {/* provide computed z-index to children so nested portals can stack above */}
42
- <ZIndexHardcodedContext.Provider value={zIndex}>
43
- {children}
44
- </ZIndexHardcodedContext.Provider>
49
+ {/* the portal escapes its mount ancestry, so direct theme values have to be
50
+ replayed here or portaled content silently falls back to the theme */}
51
+ {themeLayers.reduceRight(
52
+ (node, layer, index) => (
53
+ <Theme
54
+ key={index}
55
+ forceClassName
56
+ inlineValues={layer.inlineValues}
57
+ inlineClassName={layer.inlineClassName}
58
+ >
59
+ {node}
60
+ </Theme>
61
+ ),
62
+ // provide computed z-index to children so nested portals can stack above
63
+ (
64
+ <ZIndexHardcodedContext.Provider value={zIndex}>
65
+ {children}
66
+ </ZIndexHardcodedContext.Provider>
67
+ ) as React.ReactNode
68
+ )}
45
69
  </TamaguiRoot>,
46
70
  globalThis.document?.body
47
71
  )
@@ -13,4 +13,11 @@ export type PortalProps = {
13
13
  * Optional property just to indicate open and enable pointer-events
14
14
  */
15
15
  open?: boolean
16
+
17
+ /**
18
+ * Web only: sets visibility:hidden on the portal host. Pass while the
19
+ * content is closed and not animating out - iOS 26 Safari otherwise samples
20
+ * the invisible full-viewport host to color the status-bar area white.
21
+ */
22
+ hidden?: boolean
16
23
  }
@@ -52,7 +52,8 @@ export interface PortalProviderProps {
52
52
  rootHostName?: string;
53
53
  children: ReactNode | ReactNode[];
54
54
  }
55
- export declare const PortalProvider: React.MemoExoticComponent<({ rootHostName, shouldAddRootHost, children, }: PortalProviderProps) => import("react/jsx-runtime").JSX.Element>;
55
+ declare const PortalProviderComponent: ({ rootHostName, shouldAddRootHost, children, }: PortalProviderProps) => React.JSX.Element;
56
+ export declare const PortalProvider: React.MemoExoticComponent<typeof PortalProviderComponent>;
56
57
  export interface PortalHostProps {
57
58
  /**
58
59
  * Host's key or name to be used as an identifier.
@@ -67,5 +68,5 @@ export interface PortalHostProps {
67
68
  */
68
69
  render?: (children: React.ReactNode) => React.ReactElement;
69
70
  }
70
- export declare const PortalHost: React.NamedExoticComponent<PortalHostProps>;
71
+ export declare const PortalHost: React.MemoExoticComponent<(props: PortalHostProps) => React.JSX.Element>;
71
72
  //# sourceMappingURL=GorhomPortal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GorhomPortal.d.ts","sourceRoot":"","sources":["../src/GorhomPortal.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAON,MAAM,OAAO,CAAA;AAQd,aAAK,OAAO;IACV,aAAa,IAAA;IACb,eAAe,IAAA;IACf,iBAAiB,IAAA;IACjB,aAAa,IAAA;CACd;AAED,QAAA,MAAM,aAAa,IAAK,CAAA;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;AAEjC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,WAAW,GACnB,qBAAqB,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,CAAA;AAmGxB,eAAO,MAAM,SAAS,GAAI,iBAAiB;;;sBAwBE,MAAM,QAAQ,SAAS;yBAAvB,MAAM,QAAQ,SAAS;yBAS1B,MAAM;CAgB/C,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,QAAQ,EAAE,SAAS,GAAG,SAAS,EAAE,CAAA;CAClC;AAoDD,eAAO,MAAM,cAAc,6EA9CxB,mBAAmB,6CA8CqC,CAAA;AAG3D,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAElC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAA;CAC3D;AAGD,eAAO,MAAM,UAAU,6CAarB,CAAA"}
1
+ {"version":3,"file":"GorhomPortal.d.ts","sourceRoot":"","sources":["../src/GorhomPortal.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAON,MAAM,OAAO,CAAA;AAQd,aAAK,OAAO;IACV,aAAa,IAAA;IACb,eAAe,IAAA;IACf,iBAAiB,IAAA;IACjB,aAAa,IAAA;CACd;AAED,QAAA,MAAM,aAAa,IAAK,CAAA;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;AAEjC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,WAAW,GACnB,qBAAqB,GACrB,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,CAAA;AAmGxB,eAAO,MAAM,SAAS;;;sBAwBuB,MAAM,QAAQ,SAAS;;yBAS1B,MAAM;CAgB/C,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,QAAQ,EAAE,SAAS,GAAG,SAAS,EAAE,CAAA;CAClC;AAED,QAAA,MAAM,uBAAuB,mDAI1B,mBAAmB,sBA4CrB,CAAA;AAED,eAAO,MAAM,cAAc,2DAAgC,CAAA;AAG3D,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAElC;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAA;CAC3D;AAGD,eAAO,MAAM,UAAU,oCAAmC,eAAe,uBAavE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"GorhomPortalItem.d.ts","sourceRoot":"","sources":["../src/GorhomPortalItem.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,gBAAgB,GAAI,OAAO,eAAe,8BAyDtD,CAAA"}
1
+ {"version":3,"file":"GorhomPortalItem.d.ts","sourceRoot":"","sources":["../src/GorhomPortalItem.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,gBAAgB,UAAW,eAAe,8BAkEtD,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import type { PortalItemProps } from './types';
2
- export declare const GorhomPortalItem: (props: PortalItemProps) => string | number | bigint | boolean | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
2
+ export declare const GorhomPortalItem: (props: PortalItemProps) => string | number | bigint | boolean | import("react").JSX.Element | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | Iterable<import("react").ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined;
3
3
  //# sourceMappingURL=GorhomPortalItem.native.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GorhomPortalItem.native.d.ts","sourceRoot":"","sources":["../src/GorhomPortalItem.native.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,gBAAgB,GAAI,OAAO,eAAe,4WAkCtD,CAAA"}
1
+ {"version":3,"file":"GorhomPortalItem.native.d.ts","sourceRoot":"","sources":["../src/GorhomPortalItem.native.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,gBAAgB,UAAW,eAAe,gWAkCtD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.d.ts","sourceRoot":"","sources":["../src/Portal.tsx"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAA;AAK9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,MAAM,sCAAwB,WAAW,qBAqCpD,CAAA"}
1
+ {"version":3,"file":"Portal.d.ts","sourceRoot":"","sources":["../src/Portal.tsx"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAA;AAK9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,MAAM,sCAAwB,WAAW,qBA6DpD,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import type { PortalProps } from './PortalProps';
2
- export declare const Portal: (propsIn: PortalProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const Portal: (propsIn: PortalProps) => import("react").JSX.Element;
3
3
  //# sourceMappingURL=Portal.native.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.native.d.ts","sourceRoot":"","sources":["../src/Portal.native.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,MAAM,GAAI,SAAS,WAAW,4CA8B1C,CAAA"}
1
+ {"version":3,"file":"Portal.native.d.ts","sourceRoot":"","sources":["../src/Portal.native.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,MAAM,YAAa,WAAW,gCA8B1C,CAAA"}
@@ -1,4 +1,4 @@
1
- import { ViewProps } from '@tamagui/web/types';
1
+ import { ViewProps } from '@tamagui/web';
2
2
  import type { StackZIndexProp } from '@tamagui/z-index-stack';
3
3
  import { CSSProperties, ReactNode } from 'react';
4
4
  export type PortalProps = {
@@ -11,5 +11,11 @@ export type PortalProps = {
11
11
  * Optional property just to indicate open and enable pointer-events
12
12
  */
13
13
  open?: boolean;
14
+ /**
15
+ * Web only: sets visibility:hidden on the portal host. Pass while the
16
+ * content is closed and not animating out - iOS 26 Safari otherwise samples
17
+ * the invisible full-viewport host to color the status-bar area white.
18
+ */
19
+ hidden?: boolean;
14
20
  };
15
21
  //# sourceMappingURL=PortalProps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PortalProps.d.ts","sourceRoot":"","sources":["../src/PortalProps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,aAAa,CAAA;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,CAAA"}
1
+ {"version":3,"file":"PortalProps.d.ts","sourceRoot":"","sources":["../src/PortalProps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,KAAK,CAAC,EAAE,aAAa,CAAA;IAErB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA"}
@@ -4,5 +4,5 @@ export declare const getStackedZIndexProps: (propsIn: PortalProps) => {
4
4
  stackZIndex: import("@tamagui/z-index-stack").StackZIndexProp | undefined;
5
5
  zIndex: any;
6
6
  };
7
- export declare const resolveViewZIndex: (zIndex: ViewProps["zIndex"]) => any;
7
+ export declare const resolveViewZIndex: (zIndex: ViewProps['zIndex']) => any;
8
8
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,qBAAqB,GAAI,SAAS,WAAW;;;CAKzD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,CAAC,QAAQ,CAAC,QAM5D,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,qBAAqB,YAAa,WAAW;IAEtD,WAAW;IACX,MAAM;CAET,CAAA;AAED,eAAO,MAAM,iBAAiB,WAAY,SAAS,CAAC,QAAQ,CAAC,QAM5D,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["GorhomPortalItem","resolveViewZIndex"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAA6BA,gBAAA,QAAkB;AAC/C,cAAc;AACd,SAASC,iBAAA,QAAyB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["GorhomPortalItem","resolveViewZIndex"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAA6BA,gBAAA,QAAkB;AAC/C,cAAc;AACd,SAASC,iBAAA,QAAyB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["GorhomPortalItem","resolveViewZIndex"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAA6BA,gBAAA,QAAkB;AAC/C,cAAc;AACd,SAASC,iBAAA,QAAyB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}