UNPKG

flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

1 lines 7.21 kB
{"version":3,"file":"Modal.cjs","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n FloatingFocusManager,\n FloatingOverlay,\n FloatingPortal,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useMergeRefs,\n useRole,\n} from \"@floating-ui/react\";\nimport type { MutableRefObject } from \"react\";\nimport { forwardRef, useState, type ComponentPropsWithoutRef } from \"react\";\nimport { get } from \"../../helpers/get\";\nimport { resolveProps } from \"../../helpers/resolve-props\";\nimport { useResolveTheme } from \"../../helpers/resolve-theme\";\nimport { twMerge } from \"../../helpers/tailwind-merge\";\nimport { useThemeProvider } from \"../../theme/provider\";\nimport type {\n DynamicStringEnumKeysOf,\n FlowbiteBoolean,\n FlowbitePositions,\n FlowbiteSizes,\n ThemingProps,\n} from \"../../types\";\nimport type { ModalBodyTheme } from \"./ModalBody\";\nimport { ModalContext } from \"./ModalContext\";\nimport type { ModalFooterTheme } from \"./ModalFooter\";\nimport type { ModalHeaderTheme } from \"./ModalHeader\";\nimport { modalTheme } from \"./theme\";\n\nexport interface ModalTheme {\n root: ModalRootTheme;\n content: ModalContentTheme;\n body: ModalBodyTheme;\n header: ModalHeaderTheme;\n footer: ModalFooterTheme;\n}\n\nexport interface ModalRootTheme {\n base: string;\n show: FlowbiteBoolean;\n sizes: ModalSizes;\n positions: ModalPositions;\n}\n\nexport interface ModalContentTheme {\n base: string;\n inner: string;\n}\n\nexport interface ModalPositions extends FlowbitePositions {\n [key: string]: string;\n}\n\nexport interface ModalSizes extends Omit<FlowbiteSizes, \"xs\"> {\n [key: string]: string;\n}\n\nexport interface ModalProps extends ComponentPropsWithoutRef<\"div\">, ThemingProps<ModalTheme> {\n onClose?: () => void;\n position?: DynamicStringEnumKeysOf<ModalPositions>;\n popup?: boolean;\n root?: HTMLElement;\n show?: boolean;\n size?: DynamicStringEnumKeysOf<ModalSizes>;\n dismissible?: boolean;\n initialFocus?: number | MutableRefObject<HTMLElement | null>;\n}\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>((props, ref) => {\n const [headerId, setHeaderId] = useState<string | undefined>(undefined);\n const provider = useThemeProvider();\n const theme = useResolveTheme(\n [modalTheme, provider.theme?.modal, props.theme],\n [get(provider.clearTheme, \"modal\"), props.clearTheme],\n [get(provider.applyTheme, \"modal\"), props.applyTheme],\n );\n\n const {\n children,\n className,\n dismissible = false,\n onClose,\n popup,\n position = \"center\",\n root,\n show,\n size = \"2xl\",\n initialFocus,\n ...restProps\n } = resolveProps(props, provider.props?.modal);\n\n const { context } = useFloating({\n open: show,\n onOpenChange: () => onClose && onClose(),\n });\n\n const mergedRef = useMergeRefs([context.refs.setFloating, ref]);\n\n const click = useClick(context);\n const dismiss = useDismiss(context, { outsidePressEvent: \"mousedown\", enabled: dismissible });\n const role = useRole(context);\n\n const { getFloatingProps } = useInteractions([click, dismiss, role]);\n\n if (!show) {\n return null;\n }\n\n return (\n <ModalContext.Provider\n value={{\n theme: props.theme,\n clearTheme: props.clearTheme,\n applyTheme: props.applyTheme,\n popup,\n onClose,\n setHeaderId,\n }}\n >\n <FloatingPortal root={root}>\n <FloatingOverlay\n lockScroll\n data-testid=\"modal-overlay\"\n className={twMerge(\n theme.root.base,\n theme.root.positions[position],\n show ? theme.root.show.on : theme.root.show.off,\n className,\n )}\n {...restProps}\n >\n <FloatingFocusManager context={context} initialFocus={initialFocus}>\n <div\n ref={mergedRef}\n {...getFloatingProps(restProps)}\n aria-labelledby={headerId}\n className={twMerge(theme.content.base, theme.root.sizes[size])}\n >\n <div className={theme.content.inner}>{children}</div>\n </div>\n </FloatingFocusManager>\n </FloatingOverlay>\n </FloatingPortal>\n </ModalContext.Provider>\n );\n});\n\nModal.displayName = \"Modal\";\n"],"names":["forwardRef","useState","provider","useThemeProvider","theme","useResolveTheme","modalTheme","get","resolveProps","useFloating","useMergeRefs","useClick","useDismiss","useRole","useInteractions","jsx","ModalContext","FloatingPortal","FloatingOverlay","twMerge","FloatingFocusManager"],"mappings":"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"}