{"version":3,"file":"Spin.mjs","names":[],"sources":["../../../src/base-ui/Spin/Spin.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { LoaderCircle } from 'lucide-react';\nimport { memo, useMemo } from 'react';\n\nimport Icon from '@/Icon';\n\nimport NetworkGlyph from './NetworkGlyph';\nimport { styles } from './style';\nimport type { SpinProps, SpinSize } from './type';\n\nconst sizeMap: Record<'small' | 'middle' | 'large', number> = {\n  large: 32,\n  middle: 20,\n  small: 14,\n};\n\nconst resolveSize = (size: SpinSize) => (typeof size === 'number' ? size : sizeMap[size]);\n\nconst Spin = memo<SpinProps>(\n  ({\n    children,\n    className,\n    indicator,\n    percent,\n    ref,\n    size = 'middle',\n    spinning = true,\n    style,\n    tip,\n    variant = 'default',\n    ...rest\n  }) => {\n    const px = useMemo(() => resolveSize(size), [size]);\n\n    const glyph = useMemo(() => {\n      if (indicator) return indicator;\n\n      if (variant === 'network') return <NetworkGlyph px={px} />;\n\n      if (typeof percent === 'number') {\n        const clamped = Math.min(100, Math.max(0, percent));\n        const circumference = 2 * Math.PI * 9;\n        const offset = circumference * (1 - clamped / 100);\n\n        return (\n          <svg className={cx(styles.glyph, styles.ring)} height={px} viewBox=\"0 0 24 24\" width={px}>\n            <circle\n              className={styles.ringTrack}\n              cx={12}\n              cy={12}\n              fill=\"none\"\n              r={9}\n              strokeWidth={2.5}\n            />\n            <circle\n              className={styles.ringProgress}\n              cx={12}\n              cy={12}\n              fill=\"none\"\n              r={9}\n              strokeDasharray={circumference}\n              strokeDashoffset={offset}\n              strokeLinecap=\"round\"\n              strokeWidth={2.5}\n            />\n          </svg>\n        );\n      }\n\n      return <Icon spin className={styles.glyph} icon={LoaderCircle} size={px} />;\n    }, [indicator, variant, percent, px]);\n\n    if (!spinning) return children ?? null;\n\n    if (!children) {\n      return (\n        <div\n          aria-busy\n          aria-live=\"polite\"\n          className={cx(styles.root, className)}\n          ref={ref}\n          role=\"status\"\n          style={style}\n          {...rest}\n        >\n          <span aria-hidden className={styles.glyphBox}>\n            {glyph}\n          </span>\n        </div>\n      );\n    }\n\n    return (\n      <div className={cx(styles.wrapper, className)} ref={ref} style={style} {...rest}>\n        {children}\n        <div aria-busy aria-live=\"polite\" className={styles.overlay} role=\"status\">\n          <span aria-hidden className={styles.glyphBox}>\n            {glyph}\n          </span>\n          {tip && <span className={styles.tip}>{tip}</span>}\n        </div>\n      </div>\n    );\n  },\n);\n\nSpin.displayName = 'Spin';\n\nexport default Spin;\n"],"mappings":";;;;;;;;;AAYA,MAAM,UAAwD;CAC5D,OAAO;CACP,QAAQ;CACR,OAAO;AACT;AAEA,MAAM,eAAe,SAAoB,OAAO,SAAS,WAAW,OAAO,QAAQ;AAEnF,MAAM,OAAO,MACV,EACC,UACA,WACA,WACA,SACA,KACA,OAAO,UACP,WAAW,MACX,OACA,KACA,UAAU,WACV,GAAG,WACC;CACJ,MAAM,KAAK,cAAc,YAAY,IAAI,GAAG,CAAC,IAAI,CAAC;CAElD,MAAM,QAAQ,cAAc;EAC1B,IAAI,WAAW,OAAO;EAEtB,IAAI,YAAY,WAAW,OAAO,oBAAC,cAAD,EAAkB,GAAK,CAAA;EAEzD,IAAI,OAAO,YAAY,UAAU;GAC/B,MAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;GAClD,MAAM,gBAAgB,IAAI,KAAK,KAAK;GACpC,MAAM,SAAS,iBAAiB,IAAI,UAAU;GAE9C,OACE,qBAAC,OAAD;IAAK,WAAW,GAAG,OAAO,OAAO,OAAO,IAAI;IAAG,QAAQ;IAAI,SAAQ;IAAY,OAAO;IAAtF,UAAA,CACE,oBAAC,UAAD;KACE,WAAW,OAAO;KAClB,IAAI;KACJ,IAAI;KACJ,MAAK;KACL,GAAG;KACH,aAAa;IACd,CAAA,GACD,oBAAC,UAAD;KACE,WAAW,OAAO;KAClB,IAAI;KACJ,IAAI;KACJ,MAAK;KACL,GAAG;KACH,iBAAiB;KACjB,kBAAkB;KAClB,eAAc;KACd,aAAa;IACd,CAAA,CACE;;EAET;EAEA,OAAO,oBAAC,MAAD;GAAM,MAAA;GAAK,WAAW,OAAO;GAAO,MAAM;GAAc,MAAM;EAAK,CAAA;CAC5E,GAAG;EAAC;EAAW;EAAS;EAAS;CAAE,CAAC;CAEpC,IAAI,CAAC,UAAU,OAAO,YAAY;CAElC,IAAI,CAAC,UACH,OACE,oBAAC,OAAD;EACE,aAAA;EACA,aAAU;EACV,WAAW,GAAG,OAAO,MAAM,SAAS;EAC/B;EACL,MAAK;EACE;EACP,GAAI;EAEJ,UAAA,oBAAC,QAAD;GAAM,eAAA;GAAY,WAAW,OAAO;GACjC,UAAA;EACG,CAAA;CACH,CAAA;CAIT,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,OAAO,SAAS,SAAS;EAAQ;EAAY;EAAO,GAAI;EAA3E,UAAA,CACG,UACD,qBAAC,OAAD;GAAK,aAAA;GAAU,aAAU;GAAS,WAAW,OAAO;GAAS,MAAK;GAAlE,UAAA,CACE,oBAAC,QAAD;IAAM,eAAA;IAAY,WAAW,OAAO;IACjC,UAAA;GACG,CAAA,GACL,OAAO,oBAAC,QAAD;IAAM,WAAW,OAAO;IAAM,UAAA;GAAU,CAAA,CAC7C;EACF,CAAA,CAAA;;AAET,CACF;AAEA,KAAK,cAAc"}