Skip to content

Commit 9844894

Browse files
committed
docs(styled modal): refactor to match new Title and Description components
1 parent bbb5848 commit 9844894

File tree

2 files changed

+47
-64
lines changed

2 files changed

+47
-64
lines changed

apps/website/src/routes/docs/styled/modal/examples/hero.tsx

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { component$, useSignal } from '@builder.io/qwik';
2-
import { Button, Input, Label, Modal } from '~/components/ui';
2+
import { cn } from '@qwik-ui/utils';
3+
import { LuX } from '@qwikest/icons/lucide';
4+
import { Button, Input, Label, Modal, buttonVariants } from '~/components/ui';
35

46
export default component$(() => {
57
const show = useSignal(false);
@@ -8,8 +10,8 @@ export default component$(() => {
810
<Modal.Root bind:show={show}>
911
<Modal.Trigger>Open modal</Modal.Trigger>
1012
<Modal.Panel>
11-
<Modal.Title class="text-lg font-bold">Edit Profile</Modal.Title>
12-
<Modal.Description class="text-sm font-light">
13+
<Modal.Title>Edit Profile</Modal.Title>
14+
<Modal.Description>
1315
Make changes to your profile here. Click save when you're done.
1416
</Modal.Description>
1517
<div class="grid gap-4 py-4">
@@ -32,10 +34,19 @@ export default component$(() => {
3234
</div>
3335
</div>
3436
<footer>
35-
<Button onClick$={() => (show.value = false)} type="submit">
36-
Save changes
37+
<Button look="primary" onClick$={() => (show.value = false)}>
38+
Save
3739
</Button>
3840
</footer>
41+
<Modal.Close
42+
class={cn(
43+
buttonVariants({ size: 'icon', look: 'ghost' }),
44+
'absolute right-3 top-2',
45+
)}
46+
type="submit"
47+
>
48+
<LuX class="h-5 w-5" />
49+
</Modal.Close>
3950
</Modal.Panel>
4051
</Modal.Root>
4152
);

apps/website/src/routes/docs/styled/modal/index.mdx

Lines changed: 31 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -21,51 +21,37 @@ qwik-ui add modal
2121
```
2222

2323
```tsx
24-
import {
25-
PropsOf,
26-
Signal,
27-
Slot,
28-
component$,
29-
createContextId,
30-
useContextProvider,
31-
useSignal,
32-
} from '@builder.io/qwik';
24+
import { PropsOf, Slot, component$ } from '@builder.io/qwik';
3325
import { Modal as HeadlessModal } from '@qwik-ui/headless';
3426
import { cn } from '@qwik-ui/utils';
3527

36-
const Context = createContextId<Signal<boolean>>('modal-context');
28+
const Root = HeadlessModal.Root;
3729

38-
const Root = component$<PropsOf<typeof HeadlessModal.Root>>(({ ...props }) => {
39-
const showSig = useSignal(false);
40-
useContextProvider(Context, showSig);
41-
return (
42-
<HeadlessModal.Root bind:show={showSig} {...props}>
43-
<Slot />
44-
</HeadlessModal.Root>
45-
);
46-
});
30+
const Trigger = HeadlessModal.Trigger;
4731

48-
const Panel = component$(() => {
32+
const Close = HeadlessModal.Close;
33+
34+
const Panel = component$<PropsOf<typeof HeadlessModal.Panel>>((props) => {
4935
return (
50-
<HeadlessModal.Panel class="max-w-sm rounded-base border border-white bg-background p-6 text-foreground shadow-md transition-all duration-300 backdrop:brightness-50 backdrop:backdrop-blur-sm backdrop:transition-all backdrop:duration-300 data-[state=open]:appear data-[state=closed]:disappear backdrop:data-[state=open]:appear backdrop:data-[state=closed]:disappear">
36+
<HeadlessModal.Panel
37+
{...props}
38+
class={cn(
39+
'max-w-sm rounded-base border bg-background p-6 text-foreground shadow-md backdrop:brightness-50 backdrop:backdrop-blur-sm',
40+
'data-[closed]:duration-300 data-[open]:duration-300 data-[open]:animate-in data-[closing]:animate-out data-[closing]:fade-out data-[open]:fade-in',
41+
'backdrop:data-[closed]:duration-300 backdrop:data-[open]:duration-300 backdrop:data-[open]:animate-in backdrop:data-[closing]:animate-out backdrop:data-[closing]:fade-out backdrop:data-[open]:fade-in',
42+
props.class,
43+
)}
44+
>
5145
<Slot />
5246
</HeadlessModal.Panel>
5347
);
5448
});
5549

56-
const Trigger = component$<PropsOf<typeof HeadlessModal.Trigger>>(({ ...props }) => {
57-
return (
58-
<HeadlessModal.Trigger>
59-
<Slot {...props} />
60-
</HeadlessModal.Trigger>
61-
);
62-
});
63-
6450
const Title = component$<PropsOf<'h2'>>(({ ...props }) => {
6551
return (
6652
<HeadlessModal.Title
6753
{...props}
68-
class={cn('flex flex-col space-y-1.5 text-center sm:text-left', props.class)}
54+
class={cn('text-lg font-semibold tracking-tight', props.class)}
6955
>
7056
<Slot />
7157
</HeadlessModal.Title>
@@ -74,60 +60,46 @@ const Title = component$<PropsOf<'h2'>>(({ ...props }) => {
7460

7561
const Description = component$<PropsOf<'p'>>(({ ...props }) => {
7662
return (
77-
<HeadlessModal.Description {...props} class={cn('text-sm font-light', props.class)}>
63+
<HeadlessModal.Description
64+
{...props}
65+
class={cn('text-sm text-muted-foreground', props.class)}
66+
>
7867
<Slot />
7968
</HeadlessModal.Description>
8069
);
8170
});
8271

8372
export const Modal = {
8473
Root,
85-
Panel,
8674
Trigger,
75+
Close,
76+
Panel,
8777
Title,
8878
Description,
89-
Context,
9079
};
9180
```
9281

9382
## Usage
9483

9584
```tsx
96-
import { Button, Input, Label, Modal } from '~/components/ui';
85+
import { Button, Modal } from '~/components/ui';
9786
```
9887

9988
```tsx
10089
<Modal.Root bind:show={show}>
10190
<Modal.Trigger>Open modal</Modal.Trigger>
10291
<Modal.Panel>
103-
<Modal.Title class="text-lg font-bold">Edit Profile</Modal.Title>
104-
<Modal.Description class="text-sm font-light">
105-
Make changes to your profile here. Click save when you're done.
106-
</Modal.Description>
107-
<div class="grid gap-4 py-4">
108-
<div class="grid grid-cols-4 items-center gap-4">
109-
<Label for="name" class="text-right">
110-
Name
111-
</Label>
112-
<Input name="name" id="name" defaultValue="Pedro Duarte" class="col-span-3" />
113-
</div>
114-
<div class="grid grid-cols-4 items-center gap-4">
115-
<Label for="username" class="text-right">
116-
Username
117-
</Label>
118-
<Input
119-
name="username"
120-
id="username"
121-
defaultValue="@peduarte"
122-
class="col-span-3"
123-
/>
124-
</div>
125-
</div>
92+
<Modal.Title>Title</Modal.Title>
93+
<Modal.Description>Description</Modal.Description>
94+
<div>...</div>
12695
<footer>
127-
<Button onClick$={() => (show.value = false)} type="submit">
128-
Save changes
96+
<Button look="primary" onClick$={() => (show.value = false)}>
97+
Save
12998
</Button>
13099
</footer>
100+
<Modal.Close>
101+
<LuX class="h-5 w-5" />
102+
</Modal.Close>
131103
</Modal.Panel>
132104
</Modal.Root>
133105
```

0 commit comments

Comments
 (0)