ChatLoadingState

Feedback & Status

앱이 tick을 넘겨 구동하는 생성 대기 애니메이션.

Usage

응답 생성 대기 중임을 짧게 알릴 때 사용합니다. 내부 타이머 없이 앱이 tick을 올려야 애니메이션이 진행되며, 다단계 진행률은 ChatJobProgress를 대신 사용하세요.

import

import

import { ChatLoadingState } from '@mildang/design-system/unofficial/Chat';

예제를 복사해 쓸 때 필요한 준비

@mildang/styled-system 은 이 저장소에서 Panda 가 생성하는 산출물이다. 저장소 안에서는 turbo run ship 이후 쓸 수 있고, 패키지 소비자는 자기 Panda 산출물이나 다른 레이아웃 수단으로 바꿔야 한다.

API Reference

ChatLoadingState Props

Prop

Type

Default

tick
필수

number

지정 안 함

label

ReactNode

생성하는 중

variant

"rounded" | "dots" | "squares"

dots

같은 패밀리

@mildang/design-system/unofficial/Chat 에서 같이 내보내는 컴포넌트다.

예제

고정 tick

코드

import type { ComponentProps } from 'react';
import { ChatLoadingState } from '@mildang/design-system/unofficial/Chat';
type Props = ComponentProps<typeof ChatLoadingState>;
const DEFAULT_ARGS: Props = { tick: 4, label: '패치를 적용하는 중' };
export default function LoadingStateStaticTickExample(props: Partial<Props> = {}) {
  return <ChatLoadingState {...DEFAULT_ARGS} {...props} />;
}

기본 사용

코드

import { css } from '@mildang/styled-system/css';
import { ChatLoadingStateVariant } from '@mildang/design-system/unofficial/Chat';
import { ChatLoadingState } from '@mildang/design-system/unofficial/Chat';
import { useEffect, useState } from 'react';

/** 앱이 프레임을 공급하는 쪽. 여기서는 100ms 인터벌(초당 3.3칸). */
const useTick = () => {
  const [tick, setTick] = useState(0);

  useEffect(() => {
    const id = setInterval(() => setTick((value) => value + 1), 100);
    return () => clearInterval(id);
  }, []);

  return tick;
};

const Animated = ({ variant, label }: { variant?: ChatLoadingStateVariant; label?: string }) => {
  const tick = useTick();

  return <ChatLoadingState tick={tick} variant={variant} label={label} />;
};

const LoadingStateDefaultExample = () => (
  <div className={css({ padding: '32' })}>
    <Animated />
  </div>
);

export default LoadingStateDefaultExample;

애니메이션 모양별

코드

import { css } from '@mildang/styled-system/css';
import { ChatLoadingStateVariant } from '@mildang/design-system/unofficial/Chat';
import { ChatLoadingState } from '@mildang/design-system/unofficial/Chat';
import { useEffect, useState } from 'react';

/** 앱이 프레임을 공급하는 쪽. 여기서는 100ms 인터벌(초당 3.3칸). */
const useTick = () => {
  const [tick, setTick] = useState(0);

  useEffect(() => {
    const id = setInterval(() => setTick((value) => value + 1), 100);
    return () => clearInterval(id);
  }, []);

  return tick;
};

const Animated = ({ variant, label }: { variant?: ChatLoadingStateVariant; label?: string }) => {
  const tick = useTick();

  return <ChatLoadingState tick={tick} variant={variant} label={label} />;
};

const LoadingStateVariantsExample = () => (
  <div
    className={css({
      display: 'flex',
      gap: '48',
      padding: '32',
      flexWrap: 'wrap',
    })}
  >
    <Animated variant="dots" label="dots" />
    <Animated variant="squares" label="squares" />
    <Animated variant="rounded" label="rounded" />
  </div>
);

export default LoadingStateVariantsExample;