Skip to content

Commit 24efd92

Browse files
feat: add close button for popover element (#5205)
fixes #3988 ## Description This PR adds `PopoverClose` button to `Popover` element. Just exported and added the component from `@radix-ui/popover`. Which is where all the rest of the elements are being used. Existing project on staging - https://p-33460026-be01-4d80-8f4f-1d6677c38fe0-dot-pop-close.staging.webstudio.is Deployed project on staging - https://jk-popover-close-1ph18.wstd.work ![popover-close](https://github.com/user-attachments/assets/7670dcc7-2afb-4edf-a638-2a32cb48a9e6) ## Steps for reproduction - You can go to staging, and create a project with popover. - Deploy the project and checked the rendered popover ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [x] made a self-review ## Before merging - [x] tested locally and on preview environment (preview dev login: 0000)
1 parent a44530b commit 24efd92

File tree

8 files changed

+130
-4
lines changed

8 files changed

+130
-4
lines changed

packages/sdk-components-react-radix/src/__generated__/popover.props.ts

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/sdk-components-react-radix/src/__generated__/popover.stories.tsx

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/sdk-components-react-radix/src/components.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ export {
1212
DialogTitle,
1313
DialogDescription,
1414
} from "./dialog";
15-
export { Popover, PopoverTrigger, PopoverContent } from "./popover";
15+
export {
16+
Popover,
17+
PopoverTrigger,
18+
PopoverContent,
19+
PopoverClose,
20+
} from "./popover";
1621
export { Tooltip, TooltipTrigger, TooltipContent } from "./tooltip";
1722
export { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs";
1823
export { Label } from "./label";

packages/sdk-components-react-radix/src/metas.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export {
1616
metaPopover as Popover,
1717
metaPopoverTrigger as PopoverTrigger,
1818
metaPopoverContent as PopoverContent,
19+
metaPopoverClose as PopoverClose,
1920
} from "./popover.ws";
2021
export {
2122
metaTooltip as Tooltip,

packages/sdk-components-react-radix/src/popover.template.tsx

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { LargeXIcon } from "@webstudio-is/icons/svg";
12
import {
23
$,
34
css,
@@ -14,6 +15,8 @@ import {
1415
spacing,
1516
width,
1617
zIndex,
18+
height,
19+
opacity,
1720
} from "./shared/theme";
1821

1922
/**
@@ -52,6 +55,38 @@ export const meta: TemplateMeta = {
5255
`}
5356
>
5457
<$.Text>{new PlaceholderValue("The text you can edit")}</$.Text>
58+
<radix.PopoverClose
59+
ws:label="Close Button"
60+
/**
61+
* absolute right-4 top-4
62+
* rounded-sm opacity-70
63+
* ring-offset-background
64+
* hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2
65+
* flex items-center justify-center h-4 w-4
66+
**/
67+
ws:style={css`
68+
position: absolute;
69+
right: ${spacing[4]};
70+
top: ${spacing[4]};
71+
border-radius: ${borderRadius.sm};
72+
display: flex;
73+
align-items: center;
74+
justify-content: center;
75+
height: ${height[4]};
76+
width: ${height[4]};
77+
border: 0;
78+
background-color: transparent;
79+
outline: none;
80+
&:hover {
81+
opacity: ${opacity[100]};
82+
}
83+
&:focus-visible {
84+
box-shadow: ${boxShadow.ring};
85+
}
86+
`}
87+
>
88+
<$.HtmlEmbed ws:label="Close Icon" code={LargeXIcon} />
89+
</radix.PopoverClose>
5590
</radix.PopoverContent>
5691
</radix.Popover>
5792
),

packages/sdk-components-react-radix/src/popover.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ export const PopoverContent = forwardRef<
5454
)
5555
);
5656

57+
export const PopoverClose = PopoverPrimitive.Close;
58+
5759
/* BUILDER HOOKS */
5860

5961
const namespace = "@webstudio-is/sdk-components-react-radix";

packages/sdk-components-react-radix/src/popover.ws.ts

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
1-
import { PopoverIcon, TriggerIcon, ContentIcon } from "@webstudio-is/icons/svg";
2-
import type { WsComponentMeta, WsComponentPropsMeta } from "@webstudio-is/sdk";
3-
import { div } from "@webstudio-is/sdk/normalize.css";
1+
import {
2+
PopoverIcon,
3+
TriggerIcon,
4+
ContentIcon,
5+
ButtonElementIcon,
6+
} from "@webstudio-is/icons/svg";
7+
import {
8+
defaultStates,
9+
type WsComponentMeta,
10+
type WsComponentPropsMeta,
11+
} from "@webstudio-is/sdk";
12+
import { button, div } from "@webstudio-is/sdk/normalize.css";
413
import { radix } from "./shared/meta";
514
import {
615
propsPopover,
716
propsPopoverContent,
817
propsPopoverTrigger,
18+
propsPopoverClose,
919
} from "./__generated__/popover.props";
20+
import { buttonReset } from "./shared/preset-styles";
1021

1122
// @todo add [data-state] to button and link
1223
export const metaPopoverTrigger: WsComponentMeta = {
@@ -22,6 +33,7 @@ export const metaPopoverContent: WsComponentMeta = {
2233
contentModel: {
2334
category: "none",
2435
children: ["instance"],
36+
descendants: [radix.PopoverClose],
2537
},
2638
presetStyle: {
2739
div,
@@ -37,6 +49,19 @@ export const metaPopover: WsComponentMeta = {
3749
},
3850
};
3951

52+
export const metaPopoverClose: WsComponentMeta = {
53+
icon: ButtonElementIcon,
54+
label: "Close Button",
55+
contentModel: {
56+
category: "none",
57+
children: ["instance", "rich-text"],
58+
},
59+
states: defaultStates,
60+
presetStyle: {
61+
button: [buttonReset, button].flat(),
62+
},
63+
};
64+
4065
export const propsMetaPopover: WsComponentPropsMeta = {
4166
props: propsPopover,
4267
initialProps: ["open"],
@@ -50,3 +75,8 @@ export const propsMetaPopoverContent: WsComponentPropsMeta = {
5075
props: propsPopoverContent,
5176
initialProps: ["side", "sideOffset", "align", "alignOffset"],
5277
};
78+
79+
export const propsMetaPopoverClose: WsComponentPropsMeta = {
80+
props: propsPopoverClose,
81+
initialProps: [],
82+
};

packages/sdk-components-react-radix/src/props.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export {
1616
propsMetaPopover as Popover,
1717
propsMetaPopoverTrigger as PopoverTrigger,
1818
propsMetaPopoverContent as PopoverContent,
19+
propsMetaPopoverClose as PopoverClose,
1920
} from "./popover.ws";
2021
export {
2122
propsMetaTooltip as Tooltip,

0 commit comments

Comments
 (0)