New Changes with Model fixxed bugges
This commit is contained in:
+28
-28
@@ -9,6 +9,7 @@ interface Props {
|
|||||||
closedby?: "none" | "closerequest" | "any";
|
closedby?: "none" | "closerequest" | "any";
|
||||||
onClose?: () => void;
|
onClose?: () => void;
|
||||||
dialogClass?: string;
|
dialogClass?: string;
|
||||||
|
triggerClass?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@@ -19,38 +20,37 @@ const {
|
|||||||
onClose,
|
onClose,
|
||||||
closedby = "none",
|
closedby = "none",
|
||||||
dialogClass = "",
|
dialogClass = "",
|
||||||
|
triggerClass = "",
|
||||||
} = Astro.props;
|
} = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<div>
|
<div id={`trigger-${id}`} class={triggerClass}>
|
||||||
<div id={`trigger-${id}`} class="wr:w-fit">
|
<slot name="trigger" />
|
||||||
<slot name="trigger" />
|
|
||||||
</div>
|
|
||||||
<dialog
|
|
||||||
open={open}
|
|
||||||
id={`modal-${id}`}
|
|
||||||
closedby={closedby}
|
|
||||||
class={cn(
|
|
||||||
"wr:absolute wr:rounded-md wr:shadow-lg wr:p-4 wr:bg-white wr:dark:bg-neutral-800 wr:m-0 wr:border-0",
|
|
||||||
size === "sm" && "wr:w-[300px]",
|
|
||||||
size === "md" && "wr:w-[500px]",
|
|
||||||
size === "lg" && "wr:w-[700px]",
|
|
||||||
size === "xl" && "wr:w-[900px]",
|
|
||||||
size === "full" &&
|
|
||||||
"wr:w-full wr:h-screen wr:max-w-none wr:rounded-none wr:inset-0",
|
|
||||||
position == "center" &&
|
|
||||||
size !== "full" &&
|
|
||||||
"wr:top-1/2 wr:left-1/2 wr:-translate-x-1/2 wr:-translate-y-1/2",
|
|
||||||
position == "top" && size !== "full" && "wr:top-[30px] wr:mx-auto",
|
|
||||||
position == "bottom" &&
|
|
||||||
size !== "full" &&
|
|
||||||
"wr:bottom-0 wr:top-[95%] wr:mx-auto wr:-translate-y-full",
|
|
||||||
dialogClass,
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
<slot name="content" />
|
|
||||||
</dialog>
|
|
||||||
</div>
|
</div>
|
||||||
|
<dialog
|
||||||
|
open={open}
|
||||||
|
id={`modal-${id}`}
|
||||||
|
closedby={closedby}
|
||||||
|
class={cn(
|
||||||
|
"wr:absolute wr:rounded-md wr:shadow-lg wr:p-4 wr:bg-white wr:dark:bg-neutral-800 wr:m-0 wr:border-0",
|
||||||
|
size === "sm" && "wr:w-[300px]",
|
||||||
|
size === "md" && "wr:w-[500px]",
|
||||||
|
size === "lg" && "wr:w-[700px]",
|
||||||
|
size === "xl" && "wr:w-[900px]",
|
||||||
|
size === "full" &&
|
||||||
|
"wr:w-full wr:h-screen wr:max-w-none wr:rounded-none wr:inset-0",
|
||||||
|
position == "center" &&
|
||||||
|
size !== "full" &&
|
||||||
|
"wr:top-1/2 wr:left-1/2 wr:-translate-x-1/2 wr:-translate-y-1/2",
|
||||||
|
position == "top" && size !== "full" && "wr:top-[30px] wr:mx-auto",
|
||||||
|
position == "bottom" &&
|
||||||
|
size !== "full" &&
|
||||||
|
"wr:bottom-0 wr:top-[95%] wr:mx-auto wr:-translate-y-full",
|
||||||
|
dialogClass,
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<slot name="content" />
|
||||||
|
</dialog>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
dialog::backdrop {
|
dialog::backdrop {
|
||||||
|
|||||||
+157
-143
@@ -5,160 +5,174 @@ import ComponentLayout from "../layouts/ComponentLayout.astro";
|
|||||||
---
|
---
|
||||||
|
|
||||||
<ComponentLayout class="wr:p-4">
|
<ComponentLayout class="wr:p-4">
|
||||||
<!-- Small Center Modal -->
|
<div class="wr:flex wr:gap-2">
|
||||||
<Modal id="sm-center" size="sm" position="center" closedby="closerequest">
|
<!-- Small Center Modal -->
|
||||||
<span slot="trigger">
|
<Modal
|
||||||
|
id="sm-center"
|
||||||
|
size="sm"
|
||||||
|
position="center"
|
||||||
|
closedby="closerequest"
|
||||||
|
triggerClass="wr:w-1/2"
|
||||||
|
>
|
||||||
<button
|
<button
|
||||||
class="wr:px-4 wr:py-2 wr:rounded wr:bg-blue-600 wr:text-white"
|
slot="trigger"
|
||||||
|
class="wr:w-full wr:px-4 wr:py-2 wr:rounded wr:bg-blue-600 wr:text-white"
|
||||||
>
|
>
|
||||||
Small Center
|
Small Center
|
||||||
</button>
|
</button>
|
||||||
</span>
|
<div slot="content" class="wr:max-h-[400px] wr:overflow-y-auto">
|
||||||
<div slot="content" class="wr:max-h-[400px] wr:overflow-y-auto">
|
<h2 class="wr:text-lg wr:font-semibold">Small Center Modal</h2>
|
||||||
<h2 class="wr:text-lg wr:font-semibold">Small Center Modal</h2>
|
<p class="wr:mt-2">
|
||||||
<p class="wr:mt-2">
|
This is a small modal centered on the screen with limited
|
||||||
This is a small modal centered on the screen with limited
|
height.
|
||||||
height.
|
</p>
|
||||||
</p>
|
<ul class="wr:space-y-2 wr:mt-4">
|
||||||
<ul class="wr:space-y-2 wr:mt-4">
|
{
|
||||||
|
Array.from({ length: 20 }).map((_, i) => (
|
||||||
|
<li class="wr:p-2 wr:bg-gray-100 wr:rounded">
|
||||||
|
Item {i + 1}
|
||||||
|
</li>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
<button
|
||||||
|
id="close-sm-center"
|
||||||
|
class="wr:mt-4 wr:px-4 wr:py-2 wr:bg-gray-200 wr:rounded"
|
||||||
|
>
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<!-- Medium Top Modal -->
|
||||||
|
<Modal id="md-top" size="md" position="top" closedby="any">
|
||||||
|
<span slot="trigger">
|
||||||
|
<button
|
||||||
|
class="wr:px-4 wr:py-2 wr:rounded wr:bg-green-600 wr:text-white"
|
||||||
|
>
|
||||||
|
Medium Top
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
<div slot="content" class="wr:max-h-[500px] wr:overflow-y-auto">
|
||||||
|
<h2 class="wr:text-lg wr:font-semibold">Medium Top Modal</h2>
|
||||||
|
<p class="wr:mt-2">
|
||||||
|
This modal appears at the top of the page with scrollable
|
||||||
|
content.
|
||||||
|
</p>
|
||||||
{
|
{
|
||||||
Array.from({ length: 20 }).map((_, i) => (
|
Array.from({ length: 40 }).map((_, i) => (
|
||||||
<li class="wr:p-2 wr:bg-gray-100 wr:rounded">
|
<p class="wr:mt-2">
|
||||||
Item {i + 1}
|
Paragraph {i + 1}: Lorem ipsum dolor sit amet,
|
||||||
</li>
|
consectetur adipiscing elit.
|
||||||
|
</p>
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
</ul>
|
<button
|
||||||
<button
|
id="close-md-top"
|
||||||
id="close-sm-center"
|
class="wr:mt-4 wr:px-4 wr:py-2 wr:bg-gray-200 wr:rounded"
|
||||||
class="wr:mt-4 wr:px-4 wr:py-2 wr:bg-gray-200 wr:rounded"
|
>
|
||||||
>
|
Close
|
||||||
Close
|
</button>
|
||||||
</button>
|
</div>
|
||||||
</div>
|
</Modal>
|
||||||
</Modal>
|
|
||||||
|
|
||||||
<!-- Medium Top Modal -->
|
<!-- Large Bottom Modal -->
|
||||||
<Modal id="md-top" size="md" position="top" closedby="any">
|
<Modal
|
||||||
<span slot="trigger">
|
id="lg-bottom"
|
||||||
<button
|
size="lg"
|
||||||
class="wr:px-4 wr:py-2 wr:rounded wr:bg-green-600 wr:text-white"
|
position="bottom"
|
||||||
>
|
closedby="closerequest"
|
||||||
Medium Top
|
>
|
||||||
</button>
|
<span slot="trigger">
|
||||||
</span>
|
<button
|
||||||
<div slot="content" class="wr:max-h-[500px] wr:overflow-y-auto">
|
class="wr:px-4 wr:py-2 wr:rounded wr:bg-purple-600 wr:text-white"
|
||||||
<h2 class="wr:text-lg wr:font-semibold">Medium Top Modal</h2>
|
>
|
||||||
<p class="wr:mt-2">
|
Large Bottom
|
||||||
This modal appears at the top of the page with scrollable
|
</button>
|
||||||
content.
|
</span>
|
||||||
</p>
|
<div slot="content" class="wr:max-h-[600px] wr:overflow-y-auto">
|
||||||
{
|
<h2 class="wr:text-lg wr:font-semibold">Large Bottom Modal</h2>
|
||||||
Array.from({ length: 40 }).map((_, i) => (
|
<p class="wr:mt-2">
|
||||||
<p class="wr:mt-2">
|
This modal appears at the bottom of the screen.
|
||||||
Paragraph {i + 1}: Lorem ipsum dolor sit amet,
|
</p>
|
||||||
consectetur adipiscing elit.
|
<ul class="wr:space-y-2 wr:mt-4">
|
||||||
</p>
|
{
|
||||||
))
|
Array.from({ length: 50 }).map((_, i) => (
|
||||||
}
|
<li class="wr:p-2 wr:bg-gray-100 wr:rounded">
|
||||||
<button
|
Bottom Item {i + 1}
|
||||||
id="close-md-top"
|
</li>
|
||||||
class="wr:mt-4 wr:px-4 wr:py-2 wr:bg-gray-200 wr:rounded"
|
))
|
||||||
>
|
}
|
||||||
Close
|
</ul>
|
||||||
</button>
|
<button
|
||||||
</div>
|
id="close-lg-bottom"
|
||||||
</Modal>
|
class="wr:mt-4 wr:px-4 wr:py-2 wr:bg-gray-200 wr:rounded"
|
||||||
|
>
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
<!-- Large Bottom Modal -->
|
<!-- Extra Large Center Modal -->
|
||||||
<Modal id="lg-bottom" size="lg" position="bottom" closedby="closerequest">
|
<Modal id="xl-center" size="xl" position="center">
|
||||||
<span slot="trigger">
|
<span slot="trigger">
|
||||||
<button
|
<button
|
||||||
class="wr:px-4 wr:py-2 wr:rounded wr:bg-purple-600 wr:text-white"
|
class="wr:px-4 wr:py-2 wr:rounded wr:bg-orange-600 wr:text-white"
|
||||||
>
|
>
|
||||||
Large Bottom
|
XL Center
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<div slot="content" class="wr:max-h-[600px] wr:overflow-y-auto">
|
<div slot="content" class="wr:max-h-[700px] wr:overflow-y-auto">
|
||||||
<h2 class="wr:text-lg wr:font-semibold">Large Bottom Modal</h2>
|
<h2 class="wr:text-lg wr:font-semibold">XL Center Modal</h2>
|
||||||
<p class="wr:mt-2">
|
<p class="wr:mt-2">
|
||||||
This modal appears at the bottom of the screen.
|
Extra large modal in the middle with scroll test.
|
||||||
</p>
|
</p>
|
||||||
<ul class="wr:space-y-2 wr:mt-4">
|
|
||||||
{
|
{
|
||||||
Array.from({ length: 50 }).map((_, i) => (
|
Array.from({ length: 60 }).map((_, i) => (
|
||||||
<li class="wr:p-2 wr:bg-gray-100 wr:rounded">
|
<p class="wr:mt-2">
|
||||||
Bottom Item {i + 1}
|
Line {i + 1}: Scroll inside modal without moving
|
||||||
</li>
|
page.
|
||||||
|
</p>
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
</ul>
|
<button
|
||||||
<button
|
id="close-xl-center"
|
||||||
id="close-lg-bottom"
|
class="wr:mt-4 wr:px-4 wr:py-2 wr:bg-gray-200 wr:rounded"
|
||||||
class="wr:mt-4 wr:px-4 wr:py-2 wr:bg-gray-200 wr:rounded"
|
>
|
||||||
>
|
Close
|
||||||
Close
|
</button>
|
||||||
</button>
|
</div>
|
||||||
</div>
|
</Modal>
|
||||||
</Modal>
|
|
||||||
|
|
||||||
<!-- Extra Large Center Modal -->
|
<!-- Full Screen Modal -->
|
||||||
<Modal id="xl-center" size="xl" position="center">
|
<Modal id="full-screen" size="full" position="center">
|
||||||
<span slot="trigger">
|
<span slot="trigger">
|
||||||
<button
|
<button
|
||||||
class="wr:px-4 wr:py-2 wr:rounded wr:bg-orange-600 wr:text-white"
|
class="wr:px-4 wr:py-2 wr:rounded wr:bg-red-600 wr:text-white"
|
||||||
>
|
>
|
||||||
XL Center
|
Full Screen
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<div slot="content" class="wr:max-h-[700px] wr:overflow-y-auto">
|
<div slot="content" class="wr:h-full wr:overflow-y-auto wr:p-6">
|
||||||
<h2 class="wr:text-lg wr:font-semibold">XL Center Modal</h2>
|
<h2 class="wr:text-2xl wr:font-bold">Full Screen Modal</h2>
|
||||||
<p class="wr:mt-2">
|
<p class="wr:mt-4 wr:text-lg">
|
||||||
Extra large modal in the middle with scroll test.
|
This modal covers the entire screen and scrolls vertically.
|
||||||
</p>
|
</p>
|
||||||
{
|
{
|
||||||
Array.from({ length: 60 }).map((_, i) => (
|
Array.from({ length: 100 }).map((_, i) => (
|
||||||
<p class="wr:mt-2">
|
<p class="wr:mt-2">
|
||||||
Line {i + 1}: Scroll inside modal without moving page.
|
Block {i + 1}: Testing long content inside full
|
||||||
</p>
|
modal.
|
||||||
))
|
</p>
|
||||||
}
|
))
|
||||||
<button
|
}
|
||||||
id="close-xl-center"
|
<button
|
||||||
class="wr:mt-4 wr:px-4 wr:py-2 wr:bg-gray-200 wr:rounded"
|
id="close-full-screen"
|
||||||
>
|
class="wr:mt-6 wr:px-6 wr:py-3 wr:bg-white wr:rounded wr:text-red-600 wr:border"
|
||||||
Close
|
>
|
||||||
</button>
|
Close Full
|
||||||
</div>
|
</button>
|
||||||
</Modal>
|
</div>
|
||||||
|
</Modal>
|
||||||
<!-- Full Screen Modal -->
|
</div>
|
||||||
<Modal id="full-screen" size="full" position="center">
|
|
||||||
<span slot="trigger">
|
|
||||||
<button
|
|
||||||
class="wr:px-4 wr:py-2 wr:rounded wr:bg-red-600 wr:text-white"
|
|
||||||
>
|
|
||||||
Full Screen
|
|
||||||
</button>
|
|
||||||
</span>
|
|
||||||
<div slot="content" class="wr:h-full wr:overflow-y-auto wr:p-6">
|
|
||||||
<h2 class="wr:text-2xl wr:font-bold">Full Screen Modal</h2>
|
|
||||||
<p class="wr:mt-4 wr:text-lg">
|
|
||||||
This modal covers the entire screen and scrolls vertically.
|
|
||||||
</p>
|
|
||||||
{
|
|
||||||
Array.from({ length: 100 }).map((_, i) => (
|
|
||||||
<p class="wr:mt-2">
|
|
||||||
Block {i + 1}: Testing long content inside full modal.
|
|
||||||
</p>
|
|
||||||
))
|
|
||||||
}
|
|
||||||
<button
|
|
||||||
id="close-full-screen"
|
|
||||||
class="wr:mt-6 wr:px-6 wr:py-3 wr:bg-white wr:rounded wr:text-red-600 wr:border"
|
|
||||||
>
|
|
||||||
Close Full
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</Modal>
|
|
||||||
</ComponentLayout>
|
</ComponentLayout>
|
||||||
|
|||||||
Reference in New Issue
Block a user