NGX Skeleton loader
Why skeletons?
The idea of this component is make the process transparent and easier. So the main point is integrate this component with other tooling process, such as:
- Server-side rendering;
- Progressive rendering;
- Any other that you like :)
It's totally transparent for you and you can integrate easier in your application, improving your user experience 🎉
Demo
Try out our demo on Stackblitz!
Install
You can get it on NPM installing ngx-skeleton-loader
module as a project dependency.
npm install ngx-skeleton-loader --save
Setup
You'll need to add NgxSkeletonLoaderModule
to your application module. So that, the <ngx-skeleton-loader>
components will be accessible in your application.
...
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
...
@NgModule({
declarations: [
YourAppComponent
],
imports: [
...
NgxSkeletonLoaderModule,
...
],
providers: [],
bootstrap: [YourAppComponent]
})
export class YourAppComponent {}
After that, you can use the ngx-skeleton-loader
components in your templates, passing the configuration data into the component itself.
ngx-skeleton-loader
: Handle the skeleton animation and the skeleton styles of your app;
<div class="item">
<ngx-skeleton-loader count="5" appearance="circle"></ngx-skeleton-loader>
</div>
Animations
You can also define which CSS animation you want to use - even not use any, if it's the case - in your skeleton loader by passing the options in your component via [animation]
attribute.
Options
false
: it will disable the animation;progress
- default: it will use it progress
as animation;progress-dark
: it will use it progress-dark
as animation. Recommended if your color schema is darken;pulse
: it will use pulse
as animation;
progress
is the default animation, used as the single one previously. If you don't pass the animation attribute, it defaults to progress
.
<div class="item">
<ngx-skeleton-loader animation="false"></ngx-skeleton-loader>
<ngx-skeleton-loader animation="progress"></ngx-skeleton-loader>
<ngx-skeleton-loader></ngx-skeleton-loader>
<ngx-skeleton-loader animation="pulse"></ngx-skeleton-loader>
</div>
You can check the code details in the Stackblitz Live Demo Link
Theming
You can also define different styles for the skeleton loader by passing an object with the css styles - in dashed case - into the component via [theme]
attribute.
<div style="background: #FF0001; padding: 10px;">
<ngx-skeleton-loader
count="5"
[theme]="{
'border-radius': '5px',
height: '50px',
'background-color': '#992929',
border: '1px solid white'
}"
></ngx-skeleton-loader>
</div>
You should change the styles on the skeleton wrapper element in case you need to change the background color. You can check the code details in the Stackblitz Live Demo Link
Development
Run demo locally
- This project uses Angular CLI as base. That means you just need to run
npm start
and access the link http://localhost:4200
in your browser
Run tests
- Run
npm test
for run tests. In case you want to test using watch, please use npm run tdd
Publish
this project is using np
package to publish, which makes things straightforward. EX: np <patch|minor|major> --contents=dist/ngx-skeleton-loader
For more details, please check np package on npmjs.com
Contribute
For any type of contribution, please follow the instructions in CONTRIBUTING.md and read CODE_OF_CONDUCT.md files.
Author
Wilson Mendes (willmendesneto)
[2.0.0][] - 2020-05-15
Updated
- Upgrading NodeJS to v12.16.2
- Updating documentation with
animation
attribute
Added
- Supporting for new animation
progress-dark
to enable users when using theme with darker color schema - Supporting for different animations 🎉
Now we can define the animation we want to use in <ngx-skeleton-loader>
component via animation
input. It's a string that can defined the animation used during the loading, having as options:
false
: it will disable the animation;progress
- default: it will use it progress
as animation;pulse
: it will use pulse
as animation;
progress
is the default animation, used as the single one previously. If you don't pass the animation attribute, it defaults to progress
.
<div class="item">
<!-- Disables the animation -->
<ngx-skeleton-loader animation="false"></ngx-skeleton-loader>
<!-- Uses `progress` as animation -->
<ngx-skeleton-loader animation="progress"></ngx-skeleton-loader>
<ngx-skeleton-loader></ngx-skeleton-loader>
<!-- Uses `pulse` as animation -->
<ngx-skeleton-loader animation="pulse"></ngx-skeleton-loader>
</div>
- Supporting enabling/disabling animations.
Now the users will be able to enable/disable animations by using
animation
input. It's a string with false
as value that the component receives to check if it should not load progress animation.
It works only to disable it. In case you want to keep enable it
<div class="item">
<ngx-skeleton-loader animation="false"></ngx-skeleton-loader>
</div>