diff --git a/.changeset/pretty-windows-sort.md b/.changeset/pretty-windows-sort.md
new file mode 100644
index 000000000..e14013771
--- /dev/null
+++ b/.changeset/pretty-windows-sort.md
@@ -0,0 +1,5 @@
+---
+'@modern-kit/react': minor
+---
+
+feat(react): AspectRatio Slot 및 polymorphicForwardRef 활용을 통한 다형성 지원 - @ssi02014
diff --git a/docs/docs/react/components/AspectRatio.mdx b/docs/docs/react/components/AspectRatio.mdx
index 432e7d27b..1bf68cfa1 100644
--- a/docs/docs/react/components/AspectRatio.mdx
+++ b/docs/docs/react/components/AspectRatio.mdx
@@ -3,10 +3,18 @@ import { AspectRatio } from '@modern-kit/react';
# AspectRatio
-주어진 **[aspect-ratio](https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio)** 비율을 맞춰주기 위해 선언적으로 사용하는 유틸 컴포넌트입니다.
+주어진 **[aspect-ratio](https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio)** 비율을 맞춰주기 위해 선언적으로 사용하는 유틸 컴포넌트입니다.
미리 영역을 확보하여 `Layout Shift`를 방지하는데 효과적입니다.
+다형성을 지원하기 때문에 `as`, `asChild` 속성을 지원합니다.
+
+- 기본적으로 `div` 태그로 자식 요소를 감싸서 렌더링하며, `as` 속성을 통해 감싸는 요소를 특정 요소로 변경해 렌더링할 수 있습니다. 해당 요소에 `aspect-ratio` 속성을 적용해 영역을 확보합니다.
+- `asChild` 속성이 `true`라면 **[Slot](https://modern-agile-team.github.io/modern-kit/docs/react/components/Slot)** 을 통해 자식 요소를 그대로 렌더링하고, 자식 요소에 `aspect-ratio` 속성을 적용해 영역을 확보합니다.
+ - Slot은 자식으로 `단일 요소`만 허용됩니다.
+ - Slot은 자식으로 컴포넌트가 올 경우 `forwardRef`, `props`를 허용해야 합니다. 허용하지 않으면 정상적으로 동작하지 않습니다.
+ - `asChild` 속성을 사용 할 경우 **[Slot](https://modern-agile-team.github.io/modern-kit/docs/react/components/Slot)** 문서를 참고해주세요.
+
## Code
@@ -17,36 +25,100 @@ import { AspectRatio } from '@modern-kit/react';
interface AspectRatioProps {
children: JSX.Element;
ratio: number;
+ asChild?: boolean;
+ style?: CSSProperties;
+ className?: string;
}
```
```tsx title="typescript"
-const AspectRatio: ({ ratio, children }: AspectRatioProps) => JSX.Element;
+const AspectRatio: PolyForwardComponent<"div", AspectRatioProps, React.ElementType>
```
## Usage
+### Default
+- 기본적으로 `div` 요소에 감싸지며 해당 `div`에 `aspect-ratio` 속성을 적용해 영역을 확보합니다.
```tsx title="typescript"
import { AspectRatio } from '@modern-kit/react'
const Example = () => {
+ const imgUrl = 'https://github.com/user-attachments/assets/dd60ec12-afd7-44c9-bd6b-0069e16bf2c9';
+
return (
-
스크롤 해주세요.
+브라우저 개발자 도구의 콘솔을 확인해주세요.
Box1
-브라우저 개발자 도구의 콘솔을 확인해주세요.
calledOnce: true
as: div
Box3
+calledOnce: false
+asChild: true
+Content
Content
+Content
+