Skip to main content

Popup

The Popup component is a versatile overlay designed to present temporary content or facilitate user interactions with customizable options.

Import​

Phaselis exports one main component for Popup.

import { Popup } from 'phaselis';
  • Popup: Main Component import for Popup

Usage​

Basic Popup​

Display a basic popup with a title and close action.

import { Button, Popup } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";

const Example = () => {
const [visible, setVisible] = useState(false);

return (
<>
<Button onClick={() => setVisible(true)} text="Open Popup" />
<Popup
show={visible}
onClose={() => setVisible(false)}
title="Popup Title"
>
<Text>This is the popup content</Text>
</Popup>
</>
);
};

export default Example;

Props​

tip

Other than the listed props below, you can pass any prop that a Modal component accepts.

show​

boolean

If true, the popup is visible.

import { Button } from "phaselis";
import { useState } from "react";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} />
<Popup show={visible} onClose={() => setVisible(false)}></Popup>

duration​

number

The duration of the show/hide animation in milliseconds. Defaults to 500.

import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} text="Open Popup" />
<Popup show={visible} onClose={() => setVisible(false)} duration={700}>
<Text>Phaselis</Text>
</Popup>

onClose​

() => void

Callback triggered when the popup is closed.

import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} text="Open Popup" />
<Popup
show={visible}
onClose={() => {
console.log("Popup closed");
setVisible(false);
}}
>
<Text>Phaselis</Text>
</Popup>

fullScreen​

boolean

If true, the popup takes the full screen. Defaults to false.

import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} text="Open Popup" />
<Popup show={visible} onClose={() => setVisible(false)} fullScreen>
<Text>Phaselis</Text>
</Popup>

backgroundBlur​

boolean

If true, it applies a blur effect to the background when the popup is displayed. Defaults to false.

import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} text="Open Popup" />
<Popup
show={visible}
onClose={() => setVisible(false)}
backgroundBlur
>
<Text>This is the popup content with background blur effect</Text>
</Popup>

style​

object

An object to customize various parts of the popup's style. You can either provide an object with named styles or directly provide ViewStyle properties that will be applied to the element.

NameTypeDescription
titleTextStyleStyle for the popup title text
containerViewStyleStyle for the popup container
headerViewStyleStyle for the header section
elementViewStyleStyle for the main content element
leftSlotIconStyleStyle for the left icon/slot
closeIconIconStyleStyle for the close icon
backDropViewStyleStyle for the backdrop overlay
import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} text="Open Popup" />
<Popup
title="Phaselis"
show={visible}
onClose={() => setVisible(false)}
style={{
container: { backgroundColor: "#fff" },
title: { fontSize: 18, fontWeight: "bold" },
element: { padding: 20, borderRadius: 10 }
}}
>
<Text>Phaselis</Text>
</Popup>

// Direct element styling
<Popup
title="Phaselis"
show={visible}
onClose={() => setVisible(false)}
style={{ padding: 24, backgroundColor: "#f8f9fa", borderRadius: 12 }}
>
<Text>Popup with direct element styling</Text>
</Popup>

containerStyle​

ViewStyle

Additional style applied directly to the popup container.

<Popup
show={visible}
onClose={() => setVisible(false)}
containerStyle={{ borderRadius: 20, backgroundColor: "#ffffff" }}
>
<Text>Custom container styling</Text>
</Popup>

titleStyle​

TextStyle

Additional style applied directly to the title text.

<Popup
title="Custom Title"
show={visible}
onClose={() => setVisible(false)}
titleStyle={{ fontSize: 20, color: "#0066cc", fontWeight: "bold" }}
>
<Text>Popup with custom title style</Text>
</Popup>

headerStyle​

ViewStyle

Additional style applied directly to the header section.

<Popup
title="Header Styled"
show={visible}
onClose={() => setVisible(false)}
headerStyle={{ borderBottomWidth: 1, borderBottomColor: "#eeeeee", paddingBottom: 10 }}
>
<Text>Popup with custom header style</Text>
</Popup>

leftSlotStyle​

ViewStyle | IconStyle

Additional style applied directly to the left icon or slot.

<Popup
title="With Icon"
leftIcon="Info"
show={visible}
onClose={() => setVisible(false)}
leftSlotStyle={{ color: "#0066cc" }}
>
<Text>Popup with custom left icon style</Text>
</Popup>

closeIconStyle​

ViewStyle | IconStyle

Additional style applied directly to the close icon.

<Popup
show={visible}
onClose={() => setVisible(false)}
closeIconStyle={{ color: "red" }}
>
<Text>Popup with custom close icon</Text>
</Popup>

backDropStyle​

ViewStyle

Additional style applied directly to the backdrop.

<Popup
show={visible}
onClose={() => setVisible(false)}
backDropStyle={{ backgroundColor: "rgba(0, 0, 0, 0.7)" }}
>
<Text>Popup with custom backdrop</Text>
</Popup>

leftIcon​

SlotIconName

Specify an icon for the left slot in the header.

import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} />
<Popup
title="Phaselis"
leftIcon="Star"
show={visible}
onClose={() => setVisible(false)}
>
<Text>Phaselis</Text>
</Popup>

LeftSlot​

SlotChildComponent

Pass a custom component to the left slot of the header.

import { Button, LucideIcon } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} />
<Popup
title="Phaselis"
LeftSlot={() => <LucideIcon name="Star" />}
show={visible}
onClose={() => setVisible(false)}
>
<Text>Phaselis</Text>
</Popup>

title​

string

Title text displayed in the popup header.

import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} />
<Popup title="Phaselis" show={visible} onClose={() => setVisible(false)}>
<Text>Phaselis</Text>
</Popup>

children​

ReactNode

Content to display inside the popup.

import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} text="Open Popup" />
<Popup show={visible} onClose={() => setVisible(false)}>
<Text>Phaselis</Text>
</Popup>

variation​

default | info | success | warning | error

Determines the style of the popup.

  • default: Applies the default popup style.
  • info: Applies an informational popup style.
  • success: Applies a success message popup style.
  • warning: Applies a warning message popup style.
  • error: Applies an error message popup style.
import { Button } from "phaselis";
import { useState } from "react";
import { Text } from "react-native";
const [visible, setVisible] = useState(false);
<Button onClick={() => setVisible(true)} text="Open Popup" />
<Popup show={visible} onClose={() => setVisible(false)} title="Popup Title" variation="success">
<Text>This is the success popup content</Text>
</Popup>