@cleartrip/ct-design-progress-bar 4.0.0-SNAPSHOT-test.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -0
- package/dist/ProgressBar.d.ts +5 -0
- package/dist/ProgressBar.d.ts.map +1 -0
- package/dist/ProgressBar.native.d.ts +6 -0
- package/dist/ProgressBar.native.d.ts.map +1 -0
- package/dist/ct-design-progress-bar.browser.cjs.js +2 -0
- package/dist/ct-design-progress-bar.browser.cjs.js.map +1 -0
- package/dist/ct-design-progress-bar.browser.esm.js +2 -0
- package/dist/ct-design-progress-bar.browser.esm.js.map +1 -0
- package/dist/ct-design-progress-bar.cjs.js +82 -0
- package/dist/ct-design-progress-bar.cjs.js.map +1 -0
- package/dist/ct-design-progress-bar.esm.js +80 -0
- package/dist/ct-design-progress-bar.esm.js.map +1 -0
- package/dist/ct-design-progress-bar.umd.js +83 -0
- package/dist/ct-design-progress-bar.umd.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.native.d.ts +3 -0
- package/dist/index.native.d.ts.map +1 -0
- package/dist/style.d.ts +19 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/type.d.ts +9 -0
- package/dist/type.d.ts.map +1 -0
- package/package.json +49 -0
- package/src/ProgressBar.native.tsx +86 -0
- package/src/ProgressBar.tsx +84 -0
- package/src/index.native.ts +2 -0
- package/src/index.ts +2 -0
- package/src/style.ts +23 -0
- package/src/type.ts +17 -0
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# ProgressBar
|
|
2
|
+
|
|
3
|
+
A progress indicator component showing task completion status.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @cleartrip/ct-design-progress-bar
|
|
11
|
+
# or
|
|
12
|
+
pnpm add @cleartrip/ct-design-progress-bar
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Peer dependencies
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Required for all targets
|
|
19
|
+
npm install react
|
|
20
|
+
|
|
21
|
+
# Web only
|
|
22
|
+
npm install react-dom
|
|
23
|
+
|
|
24
|
+
# React Native only
|
|
25
|
+
npm install react-native
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
### Basic
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { ProgressBar } from '@cleartrip/ct-design-progress-bar';
|
|
36
|
+
|
|
37
|
+
function Example() {
|
|
38
|
+
return (
|
|
39
|
+
<ProgressBar>
|
|
40
|
+
{/* Basic usage */}
|
|
41
|
+
</ProgressBar>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Accessibility
|
|
49
|
+
|
|
50
|
+
- The component follows accessibility best practices
|
|
51
|
+
- Ensure proper ARIA attributes are provided where needed
|
|
52
|
+
- Test with screen readers to ensure usability
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Migration
|
|
57
|
+
|
|
58
|
+
If migrating from a previous version:
|
|
59
|
+
|
|
60
|
+
```diff
|
|
61
|
+
- import { ProgressBar } from 'yagami/core/components';
|
|
62
|
+
+ import { ProgressBar } from '@cleartrip/ct-design-progress-bar';
|
|
63
|
+
```
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ContainerRef } from '@cleartrip/ct-design-container';
|
|
2
|
+
import { IProgressBar } from './type';
|
|
3
|
+
declare const ProgressBar: import("react").ForwardRefExoticComponent<IProgressBar & import("react").RefAttributes<ContainerRef>>;
|
|
4
|
+
export default ProgressBar;
|
|
5
|
+
//# sourceMappingURL=ProgressBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../packages/components/ProgressBar/src/ProgressBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAa,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,QAAA,MAAM,WAAW,uGAuEf,CAAC;AAIH,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ContainerRef } from '@cleartrip/ct-design-container';
|
|
3
|
+
import { IProgressBar } from './type';
|
|
4
|
+
declare const ProgressBar: React.ForwardRefExoticComponent<IProgressBar & React.RefAttributes<ContainerRef>>;
|
|
5
|
+
export default ProgressBar;
|
|
6
|
+
//# sourceMappingURL=ProgressBar.native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.native.d.ts","sourceRoot":"","sources":["../packages/components/ProgressBar/src/ProgressBar.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAa,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,QAAA,MAAM,WAAW,mFAwEf,CAAC;AAIH,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var r=require("react/jsx-runtime"),e=require("react"),t=require("@cleartrip/ct-design-container"),n=require("@cleartrip/ct-design-style-manager");const s=n.makeStyles(r=>{var e,t;return{progressContainer:{backgroundColor:"transparent",display:"flex",flexGrow:1,justifyContent:"center",alignItems:"center"},progressBar:{width:"100%",overflow:"hidden"},progress:{height:"100%",backgroundColor:null===(t=null===(e=null==r?void 0:r.color)||void 0===e?void 0:e.background)||void 0===t?void 0:t.neutral,opacity:1}}}),o=e.forwardRef((o,a)=>{const{duration:i,resetProgress:l,hidden:c,completed:u,disabled:g}=o,[d,p]=e.useState(0),f=e.useRef(null),C=n.useStyles(r=>({progressContainer:{zIndex:c?0:3e3},progressBar:{height:c?r.spacing[0]:r.spacing[.5]},progress:{width:`${u?100:d}%`,transition:"width 100ms linear"}}),[c,u,d]);return e.useEffect(()=>{if(u||g)return;let r=Date.now();return l&&f.current&&(r=Date.now(),clearInterval(f.current)),f.current=setInterval(()=>{const e=(Date.now()-r)/i*100;e<=100?p(e):f.current&&clearInterval(f.current)},10),()=>{f.current&&clearInterval(f.current)}},[i,l,u,g]),r.jsx(t.Container,{ref:a,styleConfig:{root:[s.progressContainer,C.progressContainer]},children:r.jsx(t.Container,{styleConfig:{root:[s.progressBar,C.progressBar]},children:!g&&r.jsx(t.Container,{styleConfig:{root:[s.progress,C.progress]}})})})});o.displayName="ProgressBar",exports.ProgressBar=o;
|
|
2
|
+
//# sourceMappingURL=ct-design-progress-bar.browser.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ct-design-progress-bar.browser.cjs.js","sources":["../packages/components/ProgressBar/src/style.ts","../packages/components/ProgressBar/src/ProgressBar.tsx"],"sourcesContent":[null,null],"names":["progressBarStaticStyles","makeStyles","theme","progressContainer","backgroundColor","display","flexGrow","justifyContent","alignItems","progressBar","width","overflow","progress","height","_b","_a","color","background","neutral","opacity","ProgressBar","forwardRef","props","ref","duration","resetProgress","hidden","completed","disabled","setProgress","useState","intervalRef","useRef","dynamicStyles","useStyles","zIndex","spacing","transition","useEffect","startTime","Date","now","current","clearInterval","setInterval","currentProgress","_jsx","Container","styleConfig","root","children","displayName"],"mappings":"+JAEO,MAAMA,EAA0BC,EAAAA,WAAYC,YAAU,MAAC,CAC5DC,kBAAmB,CACjBC,gBAAiB,cACjBC,QAAS,OACTC,SAAU,EACVC,eAAgB,SAChBC,WAAY,UAEdC,YAAa,CACXC,MAAO,OACPC,SAAU,UAKZC,SAAU,CACRC,OAAQ,OACRT,wBAAiBU,EAAc,QAAdC,EAAAb,aAAA,EAAAA,EAAOc,aAAO,IAAAD,OAAA,EAAAA,EAAAE,iCAAYC,QAC3CC,QAAS,MCZPC,EAAcC,EAAUA,WAA6B,CAACC,EAAOC,KACjE,MAAMC,SAAEA,EAAQC,cAAEA,EAAaC,OAAEA,EAAMC,UAAEA,EAASC,SAAEA,GAAaN,GAC1DV,EAAUiB,GAAeC,EAAQA,SAAS,GAC3CC,EAAcC,SAA8C,MAE5DC,EAAgBC,YACnBhC,IAAW,CACVC,kBAAmB,CACjBgC,OAAQT,EAAS,EAAI,KAEvBjB,YAAa,CACXI,OAAQa,EAASxB,EAAMkC,QAAQ,GAAKlC,EAAMkC,QAAQ,KAEpDxB,SAAU,CACRF,MAAO,GAAGiB,EAAY,IAAMf,KAC5ByB,WAAY,wBAGhB,CAACX,EAAQC,EAAWf,IA+BtB,OA5BA0B,EAAAA,UAAU,KACR,GAAIX,GAAaC,EAAU,OAE3B,IAAIW,EAAYC,KAAKC,MAkBrB,OAjBIhB,GAAiBM,EAAYW,UAC/BH,EAAYC,KAAKC,MACjBE,cAAcZ,EAAYW,UAG5BX,EAAYW,QAAUE,YAAY,KAChC,MAEMC,GAFML,KAAKC,MACSF,GACaf,EAAY,IAE/CqB,GAAmB,IACrBhB,EAAYgB,GACHd,EAAYW,SACrBC,cAAcZ,EAAYW,UAE3B,IAEI,KACDX,EAAYW,SACdC,cAAcZ,EAAYW,WAG7B,CAAClB,EAAUC,EAAeE,EAAWC,IAGtCkB,MAACC,EAASA,UAAA,CACRxB,IAAKA,EACLyB,YAAa,CACXC,KAAM,CAACjD,EAAwBG,kBAAmB8B,EAAc9B,oBACjE+C,SAEDJ,EAAAA,IAACC,EAASA,UACR,CAAAC,YAAa,CACXC,KAAM,CAACjD,EAAwBS,YAAawB,EAAcxB,cAG3DyC,UAACtB,GACAkB,MAACC,EAASA,UAAA,CACRC,YAAa,CACXC,KAAM,CAACjD,EAAwBY,SAAUqB,EAAcrB,mBASrEQ,EAAY+B,YAAc"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{forwardRef as e,useState as t,useRef as o,useEffect as n}from"react";import{Container as s}from"@cleartrip/ct-design-container";import{makeStyles as a,useStyles as i}from"@cleartrip/ct-design-style-manager";const l=a(r=>{var e,t;return{progressContainer:{backgroundColor:"transparent",display:"flex",flexGrow:1,justifyContent:"center",alignItems:"center"},progressBar:{width:"100%",overflow:"hidden"},progress:{height:"100%",backgroundColor:null===(t=null===(e=null==r?void 0:r.color)||void 0===e?void 0:e.background)||void 0===t?void 0:t.neutral,opacity:1}}}),c=e((e,a)=>{const{duration:c,resetProgress:g,hidden:d,completed:p,disabled:u}=e,[m,f]=t(0),h=o(null),v=i(r=>({progressContainer:{zIndex:d?0:3e3},progressBar:{height:d?r.spacing[0]:r.spacing[.5]},progress:{width:`${p?100:m}%`,transition:"width 100ms linear"}}),[d,p,m]);return n(()=>{if(p||u)return;let r=Date.now();return g&&h.current&&(r=Date.now(),clearInterval(h.current)),h.current=setInterval(()=>{const e=(Date.now()-r)/c*100;e<=100?f(e):h.current&&clearInterval(h.current)},10),()=>{h.current&&clearInterval(h.current)}},[c,g,p,u]),r(s,{ref:a,styleConfig:{root:[l.progressContainer,v.progressContainer]},children:r(s,{styleConfig:{root:[l.progressBar,v.progressBar]},children:!u&&r(s,{styleConfig:{root:[l.progress,v.progress]}})})})});c.displayName="ProgressBar";export{c as ProgressBar};
|
|
2
|
+
//# sourceMappingURL=ct-design-progress-bar.browser.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ct-design-progress-bar.browser.esm.js","sources":["../packages/components/ProgressBar/src/style.ts","../packages/components/ProgressBar/src/ProgressBar.tsx"],"sourcesContent":[null,null],"names":["progressBarStaticStyles","makeStyles","theme","progressContainer","backgroundColor","display","flexGrow","justifyContent","alignItems","progressBar","width","overflow","progress","height","_b","_a","color","background","neutral","opacity","ProgressBar","forwardRef","props","ref","duration","resetProgress","hidden","completed","disabled","setProgress","useState","intervalRef","useRef","dynamicStyles","useStyles","zIndex","spacing","transition","useEffect","startTime","Date","now","current","clearInterval","setInterval","currentProgress","_jsx","Container","styleConfig","root","children","displayName"],"mappings":"8PAEO,MAAMA,EAA0BC,EAAYC,YAAU,MAAC,CAC5DC,kBAAmB,CACjBC,gBAAiB,cACjBC,QAAS,OACTC,SAAU,EACVC,eAAgB,SAChBC,WAAY,UAEdC,YAAa,CACXC,MAAO,OACPC,SAAU,UAKZC,SAAU,CACRC,OAAQ,OACRT,wBAAiBU,EAAc,QAAdC,EAAAb,aAAA,EAAAA,EAAOc,aAAO,IAAAD,OAAA,EAAAA,EAAAE,iCAAYC,QAC3CC,QAAS,MCZPC,EAAcC,EAAuC,CAACC,EAAOC,KACjE,MAAMC,SAAEA,EAAQC,cAAEA,EAAaC,OAAEA,EAAMC,UAAEA,EAASC,SAAEA,GAAaN,GAC1DV,EAAUiB,GAAeC,EAAiB,GAC3CC,EAAcC,EAA8C,MAE5DC,EAAgBC,EACnBhC,IAAW,CACVC,kBAAmB,CACjBgC,OAAQT,EAAS,EAAI,KAEvBjB,YAAa,CACXI,OAAQa,EAASxB,EAAMkC,QAAQ,GAAKlC,EAAMkC,QAAQ,KAEpDxB,SAAU,CACRF,MAAO,GAAGiB,EAAY,IAAMf,KAC5ByB,WAAY,wBAGhB,CAACX,EAAQC,EAAWf,IA+BtB,OA5BA0B,EAAU,KACR,GAAIX,GAAaC,EAAU,OAE3B,IAAIW,EAAYC,KAAKC,MAkBrB,OAjBIhB,GAAiBM,EAAYW,UAC/BH,EAAYC,KAAKC,MACjBE,cAAcZ,EAAYW,UAG5BX,EAAYW,QAAUE,YAAY,KAChC,MAEMC,GAFML,KAAKC,MACSF,GACaf,EAAY,IAE/CqB,GAAmB,IACrBhB,EAAYgB,GACHd,EAAYW,SACrBC,cAAcZ,EAAYW,UAE3B,IAEI,KACDX,EAAYW,SACdC,cAAcZ,EAAYW,WAG7B,CAAClB,EAAUC,EAAeE,EAAWC,IAGtCkB,EAACC,EAAS,CACRxB,IAAKA,EACLyB,YAAa,CACXC,KAAM,CAACjD,EAAwBG,kBAAmB8B,EAAc9B,oBACjE+C,SAEDJ,EAACC,EACC,CAAAC,YAAa,CACXC,KAAM,CAACjD,EAAwBS,YAAawB,EAAcxB,cAG3DyC,UAACtB,GACAkB,EAACC,EAAS,CACRC,YAAa,CACXC,KAAM,CAACjD,EAAwBY,SAAUqB,EAAcrB,mBASrEQ,EAAY+B,YAAc"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var ctDesignContainer = require('@cleartrip/ct-design-container');
|
|
6
|
+
var ctDesignStyleManager = require('@cleartrip/ct-design-style-manager');
|
|
7
|
+
|
|
8
|
+
const progressBarStaticStyles = ctDesignStyleManager.makeStyles((theme) => {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
return ({
|
|
11
|
+
progressContainer: {
|
|
12
|
+
backgroundColor: 'transparent',
|
|
13
|
+
display: 'flex',
|
|
14
|
+
flexGrow: 1,
|
|
15
|
+
justifyContent: 'center',
|
|
16
|
+
alignItems: 'center',
|
|
17
|
+
},
|
|
18
|
+
progressBar: {
|
|
19
|
+
width: '100%',
|
|
20
|
+
overflow: 'hidden',
|
|
21
|
+
},
|
|
22
|
+
progress: {
|
|
23
|
+
height: '100%',
|
|
24
|
+
backgroundColor: (_b = (_a = theme === null || theme === void 0 ? void 0 : theme.color) === null || _a === void 0 ? void 0 : _a.background) === null || _b === void 0 ? void 0 : _b.neutral,
|
|
25
|
+
opacity: 1,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const ProgressBar = react.forwardRef((props, ref) => {
|
|
31
|
+
const { duration, resetProgress, hidden, completed, disabled } = props;
|
|
32
|
+
const [progress, setProgress] = react.useState(0);
|
|
33
|
+
const intervalRef = react.useRef(null);
|
|
34
|
+
const dynamicStyles = ctDesignStyleManager.useStyles((theme) => ({
|
|
35
|
+
progressContainer: {
|
|
36
|
+
zIndex: hidden ? 0 : 3000,
|
|
37
|
+
},
|
|
38
|
+
progressBar: {
|
|
39
|
+
height: hidden ? theme.spacing[0] : theme.spacing[0.5],
|
|
40
|
+
},
|
|
41
|
+
progress: {
|
|
42
|
+
width: `${completed ? 100 : progress}%`,
|
|
43
|
+
transition: 'width 100ms linear',
|
|
44
|
+
},
|
|
45
|
+
}), [hidden, completed, progress]);
|
|
46
|
+
react.useEffect(() => {
|
|
47
|
+
if (completed || disabled)
|
|
48
|
+
return;
|
|
49
|
+
let startTime = Date.now();
|
|
50
|
+
if (resetProgress && intervalRef.current) {
|
|
51
|
+
startTime = Date.now();
|
|
52
|
+
clearInterval(intervalRef.current);
|
|
53
|
+
}
|
|
54
|
+
intervalRef.current = setInterval(() => {
|
|
55
|
+
const now = Date.now();
|
|
56
|
+
const elapsedTime = now - startTime;
|
|
57
|
+
const currentProgress = (elapsedTime / duration) * 100;
|
|
58
|
+
if (currentProgress <= 100) {
|
|
59
|
+
setProgress(currentProgress);
|
|
60
|
+
}
|
|
61
|
+
else if (intervalRef.current) {
|
|
62
|
+
clearInterval(intervalRef.current);
|
|
63
|
+
}
|
|
64
|
+
}, 10);
|
|
65
|
+
return () => {
|
|
66
|
+
if (intervalRef.current) {
|
|
67
|
+
clearInterval(intervalRef.current);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}, [duration, resetProgress, completed, disabled]);
|
|
71
|
+
return (jsxRuntime.jsx(ctDesignContainer.Container, { ref: ref, styleConfig: {
|
|
72
|
+
root: [progressBarStaticStyles.progressContainer, dynamicStyles.progressContainer],
|
|
73
|
+
}, children: jsxRuntime.jsx(ctDesignContainer.Container, { styleConfig: {
|
|
74
|
+
root: [progressBarStaticStyles.progressBar, dynamicStyles.progressBar],
|
|
75
|
+
}, children: !disabled && (jsxRuntime.jsx(ctDesignContainer.Container, { styleConfig: {
|
|
76
|
+
root: [progressBarStaticStyles.progress, dynamicStyles.progress],
|
|
77
|
+
} })) }) }));
|
|
78
|
+
});
|
|
79
|
+
ProgressBar.displayName = 'ProgressBar';
|
|
80
|
+
|
|
81
|
+
exports.ProgressBar = ProgressBar;
|
|
82
|
+
//# sourceMappingURL=ct-design-progress-bar.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ct-design-progress-bar.cjs.js","sources":["../packages/components/ProgressBar/src/style.ts","../packages/components/ProgressBar/src/ProgressBar.tsx"],"sourcesContent":[null,null],"names":["makeStyles","forwardRef","useState","useRef","useStyles","useEffect","_jsx","Container"],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef, useState, useRef, useEffect } from 'react';
|
|
3
|
+
import { Container } from '@cleartrip/ct-design-container';
|
|
4
|
+
import { makeStyles, useStyles } from '@cleartrip/ct-design-style-manager';
|
|
5
|
+
|
|
6
|
+
const progressBarStaticStyles = makeStyles((theme) => {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
return ({
|
|
9
|
+
progressContainer: {
|
|
10
|
+
backgroundColor: 'transparent',
|
|
11
|
+
display: 'flex',
|
|
12
|
+
flexGrow: 1,
|
|
13
|
+
justifyContent: 'center',
|
|
14
|
+
alignItems: 'center',
|
|
15
|
+
},
|
|
16
|
+
progressBar: {
|
|
17
|
+
width: '100%',
|
|
18
|
+
overflow: 'hidden',
|
|
19
|
+
},
|
|
20
|
+
progress: {
|
|
21
|
+
height: '100%',
|
|
22
|
+
backgroundColor: (_b = (_a = theme === null || theme === void 0 ? void 0 : theme.color) === null || _a === void 0 ? void 0 : _a.background) === null || _b === void 0 ? void 0 : _b.neutral,
|
|
23
|
+
opacity: 1,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const ProgressBar = forwardRef((props, ref) => {
|
|
29
|
+
const { duration, resetProgress, hidden, completed, disabled } = props;
|
|
30
|
+
const [progress, setProgress] = useState(0);
|
|
31
|
+
const intervalRef = useRef(null);
|
|
32
|
+
const dynamicStyles = useStyles((theme) => ({
|
|
33
|
+
progressContainer: {
|
|
34
|
+
zIndex: hidden ? 0 : 3000,
|
|
35
|
+
},
|
|
36
|
+
progressBar: {
|
|
37
|
+
height: hidden ? theme.spacing[0] : theme.spacing[0.5],
|
|
38
|
+
},
|
|
39
|
+
progress: {
|
|
40
|
+
width: `${completed ? 100 : progress}%`,
|
|
41
|
+
transition: 'width 100ms linear',
|
|
42
|
+
},
|
|
43
|
+
}), [hidden, completed, progress]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (completed || disabled)
|
|
46
|
+
return;
|
|
47
|
+
let startTime = Date.now();
|
|
48
|
+
if (resetProgress && intervalRef.current) {
|
|
49
|
+
startTime = Date.now();
|
|
50
|
+
clearInterval(intervalRef.current);
|
|
51
|
+
}
|
|
52
|
+
intervalRef.current = setInterval(() => {
|
|
53
|
+
const now = Date.now();
|
|
54
|
+
const elapsedTime = now - startTime;
|
|
55
|
+
const currentProgress = (elapsedTime / duration) * 100;
|
|
56
|
+
if (currentProgress <= 100) {
|
|
57
|
+
setProgress(currentProgress);
|
|
58
|
+
}
|
|
59
|
+
else if (intervalRef.current) {
|
|
60
|
+
clearInterval(intervalRef.current);
|
|
61
|
+
}
|
|
62
|
+
}, 10);
|
|
63
|
+
return () => {
|
|
64
|
+
if (intervalRef.current) {
|
|
65
|
+
clearInterval(intervalRef.current);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}, [duration, resetProgress, completed, disabled]);
|
|
69
|
+
return (jsx(Container, { ref: ref, styleConfig: {
|
|
70
|
+
root: [progressBarStaticStyles.progressContainer, dynamicStyles.progressContainer],
|
|
71
|
+
}, children: jsx(Container, { styleConfig: {
|
|
72
|
+
root: [progressBarStaticStyles.progressBar, dynamicStyles.progressBar],
|
|
73
|
+
}, children: !disabled && (jsx(Container, { styleConfig: {
|
|
74
|
+
root: [progressBarStaticStyles.progress, dynamicStyles.progress],
|
|
75
|
+
} })) }) }));
|
|
76
|
+
});
|
|
77
|
+
ProgressBar.displayName = 'ProgressBar';
|
|
78
|
+
|
|
79
|
+
export { ProgressBar };
|
|
80
|
+
//# sourceMappingURL=ct-design-progress-bar.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ct-design-progress-bar.esm.js","sources":["../packages/components/ProgressBar/src/style.ts","../packages/components/ProgressBar/src/ProgressBar.tsx"],"sourcesContent":[null,null],"names":["_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react/jsx-runtime'), require('react'), require('@cleartrip/ct-design-container'), require('@cleartrip/ct-design-style-manager')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'react/jsx-runtime', 'react', '@cleartrip/ct-design-container', '@cleartrip/ct-design-style-manager'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.CTDesignSystemProgressBar = {}, global.jsxRuntime, global.React, global.ctDesignContainer, global.ctDesignStyleManager));
|
|
5
|
+
})(this, (function (exports, jsxRuntime, react, ctDesignContainer, ctDesignStyleManager) { 'use strict';
|
|
6
|
+
|
|
7
|
+
const progressBarStaticStyles = ctDesignStyleManager.makeStyles((theme) => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
return ({
|
|
10
|
+
progressContainer: {
|
|
11
|
+
backgroundColor: 'transparent',
|
|
12
|
+
display: 'flex',
|
|
13
|
+
flexGrow: 1,
|
|
14
|
+
justifyContent: 'center',
|
|
15
|
+
alignItems: 'center',
|
|
16
|
+
},
|
|
17
|
+
progressBar: {
|
|
18
|
+
width: '100%',
|
|
19
|
+
overflow: 'hidden',
|
|
20
|
+
},
|
|
21
|
+
progress: {
|
|
22
|
+
height: '100%',
|
|
23
|
+
backgroundColor: (_b = (_a = theme === null || theme === void 0 ? void 0 : theme.color) === null || _a === void 0 ? void 0 : _a.background) === null || _b === void 0 ? void 0 : _b.neutral,
|
|
24
|
+
opacity: 1,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const ProgressBar = react.forwardRef((props, ref) => {
|
|
30
|
+
const { duration, resetProgress, hidden, completed, disabled } = props;
|
|
31
|
+
const [progress, setProgress] = react.useState(0);
|
|
32
|
+
const intervalRef = react.useRef(null);
|
|
33
|
+
const dynamicStyles = ctDesignStyleManager.useStyles((theme) => ({
|
|
34
|
+
progressContainer: {
|
|
35
|
+
zIndex: hidden ? 0 : 3000,
|
|
36
|
+
},
|
|
37
|
+
progressBar: {
|
|
38
|
+
height: hidden ? theme.spacing[0] : theme.spacing[0.5],
|
|
39
|
+
},
|
|
40
|
+
progress: {
|
|
41
|
+
width: `${completed ? 100 : progress}%`,
|
|
42
|
+
transition: 'width 100ms linear',
|
|
43
|
+
},
|
|
44
|
+
}), [hidden, completed, progress]);
|
|
45
|
+
react.useEffect(() => {
|
|
46
|
+
if (completed || disabled)
|
|
47
|
+
return;
|
|
48
|
+
let startTime = Date.now();
|
|
49
|
+
if (resetProgress && intervalRef.current) {
|
|
50
|
+
startTime = Date.now();
|
|
51
|
+
clearInterval(intervalRef.current);
|
|
52
|
+
}
|
|
53
|
+
intervalRef.current = setInterval(() => {
|
|
54
|
+
const now = Date.now();
|
|
55
|
+
const elapsedTime = now - startTime;
|
|
56
|
+
const currentProgress = (elapsedTime / duration) * 100;
|
|
57
|
+
if (currentProgress <= 100) {
|
|
58
|
+
setProgress(currentProgress);
|
|
59
|
+
}
|
|
60
|
+
else if (intervalRef.current) {
|
|
61
|
+
clearInterval(intervalRef.current);
|
|
62
|
+
}
|
|
63
|
+
}, 10);
|
|
64
|
+
return () => {
|
|
65
|
+
if (intervalRef.current) {
|
|
66
|
+
clearInterval(intervalRef.current);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}, [duration, resetProgress, completed, disabled]);
|
|
70
|
+
return (jsxRuntime.jsx(ctDesignContainer.Container, { ref: ref, styleConfig: {
|
|
71
|
+
root: [progressBarStaticStyles.progressContainer, dynamicStyles.progressContainer],
|
|
72
|
+
}, children: jsxRuntime.jsx(ctDesignContainer.Container, { styleConfig: {
|
|
73
|
+
root: [progressBarStaticStyles.progressBar, dynamicStyles.progressBar],
|
|
74
|
+
}, children: !disabled && (jsxRuntime.jsx(ctDesignContainer.Container, { styleConfig: {
|
|
75
|
+
root: [progressBarStaticStyles.progress, dynamicStyles.progress],
|
|
76
|
+
} })) }) }));
|
|
77
|
+
});
|
|
78
|
+
ProgressBar.displayName = 'ProgressBar';
|
|
79
|
+
|
|
80
|
+
exports.ProgressBar = ProgressBar;
|
|
81
|
+
|
|
82
|
+
}));
|
|
83
|
+
//# sourceMappingURL=ct-design-progress-bar.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ct-design-progress-bar.umd.js","sources":["../packages/components/ProgressBar/src/style.ts","../packages/components/ProgressBar/src/ProgressBar.tsx"],"sourcesContent":[null,null],"names":["makeStyles","forwardRef","useState","useRef","useStyles","useEffect","_jsx","Container"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../packages/components/ProgressBar/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../packages/components/ProgressBar/src/index.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,cAAc,QAAQ,CAAC"}
|
package/dist/style.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const progressBarStaticStyles: {
|
|
2
|
+
progressContainer: {
|
|
3
|
+
backgroundColor: string;
|
|
4
|
+
display: "flex";
|
|
5
|
+
flexGrow: number;
|
|
6
|
+
justifyContent: "center";
|
|
7
|
+
alignItems: "center";
|
|
8
|
+
};
|
|
9
|
+
progressBar: {
|
|
10
|
+
width: "100%";
|
|
11
|
+
overflow: "hidden";
|
|
12
|
+
};
|
|
13
|
+
progress: {
|
|
14
|
+
height: "100%";
|
|
15
|
+
backgroundColor: string;
|
|
16
|
+
opacity: number;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../packages/components/ProgressBar/src/style.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;CAoBjC,CAAC"}
|
package/dist/type.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../packages/components/ProgressBar/src/type.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAE3B,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,OAAO,CAAC;IAEvB,MAAM,EAAE,OAAO,CAAC;IAEhB,SAAS,EAAE,OAAO,CAAC;IAEnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cleartrip/ct-design-progress-bar",
|
|
3
|
+
"version": "4.0.0-SNAPSHOT-test.0",
|
|
4
|
+
"description": "ProgressBar migrated to ct-design-style-manager",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"main": "./dist/ct-design-progress-bar.cjs.js",
|
|
7
|
+
"jsnext:main": "dist/ct-design-progress-bar.esm.js",
|
|
8
|
+
"module": "dist/ct-design-progress-bar.esm.js",
|
|
9
|
+
"react-native": "src/index.native.ts",
|
|
10
|
+
"sideEffects": false,
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/ct-design-progress-bar.d.ts",
|
|
14
|
+
"import": "./dist/ct-design-progress-bar.esm.js",
|
|
15
|
+
"default": "./dist/ct-design-progress-bar.cjs.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"browser": {
|
|
19
|
+
"./dist/ct-design-progress-bar.esm.js": "./dist/ct-design-progress-bar.browser.esm.js",
|
|
20
|
+
"./dist/ct-design-progress-bar.cjs.js": "./dist/ct-design-progress-bar.browser.cjs.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"src"
|
|
25
|
+
],
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@cleartrip/ct-design-container": "4.0.0-SNAPSHOT-test.0",
|
|
28
|
+
"@cleartrip/ct-design-types": "4.0.0-SNAPSHOT-test.0",
|
|
29
|
+
"@cleartrip/ct-design-style-manager": "4.0.0-SNAPSHOT-test.0",
|
|
30
|
+
"@cleartrip/ct-design-theme": "4.0.0-SNAPSHOT-test.0"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react": ">=16.8.0",
|
|
34
|
+
"react-dom": ">=16.8.0",
|
|
35
|
+
"react-native-reanimated": ">=2.0.0"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"author": "Cleartrip",
|
|
41
|
+
"license": "ISC",
|
|
42
|
+
"scripts": {
|
|
43
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
44
|
+
"watch-package": "rollup -c -w",
|
|
45
|
+
"build-package": "rollup -c",
|
|
46
|
+
"build-package:clean": "rm -rf dist && rollup -c",
|
|
47
|
+
"publish-package:local": "yalc publish"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React, { forwardRef, useEffect, useRef, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import Animated, { useAnimatedStyle, useSharedValue } from 'react-native-reanimated';
|
|
4
|
+
import { Container, ContainerRef } from '@cleartrip/ct-design-container';
|
|
5
|
+
import { useStyles } from '@cleartrip/ct-design-style-manager';
|
|
6
|
+
|
|
7
|
+
import { IProgressBar } from './type';
|
|
8
|
+
import { progressBarStaticStyles } from './style';
|
|
9
|
+
|
|
10
|
+
const ProgressBar = forwardRef<ContainerRef, IProgressBar>((props, ref) => {
|
|
11
|
+
const { duration, resetProgress, hidden, completed, disabled } = props;
|
|
12
|
+
const [progress, setProgress] = useState<number>(0);
|
|
13
|
+
|
|
14
|
+
const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
|
15
|
+
|
|
16
|
+
const dynamicStyles = useStyles(
|
|
17
|
+
(theme) => ({
|
|
18
|
+
progressContainer: {
|
|
19
|
+
zIndex: hidden ? 0 : 3000,
|
|
20
|
+
},
|
|
21
|
+
progressBar: {
|
|
22
|
+
height: hidden ? theme.spacing[0] : theme.spacing[0.5],
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
[hidden],
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (completed || disabled) return;
|
|
30
|
+
|
|
31
|
+
let startTime = Date.now();
|
|
32
|
+
if (resetProgress && intervalRef.current) {
|
|
33
|
+
startTime = Date.now();
|
|
34
|
+
clearInterval(intervalRef.current);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
intervalRef.current = setInterval(() => {
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
const elapsedTime = now - startTime;
|
|
40
|
+
const currentProgress = (elapsedTime / duration) * 100;
|
|
41
|
+
|
|
42
|
+
if (currentProgress <= 100) {
|
|
43
|
+
setProgress(currentProgress);
|
|
44
|
+
} else if (intervalRef.current) {
|
|
45
|
+
clearInterval(intervalRef.current);
|
|
46
|
+
}
|
|
47
|
+
}, 10);
|
|
48
|
+
|
|
49
|
+
return () => {
|
|
50
|
+
if (intervalRef.current) {
|
|
51
|
+
clearInterval(intervalRef.current);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}, [duration, resetProgress, completed, disabled]);
|
|
55
|
+
|
|
56
|
+
const progressWidth = useSharedValue(0);
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
progressWidth.value = completed ? 100 : progress;
|
|
60
|
+
}, [completed, progress, progressWidth]);
|
|
61
|
+
|
|
62
|
+
const animatedProgressStyle = useAnimatedStyle(() => ({
|
|
63
|
+
width: `${progressWidth.value}%`,
|
|
64
|
+
}));
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<Container
|
|
68
|
+
ref={ref}
|
|
69
|
+
styleConfig={{
|
|
70
|
+
root: [progressBarStaticStyles.progressContainer, dynamicStyles.progressContainer],
|
|
71
|
+
}}
|
|
72
|
+
>
|
|
73
|
+
<Container
|
|
74
|
+
styleConfig={{
|
|
75
|
+
root: [progressBarStaticStyles.progressBar, dynamicStyles.progressBar],
|
|
76
|
+
}}
|
|
77
|
+
>
|
|
78
|
+
{!disabled && <Animated.View style={[progressBarStaticStyles.progress, animatedProgressStyle]} />}
|
|
79
|
+
</Container>
|
|
80
|
+
</Container>
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
ProgressBar.displayName = 'ProgressBar';
|
|
85
|
+
|
|
86
|
+
export default ProgressBar;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { forwardRef, useEffect, useRef, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Container, ContainerRef } from '@cleartrip/ct-design-container';
|
|
4
|
+
import { useStyles } from '@cleartrip/ct-design-style-manager';
|
|
5
|
+
|
|
6
|
+
import { IProgressBar } from './type';
|
|
7
|
+
import { progressBarStaticStyles } from './style';
|
|
8
|
+
|
|
9
|
+
const ProgressBar = forwardRef<ContainerRef, IProgressBar>((props, ref) => {
|
|
10
|
+
const { duration, resetProgress, hidden, completed, disabled } = props;
|
|
11
|
+
const [progress, setProgress] = useState<number>(0);
|
|
12
|
+
const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
|
13
|
+
|
|
14
|
+
const dynamicStyles = useStyles(
|
|
15
|
+
(theme) => ({
|
|
16
|
+
progressContainer: {
|
|
17
|
+
zIndex: hidden ? 0 : 3000,
|
|
18
|
+
},
|
|
19
|
+
progressBar: {
|
|
20
|
+
height: hidden ? theme.spacing[0] : theme.spacing[0.5],
|
|
21
|
+
},
|
|
22
|
+
progress: {
|
|
23
|
+
width: `${completed ? 100 : progress}%`,
|
|
24
|
+
transition: 'width 100ms linear',
|
|
25
|
+
},
|
|
26
|
+
}),
|
|
27
|
+
[hidden, completed, progress],
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (completed || disabled) return;
|
|
32
|
+
|
|
33
|
+
let startTime = Date.now();
|
|
34
|
+
if (resetProgress && intervalRef.current) {
|
|
35
|
+
startTime = Date.now();
|
|
36
|
+
clearInterval(intervalRef.current);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
intervalRef.current = setInterval(() => {
|
|
40
|
+
const now = Date.now();
|
|
41
|
+
const elapsedTime = now - startTime;
|
|
42
|
+
const currentProgress = (elapsedTime / duration) * 100;
|
|
43
|
+
|
|
44
|
+
if (currentProgress <= 100) {
|
|
45
|
+
setProgress(currentProgress);
|
|
46
|
+
} else if (intervalRef.current) {
|
|
47
|
+
clearInterval(intervalRef.current);
|
|
48
|
+
}
|
|
49
|
+
}, 10);
|
|
50
|
+
|
|
51
|
+
return () => {
|
|
52
|
+
if (intervalRef.current) {
|
|
53
|
+
clearInterval(intervalRef.current);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}, [duration, resetProgress, completed, disabled]);
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<Container
|
|
60
|
+
ref={ref}
|
|
61
|
+
styleConfig={{
|
|
62
|
+
root: [progressBarStaticStyles.progressContainer, dynamicStyles.progressContainer],
|
|
63
|
+
}}
|
|
64
|
+
>
|
|
65
|
+
<Container
|
|
66
|
+
styleConfig={{
|
|
67
|
+
root: [progressBarStaticStyles.progressBar, dynamicStyles.progressBar],
|
|
68
|
+
}}
|
|
69
|
+
>
|
|
70
|
+
{!disabled && (
|
|
71
|
+
<Container
|
|
72
|
+
styleConfig={{
|
|
73
|
+
root: [progressBarStaticStyles.progress, dynamicStyles.progress],
|
|
74
|
+
}}
|
|
75
|
+
/>
|
|
76
|
+
)}
|
|
77
|
+
</Container>
|
|
78
|
+
</Container>
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
ProgressBar.displayName = 'ProgressBar';
|
|
83
|
+
|
|
84
|
+
export default ProgressBar;
|
package/src/index.ts
ADDED
package/src/style.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { makeStyles } from '@cleartrip/ct-design-style-manager';
|
|
2
|
+
|
|
3
|
+
export const progressBarStaticStyles = makeStyles((theme) => ({
|
|
4
|
+
progressContainer: {
|
|
5
|
+
backgroundColor: 'transparent',
|
|
6
|
+
display: 'flex',
|
|
7
|
+
flexGrow: 1,
|
|
8
|
+
justifyContent: 'center',
|
|
9
|
+
alignItems: 'center',
|
|
10
|
+
},
|
|
11
|
+
progressBar: {
|
|
12
|
+
width: '100%',
|
|
13
|
+
overflow: 'hidden',
|
|
14
|
+
// todo fix this
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
// backgroundColor: theme?.color?.background?.gray500,
|
|
17
|
+
},
|
|
18
|
+
progress: {
|
|
19
|
+
height: '100%',
|
|
20
|
+
backgroundColor: theme?.color?.background?.neutral,
|
|
21
|
+
opacity: 1,
|
|
22
|
+
},
|
|
23
|
+
}));
|
package/src/type.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface IProgressBar {
|
|
2
|
+
/** Duration in milliseconds for the progress bar to complete */
|
|
3
|
+
duration: number;
|
|
4
|
+
/** Flag to reset the progress bar */
|
|
5
|
+
resetProgress: boolean;
|
|
6
|
+
/** Whether the progress bar is hidden */
|
|
7
|
+
hidden: boolean;
|
|
8
|
+
/** Whether the progress bar is completed */
|
|
9
|
+
completed: boolean;
|
|
10
|
+
/** Whether the progress bar is disabled */
|
|
11
|
+
disabled: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated Use `IProgressBar`.
|
|
16
|
+
*/
|
|
17
|
+
export type ProgressBarProps = IProgressBar;
|