@veeqo/ui 9.2.0 → 9.4.0

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 (79) hide show
  1. package/dist/components/DimensionsInput/DimensionsInput.cjs +8 -8
  2. package/dist/components/DimensionsInput/DimensionsInput.cjs.map +1 -1
  3. package/dist/components/DimensionsInput/DimensionsInput.js +9 -9
  4. package/dist/components/DimensionsInput/DimensionsInput.js.map +1 -1
  5. package/dist/components/DimensionsInput/index.cjs +10 -0
  6. package/dist/components/DimensionsInput/index.cjs.map +1 -0
  7. package/dist/components/DimensionsInput/index.d.ts +2 -1
  8. package/dist/components/DimensionsInput/index.js +8 -0
  9. package/dist/components/DimensionsInput/index.js.map +1 -0
  10. package/dist/components/DimensionsInput/styled.cjs +2 -7
  11. package/dist/components/DimensionsInput/styled.cjs.map +1 -1
  12. package/dist/components/DimensionsInput/styled.d.ts +1 -11
  13. package/dist/components/DimensionsInput/styled.js +3 -7
  14. package/dist/components/DimensionsInput/styled.js.map +1 -1
  15. package/dist/components/DimensionsInput/types.d.ts +2 -5
  16. package/dist/components/Image/Image.cjs +2 -2
  17. package/dist/components/InputGroup/components/InputGroupLabel/InputGroupLabel.cjs +15 -0
  18. package/dist/components/InputGroup/components/InputGroupLabel/InputGroupLabel.cjs.map +1 -0
  19. package/dist/components/InputGroup/components/InputGroupLabel/InputGroupLabel.d.ts +9 -0
  20. package/dist/components/InputGroup/components/InputGroupLabel/InputGroupLabel.js +9 -0
  21. package/dist/components/InputGroup/components/InputGroupLabel/InputGroupLabel.js.map +1 -0
  22. package/dist/components/InputGroup/components/InputGroupLabel/index.d.ts +1 -0
  23. package/dist/components/InputGroup/components/InputGroupLabel/styled.cjs +13 -0
  24. package/dist/components/InputGroup/components/InputGroupLabel/styled.cjs.map +1 -0
  25. package/dist/components/InputGroup/components/InputGroupLabel/styled.d.ts +4 -0
  26. package/dist/components/InputGroup/components/InputGroupLabel/styled.js +7 -0
  27. package/dist/components/InputGroup/components/InputGroupLabel/styled.js.map +1 -0
  28. package/dist/components/InputGroup/index.cjs +4 -1
  29. package/dist/components/InputGroup/index.cjs.map +1 -1
  30. package/dist/components/InputGroup/index.d.ts +1 -0
  31. package/dist/components/InputGroup/index.js +4 -1
  32. package/dist/components/InputGroup/index.js.map +1 -1
  33. package/dist/components/Modal/Modal.cjs +3 -2
  34. package/dist/components/Modal/Modal.cjs.map +1 -1
  35. package/dist/components/Modal/Modal.js +3 -2
  36. package/dist/components/Modal/Modal.js.map +1 -1
  37. package/dist/components/Modal/types.cjs.map +1 -1
  38. package/dist/components/Modal/types.d.ts +1 -0
  39. package/dist/components/Modal/types.js.map +1 -1
  40. package/dist/components/Modal/utils.cjs +9 -0
  41. package/dist/components/Modal/utils.cjs.map +1 -0
  42. package/dist/components/Modal/utils.d.ts +1 -0
  43. package/dist/components/Modal/utils.js +7 -0
  44. package/dist/components/Modal/utils.js.map +1 -0
  45. package/dist/components/Popover/Popover.cjs +8 -5
  46. package/dist/components/Popover/Popover.cjs.map +1 -1
  47. package/dist/components/Popover/Popover.js +8 -5
  48. package/dist/components/Popover/Popover.js.map +1 -1
  49. package/dist/components/Portal/Portal.cjs +23 -40
  50. package/dist/components/Portal/Portal.cjs.map +1 -1
  51. package/dist/components/Portal/Portal.d.ts +2 -12
  52. package/dist/components/Portal/Portal.js +23 -40
  53. package/dist/components/Portal/Portal.js.map +1 -1
  54. package/dist/components/Portal/utils.cjs +11 -0
  55. package/dist/components/Portal/utils.cjs.map +1 -0
  56. package/dist/components/Portal/utils.d.ts +1 -0
  57. package/dist/components/Portal/utils.js +9 -0
  58. package/dist/components/Portal/utils.js.map +1 -0
  59. package/dist/components/ToastsLayout/ToastsLayout.cjs +2 -2
  60. package/dist/components/Tooltip/Tooltip.cjs +4 -4
  61. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  62. package/dist/components/Tooltip/Tooltip.js +4 -3
  63. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  64. package/dist/components/WeightInput/WeightInput.cjs +10 -9
  65. package/dist/components/WeightInput/WeightInput.cjs.map +1 -1
  66. package/dist/components/WeightInput/WeightInput.js +11 -10
  67. package/dist/components/WeightInput/WeightInput.js.map +1 -1
  68. package/dist/components/WeightInput/index.cjs +10 -0
  69. package/dist/components/WeightInput/index.cjs.map +1 -0
  70. package/dist/components/WeightInput/index.d.ts +2 -1
  71. package/dist/components/WeightInput/index.js +8 -0
  72. package/dist/components/WeightInput/index.js.map +1 -0
  73. package/dist/components/WeightInput/styled.cjs +1 -2
  74. package/dist/components/WeightInput/styled.cjs.map +1 -1
  75. package/dist/components/WeightInput/styled.js +2 -2
  76. package/dist/components/WeightInput/styled.js.map +1 -1
  77. package/dist/index.cjs +12 -12
  78. package/dist/index.js +2 -2
  79. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["/* eslint-disable react/destructuring-assignment */\nimport React, { useEffect, useRef, useState } from 'react';\nimport { AnimatePresence } from 'framer-motion';\n\nimport { MainSection, NonScrollableBody } from './components/styled';\nimport { ModalProps, hasFooterSlot, hasHeaderSlot } from './types';\nimport { Dialog } from './components/Dialog/Dialog';\n\nimport { useIsOverflowing } from '../../hooks/useIsOverflowing';\nimport { Button } from '../Button';\nimport { Card } from '../Card';\nimport { CardHeader } from '../CardHeader';\nimport { Stack } from '../Stack';\n\nexport const Modal = (props: ModalProps) => {\n const {\n shouldShow,\n showHeaderCloseButton = true,\n fullBleed = false,\n variant = 'base',\n onClose: parentOnClose,\n children,\n className,\n } = props;\n\n const modalRef = useRef<HTMLDialogElement | null>(null);\n const [mainSectionRef, setMainSectionRef] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n if (shouldShow) {\n modalRef.current?.removeAttribute('open'); // Allows for conditional rendering.\n modalRef.current?.showModal();\n }\n }, [shouldShow]);\n\n const { isOverflowing: isContentOverflowing, onScroll } = useIsOverflowing(mainSectionRef);\n\n const onClose = () => {\n modalRef.current?.close();\n parentOnClose();\n };\n\n return (\n <AnimatePresence>\n {shouldShow && (\n <div data-testid=\"dialog-wrapper\">\n <NonScrollableBody />\n <Dialog\n ref={modalRef}\n onClose={onClose}\n variant={variant}\n aria-describedby=\"modal_title\"\n className={className}\n >\n <Card.Surface>\n {hasHeaderSlot(props) ? (\n props.headerSlot\n ) : (\n <CardHeader\n id=\"modal_title\"\n headerVariant=\"headingLarge\"\n title={props.headerTitle}\n subtitle={props.headerSubtitle}\n {...(showHeaderCloseButton && { onClickClose: onClose })}\n />\n )}\n\n <MainSection\n onScroll={onScroll}\n ref={setMainSectionRef}\n isScrollable={isContentOverflowing}\n fullBleed={fullBleed}\n >\n {children}\n </MainSection>\n\n {hasFooterSlot(props) && props.footerSlot}\n\n {!hasFooterSlot(props) && (props.leftActions || props.rightActions) && (\n <Card.Footer>\n <Stack direction=\"horizontal\" alignX={props.leftActions ? 'between' : 'end'}>\n {props.leftActions && (\n <Stack\n direction=\"horizontal\"\n alignX=\"start\"\n data-testid=\"left-actions-container\"\n >\n {props.leftActions.map(({ label, ...actionProps }) => (\n <Button key={label} type=\"button\" {...actionProps}>\n {label}\n </Button>\n ))}\n </Stack>\n )}\n {props.rightActions && (\n <Stack\n direction=\"horizontal\"\n alignX=\"end\"\n data-testid=\"right-actions-container\"\n >\n {props.rightActions.map(({ label, ...actionProps }) => (\n <Button key={label} type=\"button\" {...actionProps}>\n {label}\n </Button>\n ))}\n </Stack>\n )}\n </Stack>\n </Card.Footer>\n )}\n </Card.Surface>\n </Dialog>\n </div>\n )}\n </AnimatePresence>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["/* eslint-disable react/destructuring-assignment */\nimport React, { useEffect, useRef, useState } from 'react';\nimport { AnimatePresence } from 'framer-motion';\n\nimport { MainSection, NonScrollableBody } from './components/styled';\nimport { ModalProps, hasFooterSlot, hasHeaderSlot } from './types';\nimport { Dialog } from './components/Dialog/Dialog';\n\nimport { useIsOverflowing } from '../../hooks/useIsOverflowing';\nimport { Button } from '../Button';\nimport { Card } from '../Card';\nimport { CardHeader } from '../CardHeader';\nimport { Stack } from '../Stack';\nimport { preventDefaultEventOnESC } from './utils';\n\nexport const Modal = (props: ModalProps) => {\n const {\n shouldShow,\n showHeaderCloseButton = true,\n preventClose = false,\n fullBleed = false,\n variant = 'base',\n onClose: parentOnClose,\n children,\n className,\n } = props;\n\n const modalRef = useRef<HTMLDialogElement | null>(null);\n const [mainSectionRef, setMainSectionRef] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n if (shouldShow) {\n modalRef.current?.removeAttribute('open'); // Allows for conditional rendering.\n modalRef.current?.showModal();\n }\n }, [shouldShow]);\n\n const { isOverflowing: isContentOverflowing, onScroll } = useIsOverflowing(mainSectionRef);\n\n const onClose = () => {\n modalRef.current?.close();\n parentOnClose();\n };\n\n return (\n <AnimatePresence>\n {shouldShow && (\n <div data-testid=\"dialog-wrapper\">\n <NonScrollableBody />\n <Dialog\n ref={modalRef}\n onClose={onClose}\n onKeyDown={preventClose ? preventDefaultEventOnESC : undefined}\n variant={variant}\n aria-describedby=\"modal_title\"\n className={className}\n >\n <Card.Surface>\n {hasHeaderSlot(props) ? (\n props.headerSlot\n ) : (\n <CardHeader\n id=\"modal_title\"\n headerVariant=\"headingLarge\"\n title={props.headerTitle}\n subtitle={props.headerSubtitle}\n {...(showHeaderCloseButton && { onClickClose: onClose })}\n />\n )}\n\n <MainSection\n onScroll={onScroll}\n ref={setMainSectionRef}\n isScrollable={isContentOverflowing}\n fullBleed={fullBleed}\n >\n {children}\n </MainSection>\n\n {hasFooterSlot(props) && props.footerSlot}\n\n {!hasFooterSlot(props) && (props.leftActions || props.rightActions) && (\n <Card.Footer>\n <Stack direction=\"horizontal\" alignX={props.leftActions ? 'between' : 'end'}>\n {props.leftActions && (\n <Stack\n direction=\"horizontal\"\n alignX=\"start\"\n data-testid=\"left-actions-container\"\n >\n {props.leftActions.map(({ label, ...actionProps }) => (\n <Button key={label} type=\"button\" {...actionProps}>\n {label}\n </Button>\n ))}\n </Stack>\n )}\n {props.rightActions && (\n <Stack\n direction=\"horizontal\"\n alignX=\"end\"\n data-testid=\"right-actions-container\"\n >\n {props.rightActions.map(({ label, ...actionProps }) => (\n <Button key={label} type=\"button\" {...actionProps}>\n {label}\n </Button>\n ))}\n </Stack>\n )}\n </Stack>\n </Card.Footer>\n )}\n </Card.Surface>\n </Dialog>\n </div>\n )}\n </AnimatePresence>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AAea,MAAA,KAAK,GAAG,CAAC,KAAiB,KAAI;AACzC,IAAA,MAAM,EACJ,UAAU,EACV,qBAAqB,GAAG,IAAI,EAC5B,YAAY,GAAG,KAAK,EACpB,SAAS,GAAG,KAAK,EACjB,OAAO,GAAG,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,QAAQ,EACR,SAAS,GACV,GAAG,KAAK;AAET,IAAA,MAAM,QAAQ,GAAG,MAAM,CAA2B,IAAI,CAAC;IACvD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC;IAE9E,SAAS,CAAC,MAAK;;AACb,QAAA,IAAI,UAAU,EAAE;YACd,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,eAAe,CAAC,MAAM,CAAC,CAAC;AAC1C,YAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,SAAS,EAAE;AAC9B;AACH,KAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAEhB,IAAA,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,cAAc,CAAC;IAE1F,MAAM,OAAO,GAAG,MAAK;;AACnB,QAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,KAAK,EAAE;AACzB,QAAA,aAAa,EAAE;AACjB,KAAC;IAED,QACE,oBAAC,eAAe,EAAA,IAAA,EACb,UAAU,KACT,4CAAiB,gBAAgB,EAAA;AAC/B,QAAA,KAAA,CAAA,aAAA,CAAC,iBAAiB,EAAG,IAAA,CAAA;AACrB,QAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EACL,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,YAAY,GAAG,wBAAwB,GAAG,SAAS,EAC9D,OAAO,EAAE,OAAO,EACC,kBAAA,EAAA,aAAa,EAC9B,SAAS,EAAE,SAAS,EAAA;YAEpB,KAAC,CAAA,aAAA,CAAA,IAAI,CAAC,OAAO,EAAA,IAAA;gBACV,aAAa,CAAC,KAAK,CAAC,IACnB,KAAK,CAAC,UAAU,KAEhB,KAAC,CAAA,aAAA,CAAA,UAAU,IACT,EAAE,EAAC,aAAa,EAChB,aAAa,EAAC,cAAc,EAC5B,KAAK,EAAE,KAAK,CAAC,WAAW,EACxB,QAAQ,EAAE,KAAK,CAAC,cAAc,MACzB,qBAAqB,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAA,CACxD,CACH;AAED,gBAAA,KAAA,CAAA,aAAA,CAAC,WAAW,EACV,EAAA,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,oBAAoB,EAClC,SAAS,EAAE,SAAS,EAAA,EAEnB,QAAQ,CACG;AAEb,gBAAA,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU;AAExC,gBAAA,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,YAAY,CAAC,KACjE,KAAC,CAAA,aAAA,CAAA,IAAI,CAAC,MAAM,EAAA,IAAA;AACV,oBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAC,EAAA,SAAS,EAAC,YAAY,EAAC,MAAM,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,GAAG,KAAK,EAAA;wBACxE,KAAK,CAAC,WAAW,KAChB,KAAA,CAAA,aAAA,CAAC,KAAK,EACJ,EAAA,SAAS,EAAC,YAAY,EACtB,MAAM,EAAC,OAAO,EAAA,aAAA,EACF,wBAAwB,EAAA,EAEnC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,MAC/C,KAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,GAAG,EAAE,KAAK,EAAE,IAAI,EAAC,QAAQ,EAAA,GAAK,WAAW,EAAA,EAC9C,KAAK,CACC,CACV,CAAC,CACI,CACT;AACA,wBAAA,KAAK,CAAC,YAAY,KACjB,KAAC,CAAA,aAAA,CAAA,KAAK,EACJ,EAAA,SAAS,EAAC,YAAY,EACtB,MAAM,EAAC,KAAK,EACA,aAAA,EAAA,yBAAyB,EAEpC,EAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,MAChD,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAC,QAAQ,EAAA,GAAK,WAAW,EAAA,EAC9C,KAAK,CACC,CACV,CAAC,CACI,CACT,CACK,CACI,CACf,CACY,CACR,CACL,CACP,CACe;AAEtB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sources":["../../../src/components/Modal/types.ts"],"sourcesContent":["import { ButtonProps } from '../Button/types';\n\nexport type ModalVariants = 'xs' | 'sm' | 'base' | 'lg';\n\n// Base Modal props shared by all variants.\ntype BaseModalProps = {\n shouldShow: boolean;\n showHeaderCloseButton?: boolean;\n fullBleed?: boolean;\n variant?: ModalVariants;\n onClose: () => void;\n children: React.ReactNode;\n className?: string;\n};\n\n// Optional slot types.\n\ntype WithHeaderSlot = {\n headerSlot: React.ReactNode;\n};\n\ntype WithFooterSlot = {\n footerSlot: React.ReactNode;\n};\n\n// Default header and footer options.\n\ntype DefaultHeaderOptions = {\n headerTitle: string;\n headerSubtitle?: string;\n};\n\nexport type Action = { label: string } & ButtonProps;\ntype DefaultFooterOptions = {\n leftActions?: Action[];\n rightActions?: Action[];\n};\n\n// Either we have a header slot or default header options, same for footer.\ntype HeaderOptions = WithHeaderSlot | DefaultHeaderOptions;\ntype FooterOptions = WithFooterSlot | DefaultFooterOptions;\n\n// Modal props are shared props + the header and footer options (potentially with slots.)\nexport type ModalProps = BaseModalProps & HeaderOptions & FooterOptions;\n\n/**\n * Type guard to check if a header slot has been passed to the component.\n */\nexport const hasHeaderSlot = (\n props: ModalProps,\n): props is BaseModalProps & WithHeaderSlot & FooterOptions => {\n return !!(props as WithHeaderSlot).headerSlot;\n};\n\n/**\n * Type guard to check if a footer slot has been passed to the component.\n */\nexport const hasFooterSlot = (\n props: ModalProps,\n): props is BaseModalProps & HeaderOptions & WithFooterSlot => {\n return !!(props as WithFooterSlot).footerSlot;\n};\n"],"names":[],"mappings":";;AA6CA;;AAEG;AACU,MAAA,aAAa,GAAG,CAC3B,KAAiB,KAC2C;AAC5D,IAAA,OAAO,CAAC,CAAE,KAAwB,CAAC,UAAU;AAC/C;AAEA;;AAEG;AACU,MAAA,aAAa,GAAG,CAC3B,KAAiB,KAC2C;AAC5D,IAAA,OAAO,CAAC,CAAE,KAAwB,CAAC,UAAU;AAC/C;;;;;"}
1
+ {"version":3,"file":"types.cjs","sources":["../../../src/components/Modal/types.ts"],"sourcesContent":["import { ButtonProps } from '../Button/types';\n\nexport type ModalVariants = 'xs' | 'sm' | 'base' | 'lg';\n\n// Base Modal props shared by all variants.\ntype BaseModalProps = {\n shouldShow: boolean;\n showHeaderCloseButton?: boolean;\n preventClose?: boolean;\n fullBleed?: boolean;\n variant?: ModalVariants;\n onClose: () => void;\n children: React.ReactNode;\n className?: string;\n};\n\n// Optional slot types.\n\ntype WithHeaderSlot = {\n headerSlot: React.ReactNode;\n};\n\ntype WithFooterSlot = {\n footerSlot: React.ReactNode;\n};\n\n// Default header and footer options.\n\ntype DefaultHeaderOptions = {\n headerTitle: string;\n headerSubtitle?: string;\n};\n\nexport type Action = { label: string } & ButtonProps;\ntype DefaultFooterOptions = {\n leftActions?: Action[];\n rightActions?: Action[];\n};\n\n// Either we have a header slot or default header options, same for footer.\ntype HeaderOptions = WithHeaderSlot | DefaultHeaderOptions;\ntype FooterOptions = WithFooterSlot | DefaultFooterOptions;\n\n// Modal props are shared props + the header and footer options (potentially with slots.)\nexport type ModalProps = BaseModalProps & HeaderOptions & FooterOptions;\n\n/**\n * Type guard to check if a header slot has been passed to the component.\n */\nexport const hasHeaderSlot = (\n props: ModalProps,\n): props is BaseModalProps & WithHeaderSlot & FooterOptions => {\n return !!(props as WithHeaderSlot).headerSlot;\n};\n\n/**\n * Type guard to check if a footer slot has been passed to the component.\n */\nexport const hasFooterSlot = (\n props: ModalProps,\n): props is BaseModalProps & HeaderOptions & WithFooterSlot => {\n return !!(props as WithFooterSlot).footerSlot;\n};\n"],"names":[],"mappings":";;AA8CA;;AAEG;AACU,MAAA,aAAa,GAAG,CAC3B,KAAiB,KAC2C;AAC5D,IAAA,OAAO,CAAC,CAAE,KAAwB,CAAC,UAAU;AAC/C;AAEA;;AAEG;AACU,MAAA,aAAa,GAAG,CAC3B,KAAiB,KAC2C;AAC5D,IAAA,OAAO,CAAC,CAAE,KAAwB,CAAC,UAAU;AAC/C;;;;;"}
@@ -4,6 +4,7 @@ export type ModalVariants = 'xs' | 'sm' | 'base' | 'lg';
4
4
  type BaseModalProps = {
5
5
  shouldShow: boolean;
6
6
  showHeaderCloseButton?: boolean;
7
+ preventClose?: boolean;
7
8
  fullBleed?: boolean;
8
9
  variant?: ModalVariants;
9
10
  onClose: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/components/Modal/types.ts"],"sourcesContent":["import { ButtonProps } from '../Button/types';\n\nexport type ModalVariants = 'xs' | 'sm' | 'base' | 'lg';\n\n// Base Modal props shared by all variants.\ntype BaseModalProps = {\n shouldShow: boolean;\n showHeaderCloseButton?: boolean;\n fullBleed?: boolean;\n variant?: ModalVariants;\n onClose: () => void;\n children: React.ReactNode;\n className?: string;\n};\n\n// Optional slot types.\n\ntype WithHeaderSlot = {\n headerSlot: React.ReactNode;\n};\n\ntype WithFooterSlot = {\n footerSlot: React.ReactNode;\n};\n\n// Default header and footer options.\n\ntype DefaultHeaderOptions = {\n headerTitle: string;\n headerSubtitle?: string;\n};\n\nexport type Action = { label: string } & ButtonProps;\ntype DefaultFooterOptions = {\n leftActions?: Action[];\n rightActions?: Action[];\n};\n\n// Either we have a header slot or default header options, same for footer.\ntype HeaderOptions = WithHeaderSlot | DefaultHeaderOptions;\ntype FooterOptions = WithFooterSlot | DefaultFooterOptions;\n\n// Modal props are shared props + the header and footer options (potentially with slots.)\nexport type ModalProps = BaseModalProps & HeaderOptions & FooterOptions;\n\n/**\n * Type guard to check if a header slot has been passed to the component.\n */\nexport const hasHeaderSlot = (\n props: ModalProps,\n): props is BaseModalProps & WithHeaderSlot & FooterOptions => {\n return !!(props as WithHeaderSlot).headerSlot;\n};\n\n/**\n * Type guard to check if a footer slot has been passed to the component.\n */\nexport const hasFooterSlot = (\n props: ModalProps,\n): props is BaseModalProps & HeaderOptions & WithFooterSlot => {\n return !!(props as WithFooterSlot).footerSlot;\n};\n"],"names":[],"mappings":"AA6CA;;AAEG;AACU,MAAA,aAAa,GAAG,CAC3B,KAAiB,KAC2C;AAC5D,IAAA,OAAO,CAAC,CAAE,KAAwB,CAAC,UAAU;AAC/C;AAEA;;AAEG;AACU,MAAA,aAAa,GAAG,CAC3B,KAAiB,KAC2C;AAC5D,IAAA,OAAO,CAAC,CAAE,KAAwB,CAAC,UAAU;AAC/C;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../src/components/Modal/types.ts"],"sourcesContent":["import { ButtonProps } from '../Button/types';\n\nexport type ModalVariants = 'xs' | 'sm' | 'base' | 'lg';\n\n// Base Modal props shared by all variants.\ntype BaseModalProps = {\n shouldShow: boolean;\n showHeaderCloseButton?: boolean;\n preventClose?: boolean;\n fullBleed?: boolean;\n variant?: ModalVariants;\n onClose: () => void;\n children: React.ReactNode;\n className?: string;\n};\n\n// Optional slot types.\n\ntype WithHeaderSlot = {\n headerSlot: React.ReactNode;\n};\n\ntype WithFooterSlot = {\n footerSlot: React.ReactNode;\n};\n\n// Default header and footer options.\n\ntype DefaultHeaderOptions = {\n headerTitle: string;\n headerSubtitle?: string;\n};\n\nexport type Action = { label: string } & ButtonProps;\ntype DefaultFooterOptions = {\n leftActions?: Action[];\n rightActions?: Action[];\n};\n\n// Either we have a header slot or default header options, same for footer.\ntype HeaderOptions = WithHeaderSlot | DefaultHeaderOptions;\ntype FooterOptions = WithFooterSlot | DefaultFooterOptions;\n\n// Modal props are shared props + the header and footer options (potentially with slots.)\nexport type ModalProps = BaseModalProps & HeaderOptions & FooterOptions;\n\n/**\n * Type guard to check if a header slot has been passed to the component.\n */\nexport const hasHeaderSlot = (\n props: ModalProps,\n): props is BaseModalProps & WithHeaderSlot & FooterOptions => {\n return !!(props as WithHeaderSlot).headerSlot;\n};\n\n/**\n * Type guard to check if a footer slot has been passed to the component.\n */\nexport const hasFooterSlot = (\n props: ModalProps,\n): props is BaseModalProps & HeaderOptions & WithFooterSlot => {\n return !!(props as WithFooterSlot).footerSlot;\n};\n"],"names":[],"mappings":"AA8CA;;AAEG;AACU,MAAA,aAAa,GAAG,CAC3B,KAAiB,KAC2C;AAC5D,IAAA,OAAO,CAAC,CAAE,KAAwB,CAAC,UAAU;AAC/C;AAEA;;AAEG;AACU,MAAA,aAAa,GAAG,CAC3B,KAAiB,KAC2C;AAC5D,IAAA,OAAO,CAAC,CAAE,KAAwB,CAAC,UAAU;AAC/C;;;;"}
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const preventDefaultEventOnESC = (e) => {
4
+ if (e.key === 'Escape')
5
+ e.preventDefault();
6
+ };
7
+
8
+ exports.preventDefaultEventOnESC = preventDefaultEventOnESC;
9
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sources":["../../../src/components/Modal/utils.ts"],"sourcesContent":["export const preventDefaultEventOnESC = (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Escape') e.preventDefault();\n};\n"],"names":[],"mappings":";;AAAa,MAAA,wBAAwB,GAAG,CAAC,CAAmC,KAAI;AAC9E,IAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;QAAE,CAAC,CAAC,cAAc,EAAE;AAC5C;;;;"}
@@ -0,0 +1 @@
1
+ export declare const preventDefaultEventOnESC: (e: React.KeyboardEvent<HTMLElement>) => void;
@@ -0,0 +1,7 @@
1
+ const preventDefaultEventOnESC = (e) => {
2
+ if (e.key === 'Escape')
3
+ e.preventDefault();
4
+ };
5
+
6
+ export { preventDefaultEventOnESC };
7
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/components/Modal/utils.ts"],"sourcesContent":["export const preventDefaultEventOnESC = (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Escape') e.preventDefault();\n};\n"],"names":[],"mappings":"AAAa,MAAA,wBAAwB,GAAG,CAAC,CAAmC,KAAI;AAC9E,IAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;QAAE,CAAC,CAAC,cAAc,EAAE;AAC5C;;;;"}
@@ -15,7 +15,6 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
15
15
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
16
16
  var ResizeObserver__default = /*#__PURE__*/_interopDefaultCompat(ResizeObserver);
17
17
 
18
- /* eslint-disable consistent-return */
19
18
  const Popover = ({ id: passedId, children, zIndex = index.theme.layers.popup, placement = 'bottom', anchorElement, rootElementRef, onShouldClose, style, disableFocusLock, removeBackdrop = false, useAnchorWidth, ignoreAriaWarnings, ...dialogProps }) => {
20
19
  // Set up PopperJS
21
20
  const [popperElement, setPopperElement] = React.useState(null);
@@ -39,19 +38,23 @@ const Popover = ({ id: passedId, children, zIndex = index.theme.layers.popup, pl
39
38
  */
40
39
  React.useEffect(() => {
41
40
  if (!update || !popperElement)
42
- return;
41
+ return undefined;
43
42
  const resizeObserver = new ResizeObserver__default.default(update);
44
43
  resizeObserver.observe(popperElement);
45
- return () => resizeObserver.disconnect();
44
+ return () => {
45
+ resizeObserver.disconnect();
46
+ };
46
47
  }, [update, popperElement]);
47
48
  /**
48
49
  * When window is resized, force popper update
49
50
  */
50
51
  React.useEffect(() => {
51
52
  if (!update)
52
- return;
53
+ return undefined;
53
54
  window.addEventListener('resize', update);
54
- return () => window.removeEventListener('resize', update);
55
+ return () => {
56
+ window.removeEventListener('resize', update);
57
+ };
55
58
  }, [update]);
56
59
  return (React__default.default.createElement(Portal.Portal, { rootElementRef: rootElementRef },
57
60
  !removeBackdrop && (React__default.default.createElement(styled.Backdrop, { onClick: onClose, zIndex: zIndex, "data-testid": "popover-backdrop" })),
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.cjs","sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["/* eslint-disable consistent-return */\nimport React, { useState, useEffect, useMemo } from 'react';\nimport { usePopper } from 'react-popper';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport { Portal } from '../Portal';\nimport { theme } from '../../theme';\nimport { PopoverDialog, Backdrop } from './styled';\nimport { generateId } from '../../utils';\nimport { useUpdateAriaAnchor } from './hooks/useUpdateAriaAnchor';\nimport { PopoverProps } from './types';\nimport { useHandleFocus } from './hooks/useHandleFocus';\n\nexport const Popover = ({\n id: passedId,\n children,\n zIndex = theme.layers.popup,\n placement = 'bottom',\n anchorElement,\n rootElementRef,\n onShouldClose,\n style,\n disableFocusLock,\n removeBackdrop = false,\n useAnchorWidth,\n ignoreAriaWarnings,\n ...dialogProps\n}: PopoverProps) => {\n // Set up PopperJS\n const [popperElement, setPopperElement] = useState<HTMLDialogElement | null>(null);\n const { styles, attributes, update } = usePopper(anchorElement, popperElement, { placement });\n\n // Setup popover id to use passed, or generate its' own.\n const id = useMemo(() => passedId || generateId('popover'), [passedId]);\n\n // Check and update aria for anchor, only works once this has rendered for the first time though.\n useUpdateAriaAnchor({ anchorElement, popoverId: id, ignoreAriaWarnings });\n\n const onClose = () => {\n anchorElement?.focus();\n onShouldClose?.();\n };\n\n const { handleKeyDown } = useHandleFocus({\n popperElement,\n anchorElement,\n onClose,\n disableFocusLock,\n });\n\n /**\n * When content size is changed, force popper update\n */\n useEffect(() => {\n if (!update || !popperElement) return;\n const resizeObserver = new ResizeObserver(update);\n resizeObserver.observe(popperElement);\n\n return () => resizeObserver.disconnect();\n }, [update, popperElement]);\n\n /**\n * When window is resized, force popper update\n */\n useEffect(() => {\n if (!update) return;\n window.addEventListener('resize', update);\n\n return () => window.removeEventListener('resize', update);\n }, [update]);\n\n return (\n <Portal rootElementRef={rootElementRef}>\n {!removeBackdrop && (\n <Backdrop onClick={onClose} zIndex={zIndex} data-testid=\"popover-backdrop\" />\n )}\n <PopoverDialog\n open\n id={id}\n zIndex={zIndex}\n ref={setPopperElement}\n style={{\n ...styles.popper,\n ...style,\n ...(useAnchorWidth ? { minWidth: anchorElement?.clientWidth } : {}),\n }}\n onKeyDown={handleKeyDown}\n {...attributes.popper}\n {...dialogProps}\n >\n {children}\n </PopoverDialog>\n </Portal>\n );\n};\n"],"names":["theme","useState","usePopper","useMemo","generateId","useUpdateAriaAnchor","useHandleFocus","useEffect","ResizeObserver","React","Portal","Backdrop","PopoverDialog"],"mappings":";;;;;;;;;;;;;;;;;AAAA;MAaa,OAAO,GAAG,CAAC,EACtB,EAAE,EAAE,QAAQ,EACZ,QAAQ,EACR,MAAM,GAAGA,WAAK,CAAC,MAAM,CAAC,KAAK,EAC3B,SAAS,GAAG,QAAQ,EACpB,aAAa,EACb,cAAc,EACd,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,cAAc,GAAG,KAAK,EACtB,cAAc,EACd,kBAAkB,EAClB,GAAG,WAAW,EACD,KAAI;;IAEjB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGC,cAAQ,CAA2B,IAAI,CAAC;AAClF,IAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAGC,qBAAS,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC;;AAG7F,IAAA,MAAM,EAAE,GAAGC,aAAO,CAAC,MAAM,QAAQ,IAAIC,qBAAU,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;;IAGvEC,uCAAmB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC;IAEzE,MAAM,OAAO,GAAG,MAAK;AACnB,QAAA,aAAa,aAAb,aAAa,KAAA,SAAA,GAAA,SAAA,GAAb,aAAa,CAAE,KAAK,EAAE;AACtB,QAAA,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,SAAA,GAAA,SAAA,GAAA,aAAa,EAAI;AACnB,KAAC;AAED,IAAA,MAAM,EAAE,aAAa,EAAE,GAAGC,6BAAc,CAAC;QACvC,aAAa;QACb,aAAa;QACb,OAAO;QACP,gBAAgB;AACjB,KAAA,CAAC;AAEF;;AAEG;IACHC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;YAAE;AAC/B,QAAA,MAAM,cAAc,GAAG,IAAIC,+BAAc,CAAC,MAAM,CAAC;AACjD,QAAA,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC;AAErC,QAAA,OAAO,MAAM,cAAc,CAAC,UAAU,EAAE;AAC1C,KAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE3B;;AAEG;IACHD,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;QAEzC,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC3D,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEZ,IAAA,QACEE,sBAAC,CAAA,aAAA,CAAAC,aAAM,EAAC,EAAA,cAAc,EAAE,cAAc,EAAA;AACnC,QAAA,CAAC,cAAc,KACdD,sBAAC,CAAA,aAAA,CAAAE,eAAQ,IAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAc,aAAA,EAAA,kBAAkB,GAAG,CAC9E;AACD,QAAAF,sBAAA,CAAA,aAAA,CAACG,oBAAa,EACZ,EAAA,IAAI,EACJ,IAAA,EAAA,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE;gBACL,GAAG,MAAM,CAAC,MAAM;AAChB,gBAAA,GAAG,KAAK;gBACR,IAAI,cAAc,GAAG,EAAE,QAAQ,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,SAAA,GAAA,SAAA,GAAA,aAAa,CAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AACpE,aAAA,EACD,SAAS,EAAE,aAAa,EAAA,GACpB,UAAU,CAAC,MAAM,EACjB,GAAA,WAAW,EAEd,EAAA,QAAQ,CACK,CACT;AAEb;;;;"}
1
+ {"version":3,"file":"Popover.cjs","sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo } from 'react';\nimport { usePopper } from 'react-popper';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport { Portal } from '../Portal';\nimport { theme } from '../../theme';\nimport { PopoverDialog, Backdrop } from './styled';\nimport { generateId } from '../../utils';\nimport { useUpdateAriaAnchor } from './hooks/useUpdateAriaAnchor';\nimport { PopoverProps } from './types';\nimport { useHandleFocus } from './hooks/useHandleFocus';\n\nexport const Popover = ({\n id: passedId,\n children,\n zIndex = theme.layers.popup,\n placement = 'bottom',\n anchorElement,\n rootElementRef,\n onShouldClose,\n style,\n disableFocusLock,\n removeBackdrop = false,\n useAnchorWidth,\n ignoreAriaWarnings,\n ...dialogProps\n}: PopoverProps) => {\n // Set up PopperJS\n const [popperElement, setPopperElement] = useState<HTMLDialogElement | null>(null);\n const { styles, attributes, update } = usePopper(anchorElement, popperElement, { placement });\n\n // Setup popover id to use passed, or generate its' own.\n const id = useMemo(() => passedId || generateId('popover'), [passedId]);\n\n // Check and update aria for anchor, only works once this has rendered for the first time though.\n useUpdateAriaAnchor({ anchorElement, popoverId: id, ignoreAriaWarnings });\n\n const onClose = () => {\n anchorElement?.focus();\n onShouldClose?.();\n };\n\n const { handleKeyDown } = useHandleFocus({\n popperElement,\n anchorElement,\n onClose,\n disableFocusLock,\n });\n\n /**\n * When content size is changed, force popper update\n */\n useEffect(() => {\n if (!update || !popperElement) return undefined;\n const resizeObserver = new ResizeObserver(update);\n resizeObserver.observe(popperElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [update, popperElement]);\n\n /**\n * When window is resized, force popper update\n */\n useEffect(() => {\n if (!update) return undefined;\n window.addEventListener('resize', update);\n\n return () => {\n window.removeEventListener('resize', update);\n };\n }, [update]);\n\n return (\n <Portal rootElementRef={rootElementRef}>\n {!removeBackdrop && (\n <Backdrop onClick={onClose} zIndex={zIndex} data-testid=\"popover-backdrop\" />\n )}\n <PopoverDialog\n open\n id={id}\n zIndex={zIndex}\n ref={setPopperElement}\n style={{\n ...styles.popper,\n ...style,\n ...(useAnchorWidth ? { minWidth: anchorElement?.clientWidth } : {}),\n }}\n onKeyDown={handleKeyDown}\n {...attributes.popper}\n {...dialogProps}\n >\n {children}\n </PopoverDialog>\n </Portal>\n );\n};\n"],"names":["theme","useState","usePopper","useMemo","generateId","useUpdateAriaAnchor","useHandleFocus","useEffect","ResizeObserver","React","Portal","Backdrop","PopoverDialog"],"mappings":";;;;;;;;;;;;;;;;;MAYa,OAAO,GAAG,CAAC,EACtB,EAAE,EAAE,QAAQ,EACZ,QAAQ,EACR,MAAM,GAAGA,WAAK,CAAC,MAAM,CAAC,KAAK,EAC3B,SAAS,GAAG,QAAQ,EACpB,aAAa,EACb,cAAc,EACd,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,cAAc,GAAG,KAAK,EACtB,cAAc,EACd,kBAAkB,EAClB,GAAG,WAAW,EACD,KAAI;;IAEjB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGC,cAAQ,CAA2B,IAAI,CAAC;AAClF,IAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAGC,qBAAS,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC;;AAG7F,IAAA,MAAM,EAAE,GAAGC,aAAO,CAAC,MAAM,QAAQ,IAAIC,qBAAU,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;;IAGvEC,uCAAmB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC;IAEzE,MAAM,OAAO,GAAG,MAAK;AACnB,QAAA,aAAa,aAAb,aAAa,KAAA,SAAA,GAAA,SAAA,GAAb,aAAa,CAAE,KAAK,EAAE;AACtB,QAAA,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,SAAA,GAAA,SAAA,GAAA,aAAa,EAAI;AACnB,KAAC;AAED,IAAA,MAAM,EAAE,aAAa,EAAE,GAAGC,6BAAc,CAAC;QACvC,aAAa;QACb,aAAa;QACb,OAAO;QACP,gBAAgB;AACjB,KAAA,CAAC;AAEF;;AAEG;IACHC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,SAAS;AAC/C,QAAA,MAAM,cAAc,GAAG,IAAIC,+BAAc,CAAC,MAAM,CAAC;AACjD,QAAA,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC;AAErC,QAAA,OAAO,MAAK;YACV,cAAc,CAAC,UAAU,EAAE;AAC7B,SAAC;AACH,KAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE3B;;AAEG;IACHD,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS;AAC7B,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAEzC,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC9C,SAAC;AACH,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEZ,IAAA,QACEE,sBAAC,CAAA,aAAA,CAAAC,aAAM,EAAC,EAAA,cAAc,EAAE,cAAc,EAAA;AACnC,QAAA,CAAC,cAAc,KACdD,sBAAC,CAAA,aAAA,CAAAE,eAAQ,IAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAc,aAAA,EAAA,kBAAkB,GAAG,CAC9E;AACD,QAAAF,sBAAA,CAAA,aAAA,CAACG,oBAAa,EACZ,EAAA,IAAI,EACJ,IAAA,EAAA,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE;gBACL,GAAG,MAAM,CAAC,MAAM;AAChB,gBAAA,GAAG,KAAK;gBACR,IAAI,cAAc,GAAG,EAAE,QAAQ,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,SAAA,GAAA,SAAA,GAAA,aAAa,CAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AACpE,aAAA,EACD,SAAS,EAAE,aAAa,EAAA,GACpB,UAAU,CAAC,MAAM,EACjB,GAAA,WAAW,EAEd,EAAA,QAAQ,CACK,CACT;AAEb;;;;"}
@@ -8,7 +8,6 @@ import { generateId } from '../../utils/generateId.js';
8
8
  import { useUpdateAriaAnchor } from './hooks/useUpdateAriaAnchor.js';
9
9
  import { useHandleFocus } from './hooks/useHandleFocus.js';
10
10
 
11
- /* eslint-disable consistent-return */
12
11
  const Popover = ({ id: passedId, children, zIndex = theme.layers.popup, placement = 'bottom', anchorElement, rootElementRef, onShouldClose, style, disableFocusLock, removeBackdrop = false, useAnchorWidth, ignoreAriaWarnings, ...dialogProps }) => {
13
12
  // Set up PopperJS
14
13
  const [popperElement, setPopperElement] = useState(null);
@@ -32,19 +31,23 @@ const Popover = ({ id: passedId, children, zIndex = theme.layers.popup, placemen
32
31
  */
33
32
  useEffect(() => {
34
33
  if (!update || !popperElement)
35
- return;
34
+ return undefined;
36
35
  const resizeObserver = new ResizeObserver(update);
37
36
  resizeObserver.observe(popperElement);
38
- return () => resizeObserver.disconnect();
37
+ return () => {
38
+ resizeObserver.disconnect();
39
+ };
39
40
  }, [update, popperElement]);
40
41
  /**
41
42
  * When window is resized, force popper update
42
43
  */
43
44
  useEffect(() => {
44
45
  if (!update)
45
- return;
46
+ return undefined;
46
47
  window.addEventListener('resize', update);
47
- return () => window.removeEventListener('resize', update);
48
+ return () => {
49
+ window.removeEventListener('resize', update);
50
+ };
48
51
  }, [update]);
49
52
  return (React.createElement(Portal, { rootElementRef: rootElementRef },
50
53
  !removeBackdrop && (React.createElement(Backdrop, { onClick: onClose, zIndex: zIndex, "data-testid": "popover-backdrop" })),
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["/* eslint-disable consistent-return */\nimport React, { useState, useEffect, useMemo } from 'react';\nimport { usePopper } from 'react-popper';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport { Portal } from '../Portal';\nimport { theme } from '../../theme';\nimport { PopoverDialog, Backdrop } from './styled';\nimport { generateId } from '../../utils';\nimport { useUpdateAriaAnchor } from './hooks/useUpdateAriaAnchor';\nimport { PopoverProps } from './types';\nimport { useHandleFocus } from './hooks/useHandleFocus';\n\nexport const Popover = ({\n id: passedId,\n children,\n zIndex = theme.layers.popup,\n placement = 'bottom',\n anchorElement,\n rootElementRef,\n onShouldClose,\n style,\n disableFocusLock,\n removeBackdrop = false,\n useAnchorWidth,\n ignoreAriaWarnings,\n ...dialogProps\n}: PopoverProps) => {\n // Set up PopperJS\n const [popperElement, setPopperElement] = useState<HTMLDialogElement | null>(null);\n const { styles, attributes, update } = usePopper(anchorElement, popperElement, { placement });\n\n // Setup popover id to use passed, or generate its' own.\n const id = useMemo(() => passedId || generateId('popover'), [passedId]);\n\n // Check and update aria for anchor, only works once this has rendered for the first time though.\n useUpdateAriaAnchor({ anchorElement, popoverId: id, ignoreAriaWarnings });\n\n const onClose = () => {\n anchorElement?.focus();\n onShouldClose?.();\n };\n\n const { handleKeyDown } = useHandleFocus({\n popperElement,\n anchorElement,\n onClose,\n disableFocusLock,\n });\n\n /**\n * When content size is changed, force popper update\n */\n useEffect(() => {\n if (!update || !popperElement) return;\n const resizeObserver = new ResizeObserver(update);\n resizeObserver.observe(popperElement);\n\n return () => resizeObserver.disconnect();\n }, [update, popperElement]);\n\n /**\n * When window is resized, force popper update\n */\n useEffect(() => {\n if (!update) return;\n window.addEventListener('resize', update);\n\n return () => window.removeEventListener('resize', update);\n }, [update]);\n\n return (\n <Portal rootElementRef={rootElementRef}>\n {!removeBackdrop && (\n <Backdrop onClick={onClose} zIndex={zIndex} data-testid=\"popover-backdrop\" />\n )}\n <PopoverDialog\n open\n id={id}\n zIndex={zIndex}\n ref={setPopperElement}\n style={{\n ...styles.popper,\n ...style,\n ...(useAnchorWidth ? { minWidth: anchorElement?.clientWidth } : {}),\n }}\n onKeyDown={handleKeyDown}\n {...attributes.popper}\n {...dialogProps}\n >\n {children}\n </PopoverDialog>\n </Portal>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAAA;MAaa,OAAO,GAAG,CAAC,EACtB,EAAE,EAAE,QAAQ,EACZ,QAAQ,EACR,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAC3B,SAAS,GAAG,QAAQ,EACpB,aAAa,EACb,cAAc,EACd,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,cAAc,GAAG,KAAK,EACtB,cAAc,EACd,kBAAkB,EAClB,GAAG,WAAW,EACD,KAAI;;IAEjB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC;AAClF,IAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC;;AAG7F,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;;IAGvE,mBAAmB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC;IAEzE,MAAM,OAAO,GAAG,MAAK;AACnB,QAAA,aAAa,aAAb,aAAa,KAAA,SAAA,GAAA,SAAA,GAAb,aAAa,CAAE,KAAK,EAAE;AACtB,QAAA,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,SAAA,GAAA,SAAA,GAAA,aAAa,EAAI;AACnB,KAAC;AAED,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC;QACvC,aAAa;QACb,aAAa;QACb,OAAO;QACP,gBAAgB;AACjB,KAAA,CAAC;AAEF;;AAEG;IACH,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;YAAE;AAC/B,QAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC;AACjD,QAAA,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC;AAErC,QAAA,OAAO,MAAM,cAAc,CAAC,UAAU,EAAE;AAC1C,KAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE3B;;AAEG;IACH,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;QAEzC,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC3D,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEZ,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,cAAc,EAAE,cAAc,EAAA;AACnC,QAAA,CAAC,cAAc,KACd,KAAC,CAAA,aAAA,CAAA,QAAQ,IAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAc,aAAA,EAAA,kBAAkB,GAAG,CAC9E;AACD,QAAA,KAAA,CAAA,aAAA,CAAC,aAAa,EACZ,EAAA,IAAI,EACJ,IAAA,EAAA,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE;gBACL,GAAG,MAAM,CAAC,MAAM;AAChB,gBAAA,GAAG,KAAK;gBACR,IAAI,cAAc,GAAG,EAAE,QAAQ,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,SAAA,GAAA,SAAA,GAAA,aAAa,CAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AACpE,aAAA,EACD,SAAS,EAAE,aAAa,EAAA,GACpB,UAAU,CAAC,MAAM,EACjB,GAAA,WAAW,EAEd,EAAA,QAAQ,CACK,CACT;AAEb;;;;"}
1
+ {"version":3,"file":"Popover.js","sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo } from 'react';\nimport { usePopper } from 'react-popper';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport { Portal } from '../Portal';\nimport { theme } from '../../theme';\nimport { PopoverDialog, Backdrop } from './styled';\nimport { generateId } from '../../utils';\nimport { useUpdateAriaAnchor } from './hooks/useUpdateAriaAnchor';\nimport { PopoverProps } from './types';\nimport { useHandleFocus } from './hooks/useHandleFocus';\n\nexport const Popover = ({\n id: passedId,\n children,\n zIndex = theme.layers.popup,\n placement = 'bottom',\n anchorElement,\n rootElementRef,\n onShouldClose,\n style,\n disableFocusLock,\n removeBackdrop = false,\n useAnchorWidth,\n ignoreAriaWarnings,\n ...dialogProps\n}: PopoverProps) => {\n // Set up PopperJS\n const [popperElement, setPopperElement] = useState<HTMLDialogElement | null>(null);\n const { styles, attributes, update } = usePopper(anchorElement, popperElement, { placement });\n\n // Setup popover id to use passed, or generate its' own.\n const id = useMemo(() => passedId || generateId('popover'), [passedId]);\n\n // Check and update aria for anchor, only works once this has rendered for the first time though.\n useUpdateAriaAnchor({ anchorElement, popoverId: id, ignoreAriaWarnings });\n\n const onClose = () => {\n anchorElement?.focus();\n onShouldClose?.();\n };\n\n const { handleKeyDown } = useHandleFocus({\n popperElement,\n anchorElement,\n onClose,\n disableFocusLock,\n });\n\n /**\n * When content size is changed, force popper update\n */\n useEffect(() => {\n if (!update || !popperElement) return undefined;\n const resizeObserver = new ResizeObserver(update);\n resizeObserver.observe(popperElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [update, popperElement]);\n\n /**\n * When window is resized, force popper update\n */\n useEffect(() => {\n if (!update) return undefined;\n window.addEventListener('resize', update);\n\n return () => {\n window.removeEventListener('resize', update);\n };\n }, [update]);\n\n return (\n <Portal rootElementRef={rootElementRef}>\n {!removeBackdrop && (\n <Backdrop onClick={onClose} zIndex={zIndex} data-testid=\"popover-backdrop\" />\n )}\n <PopoverDialog\n open\n id={id}\n zIndex={zIndex}\n ref={setPopperElement}\n style={{\n ...styles.popper,\n ...style,\n ...(useAnchorWidth ? { minWidth: anchorElement?.clientWidth } : {}),\n }}\n onKeyDown={handleKeyDown}\n {...attributes.popper}\n {...dialogProps}\n >\n {children}\n </PopoverDialog>\n </Portal>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,51 +1,34 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var ReactDOM = require('react-dom');
5
- var generateId = require('../../utils/generateId.cjs');
4
+ var reactDom = require('react-dom');
5
+ require('../../hooks/useFocusVisible.cjs');
6
+ var useId = require('../../hooks/useId.cjs');
7
+ var utils = require('./utils.cjs');
6
8
 
7
9
  /**
8
10
  * The portal component renders content on the document `body` unless `rootElementRef` is passed.
9
11
  */
10
- class Portal extends React.PureComponent {
11
- constructor(props) {
12
- super(props);
13
- this.id = generateId.generateId('portal');
14
- this.portalNode = null;
15
- this.state = {
16
- isMounted: false,
17
- };
18
- }
19
- componentDidMount() {
20
- const { rootElementRef } = this.props;
21
- this.portalNode = document.createElement('div');
22
- this.portalNode.setAttribute('id', `portal-${this.id}`);
23
- this.portalNode.style.cssText = 'position: absolute; top: 0; left: 0;';
24
- if (rootElementRef) {
25
- rootElementRef === null || rootElementRef === undefined ? undefined : rootElementRef.appendChild(this.portalNode);
26
- }
27
- else {
28
- document.body.appendChild(this.portalNode);
29
- }
30
- this.setState({ isMounted: true });
31
- }
32
- componentWillUnmount() {
33
- if (this.portalNode) {
34
- const { rootElementRef } = this.props;
35
- if (rootElementRef) {
36
- rootElementRef.removeChild(this.portalNode);
37
- }
38
- else {
39
- document.body.removeChild(this.portalNode);
12
+ const Portal = ({ children, rootElementRef }) => {
13
+ const [isMounted, setIsMounted] = React.useState(false);
14
+ const [portalNode, setPortalNode] = React.useState(null);
15
+ const id = useId.useId({ prefix: 'portal' });
16
+ React.useEffect(() => {
17
+ const element = document.createElement('div');
18
+ element.id = `portal-${id}`;
19
+ element.style.cssText = 'position: absolute; top: 0; left: 0;';
20
+ const attachTo = rootElementRef || utils.getLastOpenDialog() || document.body;
21
+ attachTo.appendChild(element);
22
+ setPortalNode(element);
23
+ setIsMounted(true);
24
+ return () => {
25
+ if (document.contains(attachTo) && attachTo.contains(element)) {
26
+ attachTo.removeChild(element);
40
27
  }
41
- }
42
- }
43
- render() {
44
- const { children } = this.props;
45
- const { isMounted } = this.state;
46
- return this.portalNode && isMounted ? ReactDOM.createPortal(children, this.portalNode) : null;
47
- }
48
- }
28
+ };
29
+ }, [id, rootElementRef]);
30
+ return portalNode && isMounted ? reactDom.createPortal(children, portalNode) : null;
31
+ };
49
32
 
50
33
  exports.Portal = Portal;
51
34
  //# sourceMappingURL=Portal.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.cjs","sources":["../../../src/components/Portal/Portal.tsx"],"sourcesContent":["import { PureComponent, ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { generateId } from '../../utils/generateId';\n\ntype PortalProps = {\n children: ReactNode;\n rootElementRef?: HTMLElement;\n};\n\ntype PortalState = {\n isMounted: boolean;\n};\n\n/**\n * The portal component renders content on the document `body` unless `rootElementRef` is passed.\n */\nexport class Portal extends PureComponent<PortalProps, PortalState> {\n id = generateId('portal');\n\n portalNode: HTMLElement | null = null;\n\n constructor(props: PortalProps) {\n super(props);\n this.state = {\n isMounted: false,\n };\n }\n\n componentDidMount() {\n const { rootElementRef } = this.props;\n\n this.portalNode = document.createElement('div');\n this.portalNode.setAttribute('id', `portal-${this.id}`);\n this.portalNode.style.cssText = 'position: absolute; top: 0; left: 0;';\n\n if (rootElementRef) {\n rootElementRef?.appendChild(this.portalNode);\n } else {\n document.body.appendChild(this.portalNode);\n }\n\n this.setState({ isMounted: true });\n }\n\n componentWillUnmount() {\n if (this.portalNode) {\n const { rootElementRef } = this.props;\n if (rootElementRef) {\n rootElementRef.removeChild(this.portalNode);\n } else {\n document.body.removeChild(this.portalNode);\n }\n }\n }\n\n render(): React.ReactPortal | null {\n const { children } = this.props;\n const { isMounted } = this.state;\n\n return this.portalNode && isMounted ? createPortal(children, this.portalNode) : null;\n }\n}\n"],"names":["PureComponent","generateId","createPortal"],"mappings":";;;;;;AAaA;;AAEG;AACG,MAAO,MAAO,SAAQA,mBAAuC,CAAA;AAKjE,IAAA,WAAA,CAAY,KAAkB,EAAA;QAC5B,KAAK,CAAC,KAAK,CAAC;AALd,QAAA,IAAA,CAAA,EAAE,GAAGC,qBAAU,CAAC,QAAQ,CAAC;QAEzB,IAAU,CAAA,UAAA,GAAuB,IAAI;QAInC,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,SAAS,EAAE,KAAK;SACjB;;IAGH,iBAAiB,GAAA;AACf,QAAA,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK;QAErC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,sCAAsC;AAEtE,QAAA,IAAI,cAAc,EAAE;YAClB,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,SAAA,GAAA,SAAA,GAAd,cAAc,CAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7C;AAAM,aAAA;YACL,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;IAGpC,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK;AACrC,YAAA,IAAI,cAAc,EAAE;AAClB,gBAAA,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5C;AAAM,iBAAA;gBACL,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C;AACF;;IAGH,MAAM,GAAA;AACJ,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK;AAC/B,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK;QAEhC,OAAO,IAAI,CAAC,UAAU,IAAI,SAAS,GAAGC,qBAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI;;AAEvF;;;;"}
1
+ {"version":3,"file":"Portal.cjs","sources":["../../../src/components/Portal/Portal.tsx"],"sourcesContent":["import { useEffect, useState, ReactNode, FC } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useId } from '../../hooks';\nimport { getLastOpenDialog } from './utils';\n\ntype PortalProps = {\n children: ReactNode;\n rootElementRef?: HTMLElement;\n};\n\n/**\n * The portal component renders content on the document `body` unless `rootElementRef` is passed.\n */\nexport const Portal: FC<PortalProps> = ({ children, rootElementRef }: PortalProps) => {\n const [isMounted, setIsMounted] = useState(false);\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const id = useId({ prefix: 'portal' });\n\n useEffect(() => {\n const element = document.createElement('div');\n element.id = `portal-${id}`;\n element.style.cssText = 'position: absolute; top: 0; left: 0;';\n\n const attachTo = rootElementRef || getLastOpenDialog() || document.body;\n attachTo.appendChild(element);\n\n setPortalNode(element);\n setIsMounted(true);\n\n return () => {\n if (document.contains(attachTo) && attachTo.contains(element)) {\n attachTo.removeChild(element);\n }\n };\n }, [id, rootElementRef]);\n\n return portalNode && isMounted ? createPortal(children, portalNode) : null;\n};\n"],"names":["useState","useId","useEffect","getLastOpenDialog","createPortal"],"mappings":";;;;;;;;AAUA;;AAEG;AACU,MAAA,MAAM,GAAoB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAe,KAAI;IACnF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAqB,IAAI,CAAC;IACtE,MAAM,EAAE,GAAGC,WAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAEtCC,eAAS,CAAC,MAAK;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,QAAA,OAAO,CAAC,EAAE,GAAG,CAAU,OAAA,EAAA,EAAE,EAAE;AAC3B,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,sCAAsC;QAE9D,MAAM,QAAQ,GAAG,cAAc,IAAIC,uBAAiB,EAAE,IAAI,QAAQ,CAAC,IAAI;AACvE,QAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;QAE7B,aAAa,CAAC,OAAO,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC;AAElB,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC7D,gBAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;AAC9B;AACH,SAAC;AACH,KAAC,EAAE,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AAExB,IAAA,OAAO,UAAU,IAAI,SAAS,GAAGC,qBAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI;AAC5E;;;;"}
@@ -1,20 +1,10 @@
1
- import { PureComponent, ReactNode } from 'react';
1
+ import { ReactNode, FC } from 'react';
2
2
  type PortalProps = {
3
3
  children: ReactNode;
4
4
  rootElementRef?: HTMLElement;
5
5
  };
6
- type PortalState = {
7
- isMounted: boolean;
8
- };
9
6
  /**
10
7
  * The portal component renders content on the document `body` unless `rootElementRef` is passed.
11
8
  */
12
- export declare class Portal extends PureComponent<PortalProps, PortalState> {
13
- id: string;
14
- portalNode: HTMLElement | null;
15
- constructor(props: PortalProps);
16
- componentDidMount(): void;
17
- componentWillUnmount(): void;
18
- render(): React.ReactPortal | null;
19
- }
9
+ export declare const Portal: FC<PortalProps>;
20
10
  export {};
@@ -1,49 +1,32 @@
1
- import { PureComponent } from 'react';
1
+ import { useState, useEffect } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
- import { generateId } from '../../utils/generateId.js';
3
+ import '../../hooks/useFocusVisible.js';
4
+ import { useId } from '../../hooks/useId.js';
5
+ import { getLastOpenDialog } from './utils.js';
4
6
 
5
7
  /**
6
8
  * The portal component renders content on the document `body` unless `rootElementRef` is passed.
7
9
  */
8
- class Portal extends PureComponent {
9
- constructor(props) {
10
- super(props);
11
- this.id = generateId('portal');
12
- this.portalNode = null;
13
- this.state = {
14
- isMounted: false,
15
- };
16
- }
17
- componentDidMount() {
18
- const { rootElementRef } = this.props;
19
- this.portalNode = document.createElement('div');
20
- this.portalNode.setAttribute('id', `portal-${this.id}`);
21
- this.portalNode.style.cssText = 'position: absolute; top: 0; left: 0;';
22
- if (rootElementRef) {
23
- rootElementRef === null || rootElementRef === undefined ? undefined : rootElementRef.appendChild(this.portalNode);
24
- }
25
- else {
26
- document.body.appendChild(this.portalNode);
27
- }
28
- this.setState({ isMounted: true });
29
- }
30
- componentWillUnmount() {
31
- if (this.portalNode) {
32
- const { rootElementRef } = this.props;
33
- if (rootElementRef) {
34
- rootElementRef.removeChild(this.portalNode);
35
- }
36
- else {
37
- document.body.removeChild(this.portalNode);
10
+ const Portal = ({ children, rootElementRef }) => {
11
+ const [isMounted, setIsMounted] = useState(false);
12
+ const [portalNode, setPortalNode] = useState(null);
13
+ const id = useId({ prefix: 'portal' });
14
+ useEffect(() => {
15
+ const element = document.createElement('div');
16
+ element.id = `portal-${id}`;
17
+ element.style.cssText = 'position: absolute; top: 0; left: 0;';
18
+ const attachTo = rootElementRef || getLastOpenDialog() || document.body;
19
+ attachTo.appendChild(element);
20
+ setPortalNode(element);
21
+ setIsMounted(true);
22
+ return () => {
23
+ if (document.contains(attachTo) && attachTo.contains(element)) {
24
+ attachTo.removeChild(element);
38
25
  }
39
- }
40
- }
41
- render() {
42
- const { children } = this.props;
43
- const { isMounted } = this.state;
44
- return this.portalNode && isMounted ? createPortal(children, this.portalNode) : null;
45
- }
46
- }
26
+ };
27
+ }, [id, rootElementRef]);
28
+ return portalNode && isMounted ? createPortal(children, portalNode) : null;
29
+ };
47
30
 
48
31
  export { Portal };
49
32
  //# sourceMappingURL=Portal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.js","sources":["../../../src/components/Portal/Portal.tsx"],"sourcesContent":["import { PureComponent, ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { generateId } from '../../utils/generateId';\n\ntype PortalProps = {\n children: ReactNode;\n rootElementRef?: HTMLElement;\n};\n\ntype PortalState = {\n isMounted: boolean;\n};\n\n/**\n * The portal component renders content on the document `body` unless `rootElementRef` is passed.\n */\nexport class Portal extends PureComponent<PortalProps, PortalState> {\n id = generateId('portal');\n\n portalNode: HTMLElement | null = null;\n\n constructor(props: PortalProps) {\n super(props);\n this.state = {\n isMounted: false,\n };\n }\n\n componentDidMount() {\n const { rootElementRef } = this.props;\n\n this.portalNode = document.createElement('div');\n this.portalNode.setAttribute('id', `portal-${this.id}`);\n this.portalNode.style.cssText = 'position: absolute; top: 0; left: 0;';\n\n if (rootElementRef) {\n rootElementRef?.appendChild(this.portalNode);\n } else {\n document.body.appendChild(this.portalNode);\n }\n\n this.setState({ isMounted: true });\n }\n\n componentWillUnmount() {\n if (this.portalNode) {\n const { rootElementRef } = this.props;\n if (rootElementRef) {\n rootElementRef.removeChild(this.portalNode);\n } else {\n document.body.removeChild(this.portalNode);\n }\n }\n }\n\n render(): React.ReactPortal | null {\n const { children } = this.props;\n const { isMounted } = this.state;\n\n return this.portalNode && isMounted ? createPortal(children, this.portalNode) : null;\n }\n}\n"],"names":[],"mappings":";;;;AAaA;;AAEG;AACG,MAAO,MAAO,SAAQ,aAAuC,CAAA;AAKjE,IAAA,WAAA,CAAY,KAAkB,EAAA;QAC5B,KAAK,CAAC,KAAK,CAAC;AALd,QAAA,IAAA,CAAA,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC;QAEzB,IAAU,CAAA,UAAA,GAAuB,IAAI;QAInC,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,SAAS,EAAE,KAAK;SACjB;;IAGH,iBAAiB,GAAA;AACf,QAAA,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK;QAErC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,sCAAsC;AAEtE,QAAA,IAAI,cAAc,EAAE;YAClB,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,SAAA,GAAA,SAAA,GAAd,cAAc,CAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7C;AAAM,aAAA;YACL,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;IAGpC,oBAAoB,GAAA;QAClB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK;AACrC,YAAA,IAAI,cAAc,EAAE;AAClB,gBAAA,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5C;AAAM,iBAAA;gBACL,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C;AACF;;IAGH,MAAM,GAAA;AACJ,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK;AAC/B,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK;QAEhC,OAAO,IAAI,CAAC,UAAU,IAAI,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI;;AAEvF;;;;"}
1
+ {"version":3,"file":"Portal.js","sources":["../../../src/components/Portal/Portal.tsx"],"sourcesContent":["import { useEffect, useState, ReactNode, FC } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useId } from '../../hooks';\nimport { getLastOpenDialog } from './utils';\n\ntype PortalProps = {\n children: ReactNode;\n rootElementRef?: HTMLElement;\n};\n\n/**\n * The portal component renders content on the document `body` unless `rootElementRef` is passed.\n */\nexport const Portal: FC<PortalProps> = ({ children, rootElementRef }: PortalProps) => {\n const [isMounted, setIsMounted] = useState(false);\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const id = useId({ prefix: 'portal' });\n\n useEffect(() => {\n const element = document.createElement('div');\n element.id = `portal-${id}`;\n element.style.cssText = 'position: absolute; top: 0; left: 0;';\n\n const attachTo = rootElementRef || getLastOpenDialog() || document.body;\n attachTo.appendChild(element);\n\n setPortalNode(element);\n setIsMounted(true);\n\n return () => {\n if (document.contains(attachTo) && attachTo.contains(element)) {\n attachTo.removeChild(element);\n }\n };\n }, [id, rootElementRef]);\n\n return portalNode && isMounted ? createPortal(children, portalNode) : null;\n};\n"],"names":[],"mappings":";;;;;;AAUA;;AAEG;AACU,MAAA,MAAM,GAAoB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAe,KAAI;IACnF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC;IACtE,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAEtC,SAAS,CAAC,MAAK;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,QAAA,OAAO,CAAC,EAAE,GAAG,CAAU,OAAA,EAAA,EAAE,EAAE;AAC3B,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,sCAAsC;QAE9D,MAAM,QAAQ,GAAG,cAAc,IAAI,iBAAiB,EAAE,IAAI,QAAQ,CAAC,IAAI;AACvE,QAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;QAE7B,aAAa,CAAC,OAAO,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC;AAElB,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC7D,gBAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;AAC9B;AACH,SAAC;AACH,KAAC,EAAE,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AAExB,IAAA,OAAO,UAAU,IAAI,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI;AAC5E;;;;"}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ const getLastOpenDialog = () => {
4
+ const dialogs = document.querySelectorAll('dialog[open]');
5
+ if (dialogs.length === 0)
6
+ return null;
7
+ return dialogs[dialogs.length - 1];
8
+ };
9
+
10
+ exports.getLastOpenDialog = getLastOpenDialog;
11
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sources":["../../../src/components/Portal/utils.ts"],"sourcesContent":["export const getLastOpenDialog = () => {\n const dialogs = document.querySelectorAll('dialog[open]');\n if (dialogs.length === 0) return null;\n\n return dialogs[dialogs.length - 1];\n};\n"],"names":[],"mappings":";;AAAO,MAAM,iBAAiB,GAAG,MAAK;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC;AACzD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;IAErC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC;;;;"}
@@ -0,0 +1 @@
1
+ export declare const getLastOpenDialog: () => Element | null;
@@ -0,0 +1,9 @@
1
+ const getLastOpenDialog = () => {
2
+ const dialogs = document.querySelectorAll('dialog[open]');
3
+ if (dialogs.length === 0)
4
+ return null;
5
+ return dialogs[dialogs.length - 1];
6
+ };
7
+
8
+ export { getLastOpenDialog };
9
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/components/Portal/utils.ts"],"sourcesContent":["export const getLastOpenDialog = () => {\n const dialogs = document.querySelectorAll('dialog[open]');\n if (dialogs.length === 0) return null;\n\n return dialogs[dialogs.length - 1];\n};\n"],"names":[],"mappings":"AAAO,MAAM,iBAAiB,GAAG,MAAK;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC;AACzD,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;IAErC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC;;;;"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var reactTransitionGroup = require('react-transition-group');
4
4
  var React = require('react');
5
- var ReactDOM = require('react-dom');
5
+ var reactDom = require('react-dom');
6
6
  var styled = require('./components/styled.cjs');
7
7
  var Toast = require('./components/Toast.cjs');
8
8
 
@@ -15,7 +15,7 @@ const ToastsLayout = ({ className, e2eClassName, toasts, minWidth = '50vw', max
15
15
  if (max && toasts.length > max)
16
16
  onClose(toasts[0].key);
17
17
  }, [toasts, max, onClose]);
18
- return ReactDOM.createPortal(React__default.default.createElement(styled.ToastsLayoutContainer, { direction: "vertical", alignX: "center", spacing: 4 },
18
+ return reactDom.createPortal(React__default.default.createElement(styled.ToastsLayoutContainer, { direction: "vertical", alignX: "center", spacing: 4 },
19
19
  React__default.default.createElement(reactTransitionGroup.TransitionGroup, { component: null }, [...toasts].reverse().map((toast, index) => (React__default.default.createElement(reactTransitionGroup.CSSTransition, { key: toast.key, timeout: 500, classNames: "veeqo-components-toast" },
20
20
  React__default.default.createElement(Toast.Toast, { className: className, e2eClassName: e2eClassName, minWidth: minWidth, last: index === toasts.length - 1, onClose: () => onClose(toast.key), ...toast })))))), document.body);
21
21
  };
@@ -1,14 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var ReactDOM = require('react-dom');
5
4
  var styled = require('./components/styled.cjs');
6
5
  var TooltipPopover = require('./components/TooltipPopover.cjs');
6
+ var Portal = require('../Portal/Portal.cjs');
7
7
 
8
8
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
9
9
 
10
10
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
11
- var ReactDOM__default = /*#__PURE__*/_interopDefaultCompat(ReactDOM);
12
11
 
13
12
  const Tooltip = ({ children, text, content, config, reversed = false, className, withTriangle, initialShouldShow = false, useReactPortal = true, }) => {
14
13
  const [shouldShow, setShouldShow] = React.useState(initialShouldShow);
@@ -26,9 +25,10 @@ const Tooltip = ({ children, text, content, config, reversed = false, className,
26
25
  return children;
27
26
  const show = () => setShouldShow(true);
28
27
  const hide = () => setShouldShow(false);
29
- const tooltipMarkup = shouldShow && hasContent && (React__default.default.createElement(TooltipPopover.TooltipPopover, { classNames: classNames, hoverableElement: hoverableElement, config: config, reversed: reversed, withTriangle: withTriangle, text: text, content: content }));
28
+ const tooltipContent = (React__default.default.createElement(TooltipPopover.TooltipPopover, { classNames: classNames, hoverableElement: hoverableElement, config: config, reversed: reversed, withTriangle: withTriangle, text: text, content: content }));
29
+ const tooltipMarkup = useReactPortal ? React__default.default.createElement(Portal.Portal, null, tooltipContent) : tooltipContent;
30
30
  return (React__default.default.createElement(styled.Container, { className: classNames.container },
31
- useReactPortal ? ReactDOM__default.default.createPortal(tooltipMarkup, document.body) : tooltipMarkup,
31
+ shouldShow && tooltipMarkup,
32
32
  React__default.default.createElement(styled.Hoverable, { ref: setHoverableElement, className: classNames.hoverable, onMouseEnter: show, onMouseLeave: hide }, children)));
33
33
  };
34
34
 
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.cjs","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { TooltipProps } from './types';\n\nimport { Container, Hoverable } from './components/styled';\nimport { TooltipPopover } from './components/TooltipPopover';\n\nexport const Tooltip = ({\n children,\n text,\n content,\n config,\n reversed = false,\n className,\n withTriangle,\n initialShouldShow = false,\n useReactPortal = true,\n}: TooltipProps): JSX.Element | null => {\n const [shouldShow, setShouldShow] = useState(initialShouldShow);\n const [hoverableElement, setHoverableElement] = useState<HTMLDivElement | null>(null);\n\n const hasText = text ? text.trim().length > 0 : false;\n\n const classNames = {\n container: className && `${className} ${className}-container`,\n tip: className && `${className}-tip`,\n wrap: className && `${className}-wrap`,\n triangle: className && `${className}-triangle`,\n hoverable: className && `${className}-hoverable`,\n };\n\n const hasContent = !!(content || hasText);\n if (!hasContent) return children;\n\n const show = () => setShouldShow(true);\n const hide = () => setShouldShow(false);\n\n const tooltipMarkup = shouldShow && hasContent && (\n <TooltipPopover\n classNames={classNames}\n hoverableElement={hoverableElement}\n config={config}\n reversed={reversed}\n withTriangle={withTriangle}\n text={text}\n content={content}\n />\n );\n\n return (\n <Container className={classNames.container}>\n {useReactPortal ? ReactDOM.createPortal(tooltipMarkup, document.body) : tooltipMarkup}\n <Hoverable\n ref={setHoverableElement}\n className={classNames.hoverable}\n onMouseEnter={show}\n onMouseLeave={hide}\n >\n {children}\n </Hoverable>\n </Container>\n );\n};\n"],"names":["useState","React","TooltipPopover","Container","ReactDOM","Hoverable"],"mappings":";;;;;;;;;;;;AAQO,MAAM,OAAO,GAAG,CAAC,EACtB,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,YAAY,EACZ,iBAAiB,GAAG,KAAK,EACzB,cAAc,GAAG,IAAI,GACR,KAAwB;IACrC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,iBAAiB,CAAC;IAC/D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAGA,cAAQ,CAAwB,IAAI,CAAC;AAErF,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK;AAErD,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,SAAS,EAAE,SAAS,IAAI,GAAG,SAAS,CAAA,CAAA,EAAI,SAAS,CAAY,UAAA,CAAA;AAC7D,QAAA,GAAG,EAAE,SAAS,IAAI,CAAA,EAAG,SAAS,CAAM,IAAA,CAAA;AACpC,QAAA,IAAI,EAAE,SAAS,IAAI,CAAA,EAAG,SAAS,CAAO,KAAA,CAAA;AACtC,QAAA,QAAQ,EAAE,SAAS,IAAI,CAAA,EAAG,SAAS,CAAW,SAAA,CAAA;AAC9C,QAAA,SAAS,EAAE,SAAS,IAAI,CAAA,EAAG,SAAS,CAAY,UAAA,CAAA;KACjD;IAED,MAAM,UAAU,GAAG,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC;AACzC,IAAA,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,QAAQ;IAEhC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC;AAEvC,IAAA,MAAM,aAAa,GAAG,UAAU,IAAI,UAAU,KAC5CC,sBAAA,CAAA,aAAA,CAACC,6BAAc,EAAA,EACb,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAAA,CAChB,CACH;IAED,QACED,qCAACE,gBAAS,EAAA,EAAC,SAAS,EAAE,UAAU,CAAC,SAAS,EAAA;AACvC,QAAA,cAAc,GAAGC,yBAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa;QACrFH,sBAAC,CAAA,aAAA,CAAAI,gBAAS,EACR,EAAA,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,UAAU,CAAC,SAAS,EAC/B,YAAY,EAAE,IAAI,EAClB,YAAY,EAAE,IAAI,IAEjB,QAAQ,CACC,CACF;AAEhB;;;;"}
1
+ {"version":3,"file":"Tooltip.cjs","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { TooltipProps } from './types';\nimport { Container, Hoverable } from './components/styled';\nimport { TooltipPopover } from './components/TooltipPopover';\nimport { Portal } from '../Portal';\n\nexport const Tooltip = ({\n children,\n text,\n content,\n config,\n reversed = false,\n className,\n withTriangle,\n initialShouldShow = false,\n useReactPortal = true,\n}: TooltipProps): JSX.Element | null => {\n const [shouldShow, setShouldShow] = useState(initialShouldShow);\n const [hoverableElement, setHoverableElement] = useState<HTMLDivElement | null>(null);\n\n const hasText = text ? text.trim().length > 0 : false;\n\n const classNames = {\n container: className && `${className} ${className}-container`,\n tip: className && `${className}-tip`,\n wrap: className && `${className}-wrap`,\n triangle: className && `${className}-triangle`,\n hoverable: className && `${className}-hoverable`,\n };\n\n const hasContent = !!(content || hasText);\n if (!hasContent) return children;\n\n const show = () => setShouldShow(true);\n const hide = () => setShouldShow(false);\n\n const tooltipContent = (\n <TooltipPopover\n classNames={classNames}\n hoverableElement={hoverableElement}\n config={config}\n reversed={reversed}\n withTriangle={withTriangle}\n text={text}\n content={content}\n />\n );\n\n const tooltipMarkup = useReactPortal ? <Portal>{tooltipContent}</Portal> : tooltipContent;\n\n return (\n <Container className={classNames.container}>\n {shouldShow && tooltipMarkup}\n <Hoverable\n ref={setHoverableElement}\n className={classNames.hoverable}\n onMouseEnter={show}\n onMouseLeave={hide}\n >\n {children}\n </Hoverable>\n </Container>\n );\n};\n"],"names":["useState","React","TooltipPopover","Portal","Container","Hoverable"],"mappings":";;;;;;;;;;;AAMO,MAAM,OAAO,GAAG,CAAC,EACtB,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,YAAY,EACZ,iBAAiB,GAAG,KAAK,EACzB,cAAc,GAAG,IAAI,GACR,KAAwB;IACrC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,iBAAiB,CAAC;IAC/D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAGA,cAAQ,CAAwB,IAAI,CAAC;AAErF,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK;AAErD,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,SAAS,EAAE,SAAS,IAAI,GAAG,SAAS,CAAA,CAAA,EAAI,SAAS,CAAY,UAAA,CAAA;AAC7D,QAAA,GAAG,EAAE,SAAS,IAAI,CAAA,EAAG,SAAS,CAAM,IAAA,CAAA;AACpC,QAAA,IAAI,EAAE,SAAS,IAAI,CAAA,EAAG,SAAS,CAAO,KAAA,CAAA;AACtC,QAAA,QAAQ,EAAE,SAAS,IAAI,CAAA,EAAG,SAAS,CAAW,SAAA,CAAA;AAC9C,QAAA,SAAS,EAAE,SAAS,IAAI,CAAA,EAAG,SAAS,CAAY,UAAA,CAAA;KACjD;IAED,MAAM,UAAU,GAAG,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC;AACzC,IAAA,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,QAAQ;IAEhC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC;AAEvC,IAAA,MAAM,cAAc,IAClBC,sBAAA,CAAA,aAAA,CAACC,6BAAc,EACb,EAAA,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAAA,CAChB,CACH;AAED,IAAA,MAAM,aAAa,GAAG,cAAc,GAAGD,sBAAA,CAAA,aAAA,CAACE,aAAM,EAAA,IAAA,EAAE,cAAc,CAAU,GAAG,cAAc;IAEzF,QACEF,qCAACG,gBAAS,EAAA,EAAC,SAAS,EAAE,UAAU,CAAC,SAAS,EAAA;AACvC,QAAA,UAAU,IAAI,aAAa;QAC5BH,sBAAC,CAAA,aAAA,CAAAI,gBAAS,EACR,EAAA,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,UAAU,CAAC,SAAS,EAC/B,YAAY,EAAE,IAAI,EAClB,YAAY,EAAE,IAAI,IAEjB,QAAQ,CACC,CACF;AAEhB;;;;"}
@@ -1,7 +1,7 @@
1
1
  import React, { useState } from 'react';
2
- import ReactDOM from 'react-dom';
3
2
  import { Container, Hoverable } from './components/styled.js';
4
3
  import { TooltipPopover } from './components/TooltipPopover.js';
4
+ import { Portal } from '../Portal/Portal.js';
5
5
 
6
6
  const Tooltip = ({ children, text, content, config, reversed = false, className, withTriangle, initialShouldShow = false, useReactPortal = true, }) => {
7
7
  const [shouldShow, setShouldShow] = useState(initialShouldShow);
@@ -19,9 +19,10 @@ const Tooltip = ({ children, text, content, config, reversed = false, className,
19
19
  return children;
20
20
  const show = () => setShouldShow(true);
21
21
  const hide = () => setShouldShow(false);
22
- const tooltipMarkup = shouldShow && hasContent && (React.createElement(TooltipPopover, { classNames: classNames, hoverableElement: hoverableElement, config: config, reversed: reversed, withTriangle: withTriangle, text: text, content: content }));
22
+ const tooltipContent = (React.createElement(TooltipPopover, { classNames: classNames, hoverableElement: hoverableElement, config: config, reversed: reversed, withTriangle: withTriangle, text: text, content: content }));
23
+ const tooltipMarkup = useReactPortal ? React.createElement(Portal, null, tooltipContent) : tooltipContent;
23
24
  return (React.createElement(Container, { className: classNames.container },
24
- useReactPortal ? ReactDOM.createPortal(tooltipMarkup, document.body) : tooltipMarkup,
25
+ shouldShow && tooltipMarkup,
25
26
  React.createElement(Hoverable, { ref: setHoverableElement, className: classNames.hoverable, onMouseEnter: show, onMouseLeave: hide }, children)));
26
27
  };
27
28