# Progress Circle URL: /lynx/components/progress-circle Source: https://github.com/daangn/seed-design/blob/dev/docs/content/lynx/components/progress-circle.mdx 작업이 진행 중임을 알리거나 작업 시간을 시각적으로 나타내는 데 사용됩니다. Lynx Engine 최소 버전: 3.6 사용 가능 버전: @seed-design/lynx-react@0.1.0, @seed-design/lynx-css@0.1.0 ## Preview ```tsx import "./styles"; import { root } from "@lynx-js/react"; import { ProgressCircle, useSeedClassName } from "@seed-design/lynx-react"; function Root() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( ); } root.render(); ``` ## Installation - npm: npx @seed-design/cli add ui:progress-circle - pnpm: pnpm dlx @seed-design/cli add ui:progress-circle - yarn: yarn dlx @seed-design/cli add ui:progress-circle - bun: bun x @seed-design/cli add ui:progress-circle ## Props ## Examples ### Neutral ```tsx import "./styles"; import { root } from "@lynx-js/react"; import { ProgressCircle, useSeedClassName } from "@seed-design/lynx-react"; function Root() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( ); } root.render(); ``` ### Brand ```tsx import "./styles"; import { root } from "@lynx-js/react"; import { ProgressCircle, useSeedClassName } from "@seed-design/lynx-react"; function Root() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( ); } root.render(); ``` ### Static White `staticWhite`는 어두운 배경 위에서 사용합니다. ```tsx import "./styles"; import { root } from "@lynx-js/react"; import { ProgressCircle, useSeedClassName } from "@seed-design/lynx-react"; function Root() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( ); } root.render(); ``` ### Size=40 ```tsx import "./styles"; import { root } from "@lynx-js/react"; import { ProgressCircle, useSeedClassName } from "@seed-design/lynx-react"; function Root() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( ); } root.render(); ``` ### Size=24 ```tsx import "./styles"; import { root } from "@lynx-js/react"; import { ProgressCircle, useSeedClassName } from "@seed-design/lynx-react"; function Root() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( ); } root.render(); ``` ### Determinate `minValue`, `maxValue`, `value`를 모두 지정하면 정해진 진행률을 표시합니다. ```tsx import "./styles"; import { root } from "@lynx-js/react"; import { ProgressCircle, useSeedClassName } from "@seed-design/lynx-react"; function Root() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( ); } root.render(); ``` ### Indeterminate `value`를 생략하면 완료 시점을 알 수 없는 작업의 진행 상태를 표시합니다. ```tsx import "./styles"; import { root } from "@lynx-js/react"; import { ProgressCircle, useSeedClassName } from "@seed-design/lynx-react"; function Root() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( ); } root.render(); ``` ## 웹 버전과의 차이 Lynx 버전은 플랫폼 제약으로 인해 웹(`@seed-design/react`) 버전과 내부 구현이 다릅니다. 공개 variant와 진행률 API는 같지만 조합 방식과 렌더링 방식에 차이가 있습니다. | | 웹 (React) | Lynx | | ------------------ | ------------------------------------- | ----------------------------------------------------------- | | **조합 방식** | 단일 `ProgressCircle` 컴포넌트 | `ProgressCircle.Root`와 `ProgressCircle.Range` 조합 | | **렌더링** | SVG ``과 `stroke-dasharray` | CSS `clip-path` 기반 pie sector | | **애니메이션** | CSS `@keyframes`와 `animation` | Main thread `requestAnimationFrame`과 `setStyleProperty` | | **Determinate 전환** | CSS `transition` | Main thread `requestAnimationFrame` 기반 easing 애니메이션 | | **Track** | `` SVG circle | Root의 CSS `background`와 `clip-path`로 렌더링하며 별도 Track 컴포넌트 없음 | Lynx에서는 `clip-path`가 애니메이션 속성이 아니어서 매 프레임 path 문자열을 만듭니다. Indeterminate 인스턴스를 한 화면에 많이 렌더링하면 성능이 저하될 수 있습니다.