1.0.9 • Published 3 months ago

@kwooshung/react-progressbar-wrapper v1.0.9

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

@kwooshung/react-progressbar-wrapper

An intuitive and user-friendly progress bar component. It supports custom positioning and styling, adapting to a variety of content and layout needs while providing a smooth user experience and high degree of customization.

GitHub License GitHub Release Date - Published_At GitHub last commit GitHub code size in bytes GitHub top language GitHub pull requests GitHub issues Github Stars NPM Version Npm.js Downloads/Week Github CI/CD codecov Maintainability Gitee Repo

Why Develop It?

  • Why not use NProgress? I used to be a frequent user of it as well, but over time, I found that it didn't meet my requirements. I was looking for a way to offer users a more realistic simulation of loading experiences, rather than just a simple, uniform speed load.

  • The style isn't flexible enough. I wanted to be able to customize the style of the loading bar, such as its color, height, and position. Although NProgress supports customization, I'm not fond of its method of definition. More importantly, it doesn't allow for defining the direction and position of the scrollbar.

Why Use It?

  • Supports customization of styles and components, offering more flexibility than just passing in properties.
  • Simulates a more realistic loading experience. For example, it loads to 60% in 3 seconds, then slowly to 80% over the next 5 seconds. It stops at 80% and waits for further instructions until the done property is true, at which point the loading bar immediately reaches 100% and then gradually fades away. For more details, refer to the API section below.
  • Multiple events for easy monitoring of the progress bar at each stage.
  • Versatile positioning options: you can place it at the top, bottom, left, or right side.
  • Various loading directions, including from left to right, right to left, top to bottom, and bottom to top, suitable for rtl and horizontal web page scenarios.
  • Supports bilingual comments in both English and Chinese.
  • Low learning curve, simple and flexible to use.
  • Implemented with modern ES6 features.
  • Written in TypeScript for type safety.
  • Supports on-demand import with esm modularization, natively supporting tree-shaking, so you don't have to worry about the size after packaging.
  • This project also provides a commonjs (cjs) version.
  • Test coverage of 100%.

Installation

npm

npm install @kwooshung/react-progressbar-wrapper

yarn

yarn add @kwooshung/react-progressbar-wrapper

pnpm

pnpm add @kwooshung/react-progressbar-wrapper

Usage

Style

In some frameworks, you can directly import the styles in the global css / less / scss files as shown below:

@import url('@kwooshung/react-progressbar-wrapper/dist/index.css');

In certain frameworks, like Next.js, you may need to add a ~ symbol for it to work, as shown below:

@import url('~@kwooshung/react-progressbar-wrapper/dist/index.css');

You can also import it in a global page, such as the Layout page in Next.js, or within the corresponding component, as shown below:

import '@kwooshung/react-progressbar-wrapper/dist/index.css';

Components

在某个元素上使用 ReactProgressbarWrapper 组件,如下所示:

import { KsProgressbarWrapper } from '@kwooshung/react-progressbar-wrapper';
import '@kwooshung/react-progressbar-wrapper/dist/index.css';

const ProgressChildren = <div style={{ height: '2px', background: 'linear-gradient(112.44deg,#ff5858 2.09%,#c058ff 75.22%)', backgroundSize: '165%' }} />;

const Demo = () => {
  const [active, setActive] = useState<boolean>(false);
  const [done, setDone] = useState<boolean>(false);
  return (
    <>
      <KsProgressbarWrapper active={active} done={done}>
        {ProgressChildren}
      </KsProgressbarWrapper>
      <button onClick={() => setActive(!active)}>Toggle</button>
    </>
  );
};

export default Demo;

API

Props

ParameterDescriptionTypeDefault
activeControls whether the progress bar is active.booleanfalse
doneIndicates whether the loading is complete.booleanfalse
positionSets the position and direction of the progress bar. Options: 't-lr', 't-rl', 'b-lr', 'b-rl', 'l-tb', 'l-bt', 'r-tb', 'r-bt'. See Position and Direction below for more details.string't-lr'
loadToSets the initial percentage to load to.number65
durationLoadToSets the time (in milliseconds) to reach the loadTo percentage.number3000
loadToSlowSets the target percentage for slow loading.number85
durationLoadToSlowSets the time (in milliseconds) to reach the loadToSlow percentage.number6000
fluctuationSets the fluctuation range at the end of each stage. For instance, if loadTo is set to 60%, the endpoint will randomly be between 50%~70%.number10
delayHideSets the delay time (in milliseconds) to hide after completion.number500
durationHideSets the duration (in milliseconds) of the hide animation.number300

Events

EventDescriptionType
onStartTriggered when the progress bar starts loading.() => void;
onLoadToStartTriggered when loadTo starts loading.() => void;
onLoadToUpdateTriggered during loadTo loading, parameter is the current loading percentage.(value:number) => void;
onLoadToDoneTriggered when loadTo loading is complete.() => void;
onLoadToSlowStartTriggered when loadToSlow starts loading.() => void;
onLoadToSlowUpdateTriggered during loadToSlow loading, parameter is the current loading percentage.(value:number) => void;
onLoadToSlowDoneTriggered when loadToSlow loading is complete.() => void;
onUpdateTriggered during overall loading, parameter is the current loading percentage.(value:number) => void;
onDoneTriggered when the progress bar loading is complete.() => void;

Position and Direction

  • t-lr: Top from left to right
  • t-rl: Top from right to left
  • b-lr: Bottom from left to right
  • b-rl: Bottom from right to left
  • l-tb: Left side from top to bottom
  • l-bt: Left side from bottom to top
  • r-tb: Right side from top to bottom
  • r-bt: Right side from bottom to top
1.0.9

3 months ago

1.0.8

3 months ago

1.0.7

3 months ago

1.0.6

3 months ago

1.0.5

3 months ago

1.0.4

3 months ago

1.0.3

4 months ago

1.0.2

4 months ago

1.0.1

4 months ago

1.0.0

4 months ago