diff --git a/apps/builder/app/builder/features/style-panel/sections/transforms/transform-perspective.tsx b/apps/builder/app/builder/features/style-panel/sections/transforms/transform-perspective.tsx
new file mode 100644
index 0000000000..6d01a3f94c
--- /dev/null
+++ b/apps/builder/app/builder/features/style-panel/sections/transforms/transform-perspective.tsx
@@ -0,0 +1,40 @@
+import { type StyleProperty } from "@webstudio-is/css-engine";
+import { Grid, theme } from "@webstudio-is/design-system";
+import { TextControl } from "../../controls";
+import { PropertyName } from "../../shared/property-name";
+import { styleConfigByName } from "../../shared/configs";
+import type { SectionProps } from "../shared/section";
+
+const property: StyleProperty = "perspective";
+
+export const TransformPerspective = (props: SectionProps) => {
+ const { currentStyle, setProperty, deleteProperty } = props;
+ const { label } = styleConfigByName(property);
+ const value = currentStyle[property]?.local;
+
+ if (value?.type !== "keyword" && value?.type !== "unit") {
+ return;
+ }
+
+ return (
+
+ deleteProperty(property)}
+ />
+
+
+ );
+};
diff --git a/apps/builder/app/builder/features/style-panel/sections/transforms/transform-utils.ts b/apps/builder/app/builder/features/style-panel/sections/transforms/transform-utils.ts
index c0a25cf106..01e44068e1 100644
--- a/apps/builder/app/builder/features/style-panel/sections/transforms/transform-utils.ts
+++ b/apps/builder/app/builder/features/style-panel/sections/transforms/transform-utils.ts
@@ -108,6 +108,13 @@ export const addDefaultsForTransormSection = (props: {
});
}
+ case "perspective": {
+ return setProperty("perspective")({
+ type: "keyword",
+ value: "none",
+ });
+ }
+
case "skew":
case "rotate": {
const value = currentStyle["transform"]?.value;
@@ -154,6 +161,9 @@ export const isTransformPanelPropertyUsed = (params: {
case "backfaceVisibility":
return currentStyle["backfaceVisibility"]?.local?.type === "keyword";
+ case "perspective":
+ return currentStyle["perspective"]?.local !== undefined;
+
case "rotate": {
const rotate = currentStyle["transform"]?.value;
return (
diff --git a/apps/builder/app/builder/features/style-panel/sections/transforms/transforms.tsx b/apps/builder/app/builder/features/style-panel/sections/transforms/transforms.tsx
index 0ab9ce4b59..17798d4912 100644
--- a/apps/builder/app/builder/features/style-panel/sections/transforms/transforms.tsx
+++ b/apps/builder/app/builder/features/style-panel/sections/transforms/transforms.tsx
@@ -39,6 +39,7 @@ import { ScalePanelContent } from "./transform-scale";
import { RotatePanelContent } from "./transform-rotate";
import { SkewPanelContent } from "./transform-skew";
import { BackfaceVisibility } from "./transform-backface-visibility";
+import { TransformPerspective } from "./transform-perspective";
import { humanizeString } from "~/shared/string-utils";
import { getStyleSource } from "../../shared/style-info";
import { PropertyName } from "../../shared/property-name";
@@ -55,6 +56,7 @@ export const transformPanels = [
export const transformPanelDropdown = [
...transformPanels,
"backfaceVisibility",
+ "perspective",
] as const;
export type TransformPanel = (typeof transformPanels)[number];
@@ -65,6 +67,7 @@ export const properties = [
"scale",
"transform",
"backfaceVisibility",
+ "perspective",
] satisfies Array;
export const Section = (props: SectionProps) => {
@@ -81,6 +84,7 @@ export const Section = (props: SectionProps) => {
const backfaceVisibilityStyleSource = getStyleSource(
currentStyle["backfaceVisibility"]
);
+ const perspectiveStyleSource = getStyleSource(currentStyle["perspective"]);
const isAnyTransformPropertyAdded = transformPanels.some((panel) =>
isTransformPanelPropertyUsed({
@@ -95,6 +99,7 @@ export const Section = (props: SectionProps) => {
batch.deleteProperty("scale");
batch.deleteProperty("transform");
batch.deleteProperty("backfaceVisibility");
+ batch.deleteProperty("perspective");
batch.publish();
};
@@ -115,7 +120,7 @@ export const Section = (props: SectionProps) => {
{transformPanelDropdown.map((panel) => {
return (
@@ -155,7 +160,8 @@ export const Section = (props: SectionProps) => {
translateStyleSource ||
scaleStyleSource ||
rotateAndSkewStyleSrouce ||
- backfaceVisibilityStyleSource
+ backfaceVisibilityStyleSource ||
+ perspectiveStyleSource
}
>
{label}
@@ -182,6 +188,7 @@ export const Section = (props: SectionProps) => {
) : undefined}
+
);
};