@tamagui/portal 1.1.8 → 1.1.10

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.
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  return to;
19
19
  };
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -171,18 +175,10 @@ const PortalProviderComponent = ({
171
175
  };
172
176
  return next;
173
177
  }, [dispatch]);
174
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PortalDispatchContext.Provider, {
175
- value: transitionDispatch,
176
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(PortalStateContext.Provider, {
177
- value: state,
178
- children: [
179
- children,
180
- shouldAddRootHost && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PortalHost, {
181
- name: rootHostName
182
- })
183
- ]
184
- })
185
- });
178
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PortalDispatchContext.Provider, { value: transitionDispatch, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(PortalStateContext.Provider, { value: state, children: [
179
+ children,
180
+ shouldAddRootHost && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PortalHost, { name: rootHostName })
181
+ ] }) });
186
182
  };
187
183
  const PortalProvider = (0, import_react.memo)(PortalProviderComponent);
188
184
  PortalProvider.displayName = "PortalProvider";
@@ -200,21 +196,17 @@ const PortalHostComponent = (props) => {
200
196
  };
201
197
  }, [isServer]);
202
198
  if (forwardProps) {
203
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
204
- children: state.map((item) => {
205
- let next = item.node;
206
- if (forwardProps) {
207
- return import_react.default.Children.map(next, (child) => {
208
- return import_react.default.isValidElement(child) ? import_react.default.cloneElement(child, { key: child.key, ...forwardProps }) : child;
209
- });
210
- }
211
- return next;
212
- })
213
- });
199
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: state.map((item) => {
200
+ let next = item.node;
201
+ if (forwardProps) {
202
+ return import_react.default.Children.map(next, (child) => {
203
+ return import_react.default.isValidElement(child) ? import_react.default.cloneElement(child, { key: child.key, ...forwardProps }) : child;
204
+ });
205
+ }
206
+ return next;
207
+ }) });
214
208
  }
215
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
216
- children: state.map((item) => item.node)
217
- });
209
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: state.map((item) => item.node) });
218
210
  };
219
211
  const PortalHost = (0, import_react.memo)(PortalHostComponent);
220
212
  PortalHost.displayName = "PortalHost";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/GorhomPortal.tsx"],
4
4
  "sourcesContent": ["// from https://github.com/gorhom/react-native-portal\n// MIT License Copyright (c) 2020 Mo Gorhom\n// fixing SSR issue\n\nimport {\n spacedChildren,\n useDidFinishSSR,\n useEvent,\n useIsomorphicLayoutEffect,\n} from '@tamagui/core'\nimport React, {\n ReactNode,\n cloneElement,\n createContext,\n isValidElement,\n memo,\n startTransition,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useReducer,\n useRef,\n} from 'react'\n\ninterface PortalType {\n name: string\n node: ReactNode\n}\n\nenum ACTIONS {\n REGISTER_HOST,\n DEREGISTER_HOST,\n ADD_UPDATE_PORTAL,\n REMOVE_PORTAL,\n}\n\nconst INITIAL_STATE = {}\n\nexport { ACTIONS, INITIAL_STATE }\n\nexport interface AddUpdatePortalAction {\n type: ACTIONS\n hostName: string\n portalName: string\n node: ReactNode\n}\n\nexport interface RemovePortalAction {\n type: ACTIONS\n hostName: string\n portalName: string\n}\n\nexport interface RegisterHostAction {\n type: ACTIONS\n hostName: string\n}\n\nexport interface UnregisterHostAction {\n type: ACTIONS\n hostName: string\n}\n\nexport type ActionTypes =\n | AddUpdatePortalAction\n | RemovePortalAction\n | RegisterHostAction\n | UnregisterHostAction\n\nconst registerHost = (state: Record<string, Array<PortalType>>, hostName: string) => {\n if (!(hostName in state)) {\n state[hostName] = []\n }\n return state\n}\n\nconst deregisterHost = (state: Record<string, Array<PortalType>>, hostName: string) => {\n delete state[hostName]\n return state\n}\n\nconst addUpdatePortal = (\n state: Record<string, Array<PortalType>>,\n hostName: string,\n portalName: string,\n node: any\n) => {\n if (!(hostName in state)) {\n state = registerHost(state, hostName)\n }\n\n /**\n * updated portal, if it was already added.\n */\n const index = state[hostName].findIndex((item) => item.name === portalName)\n if (index !== -1) {\n state[hostName][index].node = node\n } else {\n state[hostName].push({\n name: portalName,\n node,\n })\n }\n return state\n}\n\nconst removePortal = (\n state: Record<string, Array<PortalType>>,\n hostName: string,\n portalName: string\n) => {\n if (!(hostName in state)) {\n // eslint-disable-next-line no-console\n console.log(\n `Failed to remove portal '${portalName}', '${hostName}' was not registered!`\n )\n return state\n }\n\n const index = state[hostName].findIndex((item) => item.name === portalName)\n if (index !== -1) state[hostName].splice(index, 1)\n return state\n}\n\nconst reducer = (state: Record<string, Array<PortalType>>, action: ActionTypes) => {\n const { type } = action\n switch (type) {\n case ACTIONS.REGISTER_HOST:\n return registerHost({ ...state }, action.hostName)\n case ACTIONS.DEREGISTER_HOST:\n return deregisterHost({ ...state }, action.hostName)\n case ACTIONS.ADD_UPDATE_PORTAL:\n return addUpdatePortal(\n { ...state },\n action.hostName,\n (action as AddUpdatePortalAction).portalName,\n (action as AddUpdatePortalAction).node\n )\n case ACTIONS.REMOVE_PORTAL:\n return removePortal(\n { ...state },\n action.hostName,\n (action as RemovePortalAction).portalName\n )\n default:\n return state\n }\n}\n\nconst PortalStateContext = createContext<Record<string, Array<PortalType>> | null>(null)\nconst PortalDispatchContext = createContext<React.Dispatch<ActionTypes> | null>(null)\n\nconst usePortalState = (hostName: string) => {\n const state = useContext(PortalStateContext)\n\n if (state === null) {\n throw new Error(\n \"'PortalStateContext' cannot be null, please add 'PortalProvider' to the root component.\"\n )\n }\n\n return state[hostName] || []\n}\n\nexport const usePortal = (hostName = 'root') => {\n const dispatch = useContext(PortalDispatchContext)\n\n if (dispatch === null) {\n throw new Error(\n \"'PortalDispatchContext' cannot be null, please add 'PortalProvider' to the root component.\"\n )\n }\n\n //#region methods\n const registerHost = useCallback(() => {\n dispatch({\n type: ACTIONS.REGISTER_HOST,\n hostName: hostName,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const deregisterHost = useCallback(() => {\n dispatch({\n type: ACTIONS.DEREGISTER_HOST,\n hostName: hostName,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const addUpdatePortal = useCallback((name: string, node: ReactNode) => {\n dispatch({\n type: ACTIONS.ADD_UPDATE_PORTAL,\n hostName,\n portalName: name,\n node,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const removePortal = useCallback((name: string) => {\n dispatch({\n type: ACTIONS.REMOVE_PORTAL,\n hostName,\n portalName: name,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n //#endregion\n\n return {\n registerHost,\n deregisterHost,\n addPortal: addUpdatePortal,\n updatePortal: addUpdatePortal,\n removePortal,\n }\n}\n\nexport interface PortalProviderProps {\n /**\n * Defines whether to add a default root host or not.\n *\n * @default true\n * @type boolean\n */\n shouldAddRootHost?: boolean\n\n /**\n * Defines the root portal host name.\n *\n * @default \"root\"\n * @type string\n */\n rootHostName?: string\n\n children: ReactNode | ReactNode[]\n}\n\nconst PortalProviderComponent = ({\n rootHostName = 'root',\n shouldAddRootHost = true,\n children,\n}: PortalProviderProps) => {\n const [state, dispatch] = useReducer(reducer, INITIAL_STATE)\n const transitionDispatch = useMemo(() => {\n const next = (value: any) => {\n startTransition(() => {\n dispatch(value)\n })\n }\n return next as typeof dispatch\n }, [dispatch])\n\n return (\n <PortalDispatchContext.Provider value={transitionDispatch}>\n <PortalStateContext.Provider value={state}>\n {children}\n {shouldAddRootHost && <PortalHost name={rootHostName} />}\n </PortalStateContext.Provider>\n </PortalDispatchContext.Provider>\n )\n}\n\nexport const PortalProvider = memo(PortalProviderComponent)\nPortalProvider.displayName = 'PortalProvider'\n\nexport interface PortalHostProps {\n /**\n * Host's key or name to be used as an identifier.\n * @type string\n */\n name: string\n\n forwardProps?: Record<string, any>\n}\n\nconst PortalHostComponent = (props: PortalHostProps) => {\n const { name, forwardProps } = props\n const isServer = !useDidFinishSSR()\n const state = usePortalState(name)\n const { registerHost, deregisterHost } = usePortal(props.name)\n\n //#region effects\n useEffect(() => {\n if (isServer) return\n registerHost()\n return () => {\n deregisterHost()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isServer])\n //#endregion\n\n if (forwardProps) {\n return (\n <>\n {state.map((item) => {\n let next = item.node\n\n if (forwardProps) {\n return React.Children.map(next, (child) => {\n return React.isValidElement(child)\n ? React.cloneElement(child, { key: child.key, ...forwardProps })\n : child\n })\n }\n\n return next\n })}\n </>\n )\n }\n\n //#region render\n return <>{state.map((item) => item.node)}</>\n //#endregion\n}\n\nexport const PortalHost = memo(PortalHostComponent)\nPortalHost.displayName = 'PortalHost'\n\nexport interface PortalItemProps {\n /**\n * Portal's key or name to be used as an identifier.\n * @type string\n * @default generated unique key.\n */\n name?: string\n /**\n * Host's name to teleport the portal content to.\n * @type string\n * @default 'root'\n */\n hostName?: string\n /**\n * Override internal mounting functionality, this is useful\n * if you want to trigger any action before mounting the portal content.\n * @type (mount?: () => void) => void\n * @default undefined\n */\n handleOnMount?: (mount: () => void) => void\n /**\n * Override internal un-mounting functionality, this is useful\n * if you want to trigger any action before un-mounting the portal content.\n * @type (unmount?: () => void) => void\n * @default undefined\n */\n handleOnUnmount?: (unmount: () => void) => void\n /**\n * Override internal updating functionality, this is useful\n * if you want to trigger any action before updating the portal content.\n * @type (update?: () => void) => void\n * @default undefined\n */\n handleOnUpdate?: (update: () => void) => void\n /**\n * Portal's content.\n * @type ReactNode\n * @default undefined\n */\n children?: ReactNode | ReactNode[]\n}\n\nconst PortalComponent = (props: PortalItemProps) => {\n const {\n name: _providedName,\n hostName,\n handleOnMount: _providedHandleOnMount,\n handleOnUnmount: _providedHandleOnUnmount,\n handleOnUpdate: _providedHandleOnUpdate,\n children,\n } = props\n const { addPortal: addUpdatePortal, removePortal } = usePortal(hostName)\n const id = useId()\n const name = _providedName || id\n\n const handleOnMount = useEvent(() => {\n if (_providedHandleOnMount) {\n _providedHandleOnMount(() => addUpdatePortal(name, children))\n } else {\n addUpdatePortal(name, children)\n }\n })\n\n const handleOnUnmount = useEvent(() => {\n if (_providedHandleOnUnmount) {\n _providedHandleOnUnmount(() => removePortal(name))\n } else {\n removePortal(name)\n }\n })\n\n const handleOnUpdate = useEvent(() => {\n if (_providedHandleOnUpdate) {\n _providedHandleOnUpdate(() => addUpdatePortal(name, children))\n } else {\n addUpdatePortal(name, children)\n }\n })\n\n useIsomorphicLayoutEffect(() => {\n handleOnMount()\n return () => {\n handleOnUnmount()\n }\n }, [])\n\n useEffect(() => {\n handleOnUpdate()\n }, [children])\n\n return null\n}\n\nexport const PortalItem = memo(PortalComponent)\nPortalItem.displayName = 'Portal'\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["ACTIONS", "registerHost", "deregisterHost", "addUpdatePortal", "removePortal", "React"]
7
7
  }
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  return to;
19
19
  };
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -34,15 +38,18 @@ var import_stacks = require("@tamagui/stacks");
34
38
  var React = __toESM(require("react"));
35
39
  var import_react_dom = require("react-dom");
36
40
  const Portal = ({ host = ((_a) => (_a = globalThis.document) == null ? void 0 : _a.body)(), ...props }) => {
37
- const contents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stacks.YStack, {
38
- contain: "strict",
39
- fullscreen: true,
40
- position: import_core.isWeb ? "fixed" : "absolute",
41
- maxWidth: import_core.isWeb ? "100vw" : "100%",
42
- maxHeight: import_core.isWeb ? "100vh" : "100%",
43
- pointerEvents: "none",
44
- ...props
45
- });
41
+ const contents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
42
+ import_stacks.YStack,
43
+ {
44
+ contain: "strict",
45
+ fullscreen: true,
46
+ position: import_core.isWeb ? "fixed" : "absolute",
47
+ maxWidth: import_core.isWeb ? "100vw" : "100%",
48
+ maxHeight: import_core.isWeb ? "100vh" : "100%",
49
+ pointerEvents: "none",
50
+ ...props
51
+ }
52
+ );
46
53
  const [hostElement, setHostElement] = React.useState(null);
47
54
  (0, import_core.useIsomorphicLayoutEffect)(() => {
48
55
  setHostElement(host);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/Portal.tsx"],
4
4
  "sourcesContent": ["/* eslint-disable react-hooks/rules-of-hooks */\nimport '@tamagui/polyfill-dev'\n\nimport { isWeb, useIsomorphicLayoutEffect } from '@tamagui/core'\nimport { YStack } from '@tamagui/stacks'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { PortalProps } from './PortalProps'\n\nexport const Portal = ({ host = globalThis.document?.body, ...props }: PortalProps) => {\n const contents = (\n <YStack\n contain=\"strict\"\n fullscreen\n // @ts-expect-error ok on web\n position={isWeb ? 'fixed' : 'absolute'}\n maxWidth={isWeb ? '100vw' : '100%'}\n maxHeight={isWeb ? '100vh' : '100%'}\n pointerEvents=\"none\"\n {...props}\n />\n )\n\n const [hostElement, setHostElement] = React.useState<any>(null)\n\n useIsomorphicLayoutEffect(() => {\n setHostElement(host)\n }, [host])\n\n if (hostElement) {\n return createPortal(contents, hostElement)\n }\n\n // ssr return null\n return null\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYI;AAXJ,0BAAO;AAEP,kBAAiD;AACjD,oBAAuB;AACvB,YAAuB;AACvB,uBAA6B;AAItB,MAAM,SAAS,CAAC,EAAE,QAAO,yBAAW,aAAX,mBAAqB,YAAS,MAAM,MAAmB;AACrF,QAAM,WACJ,4CAAC;AAAA,IACC,SAAQ;AAAA,IACR,YAAU;AAAA,IAEV,UAAU,oBAAQ,UAAU;AAAA,IAC5B,UAAU,oBAAQ,UAAU;AAAA,IAC5B,WAAW,oBAAQ,UAAU;AAAA,IAC7B,eAAc;AAAA,IACb,GAAG;AAAA,GACN;AAGF,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAc,IAAI;AAE9D,6CAA0B,MAAM;AAC9B,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,aAAa;AACf,eAAO,+BAAa,UAAU,WAAW;AAAA,EAC3C;AAGA,SAAO;AACT;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYI;AAXJ,0BAAO;AAEP,kBAAiD;AACjD,oBAAuB;AACvB,YAAuB;AACvB,uBAA6B;AAItB,MAAM,SAAS,CAAC,EAAE,QAAO,yBAAW,aAAX,mBAAqB,SAAM,GAAG,MAAM,MAAmB;AACrF,QAAM,WACJ;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,YAAU;AAAA,MAEV,UAAU,oBAAQ,UAAU;AAAA,MAC5B,UAAU,oBAAQ,UAAU;AAAA,MAC5B,WAAW,oBAAQ,UAAU;AAAA,MAC7B,eAAc;AAAA,MACb,GAAG;AAAA;AAAA,EACN;AAGF,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAc,IAAI;AAE9D,6CAA0B,MAAM;AAC9B,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,aAAa;AACf,eAAO,+BAAa,UAAU,WAAW;AAAA,EAC3C;AAGA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  return to;
19
19
  };
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -35,19 +39,19 @@ var import_ReactNative = require("react-native/Libraries/Renderer/shims/ReactNat
35
39
  var import_GorhomPortal = require("./GorhomPortal");
36
40
  const Portal = (props) => {
37
41
  const rootTag = React.useContext(import_react_native.RootTagContext);
38
- const contents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stacks.YStack, {
39
- pointerEvents: "box-none",
40
- fullscreen: true,
41
- position: "absolute",
42
- maxWidth: "100%",
43
- zIndex: 1e5,
44
- ...props
45
- });
42
+ const contents = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
43
+ import_stacks.YStack,
44
+ {
45
+ pointerEvents: "box-none",
46
+ fullscreen: true,
47
+ position: "absolute",
48
+ maxWidth: "100%",
49
+ zIndex: 1e5,
50
+ ...props
51
+ }
52
+ );
46
53
  if (import_react_native.Platform.OS === "android") {
47
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_GorhomPortal.PortalItem, {
48
- hostName: "root",
49
- children: contents
50
- });
54
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_GorhomPortal.PortalItem, { hostName: "root", children: contents });
51
55
  }
52
56
  if (rootTag) {
53
57
  return (0, import_ReactNative.createPortal)(contents, rootTag);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/Portal.native.tsx"],
4
4
  "sourcesContent": ["import { YStack } from '@tamagui/stacks'\nimport * as React from 'react'\n// @ts-ignore\nimport { Platform, RootTagContext } from 'react-native'\nimport { createPortal } from 'react-native/Libraries/Renderer/shims/ReactNative'\n\nimport { PortalItem } from './GorhomPortal'\nimport { PortalProps } from './PortalProps'\n\nexport const Portal = (props: PortalProps) => {\n const rootTag = React.useContext(RootTagContext)\n\n const contents = (\n <YStack\n pointerEvents=\"box-none\"\n fullscreen\n position=\"absolute\"\n maxWidth=\"100%\"\n zIndex={100000}\n {...props}\n />\n )\n\n if (Platform.OS === 'android') {\n return <PortalItem hostName=\"root\">{contents}</PortalItem>\n }\n\n if (rootTag) {\n return createPortal(contents, rootTag)\n }\n\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n `Missing rootTag, this is a bug - you may need a different React Native version, or to avoid using \"modal\" on native.`\n )\n }\n\n return null\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaI;AAbJ,oBAAuB;AACvB,YAAuB;AAEvB,0BAAyC;AACzC,yBAA6B;AAE7B,0BAA2B;AAGpB,MAAM,SAAS,CAAC,UAAuB;AAC5C,QAAM,UAAU,MAAM,WAAW,kCAAc;AAE/C,QAAM,WACJ,4CAAC;AAAA,IACC,eAAc;AAAA,IACd,YAAU;AAAA,IACV,UAAS;AAAA,IACT,UAAS;AAAA,IACT,QAAQ;AAAA,IACP,GAAG;AAAA,GACN;AAGF,MAAI,6BAAS,OAAO,WAAW;AAC7B,WAAO,4CAAC;AAAA,MAAW,UAAS;AAAA,MAAQ;AAAA,KAAS;AAAA,EAC/C;AAEA,MAAI,SAAS;AACX,eAAO,iCAAa,UAAU,OAAO;AAAA,EACvC;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaI;AAbJ,oBAAuB;AACvB,YAAuB;AAEvB,0BAAyC;AACzC,yBAA6B;AAE7B,0BAA2B;AAGpB,MAAM,SAAS,CAAC,UAAuB;AAC5C,QAAM,UAAU,MAAM,WAAW,kCAAc;AAE/C,QAAM,WACJ;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,YAAU;AAAA,MACV,UAAS;AAAA,MACT,UAAS;AAAA,MACT,QAAQ;AAAA,MACP,GAAG;AAAA;AAAA,EACN;AAGF,MAAI,6BAAS,OAAO,WAAW;AAC7B,WAAO,4CAAC,kCAAW,UAAS,QAAQ,oBAAS;AAAA,EAC/C;AAEA,MAAI,SAAS;AACX,eAAO,iCAAa,UAAU,OAAO;AAAA,EACvC;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -151,18 +151,10 @@ const PortalProviderComponent = ({
151
151
  };
152
152
  return next;
153
153
  }, [dispatch]);
154
- return /* @__PURE__ */ jsx(PortalDispatchContext.Provider, {
155
- value: transitionDispatch,
156
- children: /* @__PURE__ */ jsxs(PortalStateContext.Provider, {
157
- value: state,
158
- children: [
159
- children,
160
- shouldAddRootHost && /* @__PURE__ */ jsx(PortalHost, {
161
- name: rootHostName
162
- })
163
- ]
164
- })
165
- });
154
+ return /* @__PURE__ */ jsx(PortalDispatchContext.Provider, { value: transitionDispatch, children: /* @__PURE__ */ jsxs(PortalStateContext.Provider, { value: state, children: [
155
+ children,
156
+ shouldAddRootHost && /* @__PURE__ */ jsx(PortalHost, { name: rootHostName })
157
+ ] }) });
166
158
  };
167
159
  const PortalProvider = memo(PortalProviderComponent);
168
160
  PortalProvider.displayName = "PortalProvider";
@@ -180,21 +172,17 @@ const PortalHostComponent = (props) => {
180
172
  };
181
173
  }, [isServer]);
182
174
  if (forwardProps) {
183
- return /* @__PURE__ */ jsx(Fragment, {
184
- children: state.map((item) => {
185
- let next = item.node;
186
- if (forwardProps) {
187
- return React.Children.map(next, (child) => {
188
- return React.isValidElement(child) ? React.cloneElement(child, { key: child.key, ...forwardProps }) : child;
189
- });
190
- }
191
- return next;
192
- })
193
- });
175
+ return /* @__PURE__ */ jsx(Fragment, { children: state.map((item) => {
176
+ let next = item.node;
177
+ if (forwardProps) {
178
+ return React.Children.map(next, (child) => {
179
+ return React.isValidElement(child) ? React.cloneElement(child, { key: child.key, ...forwardProps }) : child;
180
+ });
181
+ }
182
+ return next;
183
+ }) });
194
184
  }
195
- return /* @__PURE__ */ jsx(Fragment, {
196
- children: state.map((item) => item.node)
197
- });
185
+ return /* @__PURE__ */ jsx(Fragment, { children: state.map((item) => item.node) });
198
186
  };
199
187
  const PortalHost = memo(PortalHostComponent);
200
188
  PortalHost.displayName = "PortalHost";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/GorhomPortal.tsx"],
4
4
  "sourcesContent": ["// from https://github.com/gorhom/react-native-portal\n// MIT License Copyright (c) 2020 Mo Gorhom\n// fixing SSR issue\n\nimport {\n spacedChildren,\n useDidFinishSSR,\n useEvent,\n useIsomorphicLayoutEffect,\n} from '@tamagui/core'\nimport React, {\n ReactNode,\n cloneElement,\n createContext,\n isValidElement,\n memo,\n startTransition,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useReducer,\n useRef,\n} from 'react'\n\ninterface PortalType {\n name: string\n node: ReactNode\n}\n\nenum ACTIONS {\n REGISTER_HOST,\n DEREGISTER_HOST,\n ADD_UPDATE_PORTAL,\n REMOVE_PORTAL,\n}\n\nconst INITIAL_STATE = {}\n\nexport { ACTIONS, INITIAL_STATE }\n\nexport interface AddUpdatePortalAction {\n type: ACTIONS\n hostName: string\n portalName: string\n node: ReactNode\n}\n\nexport interface RemovePortalAction {\n type: ACTIONS\n hostName: string\n portalName: string\n}\n\nexport interface RegisterHostAction {\n type: ACTIONS\n hostName: string\n}\n\nexport interface UnregisterHostAction {\n type: ACTIONS\n hostName: string\n}\n\nexport type ActionTypes =\n | AddUpdatePortalAction\n | RemovePortalAction\n | RegisterHostAction\n | UnregisterHostAction\n\nconst registerHost = (state: Record<string, Array<PortalType>>, hostName: string) => {\n if (!(hostName in state)) {\n state[hostName] = []\n }\n return state\n}\n\nconst deregisterHost = (state: Record<string, Array<PortalType>>, hostName: string) => {\n delete state[hostName]\n return state\n}\n\nconst addUpdatePortal = (\n state: Record<string, Array<PortalType>>,\n hostName: string,\n portalName: string,\n node: any\n) => {\n if (!(hostName in state)) {\n state = registerHost(state, hostName)\n }\n\n /**\n * updated portal, if it was already added.\n */\n const index = state[hostName].findIndex((item) => item.name === portalName)\n if (index !== -1) {\n state[hostName][index].node = node\n } else {\n state[hostName].push({\n name: portalName,\n node,\n })\n }\n return state\n}\n\nconst removePortal = (\n state: Record<string, Array<PortalType>>,\n hostName: string,\n portalName: string\n) => {\n if (!(hostName in state)) {\n // eslint-disable-next-line no-console\n console.log(\n `Failed to remove portal '${portalName}', '${hostName}' was not registered!`\n )\n return state\n }\n\n const index = state[hostName].findIndex((item) => item.name === portalName)\n if (index !== -1) state[hostName].splice(index, 1)\n return state\n}\n\nconst reducer = (state: Record<string, Array<PortalType>>, action: ActionTypes) => {\n const { type } = action\n switch (type) {\n case ACTIONS.REGISTER_HOST:\n return registerHost({ ...state }, action.hostName)\n case ACTIONS.DEREGISTER_HOST:\n return deregisterHost({ ...state }, action.hostName)\n case ACTIONS.ADD_UPDATE_PORTAL:\n return addUpdatePortal(\n { ...state },\n action.hostName,\n (action as AddUpdatePortalAction).portalName,\n (action as AddUpdatePortalAction).node\n )\n case ACTIONS.REMOVE_PORTAL:\n return removePortal(\n { ...state },\n action.hostName,\n (action as RemovePortalAction).portalName\n )\n default:\n return state\n }\n}\n\nconst PortalStateContext = createContext<Record<string, Array<PortalType>> | null>(null)\nconst PortalDispatchContext = createContext<React.Dispatch<ActionTypes> | null>(null)\n\nconst usePortalState = (hostName: string) => {\n const state = useContext(PortalStateContext)\n\n if (state === null) {\n throw new Error(\n \"'PortalStateContext' cannot be null, please add 'PortalProvider' to the root component.\"\n )\n }\n\n return state[hostName] || []\n}\n\nexport const usePortal = (hostName = 'root') => {\n const dispatch = useContext(PortalDispatchContext)\n\n if (dispatch === null) {\n throw new Error(\n \"'PortalDispatchContext' cannot be null, please add 'PortalProvider' to the root component.\"\n )\n }\n\n //#region methods\n const registerHost = useCallback(() => {\n dispatch({\n type: ACTIONS.REGISTER_HOST,\n hostName: hostName,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const deregisterHost = useCallback(() => {\n dispatch({\n type: ACTIONS.DEREGISTER_HOST,\n hostName: hostName,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const addUpdatePortal = useCallback((name: string, node: ReactNode) => {\n dispatch({\n type: ACTIONS.ADD_UPDATE_PORTAL,\n hostName,\n portalName: name,\n node,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const removePortal = useCallback((name: string) => {\n dispatch({\n type: ACTIONS.REMOVE_PORTAL,\n hostName,\n portalName: name,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n //#endregion\n\n return {\n registerHost,\n deregisterHost,\n addPortal: addUpdatePortal,\n updatePortal: addUpdatePortal,\n removePortal,\n }\n}\n\nexport interface PortalProviderProps {\n /**\n * Defines whether to add a default root host or not.\n *\n * @default true\n * @type boolean\n */\n shouldAddRootHost?: boolean\n\n /**\n * Defines the root portal host name.\n *\n * @default \"root\"\n * @type string\n */\n rootHostName?: string\n\n children: ReactNode | ReactNode[]\n}\n\nconst PortalProviderComponent = ({\n rootHostName = 'root',\n shouldAddRootHost = true,\n children,\n}: PortalProviderProps) => {\n const [state, dispatch] = useReducer(reducer, INITIAL_STATE)\n const transitionDispatch = useMemo(() => {\n const next = (value: any) => {\n startTransition(() => {\n dispatch(value)\n })\n }\n return next as typeof dispatch\n }, [dispatch])\n\n return (\n <PortalDispatchContext.Provider value={transitionDispatch}>\n <PortalStateContext.Provider value={state}>\n {children}\n {shouldAddRootHost && <PortalHost name={rootHostName} />}\n </PortalStateContext.Provider>\n </PortalDispatchContext.Provider>\n )\n}\n\nexport const PortalProvider = memo(PortalProviderComponent)\nPortalProvider.displayName = 'PortalProvider'\n\nexport interface PortalHostProps {\n /**\n * Host's key or name to be used as an identifier.\n * @type string\n */\n name: string\n\n forwardProps?: Record<string, any>\n}\n\nconst PortalHostComponent = (props: PortalHostProps) => {\n const { name, forwardProps } = props\n const isServer = !useDidFinishSSR()\n const state = usePortalState(name)\n const { registerHost, deregisterHost } = usePortal(props.name)\n\n //#region effects\n useEffect(() => {\n if (isServer) return\n registerHost()\n return () => {\n deregisterHost()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isServer])\n //#endregion\n\n if (forwardProps) {\n return (\n <>\n {state.map((item) => {\n let next = item.node\n\n if (forwardProps) {\n return React.Children.map(next, (child) => {\n return React.isValidElement(child)\n ? React.cloneElement(child, { key: child.key, ...forwardProps })\n : child\n })\n }\n\n return next\n })}\n </>\n )\n }\n\n //#region render\n return <>{state.map((item) => item.node)}</>\n //#endregion\n}\n\nexport const PortalHost = memo(PortalHostComponent)\nPortalHost.displayName = 'PortalHost'\n\nexport interface PortalItemProps {\n /**\n * Portal's key or name to be used as an identifier.\n * @type string\n * @default generated unique key.\n */\n name?: string\n /**\n * Host's name to teleport the portal content to.\n * @type string\n * @default 'root'\n */\n hostName?: string\n /**\n * Override internal mounting functionality, this is useful\n * if you want to trigger any action before mounting the portal content.\n * @type (mount?: () => void) => void\n * @default undefined\n */\n handleOnMount?: (mount: () => void) => void\n /**\n * Override internal un-mounting functionality, this is useful\n * if you want to trigger any action before un-mounting the portal content.\n * @type (unmount?: () => void) => void\n * @default undefined\n */\n handleOnUnmount?: (unmount: () => void) => void\n /**\n * Override internal updating functionality, this is useful\n * if you want to trigger any action before updating the portal content.\n * @type (update?: () => void) => void\n * @default undefined\n */\n handleOnUpdate?: (update: () => void) => void\n /**\n * Portal's content.\n * @type ReactNode\n * @default undefined\n */\n children?: ReactNode | ReactNode[]\n}\n\nconst PortalComponent = (props: PortalItemProps) => {\n const {\n name: _providedName,\n hostName,\n handleOnMount: _providedHandleOnMount,\n handleOnUnmount: _providedHandleOnUnmount,\n handleOnUpdate: _providedHandleOnUpdate,\n children,\n } = props\n const { addPortal: addUpdatePortal, removePortal } = usePortal(hostName)\n const id = useId()\n const name = _providedName || id\n\n const handleOnMount = useEvent(() => {\n if (_providedHandleOnMount) {\n _providedHandleOnMount(() => addUpdatePortal(name, children))\n } else {\n addUpdatePortal(name, children)\n }\n })\n\n const handleOnUnmount = useEvent(() => {\n if (_providedHandleOnUnmount) {\n _providedHandleOnUnmount(() => removePortal(name))\n } else {\n removePortal(name)\n }\n })\n\n const handleOnUpdate = useEvent(() => {\n if (_providedHandleOnUpdate) {\n _providedHandleOnUpdate(() => addUpdatePortal(name, children))\n } else {\n addUpdatePortal(name, children)\n }\n })\n\n useIsomorphicLayoutEffect(() => {\n handleOnMount()\n return () => {\n handleOnUnmount()\n }\n }, [])\n\n useEffect(() => {\n handleOnUpdate()\n }, [children])\n\n return null\n}\n\nexport const PortalItem = memo(PortalComponent)\nPortalItem.displayName = 'Portal'\n"],
5
- "mappings": "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",
5
+ "mappings": "AAkQM,SAwCA,UAtCwB,KAFxB;AA9PN;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAO;AAAA,EAGL;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAOP,IAAK,UAAL,kBAAKA,aAAL;AACE,EAAAA,kBAAA;AACA,EAAAA,kBAAA;AACA,EAAAA,kBAAA;AACA,EAAAA,kBAAA;AAJG,SAAAA;AAAA,GAAA;AAOL,MAAM,gBAAgB,CAAC;AAiCvB,MAAM,eAAe,CAAC,OAA0C,aAAqB;AACnF,MAAI,EAAE,YAAY,QAAQ;AACxB,UAAM,QAAQ,IAAI,CAAC;AAAA,EACrB;AACA,SAAO;AACT;AAEA,MAAM,iBAAiB,CAAC,OAA0C,aAAqB;AACrF,SAAO,MAAM,QAAQ;AACrB,SAAO;AACT;AAEA,MAAM,kBAAkB,CACtB,OACA,UACA,YACA,SACG;AACH,MAAI,EAAE,YAAY,QAAQ;AACxB,YAAQ,aAAa,OAAO,QAAQ;AAAA,EACtC;AAKA,QAAM,QAAQ,MAAM,QAAQ,EAAE,UAAU,CAAC,SAAS,KAAK,SAAS,UAAU;AAC1E,MAAI,UAAU,IAAI;AAChB,UAAM,QAAQ,EAAE,KAAK,EAAE,OAAO;AAAA,EAChC,OAAO;AACL,UAAM,QAAQ,EAAE,KAAK;AAAA,MACnB,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,MAAM,eAAe,CACnB,OACA,UACA,eACG;AACH,MAAI,EAAE,YAAY,QAAQ;AAExB,YAAQ;AAAA,MACN,4BAA4B,iBAAiB;AAAA,IAC/C;AACA,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,MAAM,QAAQ,EAAE,UAAU,CAAC,SAAS,KAAK,SAAS,UAAU;AAC1E,MAAI,UAAU;AAAI,UAAM,QAAQ,EAAE,OAAO,OAAO,CAAC;AACjD,SAAO;AACT;AAEA,MAAM,UAAU,CAAC,OAA0C,WAAwB;AACjF,QAAM,EAAE,KAAK,IAAI;AACjB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,aAAa,EAAE,GAAG,MAAM,GAAG,OAAO,QAAQ;AAAA,IACnD,KAAK;AACH,aAAO,eAAe,EAAE,GAAG,MAAM,GAAG,OAAO,QAAQ;AAAA,IACrD,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,MAAM;AAAA,QACX,OAAO;AAAA,QACN,OAAiC;AAAA,QACjC,OAAiC;AAAA,MACpC;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,EAAE,GAAG,MAAM;AAAA,QACX,OAAO;AAAA,QACN,OAA8B;AAAA,MACjC;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;AAEA,MAAM,qBAAqB,cAAwD,IAAI;AACvF,MAAM,wBAAwB,cAAkD,IAAI;AAEpF,MAAM,iBAAiB,CAAC,aAAqB;AAC3C,QAAM,QAAQ,WAAW,kBAAkB;AAE3C,MAAI,UAAU,MAAM;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,QAAQ,KAAK,CAAC;AAC7B;AAEO,MAAM,YAAY,CAAC,WAAW,WAAW;AAC9C,QAAM,WAAW,WAAW,qBAAqB;AAEjD,MAAI,aAAa,MAAM;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAGA,QAAMC,gBAAe,YAAY,MAAM;AACrC,aAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EAEH,GAAG,CAAC,CAAC;AAEL,QAAMC,kBAAiB,YAAY,MAAM;AACvC,aAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EAEH,GAAG,CAAC,CAAC;AAEL,QAAMC,mBAAkB,YAAY,CAAC,MAAc,SAAoB;AACrE,aAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EAEH,GAAG,CAAC,CAAC;AAEL,QAAMC,gBAAe,YAAY,CAAC,SAAiB;AACjD,aAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EAEH,GAAG,CAAC,CAAC;AAGL,SAAO;AAAA,IACL,cAAAH;AAAA,IACA,gBAAAC;AAAA,IACA,WAAWC;AAAA,IACX,cAAcA;AAAA,IACd,cAAAC;AAAA,EACF;AACF;AAsBA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB;AACF,MAA2B;AACzB,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,SAAS,aAAa;AAC3D,QAAM,qBAAqB,QAAQ,MAAM;AACvC,UAAM,OAAO,CAAC,UAAe;AAC3B,sBAAgB,MAAM;AACpB,iBAAS,KAAK;AAAA,MAChB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,oBAAC,sBAAsB,UAAtB,EAA+B,OAAO,oBACrC,+BAAC,mBAAmB,UAAnB,EAA4B,OAAO,OACjC;AAAA;AAAA,IACA,qBAAqB,oBAAC,cAAW,MAAM,cAAc;AAAA,KACxD,GACF;AAEJ;AAEO,MAAM,iBAAiB,KAAK,uBAAuB;AAC1D,eAAe,cAAc;AAY7B,MAAM,sBAAsB,CAAC,UAA2B;AACtD,QAAM,EAAE,MAAM,aAAa,IAAI;AAC/B,QAAM,WAAW,CAAC,gBAAgB;AAClC,QAAM,QAAQ,eAAe,IAAI;AACjC,QAAM,EAAE,cAAAH,eAAc,gBAAAC,gBAAe,IAAI,UAAU,MAAM,IAAI;AAG7D,YAAU,MAAM;AACd,QAAI;AAAU;AACd,IAAAD,cAAa;AACb,WAAO,MAAM;AACX,MAAAC,gBAAe;AAAA,IACjB;AAAA,EAEF,GAAG,CAAC,QAAQ,CAAC;AAGb,MAAI,cAAc;AAChB,WACE,gCACG,gBAAM,IAAI,CAAC,SAAS;AACnB,UAAI,OAAO,KAAK;AAEhB,UAAI,cAAc;AAChB,eAAO,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU;AACzC,iBAAO,MAAM,eAAe,KAAK,IAC7B,MAAM,aAAa,OAAO,EAAE,KAAK,MAAM,KAAK,GAAG,aAAa,CAAC,IAC7D;AAAA,QACN,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,IACT,CAAC,GACH;AAAA,EAEJ;AAGA,SAAO,gCAAG,gBAAM,IAAI,CAAC,SAAS,KAAK,IAAI,GAAE;AAE3C;AAEO,MAAM,aAAa,KAAK,mBAAmB;AAClD,WAAW,cAAc;AA4CzB,MAAM,kBAAkB,CAAC,UAA2B;AAClD,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB;AAAA,EACF,IAAI;AACJ,QAAM,EAAE,WAAWC,kBAAiB,cAAAC,cAAa,IAAI,UAAU,QAAQ;AACvE,QAAM,KAAK,MAAM;AACjB,QAAM,OAAO,iBAAiB;AAE9B,QAAM,gBAAgB,SAAS,MAAM;AACnC,QAAI,wBAAwB;AAC1B,6BAAuB,MAAMD,iBAAgB,MAAM,QAAQ,CAAC;AAAA,IAC9D,OAAO;AACL,MAAAA,iBAAgB,MAAM,QAAQ;AAAA,IAChC;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,SAAS,MAAM;AACrC,QAAI,0BAA0B;AAC5B,+BAAyB,MAAMC,cAAa,IAAI,CAAC;AAAA,IACnD,OAAO;AACL,MAAAA,cAAa,IAAI;AAAA,IACnB;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,SAAS,MAAM;AACpC,QAAI,yBAAyB;AAC3B,8BAAwB,MAAMD,iBAAgB,MAAM,QAAQ,CAAC;AAAA,IAC/D,OAAO;AACL,MAAAA,iBAAgB,MAAM,QAAQ;AAAA,IAChC;AAAA,EACF,CAAC;AAED,4BAA0B,MAAM;AAC9B,kBAAc;AACd,WAAO,MAAM;AACX,sBAAgB;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,mBAAe;AAAA,EACjB,GAAG,CAAC,QAAQ,CAAC;AAEb,SAAO;AACT;AAEO,MAAM,aAAa,KAAK,eAAe;AAC9C,WAAW,cAAc;",
6
6
  "names": ["ACTIONS", "registerHost", "deregisterHost", "addUpdatePortal", "removePortal"]
7
7
  }
@@ -5,15 +5,18 @@ import { YStack } from "@tamagui/stacks";
5
5
  import * as React from "react";
6
6
  import { createPortal } from "react-dom";
7
7
  const Portal = ({ host = ((_a) => (_a = globalThis.document) == null ? void 0 : _a.body)(), ...props }) => {
8
- const contents = /* @__PURE__ */ jsx(YStack, {
9
- contain: "strict",
10
- fullscreen: true,
11
- position: isWeb ? "fixed" : "absolute",
12
- maxWidth: isWeb ? "100vw" : "100%",
13
- maxHeight: isWeb ? "100vh" : "100%",
14
- pointerEvents: "none",
15
- ...props
16
- });
8
+ const contents = /* @__PURE__ */ jsx(
9
+ YStack,
10
+ {
11
+ contain: "strict",
12
+ fullscreen: true,
13
+ position: isWeb ? "fixed" : "absolute",
14
+ maxWidth: isWeb ? "100vw" : "100%",
15
+ maxHeight: isWeb ? "100vh" : "100%",
16
+ pointerEvents: "none",
17
+ ...props
18
+ }
19
+ );
17
20
  const [hostElement, setHostElement] = React.useState(null);
18
21
  useIsomorphicLayoutEffect(() => {
19
22
  setHostElement(host);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/Portal.tsx"],
4
4
  "sourcesContent": ["/* eslint-disable react-hooks/rules-of-hooks */\nimport '@tamagui/polyfill-dev'\n\nimport { isWeb, useIsomorphicLayoutEffect } from '@tamagui/core'\nimport { YStack } from '@tamagui/stacks'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { PortalProps } from './PortalProps'\n\nexport const Portal = ({ host = globalThis.document?.body, ...props }: PortalProps) => {\n const contents = (\n <YStack\n contain=\"strict\"\n fullscreen\n // @ts-expect-error ok on web\n position={isWeb ? 'fixed' : 'absolute'}\n maxWidth={isWeb ? '100vw' : '100%'}\n maxHeight={isWeb ? '100vh' : '100%'}\n pointerEvents=\"none\"\n {...props}\n />\n )\n\n const [hostElement, setHostElement] = React.useState<any>(null)\n\n useIsomorphicLayoutEffect(() => {\n setHostElement(host)\n }, [host])\n\n if (hostElement) {\n return createPortal(contents, hostElement)\n }\n\n // ssr return null\n return null\n}\n"],
5
- "mappings": "AAYI;AAXJ,OAAO;AAEP,SAAS,OAAO,iCAAiC;AACjD,SAAS,cAAc;AACvB,YAAY,WAAW;AACvB,SAAS,oBAAoB;AAItB,MAAM,SAAS,CAAC,EAAE,QAAO,yBAAW,aAAX,mBAAqB,YAAS,MAAM,MAAmB;AACrF,QAAM,WACJ,oBAAC;AAAA,IACC,SAAQ;AAAA,IACR,YAAU;AAAA,IAEV,UAAU,QAAQ,UAAU;AAAA,IAC5B,UAAU,QAAQ,UAAU;AAAA,IAC5B,WAAW,QAAQ,UAAU;AAAA,IAC7B,eAAc;AAAA,IACb,GAAG;AAAA,GACN;AAGF,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAc,IAAI;AAE9D,4BAA0B,MAAM;AAC9B,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,aAAa;AACf,WAAO,aAAa,UAAU,WAAW;AAAA,EAC3C;AAGA,SAAO;AACT;",
5
+ "mappings": "AAYI;AAXJ,OAAO;AAEP,SAAS,OAAO,iCAAiC;AACjD,SAAS,cAAc;AACvB,YAAY,WAAW;AACvB,SAAS,oBAAoB;AAItB,MAAM,SAAS,CAAC,EAAE,QAAO,yBAAW,aAAX,mBAAqB,SAAM,GAAG,MAAM,MAAmB;AACrF,QAAM,WACJ;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,YAAU;AAAA,MAEV,UAAU,QAAQ,UAAU;AAAA,MAC5B,UAAU,QAAQ,UAAU;AAAA,MAC5B,WAAW,QAAQ,UAAU;AAAA,MAC7B,eAAc;AAAA,MACb,GAAG;AAAA;AAAA,EACN;AAGF,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAc,IAAI;AAE9D,4BAA0B,MAAM;AAC9B,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,aAAa;AACf,WAAO,aAAa,UAAU,WAAW;AAAA,EAC3C;AAGA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -6,19 +6,19 @@ import { createPortal } from "react-native/Libraries/Renderer/shims/ReactNative"
6
6
  import { PortalItem } from "./GorhomPortal";
7
7
  const Portal = (props) => {
8
8
  const rootTag = React.useContext(RootTagContext);
9
- const contents = /* @__PURE__ */ jsx(YStack, {
10
- pointerEvents: "box-none",
11
- fullscreen: true,
12
- position: "absolute",
13
- maxWidth: "100%",
14
- zIndex: 1e5,
15
- ...props
16
- });
9
+ const contents = /* @__PURE__ */ jsx(
10
+ YStack,
11
+ {
12
+ pointerEvents: "box-none",
13
+ fullscreen: true,
14
+ position: "absolute",
15
+ maxWidth: "100%",
16
+ zIndex: 1e5,
17
+ ...props
18
+ }
19
+ );
17
20
  if (Platform.OS === "android") {
18
- return /* @__PURE__ */ jsx(PortalItem, {
19
- hostName: "root",
20
- children: contents
21
- });
21
+ return /* @__PURE__ */ jsx(PortalItem, { hostName: "root", children: contents });
22
22
  }
23
23
  if (rootTag) {
24
24
  return createPortal(contents, rootTag);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/Portal.native.tsx"],
4
4
  "sourcesContent": ["import { YStack } from '@tamagui/stacks'\nimport * as React from 'react'\n// @ts-ignore\nimport { Platform, RootTagContext } from 'react-native'\nimport { createPortal } from 'react-native/Libraries/Renderer/shims/ReactNative'\n\nimport { PortalItem } from './GorhomPortal'\nimport { PortalProps } from './PortalProps'\n\nexport const Portal = (props: PortalProps) => {\n const rootTag = React.useContext(RootTagContext)\n\n const contents = (\n <YStack\n pointerEvents=\"box-none\"\n fullscreen\n position=\"absolute\"\n maxWidth=\"100%\"\n zIndex={100000}\n {...props}\n />\n )\n\n if (Platform.OS === 'android') {\n return <PortalItem hostName=\"root\">{contents}</PortalItem>\n }\n\n if (rootTag) {\n return createPortal(contents, rootTag)\n }\n\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n `Missing rootTag, this is a bug - you may need a different React Native version, or to avoid using \"modal\" on native.`\n )\n }\n\n return null\n}\n"],
5
- "mappings": "AAaI;AAbJ,SAAS,cAAc;AACvB,YAAY,WAAW;AAEvB,SAAS,UAAU,sBAAsB;AACzC,SAAS,oBAAoB;AAE7B,SAAS,kBAAkB;AAGpB,MAAM,SAAS,CAAC,UAAuB;AAC5C,QAAM,UAAU,MAAM,WAAW,cAAc;AAE/C,QAAM,WACJ,oBAAC;AAAA,IACC,eAAc;AAAA,IACd,YAAU;AAAA,IACV,UAAS;AAAA,IACT,UAAS;AAAA,IACT,QAAQ;AAAA,IACP,GAAG;AAAA,GACN;AAGF,MAAI,SAAS,OAAO,WAAW;AAC7B,WAAO,oBAAC;AAAA,MAAW,UAAS;AAAA,MAAQ;AAAA,KAAS;AAAA,EAC/C;AAEA,MAAI,SAAS;AACX,WAAO,aAAa,UAAU,OAAO;AAAA,EACvC;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;",
5
+ "mappings": "AAaI;AAbJ,SAAS,cAAc;AACvB,YAAY,WAAW;AAEvB,SAAS,UAAU,sBAAsB;AACzC,SAAS,oBAAoB;AAE7B,SAAS,kBAAkB;AAGpB,MAAM,SAAS,CAAC,UAAuB;AAC5C,QAAM,UAAU,MAAM,WAAW,cAAc;AAE/C,QAAM,WACJ;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,YAAU;AAAA,MACV,UAAS;AAAA,MACT,UAAS;AAAA,MACT,QAAQ;AAAA,MACP,GAAG;AAAA;AAAA,EACN;AAGF,MAAI,SAAS,OAAO,WAAW;AAC7B,WAAO,oBAAC,cAAW,UAAS,QAAQ,oBAAS;AAAA,EAC/C;AAEA,MAAI,SAAS;AACX,WAAO,aAAa,UAAU,OAAO;AAAA,EACvC;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/portal",
3
- "version": "1.1.8",
3
+ "version": "1.1.10",
4
4
  "source": "src/index.ts",
5
5
  "types": "./types/index.d.ts",
6
6
  "main": "dist/cjs",
@@ -19,9 +19,9 @@
19
19
  "clean:build": "tamagui-build clean:build"
20
20
  },
21
21
  "dependencies": {
22
- "@tamagui/core": "^1.1.8",
23
- "@tamagui/stacks": "^1.1.8",
24
- "@tamagui/use-event": "^1.1.8"
22
+ "@tamagui/core": "^1.1.10",
23
+ "@tamagui/stacks": "^1.1.10",
24
+ "@tamagui/use-event": "^1.1.10"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "react": "*",
@@ -29,7 +29,7 @@
29
29
  "react-native": "*"
30
30
  },
31
31
  "devDependencies": {
32
- "@tamagui/build": "^1.1.8",
32
+ "@tamagui/build": "^1.1.10",
33
33
  "react": "^18.2.0",
34
34
  "react-dom": "^18.2.0",
35
35
  "react-native": "*"
@@ -1,242 +0,0 @@
1
- import {
2
- useDidFinishSSR,
3
- useEvent,
4
- useIsomorphicLayoutEffect
5
- } from "@tamagui/core";
6
- import React, {
7
- createContext,
8
- memo,
9
- startTransition,
10
- useCallback,
11
- useContext,
12
- useEffect,
13
- useId,
14
- useMemo,
15
- useReducer
16
- } from "react";
17
- var ACTIONS = /* @__PURE__ */ ((ACTIONS2) => {
18
- ACTIONS2[ACTIONS2["REGISTER_HOST"] = 0] = "REGISTER_HOST";
19
- ACTIONS2[ACTIONS2["DEREGISTER_HOST"] = 1] = "DEREGISTER_HOST";
20
- ACTIONS2[ACTIONS2["ADD_UPDATE_PORTAL"] = 2] = "ADD_UPDATE_PORTAL";
21
- ACTIONS2[ACTIONS2["REMOVE_PORTAL"] = 3] = "REMOVE_PORTAL";
22
- return ACTIONS2;
23
- })(ACTIONS || {});
24
- const INITIAL_STATE = {};
25
- const registerHost = (state, hostName) => {
26
- if (!(hostName in state)) {
27
- state[hostName] = [];
28
- }
29
- return state;
30
- };
31
- const deregisterHost = (state, hostName) => {
32
- delete state[hostName];
33
- return state;
34
- };
35
- const addUpdatePortal = (state, hostName, portalName, node) => {
36
- if (!(hostName in state)) {
37
- state = registerHost(state, hostName);
38
- }
39
- const index = state[hostName].findIndex((item) => item.name === portalName);
40
- if (index !== -1) {
41
- state[hostName][index].node = node;
42
- } else {
43
- state[hostName].push({
44
- name: portalName,
45
- node
46
- });
47
- }
48
- return state;
49
- };
50
- const removePortal = (state, hostName, portalName) => {
51
- if (!(hostName in state)) {
52
- console.log(
53
- `Failed to remove portal '${portalName}', '${hostName}' was not registered!`
54
- );
55
- return state;
56
- }
57
- const index = state[hostName].findIndex((item) => item.name === portalName);
58
- if (index !== -1)
59
- state[hostName].splice(index, 1);
60
- return state;
61
- };
62
- const reducer = (state, action) => {
63
- const { type } = action;
64
- switch (type) {
65
- case 0 /* REGISTER_HOST */:
66
- return registerHost({ ...state }, action.hostName);
67
- case 1 /* DEREGISTER_HOST */:
68
- return deregisterHost({ ...state }, action.hostName);
69
- case 2 /* ADD_UPDATE_PORTAL */:
70
- return addUpdatePortal(
71
- { ...state },
72
- action.hostName,
73
- action.portalName,
74
- action.node
75
- );
76
- case 3 /* REMOVE_PORTAL */:
77
- return removePortal(
78
- { ...state },
79
- action.hostName,
80
- action.portalName
81
- );
82
- default:
83
- return state;
84
- }
85
- };
86
- const PortalStateContext = createContext(null);
87
- const PortalDispatchContext = createContext(null);
88
- const usePortalState = (hostName) => {
89
- const state = useContext(PortalStateContext);
90
- if (state === null) {
91
- throw new Error(
92
- "'PortalStateContext' cannot be null, please add 'PortalProvider' to the root component."
93
- );
94
- }
95
- return state[hostName] || [];
96
- };
97
- const usePortal = (hostName = "root") => {
98
- const dispatch = useContext(PortalDispatchContext);
99
- if (dispatch === null) {
100
- throw new Error(
101
- "'PortalDispatchContext' cannot be null, please add 'PortalProvider' to the root component."
102
- );
103
- }
104
- const registerHost2 = useCallback(() => {
105
- dispatch({
106
- type: 0 /* REGISTER_HOST */,
107
- hostName
108
- });
109
- }, []);
110
- const deregisterHost2 = useCallback(() => {
111
- dispatch({
112
- type: 1 /* DEREGISTER_HOST */,
113
- hostName
114
- });
115
- }, []);
116
- const addUpdatePortal2 = useCallback((name, node) => {
117
- dispatch({
118
- type: 2 /* ADD_UPDATE_PORTAL */,
119
- hostName,
120
- portalName: name,
121
- node
122
- });
123
- }, []);
124
- const removePortal2 = useCallback((name) => {
125
- dispatch({
126
- type: 3 /* REMOVE_PORTAL */,
127
- hostName,
128
- portalName: name
129
- });
130
- }, []);
131
- return {
132
- registerHost: registerHost2,
133
- deregisterHost: deregisterHost2,
134
- addPortal: addUpdatePortal2,
135
- updatePortal: addUpdatePortal2,
136
- removePortal: removePortal2
137
- };
138
- };
139
- const PortalProviderComponent = ({
140
- rootHostName = "root",
141
- shouldAddRootHost = true,
142
- children
143
- }) => {
144
- const [state, dispatch] = useReducer(reducer, INITIAL_STATE);
145
- const transitionDispatch = useMemo(() => {
146
- const next = (value) => {
147
- startTransition(() => {
148
- dispatch(value);
149
- });
150
- };
151
- return next;
152
- }, [dispatch]);
153
- return <PortalDispatchContext.Provider value={transitionDispatch}><PortalStateContext.Provider value={state}>
154
- {children}
155
- {shouldAddRootHost && <PortalHost name={rootHostName} />}
156
- </PortalStateContext.Provider></PortalDispatchContext.Provider>;
157
- };
158
- const PortalProvider = memo(PortalProviderComponent);
159
- PortalProvider.displayName = "PortalProvider";
160
- const PortalHostComponent = (props) => {
161
- const { name, forwardProps } = props;
162
- const isServer = !useDidFinishSSR();
163
- const state = usePortalState(name);
164
- const { registerHost: registerHost2, deregisterHost: deregisterHost2 } = usePortal(props.name);
165
- useEffect(() => {
166
- if (isServer)
167
- return;
168
- registerHost2();
169
- return () => {
170
- deregisterHost2();
171
- };
172
- }, [isServer]);
173
- if (forwardProps) {
174
- return <>{state.map((item) => {
175
- let next = item.node;
176
- if (forwardProps) {
177
- return React.Children.map(next, (child) => {
178
- return React.isValidElement(child) ? React.cloneElement(child, { key: child.key, ...forwardProps }) : child;
179
- });
180
- }
181
- return next;
182
- })}</>;
183
- }
184
- return <>{state.map((item) => item.node)}</>;
185
- };
186
- const PortalHost = memo(PortalHostComponent);
187
- PortalHost.displayName = "PortalHost";
188
- const PortalComponent = (props) => {
189
- const {
190
- name: _providedName,
191
- hostName,
192
- handleOnMount: _providedHandleOnMount,
193
- handleOnUnmount: _providedHandleOnUnmount,
194
- handleOnUpdate: _providedHandleOnUpdate,
195
- children
196
- } = props;
197
- const { addPortal: addUpdatePortal2, removePortal: removePortal2 } = usePortal(hostName);
198
- const id = useId();
199
- const name = _providedName || id;
200
- const handleOnMount = useEvent(() => {
201
- if (_providedHandleOnMount) {
202
- _providedHandleOnMount(() => addUpdatePortal2(name, children));
203
- } else {
204
- addUpdatePortal2(name, children);
205
- }
206
- });
207
- const handleOnUnmount = useEvent(() => {
208
- if (_providedHandleOnUnmount) {
209
- _providedHandleOnUnmount(() => removePortal2(name));
210
- } else {
211
- removePortal2(name);
212
- }
213
- });
214
- const handleOnUpdate = useEvent(() => {
215
- if (_providedHandleOnUpdate) {
216
- _providedHandleOnUpdate(() => addUpdatePortal2(name, children));
217
- } else {
218
- addUpdatePortal2(name, children);
219
- }
220
- });
221
- useIsomorphicLayoutEffect(() => {
222
- handleOnMount();
223
- return () => {
224
- handleOnUnmount();
225
- };
226
- }, []);
227
- useEffect(() => {
228
- handleOnUpdate();
229
- }, [children]);
230
- return null;
231
- };
232
- const PortalItem = memo(PortalComponent);
233
- PortalItem.displayName = "Portal";
234
- export {
235
- ACTIONS,
236
- INITIAL_STATE,
237
- PortalHost,
238
- PortalItem,
239
- PortalProvider,
240
- usePortal
241
- };
242
- //# sourceMappingURL=GorhomPortal.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/GorhomPortal.tsx"],
4
- "sourcesContent": ["// from https://github.com/gorhom/react-native-portal\n// MIT License Copyright (c) 2020 Mo Gorhom\n// fixing SSR issue\n\nimport {\n spacedChildren,\n useDidFinishSSR,\n useEvent,\n useIsomorphicLayoutEffect,\n} from '@tamagui/core'\nimport React, {\n ReactNode,\n cloneElement,\n createContext,\n isValidElement,\n memo,\n startTransition,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useReducer,\n useRef,\n} from 'react'\n\ninterface PortalType {\n name: string\n node: ReactNode\n}\n\nenum ACTIONS {\n REGISTER_HOST,\n DEREGISTER_HOST,\n ADD_UPDATE_PORTAL,\n REMOVE_PORTAL,\n}\n\nconst INITIAL_STATE = {}\n\nexport { ACTIONS, INITIAL_STATE }\n\nexport interface AddUpdatePortalAction {\n type: ACTIONS\n hostName: string\n portalName: string\n node: ReactNode\n}\n\nexport interface RemovePortalAction {\n type: ACTIONS\n hostName: string\n portalName: string\n}\n\nexport interface RegisterHostAction {\n type: ACTIONS\n hostName: string\n}\n\nexport interface UnregisterHostAction {\n type: ACTIONS\n hostName: string\n}\n\nexport type ActionTypes =\n | AddUpdatePortalAction\n | RemovePortalAction\n | RegisterHostAction\n | UnregisterHostAction\n\nconst registerHost = (state: Record<string, Array<PortalType>>, hostName: string) => {\n if (!(hostName in state)) {\n state[hostName] = []\n }\n return state\n}\n\nconst deregisterHost = (state: Record<string, Array<PortalType>>, hostName: string) => {\n delete state[hostName]\n return state\n}\n\nconst addUpdatePortal = (\n state: Record<string, Array<PortalType>>,\n hostName: string,\n portalName: string,\n node: any\n) => {\n if (!(hostName in state)) {\n state = registerHost(state, hostName)\n }\n\n /**\n * updated portal, if it was already added.\n */\n const index = state[hostName].findIndex((item) => item.name === portalName)\n if (index !== -1) {\n state[hostName][index].node = node\n } else {\n state[hostName].push({\n name: portalName,\n node,\n })\n }\n return state\n}\n\nconst removePortal = (\n state: Record<string, Array<PortalType>>,\n hostName: string,\n portalName: string\n) => {\n if (!(hostName in state)) {\n // eslint-disable-next-line no-console\n console.log(\n `Failed to remove portal '${portalName}', '${hostName}' was not registered!`\n )\n return state\n }\n\n const index = state[hostName].findIndex((item) => item.name === portalName)\n if (index !== -1) state[hostName].splice(index, 1)\n return state\n}\n\nconst reducer = (state: Record<string, Array<PortalType>>, action: ActionTypes) => {\n const { type } = action\n switch (type) {\n case ACTIONS.REGISTER_HOST:\n return registerHost({ ...state }, action.hostName)\n case ACTIONS.DEREGISTER_HOST:\n return deregisterHost({ ...state }, action.hostName)\n case ACTIONS.ADD_UPDATE_PORTAL:\n return addUpdatePortal(\n { ...state },\n action.hostName,\n (action as AddUpdatePortalAction).portalName,\n (action as AddUpdatePortalAction).node\n )\n case ACTIONS.REMOVE_PORTAL:\n return removePortal(\n { ...state },\n action.hostName,\n (action as RemovePortalAction).portalName\n )\n default:\n return state\n }\n}\n\nconst PortalStateContext = createContext<Record<string, Array<PortalType>> | null>(null)\nconst PortalDispatchContext = createContext<React.Dispatch<ActionTypes> | null>(null)\n\nconst usePortalState = (hostName: string) => {\n const state = useContext(PortalStateContext)\n\n if (state === null) {\n throw new Error(\n \"'PortalStateContext' cannot be null, please add 'PortalProvider' to the root component.\"\n )\n }\n\n return state[hostName] || []\n}\n\nexport const usePortal = (hostName = 'root') => {\n const dispatch = useContext(PortalDispatchContext)\n\n if (dispatch === null) {\n throw new Error(\n \"'PortalDispatchContext' cannot be null, please add 'PortalProvider' to the root component.\"\n )\n }\n\n //#region methods\n const registerHost = useCallback(() => {\n dispatch({\n type: ACTIONS.REGISTER_HOST,\n hostName: hostName,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const deregisterHost = useCallback(() => {\n dispatch({\n type: ACTIONS.DEREGISTER_HOST,\n hostName: hostName,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const addUpdatePortal = useCallback((name: string, node: ReactNode) => {\n dispatch({\n type: ACTIONS.ADD_UPDATE_PORTAL,\n hostName,\n portalName: name,\n node,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const removePortal = useCallback((name: string) => {\n dispatch({\n type: ACTIONS.REMOVE_PORTAL,\n hostName,\n portalName: name,\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n //#endregion\n\n return {\n registerHost,\n deregisterHost,\n addPortal: addUpdatePortal,\n updatePortal: addUpdatePortal,\n removePortal,\n }\n}\n\nexport interface PortalProviderProps {\n /**\n * Defines whether to add a default root host or not.\n *\n * @default true\n * @type boolean\n */\n shouldAddRootHost?: boolean\n\n /**\n * Defines the root portal host name.\n *\n * @default \"root\"\n * @type string\n */\n rootHostName?: string\n\n children: ReactNode | ReactNode[]\n}\n\nconst PortalProviderComponent = ({\n rootHostName = 'root',\n shouldAddRootHost = true,\n children,\n}: PortalProviderProps) => {\n const [state, dispatch] = useReducer(reducer, INITIAL_STATE)\n const transitionDispatch = useMemo(() => {\n const next = (value: any) => {\n startTransition(() => {\n dispatch(value)\n })\n }\n return next as typeof dispatch\n }, [dispatch])\n\n return (\n <PortalDispatchContext.Provider value={transitionDispatch}>\n <PortalStateContext.Provider value={state}>\n {children}\n {shouldAddRootHost && <PortalHost name={rootHostName} />}\n </PortalStateContext.Provider>\n </PortalDispatchContext.Provider>\n )\n}\n\nexport const PortalProvider = memo(PortalProviderComponent)\nPortalProvider.displayName = 'PortalProvider'\n\nexport interface PortalHostProps {\n /**\n * Host's key or name to be used as an identifier.\n * @type string\n */\n name: string\n\n forwardProps?: Record<string, any>\n}\n\nconst PortalHostComponent = (props: PortalHostProps) => {\n const { name, forwardProps } = props\n const isServer = !useDidFinishSSR()\n const state = usePortalState(name)\n const { registerHost, deregisterHost } = usePortal(props.name)\n\n //#region effects\n useEffect(() => {\n if (isServer) return\n registerHost()\n return () => {\n deregisterHost()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isServer])\n //#endregion\n\n if (forwardProps) {\n return (\n <>\n {state.map((item) => {\n let next = item.node\n\n if (forwardProps) {\n return React.Children.map(next, (child) => {\n return React.isValidElement(child)\n ? React.cloneElement(child, { key: child.key, ...forwardProps })\n : child\n })\n }\n\n return next\n })}\n </>\n )\n }\n\n //#region render\n return <>{state.map((item) => item.node)}</>\n //#endregion\n}\n\nexport const PortalHost = memo(PortalHostComponent)\nPortalHost.displayName = 'PortalHost'\n\nexport interface PortalItemProps {\n /**\n * Portal's key or name to be used as an identifier.\n * @type string\n * @default generated unique key.\n */\n name?: string\n /**\n * Host's name to teleport the portal content to.\n * @type string\n * @default 'root'\n */\n hostName?: string\n /**\n * Override internal mounting functionality, this is useful\n * if you want to trigger any action before mounting the portal content.\n * @type (mount?: () => void) => void\n * @default undefined\n */\n handleOnMount?: (mount: () => void) => void\n /**\n * Override internal un-mounting functionality, this is useful\n * if you want to trigger any action before un-mounting the portal content.\n * @type (unmount?: () => void) => void\n * @default undefined\n */\n handleOnUnmount?: (unmount: () => void) => void\n /**\n * Override internal updating functionality, this is useful\n * if you want to trigger any action before updating the portal content.\n * @type (update?: () => void) => void\n * @default undefined\n */\n handleOnUpdate?: (update: () => void) => void\n /**\n * Portal's content.\n * @type ReactNode\n * @default undefined\n */\n children?: ReactNode | ReactNode[]\n}\n\nconst PortalComponent = (props: PortalItemProps) => {\n const {\n name: _providedName,\n hostName,\n handleOnMount: _providedHandleOnMount,\n handleOnUnmount: _providedHandleOnUnmount,\n handleOnUpdate: _providedHandleOnUpdate,\n children,\n } = props\n const { addPortal: addUpdatePortal, removePortal } = usePortal(hostName)\n const id = useId()\n const name = _providedName || id\n\n const handleOnMount = useEvent(() => {\n if (_providedHandleOnMount) {\n _providedHandleOnMount(() => addUpdatePortal(name, children))\n } else {\n addUpdatePortal(name, children)\n }\n })\n\n const handleOnUnmount = useEvent(() => {\n if (_providedHandleOnUnmount) {\n _providedHandleOnUnmount(() => removePortal(name))\n } else {\n removePortal(name)\n }\n })\n\n const handleOnUpdate = useEvent(() => {\n if (_providedHandleOnUpdate) {\n _providedHandleOnUpdate(() => addUpdatePortal(name, children))\n } else {\n addUpdatePortal(name, children)\n }\n })\n\n useIsomorphicLayoutEffect(() => {\n handleOnMount()\n return () => {\n handleOnUnmount()\n }\n }, [])\n\n useEffect(() => {\n handleOnUpdate()\n }, [children])\n\n return null\n}\n\nexport const PortalItem = memo(PortalComponent)\nPortalItem.displayName = 'Portal'\n"],
5
- "mappings": "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",
6
- "names": ["ACTIONS", "registerHost", "deregisterHost", "addUpdatePortal", "removePortal"]
7
- }
@@ -1,20 +0,0 @@
1
- import "@tamagui/polyfill-dev";
2
- import { isWeb, useIsomorphicLayoutEffect } from "@tamagui/core";
3
- import { YStack } from "@tamagui/stacks";
4
- import * as React from "react";
5
- import { createPortal } from "react-dom";
6
- const Portal = ({ host = globalThis.document?.body, ...props }) => {
7
- const contents = <YStack contain="strict" fullscreen position={isWeb ? "fixed" : "absolute"} maxWidth={isWeb ? "100vw" : "100%"} maxHeight={isWeb ? "100vh" : "100%"} pointerEvents="none" {...props} />;
8
- const [hostElement, setHostElement] = React.useState(null);
9
- useIsomorphicLayoutEffect(() => {
10
- setHostElement(host);
11
- }, [host]);
12
- if (hostElement) {
13
- return createPortal(contents, hostElement);
14
- }
15
- return null;
16
- };
17
- export {
18
- Portal
19
- };
20
- //# sourceMappingURL=Portal.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/Portal.tsx"],
4
- "sourcesContent": ["/* eslint-disable react-hooks/rules-of-hooks */\nimport '@tamagui/polyfill-dev'\n\nimport { isWeb, useIsomorphicLayoutEffect } from '@tamagui/core'\nimport { YStack } from '@tamagui/stacks'\nimport * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { PortalProps } from './PortalProps'\n\nexport const Portal = ({ host = globalThis.document?.body, ...props }: PortalProps) => {\n const contents = (\n <YStack\n contain=\"strict\"\n fullscreen\n // @ts-expect-error ok on web\n position={isWeb ? 'fixed' : 'absolute'}\n maxWidth={isWeb ? '100vw' : '100%'}\n maxHeight={isWeb ? '100vh' : '100%'}\n pointerEvents=\"none\"\n {...props}\n />\n )\n\n const [hostElement, setHostElement] = React.useState<any>(null)\n\n useIsomorphicLayoutEffect(() => {\n setHostElement(host)\n }, [host])\n\n if (hostElement) {\n return createPortal(contents, hostElement)\n }\n\n // ssr return null\n return null\n}\n"],
5
- "mappings": "AACA,OAAO;AAEP,SAAS,OAAO,iCAAiC;AACjD,SAAS,cAAc;AACvB,YAAY,WAAW;AACvB,SAAS,oBAAoB;AAItB,MAAM,SAAS,CAAC,EAAE,OAAO,WAAW,UAAU,SAAS,MAAM,MAAmB;AACrF,QAAM,WACJ,CAAC,OACC,QAAQ,SACR,WAEA,UAAU,QAAQ,UAAU,YAC5B,UAAU,QAAQ,UAAU,QAC5B,WAAW,QAAQ,UAAU,QAC7B,cAAc,WACV,OACN;AAGF,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAc,IAAI;AAE9D,4BAA0B,MAAM;AAC9B,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,aAAa;AACf,WAAO,aAAa,UAAU,WAAW;AAAA,EAC3C;AAGA,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,25 +0,0 @@
1
- import { YStack } from "@tamagui/stacks";
2
- import * as React from "react";
3
- import { Platform, RootTagContext } from "react-native";
4
- import { createPortal } from "react-native/Libraries/Renderer/shims/ReactNative";
5
- import { PortalItem } from "./GorhomPortal";
6
- const Portal = (props) => {
7
- const rootTag = React.useContext(RootTagContext);
8
- const contents = <YStack pointerEvents="box-none" fullscreen position="absolute" maxWidth="100%" zIndex={1e5} {...props} />;
9
- if (Platform.OS === "android") {
10
- return <PortalItem hostName="root">{contents}</PortalItem>;
11
- }
12
- if (rootTag) {
13
- return createPortal(contents, rootTag);
14
- }
15
- if (process.env.NODE_ENV === "development") {
16
- console.warn(
17
- `Missing rootTag, this is a bug - you may need a different React Native version, or to avoid using "modal" on native.`
18
- );
19
- }
20
- return null;
21
- };
22
- export {
23
- Portal
24
- };
25
- //# sourceMappingURL=Portal.native.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/Portal.native.tsx"],
4
- "sourcesContent": ["import { YStack } from '@tamagui/stacks'\nimport * as React from 'react'\n// @ts-ignore\nimport { Platform, RootTagContext } from 'react-native'\nimport { createPortal } from 'react-native/Libraries/Renderer/shims/ReactNative'\n\nimport { PortalItem } from './GorhomPortal'\nimport { PortalProps } from './PortalProps'\n\nexport const Portal = (props: PortalProps) => {\n const rootTag = React.useContext(RootTagContext)\n\n const contents = (\n <YStack\n pointerEvents=\"box-none\"\n fullscreen\n position=\"absolute\"\n maxWidth=\"100%\"\n zIndex={100000}\n {...props}\n />\n )\n\n if (Platform.OS === 'android') {\n return <PortalItem hostName=\"root\">{contents}</PortalItem>\n }\n\n if (rootTag) {\n return createPortal(contents, rootTag)\n }\n\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n `Missing rootTag, this is a bug - you may need a different React Native version, or to avoid using \"modal\" on native.`\n )\n }\n\n return null\n}\n"],
5
- "mappings": "AAAA,SAAS,cAAc;AACvB,YAAY,WAAW;AAEvB,SAAS,UAAU,sBAAsB;AACzC,SAAS,oBAAoB;AAE7B,SAAS,kBAAkB;AAGpB,MAAM,SAAS,CAAC,UAAuB;AAC5C,QAAM,UAAU,MAAM,WAAW,cAAc;AAE/C,QAAM,WACJ,CAAC,OACC,cAAc,WACd,WACA,SAAS,WACT,SAAS,OACT,QAAQ,SACJ,OACN;AAGF,MAAI,SAAS,OAAO,WAAW;AAC7B,WAAO,CAAC,WAAW,SAAS,QAAQ,SAAS,EAArC;AAAA,EACV;AAEA,MAAI,SAAS;AACX,WAAO,aAAa,UAAU,OAAO;AAAA,EACvC;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=PortalProps.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
package/dist/jsx/index.js DELETED
@@ -1,4 +0,0 @@
1
- export * from "./Portal";
2
- export * from "./PortalProps";
3
- export * from "./GorhomPortal";
4
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/index.tsx"],
4
- "sourcesContent": ["export * from './Portal'\nexport * from './PortalProps'\nexport * from './GorhomPortal'\n"],
5
- "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;",
6
- "names": []
7
- }