@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 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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"}
@@ -0,0 +1,3 @@
1
+ export { default as ProgressBar } from './ProgressBar';
2
+ export * from './type';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { default as ProgressBar } from './ProgressBar.native';
2
+ export * from './type';
3
+ //# sourceMappingURL=index.native.d.ts.map
@@ -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"}
@@ -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,9 @@
1
+ export interface IProgressBar {
2
+ duration: number;
3
+ resetProgress: boolean;
4
+ hidden: boolean;
5
+ completed: boolean;
6
+ disabled: boolean;
7
+ }
8
+ export type ProgressBarProps = IProgressBar;
9
+ //# sourceMappingURL=type.d.ts.map
@@ -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;
@@ -0,0 +1,2 @@
1
+ export { default as ProgressBar } from './ProgressBar.native';
2
+ export * from './type';
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { default as ProgressBar } from './ProgressBar';
2
+ export * from './type';
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;