@sanity/ui 0.36.12 → 0.36.13-next.12

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 (49) hide show
  1. package/lib/cjs/components/autocomplete/autocomplete.styles.d.ts +1 -1
  2. package/lib/cjs/components/autocomplete/autocomplete.styles.d.ts.map +1 -1
  3. package/lib/cjs/components/dialog/dialog.d.ts.map +1 -1
  4. package/lib/cjs/components/dialog/dialog.js +6 -8
  5. package/lib/cjs/components/dialog/dialog.js.map +2 -2
  6. package/lib/cjs/hooks/_internal/index.d.ts +2 -0
  7. package/lib/cjs/hooks/_internal/index.d.ts.map +1 -0
  8. package/lib/cjs/hooks/_internal/index.js +20 -0
  9. package/lib/cjs/hooks/_internal/index.js.map +7 -0
  10. package/lib/cjs/hooks/_internal/useUnique.d.ts +8 -0
  11. package/lib/cjs/hooks/_internal/useUnique.d.ts.map +1 -0
  12. package/lib/cjs/hooks/_internal/useUnique.js +35 -0
  13. package/lib/cjs/hooks/_internal/useUnique.js.map +7 -0
  14. package/lib/cjs/utils/portal/portal.d.ts +4 -0
  15. package/lib/cjs/utils/portal/portal.d.ts.map +1 -1
  16. package/lib/cjs/utils/portal/portal.js +4 -2
  17. package/lib/cjs/utils/portal/portal.js.map +2 -2
  18. package/lib/cjs/utils/portal/portalProvider.d.ts +5 -1
  19. package/lib/cjs/utils/portal/portalProvider.d.ts.map +1 -1
  20. package/lib/cjs/utils/portal/portalProvider.js +6 -3
  21. package/lib/cjs/utils/portal/portalProvider.js.map +2 -2
  22. package/lib/cjs/utils/portal/types.d.ts +1 -0
  23. package/lib/cjs/utils/portal/types.d.ts.map +1 -1
  24. package/lib/cjs/utils/portal/types.js.map +1 -1
  25. package/lib/esm/components/autocomplete/autocomplete.styles.d.ts +1 -1
  26. package/lib/esm/components/autocomplete/autocomplete.styles.d.ts.map +1 -1
  27. package/lib/esm/components/dialog/dialog.d.ts.map +1 -1
  28. package/lib/esm/components/dialog/dialog.js +7 -9
  29. package/lib/esm/components/dialog/dialog.js.map +2 -2
  30. package/lib/esm/hooks/_internal/index.d.ts +2 -0
  31. package/lib/esm/hooks/_internal/index.d.ts.map +1 -0
  32. package/lib/esm/hooks/_internal/index.js +1 -0
  33. package/lib/esm/hooks/_internal/index.js.map +7 -0
  34. package/lib/esm/hooks/_internal/useUnique.d.ts +8 -0
  35. package/lib/esm/hooks/_internal/useUnique.d.ts.map +1 -0
  36. package/lib/esm/hooks/_internal/useUnique.js +12 -0
  37. package/lib/esm/hooks/_internal/useUnique.js.map +7 -0
  38. package/lib/esm/utils/portal/portal.d.ts +4 -0
  39. package/lib/esm/utils/portal/portal.d.ts.map +1 -1
  40. package/lib/esm/utils/portal/portal.js +4 -2
  41. package/lib/esm/utils/portal/portal.js.map +2 -2
  42. package/lib/esm/utils/portal/portalProvider.d.ts +5 -1
  43. package/lib/esm/utils/portal/portalProvider.d.ts.map +1 -1
  44. package/lib/esm/utils/portal/portalProvider.js +6 -3
  45. package/lib/esm/utils/portal/portalProvider.js.map +2 -2
  46. package/lib/esm/utils/portal/types.d.ts +1 -0
  47. package/lib/esm/utils/portal/types.d.ts.map +1 -1
  48. package/lib/tsconfig.lib.tsbuildinfo +1 -1
  49. package/package.json +10 -9
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/dialog/dialog.tsx"],
4
- "sourcesContent": ["import {CloseIcon} from '@sanity/icons'\nimport React, {forwardRef, useCallback, useEffect, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport {focusFirstDescendant, focusLastDescendant} from '../../helpers'\nimport {useClickOutside, useGlobalKeyDown} from '../../hooks'\nimport {Box, Button, Card, Container, Flex, Text} from '../../primitives'\nimport {ResponsivePaddingProps, ResponsiveWidthProps} from '../../primitives/types'\nimport {responsivePaddingStyle, ResponsivePaddingStyleProps} from '../../styles/internal'\nimport {ThemeColorSchemeKey, useTheme} from '../../theme'\nimport {DialogPosition} from '../../types'\nimport {Layer, Portal, useLayer} from '../../utils'\nimport {\n dialogStyle,\n responsiveDialogPositionStyle,\n ResponsiveDialogPositionStyleProps,\n} from './styles'\nimport {useDialog} from './useDialog'\n\n/**\n * @public\n */\nexport interface DialogProps extends ResponsivePaddingProps, ResponsiveWidthProps {\n /**\n * @beta\n */\n __unstable_autoFocus?: boolean\n /**\n * @beta\n */\n __unstable_hideCloseButton?: boolean\n cardRadius?: number | number[]\n cardShadow?: number | number[]\n contentRef?: React.ForwardedRef<HTMLDivElement>\n footer?: React.ReactNode\n header?: React.ReactNode\n id: string\n onClickOutside?: () => void\n onClose?: () => void\n position?: DialogPosition | DialogPosition[]\n scheme?: ThemeColorSchemeKey\n zOffset?: number | number[]\n}\n\ninterface DialogCardProps extends ResponsiveWidthProps {\n /**\n * @beta\n */\n __unstable_autoFocus: boolean\n /**\n * @beta\n */\n __unstable_hideCloseButton: boolean\n children: React.ReactNode\n contentRef?: React.ForwardedRef<HTMLDivElement>\n footer: React.ReactNode\n header: React.ReactNode\n id: string\n onClickOutside?: () => void\n onClose?: () => void\n radius: number | number[]\n scheme?: ThemeColorSchemeKey\n shadow: number | number[]\n}\n\nconst Root = styled(Layer)<ResponsiveDialogPositionStyleProps & ResponsivePaddingStyleProps>(\n responsivePaddingStyle,\n dialogStyle,\n responsiveDialogPositionStyle\n)\n\nconst DialogContainer = styled(Container)`\n &:not([hidden]) {\n display: flex;\n }\n width: 100%;\n height: 100%;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`\n\nconst DialogCardRoot = styled(Card)`\n &:not([hidden]) {\n display: flex;\n }\n width: 100%;\n min-height: 0;\n max-height: 100%;\n overflow: hidden;\n`\n\nconst DialogLayout = styled(Flex)`\n flex: 1;\n min-height: 0;\n width: 100%;\n`\n\nconst DialogHeader = styled(Card)`\n position: relative;\n z-index: 2;\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: -1px;\n border-bottom: 1px solid var(--card-hairline-soft-color);\n }\n`\n\nconst DialogContent = styled(Box)`\n position: relative;\n z-index: 1;\n overflow: auto;\n outline: none;\n`\n\nconst DialogFooter = styled(Box)`\n position: relative;\n z-index: 3;\n border-top: 1px solid var(--card-hairline-soft-color);\n`\n\nconst DialogCard = forwardRef(function DialogCard(props: DialogCardProps, ref) {\n const {\n __unstable_autoFocus: autoFocus,\n __unstable_hideCloseButton: hideCloseButton,\n children,\n contentRef,\n footer,\n header,\n id,\n onClickOutside,\n onClose,\n radius,\n scheme,\n shadow,\n width,\n } = props\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const localContentRef = useRef<HTMLDivElement | null>(null)\n const layer = useLayer()\n const {isTopLayer} = layer\n const labelId = `${id}_label`\n const showCloseButton = Boolean(onClose) && hideCloseButton === false\n const showHeader = Boolean(header) || showCloseButton\n\n useEffect(() => {\n if (!autoFocus) return\n\n // On mount: focus the first interactive element in the contents\n if (localContentRef.current) {\n focusFirstDescendant(localContentRef.current)\n }\n }, [autoFocus])\n\n useGlobalKeyDown(\n useCallback(\n (event: KeyboardEvent) => {\n if (!isTopLayer || !onClose) return\n\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n onClose()\n }\n },\n [isTopLayer, onClose]\n )\n )\n\n useClickOutside(\n useCallback(() => {\n if (!isTopLayer || !onClickOutside) return\n\n onClickOutside()\n }, [isTopLayer, onClickOutside]),\n [rootElement]\n )\n\n const setRef = useCallback(\n (el: HTMLDivElement | null) => {\n setRootElement(el)\n if (typeof ref === 'function') ref(el)\n else if (ref) ref.current = el\n },\n [ref]\n )\n\n const setContentRef = useCallback(\n (el: HTMLDivElement | null) => {\n localContentRef.current = el\n if (typeof contentRef === 'function') contentRef(el)\n else if (contentRef) contentRef.current = el\n },\n [contentRef]\n )\n\n return (\n <DialogContainer data-ui=\"DialogCard\" width={width}>\n <DialogCardRoot radius={radius} ref={setRef} scheme={scheme} shadow={shadow}>\n <DialogLayout direction=\"column\">\n {showHeader && (\n <DialogHeader>\n <Flex>\n <Box flex={1} padding={4}>\n {header && (\n <Text id={labelId} weight=\"semibold\">\n {header}\n </Text>\n )}\n </Box>\n {showCloseButton && (\n <Box padding={2}>\n <Button\n aria-label=\"Close dialog\"\n disabled={!onClose}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={onClose}\n padding={3}\n />\n </Box>\n )}\n </Flex>\n </DialogHeader>\n )}\n\n <DialogContent flex={1} ref={setContentRef} tabIndex={-1}>\n {children}\n </DialogContent>\n\n {footer && <DialogFooter>{footer}</DialogFooter>}\n </DialogLayout>\n </DialogCardRoot>\n </DialogContainer>\n )\n})\n\n/**\n * @public\n */\nexport const Dialog = forwardRef(function Dialog(\n props: DialogProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'id' | 'width'>,\n ref: React.Ref<HTMLDivElement>\n) {\n const dialog = useDialog()\n const theme = useTheme()\n const {\n __unstable_autoFocus: autoFocus = true,\n __unstable_hideCloseButton: hideCloseButton = false,\n cardRadius = 3,\n cardShadow = 4,\n children,\n contentRef,\n footer,\n header,\n id,\n onClickOutside,\n onClose,\n padding = 4,\n position = dialog.position || 'fixed',\n scheme,\n width = 0,\n zOffset = dialog.zOffset || theme.sanity.layer?.dialog.zOffset,\n ...restProps\n } = props\n const preDivRef = useRef<HTMLDivElement | null>(null)\n const postDivRef = useRef<HTMLDivElement | null>(null)\n const cardRef = useRef<HTMLDivElement | null>(null)\n\n const handleFocus = useCallback((event: React.FocusEvent<HTMLDivElement>) => {\n const target = event.target\n const cardElement = cardRef.current\n\n if (!cardElement) {\n return\n }\n\n if (target === preDivRef.current) {\n focusLastDescendant(cardElement)\n\n return\n }\n\n if (target === postDivRef.current) {\n focusFirstDescendant(cardElement)\n\n return\n }\n }, [])\n\n const labelId = `${id}_label`\n\n return (\n <Portal>\n <Root\n {...restProps}\n $padding={padding}\n $position={position}\n aria-labelledby={labelId}\n aria-modal\n data-ui=\"Dialog\"\n id={id}\n onFocus={handleFocus}\n ref={ref}\n role=\"dialog\"\n zOffset={zOffset}\n >\n <div ref={preDivRef} tabIndex={0} />\n <DialogCard\n __unstable_autoFocus={autoFocus}\n __unstable_hideCloseButton={hideCloseButton}\n contentRef={contentRef}\n footer={footer}\n header={header}\n id={id}\n onClickOutside={onClickOutside}\n onClose={onClose}\n radius={cardRadius}\n ref={cardRef}\n scheme={scheme}\n shadow={cardShadow}\n width={width}\n >\n {children}\n </DialogCard>\n <div ref={postDivRef} tabIndex={0} />\n </Root>\n </Portal>\n )\n})\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {CloseIcon} from '@sanity/icons'\nimport React, {forwardRef, useCallback, useEffect, useRef, useState} from 'react'\nimport styled from 'styled-components'\nimport {focusFirstDescendant, focusLastDescendant} from '../../helpers'\nimport {useClickOutside, useForwardedRef, useGlobalKeyDown} from '../../hooks'\nimport {Box, Button, Card, Container, Flex, Text} from '../../primitives'\nimport {ResponsivePaddingProps, ResponsiveWidthProps} from '../../primitives/types'\nimport {responsivePaddingStyle, ResponsivePaddingStyleProps} from '../../styles/internal'\nimport {ThemeColorSchemeKey, useTheme} from '../../theme'\nimport {DialogPosition} from '../../types'\nimport {Layer, Portal, useLayer} from '../../utils'\nimport {\n dialogStyle,\n responsiveDialogPositionStyle,\n ResponsiveDialogPositionStyleProps,\n} from './styles'\nimport {useDialog} from './useDialog'\n\n/**\n * @public\n */\nexport interface DialogProps extends ResponsivePaddingProps, ResponsiveWidthProps {\n /**\n * @beta\n */\n __unstable_autoFocus?: boolean\n /**\n * @beta\n */\n __unstable_hideCloseButton?: boolean\n cardRadius?: number | number[]\n cardShadow?: number | number[]\n contentRef?: React.ForwardedRef<HTMLDivElement>\n footer?: React.ReactNode\n header?: React.ReactNode\n id: string\n onClickOutside?: () => void\n onClose?: () => void\n position?: DialogPosition | DialogPosition[]\n scheme?: ThemeColorSchemeKey\n zOffset?: number | number[]\n}\n\ninterface DialogCardProps extends ResponsiveWidthProps {\n /**\n * @beta\n */\n __unstable_autoFocus: boolean\n /**\n * @beta\n */\n __unstable_hideCloseButton: boolean\n children: React.ReactNode\n contentRef?: React.ForwardedRef<HTMLDivElement>\n footer: React.ReactNode\n header: React.ReactNode\n id: string\n onClickOutside?: () => void\n onClose?: () => void\n radius: number | number[]\n scheme?: ThemeColorSchemeKey\n shadow: number | number[]\n}\n\nconst Root = styled(Layer)<ResponsiveDialogPositionStyleProps & ResponsivePaddingStyleProps>(\n responsivePaddingStyle,\n dialogStyle,\n responsiveDialogPositionStyle\n)\n\nconst DialogContainer = styled(Container)`\n &:not([hidden]) {\n display: flex;\n }\n width: 100%;\n height: 100%;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`\n\nconst DialogCardRoot = styled(Card)`\n &:not([hidden]) {\n display: flex;\n }\n width: 100%;\n min-height: 0;\n max-height: 100%;\n overflow: hidden;\n`\n\nconst DialogLayout = styled(Flex)`\n flex: 1;\n min-height: 0;\n width: 100%;\n`\n\nconst DialogHeader = styled(Card)`\n position: relative;\n z-index: 2;\n\n &:after {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: -1px;\n border-bottom: 1px solid var(--card-hairline-soft-color);\n }\n`\n\nconst DialogContent = styled(Box)`\n position: relative;\n z-index: 1;\n overflow: auto;\n outline: none;\n`\n\nconst DialogFooter = styled(Box)`\n position: relative;\n z-index: 3;\n border-top: 1px solid var(--card-hairline-soft-color);\n`\n\nconst DialogCard = forwardRef(function DialogCard(\n props: DialogCardProps,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const {\n __unstable_autoFocus: autoFocus,\n __unstable_hideCloseButton: hideCloseButton,\n children,\n contentRef,\n footer,\n header,\n id,\n onClickOutside,\n onClose,\n radius,\n scheme,\n shadow,\n width,\n } = props\n const forwardedRef = useForwardedRef(ref)\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const localContentRef = useRef<HTMLDivElement | null>(null)\n const layer = useLayer()\n const {isTopLayer} = layer\n const labelId = `${id}_label`\n const showCloseButton = Boolean(onClose) && hideCloseButton === false\n const showHeader = Boolean(header) || showCloseButton\n\n useEffect(() => {\n if (!autoFocus) return\n\n // On mount: focus the first interactive element in the contents\n if (forwardedRef.current) {\n focusFirstDescendant(forwardedRef.current)\n }\n }, [autoFocus, forwardedRef])\n\n useGlobalKeyDown(\n useCallback(\n (event: KeyboardEvent) => {\n if (!isTopLayer || !onClose) return\n\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n onClose()\n }\n },\n [isTopLayer, onClose]\n )\n )\n\n useClickOutside(\n useCallback(() => {\n if (!isTopLayer || !onClickOutside) return\n\n onClickOutside()\n }, [isTopLayer, onClickOutside]),\n [rootElement]\n )\n\n const setRef = useCallback(\n (el: HTMLDivElement | null) => {\n setRootElement(el)\n forwardedRef.current = el\n },\n [forwardedRef]\n )\n\n const setContentRef = useCallback(\n (el: HTMLDivElement | null) => {\n localContentRef.current = el\n if (typeof contentRef === 'function') contentRef(el)\n else if (contentRef) contentRef.current = el\n },\n [contentRef]\n )\n\n return (\n <DialogContainer data-ui=\"DialogCard\" width={width}>\n <DialogCardRoot radius={radius} ref={setRef} scheme={scheme} shadow={shadow}>\n <DialogLayout direction=\"column\">\n {showHeader && (\n <DialogHeader>\n <Flex>\n <Box flex={1} padding={4}>\n {header && (\n <Text id={labelId} weight=\"semibold\">\n {header}\n </Text>\n )}\n </Box>\n {showCloseButton && (\n <Box padding={2}>\n <Button\n aria-label=\"Close dialog\"\n disabled={!onClose}\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={onClose}\n padding={3}\n />\n </Box>\n )}\n </Flex>\n </DialogHeader>\n )}\n\n <DialogContent flex={1} ref={setContentRef} tabIndex={-1}>\n {children}\n </DialogContent>\n\n {footer && <DialogFooter>{footer}</DialogFooter>}\n </DialogLayout>\n </DialogCardRoot>\n </DialogContainer>\n )\n})\n\n/**\n * @public\n */\nexport const Dialog = forwardRef(function Dialog(\n props: DialogProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'id' | 'width'>,\n ref: React.Ref<HTMLDivElement>\n) {\n const dialog = useDialog()\n const theme = useTheme()\n const {\n __unstable_autoFocus: autoFocus = true,\n __unstable_hideCloseButton: hideCloseButton = false,\n cardRadius = 3,\n cardShadow = 4,\n children,\n contentRef,\n footer,\n header,\n id,\n onClickOutside,\n onClose,\n padding = 4,\n position = dialog.position || 'fixed',\n scheme,\n width = 0,\n zOffset = dialog.zOffset || theme.sanity.layer?.dialog.zOffset,\n ...restProps\n } = props\n const preDivRef = useRef<HTMLDivElement | null>(null)\n const postDivRef = useRef<HTMLDivElement | null>(null)\n const cardRef = useRef<HTMLDivElement | null>(null)\n\n const handleFocus = useCallback((event: React.FocusEvent<HTMLDivElement>) => {\n const target = event.target\n const cardElement = cardRef.current\n\n if (!cardElement) {\n return\n }\n\n if (target === preDivRef.current) {\n focusLastDescendant(cardElement)\n\n return\n }\n\n if (target === postDivRef.current) {\n focusFirstDescendant(cardElement)\n\n return\n }\n }, [])\n\n const labelId = `${id}_label`\n\n return (\n <Portal>\n <Root\n {...restProps}\n $padding={padding}\n $position={position}\n aria-labelledby={labelId}\n aria-modal\n data-ui=\"Dialog\"\n id={id}\n onFocus={handleFocus}\n ref={ref}\n role=\"dialog\"\n zOffset={zOffset}\n >\n <div ref={preDivRef} tabIndex={0} />\n <DialogCard\n __unstable_autoFocus={autoFocus}\n __unstable_hideCloseButton={hideCloseButton}\n contentRef={contentRef}\n footer={footer}\n header={header}\n id={id}\n onClickOutside={onClickOutside}\n onClose={onClose}\n radius={cardRadius}\n ref={cardRef}\n scheme={scheme}\n shadow={cardShadow}\n width={width}\n >\n {children}\n </DialogCard>\n <div ref={postDivRef} tabIndex={0} />\n </Root>\n </Portal>\n )\n})\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,2 @@
1
+ export * from './useUnique';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/_internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA"}
@@ -0,0 +1 @@
1
+ export * from "./useUnique";
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/hooks/_internal/index.ts"],
4
+ "sourcesContent": ["export * from './useUnique'\n"],
5
+ "mappings": "AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * This is React hook – an and escape hatch – to make sure that a value is the same
3
+ * on every render. SHOULD NOT BE USED IN MOST CASES.
4
+ *
5
+ * @internal
6
+ */
7
+ export declare function useUnique<ValueType>(value: ValueType): ValueType;
8
+ //# sourceMappingURL=useUnique.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUnique.d.ts","sourceRoot":"","sources":["../../../../src/hooks/_internal/useUnique.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,CAQhE"}
@@ -0,0 +1,12 @@
1
+ import { isEqual } from "lodash";
2
+ import { useRef } from "react";
3
+ function useUnique(value) {
4
+ const valueRef = useRef(value);
5
+ if (!isEqual(valueRef.current, value)) {
6
+ valueRef.current = value;
7
+ }
8
+ return valueRef.current;
9
+ }
10
+ export {
11
+ useUnique
12
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/hooks/_internal/useUnique.ts"],
4
+ "sourcesContent": ["import {isEqual} from 'lodash'\nimport {useRef} from 'react'\n\n/**\n * This is React hook \u2013 an and escape hatch \u2013 to make sure that a value is the same\n * on every render. SHOULD NOT BE USED IN MOST CASES.\n *\n * @internal\n */\nexport function useUnique<ValueType>(value: ValueType): ValueType {\n const valueRef = useRef<ValueType>(value)\n\n if (!isEqual(valueRef.current, value)) {\n valueRef.current = value\n }\n\n return valueRef.current\n}\n"],
5
+ "mappings": "AAAA;AACA;AAQO,mBAA8B,OAA6B;AAChE,QAAM,WAAW,OAAkB;AAEnC,MAAI,CAAC,QAAQ,SAAS,SAAS,QAAQ;AACrC,aAAS,UAAU;AAAA;AAGrB,SAAO,SAAS;AAAA;",
6
+ "names": []
7
+ }
@@ -4,6 +4,10 @@ import React from 'react';
4
4
  */
5
5
  export interface PortalProps {
6
6
  children: React.ReactNode;
7
+ /**
8
+ * @beta This API might change. DO NOT USE IN PRODUCTION.
9
+ */
10
+ __unstable_name?: string;
7
11
  }
8
12
  /**
9
13
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../../src/utils/portal/portal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAQnE"}
1
+ {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../../src/utils/portal/portal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAUnE"}
@@ -1,11 +1,13 @@
1
1
  import ReactDOM from "react-dom";
2
2
  import { usePortal } from "./usePortal";
3
3
  function Portal(props) {
4
+ const { children, __unstable_name: name } = props;
4
5
  const portal = usePortal();
5
- if (!portal.element) {
6
+ const portalElement = name ? portal.elements && portal.elements[name] : portal.element;
7
+ if (!portalElement) {
6
8
  return null;
7
9
  }
8
- return ReactDOM.createPortal(props.children, portal.element);
10
+ return ReactDOM.createPortal(children, portalElement);
9
11
  }
10
12
  export {
11
13
  Portal
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/utils/portal/portal.ts"],
4
- "sourcesContent": ["import React from 'react'\nimport ReactDOM from 'react-dom'\nimport {usePortal} from './usePortal'\n\n/**\n * @public\n */\nexport interface PortalProps {\n children: React.ReactNode\n}\n\n/**\n * @public\n */\nexport function Portal(props: PortalProps): React.ReactPortal | null {\n const portal = usePortal()\n\n if (!portal.element) {\n return null\n }\n\n return ReactDOM.createPortal(props.children, portal.element)\n}\n"],
5
- "mappings": "AACA;AACA;AAYO,gBAAgB,OAA8C;AACnE,QAAM,SAAS;AAEf,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO;AAAA;AAGT,SAAO,SAAS,aAAa,MAAM,UAAU,OAAO;AAAA;",
4
+ "sourcesContent": ["import React from 'react'\nimport ReactDOM from 'react-dom'\nimport {usePortal} from './usePortal'\n\n/**\n * @public\n */\nexport interface PortalProps {\n children: React.ReactNode\n /**\n * @beta This API might change. DO NOT USE IN PRODUCTION.\n */\n __unstable_name?: string\n}\n\n/**\n * @public\n */\nexport function Portal(props: PortalProps): React.ReactPortal | null {\n const {children, __unstable_name: name} = props\n const portal = usePortal()\n const portalElement = name ? portal.elements && portal.elements[name] : portal.element\n\n if (!portalElement) {\n return null\n }\n\n return ReactDOM.createPortal(children, portalElement)\n}\n"],
5
+ "mappings": "AACA;AACA;AAgBO,gBAAgB,OAA8C;AACnE,QAAM,EAAC,UAAU,iBAAiB,SAAQ;AAC1C,QAAM,SAAS;AACf,QAAM,gBAAgB,OAAO,OAAO,YAAY,OAAO,SAAS,QAAQ,OAAO;AAE/E,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA;AAGT,SAAO,SAAS,aAAa,UAAU;AAAA;",
6
6
  "names": []
7
7
  }
@@ -8,7 +8,11 @@ export interface PortalProviderProps {
8
8
  */
9
9
  boundaryElement?: HTMLElement | null;
10
10
  children: React.ReactNode;
11
- element: HTMLElement | null;
11
+ element?: HTMLElement | null;
12
+ /**
13
+ * @beta
14
+ */
15
+ __unstable_elements?: Record<string, HTMLElement | null | undefined>;
12
16
  }
13
17
  /**
14
18
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"portalProvider.d.ts","sourceRoot":"","sources":["../../../../src/utils/portal/portalProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgB,MAAM,OAAO,CAAA;AAIpC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;CAC5B;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAY7E"}
1
+ {"version":3,"file":"portalProvider.d.ts","sourceRoot":"","sources":["../../../../src/utils/portal/portalProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgB,MAAM,OAAO,CAAA;AAKpC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;CACrE;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAc7E"}
@@ -1,15 +1,18 @@
1
1
  import React, { useMemo } from "react";
2
+ import { useUnique } from "../../hooks/_internal";
2
3
  import { PortalContext } from "./portalContext";
3
4
  const __BROWSER__ = typeof window !== "undefined";
4
5
  function PortalProvider(props) {
5
- const { boundaryElement, children, element } = props;
6
+ const { boundaryElement, children, element, __unstable_elements: elementsProp } = props;
7
+ const elements = useUnique(elementsProp);
6
8
  const value = useMemo(() => {
7
9
  return {
8
10
  version: 0,
9
11
  boundaryElement: boundaryElement || null,
10
- element: element || __BROWSER__ && document.body || null
12
+ element: element || __BROWSER__ && document.body || null,
13
+ elements
11
14
  };
12
- }, [boundaryElement, element]);
15
+ }, [boundaryElement, element, elements]);
13
16
  return /* @__PURE__ */ React.createElement(PortalContext.Provider, {
14
17
  value
15
18
  }, children);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/utils/portal/portalProvider.tsx"],
4
- "sourcesContent": ["import React, {useMemo} from 'react'\nimport {PortalContext} from './portalContext'\nimport {PortalContextValue} from './types'\n\n/**\n * @public\n */\nexport interface PortalProviderProps {\n /**\n * @deprecated Use `<BoundaryElementProvider element={...} />` instead\n */\n boundaryElement?: HTMLElement | null\n children: React.ReactNode\n element: HTMLElement | null\n}\n\nconst __BROWSER__ = typeof window !== 'undefined'\n\n/**\n * @public\n */\nexport function PortalProvider(props: PortalProviderProps): React.ReactElement {\n const {boundaryElement, children, element} = props\n\n const value: PortalContextValue = useMemo(() => {\n return {\n version: 0.0,\n boundaryElement: boundaryElement || null,\n element: element || (__BROWSER__ && document.body) || null,\n }\n }, [boundaryElement, element])\n\n return <PortalContext.Provider value={value}>{children}</PortalContext.Provider>\n}\n"],
5
- "mappings": "AAAA;AACA;AAeA,MAAM,cAAc,OAAO,WAAW;AAK/B,wBAAwB,OAAgD;AAC7E,QAAM,EAAC,iBAAiB,UAAU,YAAW;AAE7C,QAAM,QAA4B,QAAQ,MAAM;AAC9C,WAAO;AAAA,MACL,SAAS;AAAA,MACT,iBAAiB,mBAAmB;AAAA,MACpC,SAAS,WAAY,eAAe,SAAS,QAAS;AAAA;AAAA,KAEvD,CAAC,iBAAiB;AAErB,SAAO,oCAAC,cAAc,UAAf;AAAA,IAAwB;AAAA,KAAe;AAAA;",
4
+ "sourcesContent": ["import React, {useMemo} from 'react'\nimport {useUnique} from '../../hooks/_internal'\nimport {PortalContext} from './portalContext'\nimport {PortalContextValue} from './types'\n\n/**\n * @public\n */\nexport interface PortalProviderProps {\n /**\n * @deprecated Use `<BoundaryElementProvider element={...} />` instead\n */\n boundaryElement?: HTMLElement | null\n children: React.ReactNode\n element?: HTMLElement | null\n /**\n * @beta\n */\n __unstable_elements?: Record<string, HTMLElement | null | undefined>\n}\n\nconst __BROWSER__ = typeof window !== 'undefined'\n\n/**\n * @public\n */\nexport function PortalProvider(props: PortalProviderProps): React.ReactElement {\n const {boundaryElement, children, element, __unstable_elements: elementsProp} = props\n const elements = useUnique(elementsProp)\n\n const value: PortalContextValue = useMemo(() => {\n return {\n version: 0.0,\n boundaryElement: boundaryElement || null,\n element: element || (__BROWSER__ && document.body) || null,\n elements,\n }\n }, [boundaryElement, element, elements])\n\n return <PortalContext.Provider value={value}>{children}</PortalContext.Provider>\n}\n"],
5
+ "mappings": "AAAA;AACA;AACA;AAmBA,MAAM,cAAc,OAAO,WAAW;AAK/B,wBAAwB,OAAgD;AAC7E,QAAM,EAAC,iBAAiB,UAAU,SAAS,qBAAqB,iBAAgB;AAChF,QAAM,WAAW,UAAU;AAE3B,QAAM,QAA4B,QAAQ,MAAM;AAC9C,WAAO;AAAA,MACL,SAAS;AAAA,MACT,iBAAiB,mBAAmB;AAAA,MACpC,SAAS,WAAY,eAAe,SAAS,QAAS;AAAA,MACtD;AAAA;AAAA,KAED,CAAC,iBAAiB,SAAS;AAE9B,SAAO,oCAAC,cAAc,UAAf;AAAA,IAAwB;AAAA,KAAe;AAAA;",
6
6
  "names": []
7
7
  }
@@ -5,5 +5,6 @@ export interface PortalContextValue {
5
5
  version: 0.0;
6
6
  boundaryElement: HTMLElement | null;
7
7
  element: HTMLElement | null;
8
+ elements?: Record<string, HTMLElement | null | undefined>;
8
9
  }
9
10
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/portal/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,GAAG,CAAA;IACZ,eAAe,EAAE,WAAW,GAAG,IAAI,CAAA;IACnC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/portal/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,GAAG,CAAA;IACZ,eAAe,EAAE,WAAW,GAAG,IAAI,CAAA;IACnC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;CAC1D"}