Gathering detailed insights and metrics for ngx-skeleton-loader
Gathering detailed insights and metrics for ngx-skeleton-loader
Gathering detailed insights and metrics for ngx-skeleton-loader
Gathering detailed insights and metrics for ngx-skeleton-loader
Make beautiful, animated loading skeletons that automatically adapt to your Angular apps
npm install ngx-skeleton-loader
Module System
Min. Node Version
Typescript Support
Node Version
NPM Version
583 Stars
276 Commits
51 Forks
10 Watching
10 Branches
11 Contributors
Updated on 26 Nov 2024
Minified
Minified + Gzipped
TypeScript (63.81%)
HTML (18.89%)
SCSS (8.85%)
JavaScript (8.44%)
Cumulative downloads
Total Downloads
Last day
-3.4%
24,441
Compared to previous day
Last week
7.1%
125,064
Compared to previous week
Last month
15.7%
494,693
Compared to previous month
Last year
46.7%
4,796,688
Compared to previous year
1
2
If you want to get more details about that, please read "NGX-Skeleton-Loader — States, Animations, Performance, and Accessibility for your Angular App" blog post
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:
It's totally transparent for you and you can integrate easier in your application, improving your user experience 🎉
Try out our demos on Stackblitz!
You can get it on NPM installing ngx-skeleton-loader
module as a project dependency.
1npm install ngx-skeleton-loader --save
You'll need to add NgxSkeletonLoaderModule
to your application module. So that, the <ngx-skeleton-loader>
components will be accessible in your application.
1... 2import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; 3... 4 5@NgModule({ 6 declarations: [ 7 YourAppComponent 8 ], 9 imports: [ 10 ... 11 NgxSkeletonLoaderModule, 12 ... 13 ], 14 providers: [], 15 bootstrap: [YourAppComponent] 16}) 17 18export class YourAppComponent {} 19
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;1<div class="item"> 2 <ngx-skeleton-loader count="5" appearance="circle" /> 3</div>
NgxSkeletonLoaderModule.forRoot()
Also, you can import the module in your app by calling NgxSkeletonLoaderModule.forRoot()
when adding it. So it will be available across your Angular application.
Importing the module this way also allows you to globally configure the default values for the ngx-skeleton-loader
components in your application, in case you need some different default values for your app.
1... 2import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; 3... 4 5@NgModule({ 6 declarations: [ 7 YourAppComponent 8 ], 9 imports: [ 10 ... 11 NgxSkeletonLoaderModule.forRoot({ animation: 'pulse', loadingText: 'This item is actually loading...' }), 12 ... 13 ], 14 providers: [], 15 bootstrap: [YourAppComponent] 16}) 17 18export class YourAppComponent {} 19
1<div class="item"> 2 <ngx-skeleton-loader count="5" appearance="circle" /> 3 <!-- above line will produce the rendering of 5 circles with the pulse animation and the aria-valuetext attribute set with "This item is actually loading..." --> 4</div>
theme
via NgxSkeletonLoaderModule.forRoot()
By default when using
NgxSkeletonLoaderModule.forRoot({ theme: /* ...list of CSS atributes */} })
the application is using this value as source of truth, overriding any local theming passed to<ngx-skeleton-loader>
component via[theme]
input. Check these steps in case you need to change this behaviour in your app
This method is also accepting the option of having a global theme and local theme inputs. You can enable it by passing NgxSkeletonLoaderModule.forRoot({ theme: { extendsFromRoot: true, /* ...list of CSS atributes */} })
in your module. Quite simple, right? 😄
By using that configuration in your application, you should also be aware that:
<ngx-skeleton-loader>
component will use theme
coming from NgxSkeletonLoaderModule.forRoot()
as the source of truthAs an example:
1... 2import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; 3... 4 5@NgModule({ 6 declarations: [ 7 YourAppComponent 8 ], 9 imports: [ 10 ... 11 NgxSkeletonLoaderModule.forRoot({ 12 theme: { 13 // Enabliong theme combination 14 extendsFromRoot: true, 15 // ... list of CSS theme attributes 16 height: '30px', 17 }, 18 }), 19 ... 20 ], 21 providers: [], 22 bootstrap: [YourAppComponent] 23}) 24 25export class YourAppComponent {} 26
1<div class="item"> 2 <ngx-skeleton-loader /> 3 <!-- above line will produce a skeleton component using `height: 30px;`" --> 4 <ngx-skeleton-loader [theme]="{background: 'blue'}" /> 5 <!-- above line will produce a skeleton component using `height: 30px; background: blue;`" --> 6 <ngx-skeleton-loader [theme]="{height: '50px', background: 'red'}" /> 7 <!-- above line will produce a skeleton component using `height: 50px; background: red;`" --> 8</div>
1<div class="item"> 2 @defer { 3 <my-item-view /> 4 } @placeholder (minimum 1000ms) { 5 <ngx-skeleton-loader /> 6 } 7</div>
Loading...
: attribute that defines the text value for aria-valuetext
attribute. Defaults to "Loading..."aria-label
- default loading
: you can add ariaLabel
as input of the component to set a different value.You can also define which appearance want to use in your skeleton loader by passing the options in your component via [appearance]
attribute.
''
- default: it will use it ''
as appearance. At the end, it will render like a line;line
: it will render like a line. This is the same behavior as passing an empty string;circle
: it will use circle
as appearance. Great for avatar skeletons, for example :);custom-content
: it will NOT add any appearance. Great for custom content, such as SVG, internal components and such;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.
"false"
(as string): it will disable the animation;false
(as boolean): it will disable the animation. Animation will receive false
as string when attribute field it's not using binding. Component now can receive false
(boolean), "false" (string), or any other animation type via binding;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 toprogress
.
1<!-- 2If you need to change all the background wrapper 3you need to apply the style changes on the 4`ngx-skeleton-loader` component wrapper 5--> 6<div class="item"> 7 <!-- Disables the animation --> 8 <ngx-skeleton-loader animation="false" /> 9 <!-- Disables the animation, but receiving boolean value from binding --> 10 <!-- Via binding it can receive `false` (boolean), "false" (string), or any other animation type --> 11 <ngx-skeleton-loader [animation]="classAttributeWithBooleanFalseValue" /> 12 <!-- Uses `progress` as animation --> 13 <ngx-skeleton-loader animation="progress" /> 14 <ngx-skeleton-loader /> 15 <!-- Uses `pulse` as animation --> 16 <ngx-skeleton-loader animation="pulse" /> 17</div>
You can check the code details in the Stackblitz Live Demo Link
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.
1<!-- 2If you need to change all the background wrapper 3you need to apply the style changes on the 4`ngx-skeleton-loader` component wrapper 5--> 6 7<div style="background: #FF0001; padding: 10px;"> 8 <ngx-skeleton-loader 9 count="5" 10 [theme]="{ 11 'border-radius': '5px', 12 height: '50px', 13 'background-color': '#992929', 14 border: '1px solid white' 15 }" 16 /> 17</div>
The [theme] attribute now accepts the same configuration as ngStyle
as well. That means you can manage to use like you're doing with the built-in directive, having a pleasure and beautiful experience
1<!-- 2Note that we are using a combination of styles and ngStyle inside theme object, 3having `height.px` receiving a number and `background-color` receiving a HEX Color 4--> 5<div style="background: #FF0001; padding: 10px;"> 6 <ngx-skeleton-loader 7 count="5" 8 [theme]="{ 9 'height.px': 50, 10 'background-color': '#992929' 11 }" 12 /> 13</div>
Also, you can use CSS to add theme styles into your component. However, there are some implications:
:host
in your stylesheet, which means you are aware of any possible problem :host
can create for your app at that level since it's based on :host
DOM style scoping<ngx-skeleton-loader>
internal classes. It means that class naming changes on module's side will be breaking changes for your application as well.As an example, your Component file is like this
1import { Component } from '@angular/core'; 2 3@Component({ 4 selector: 'my-ngx-skeleton-loader-with-theming', 5 templateUrl: './my-ngx-skeleton-loader-with-theming.component.html', 6 styleUrls: ['./my-ngx-skeleton-loader-with-theming.component.css'], 7}) 8export class MyNGXSkeletonLoaderWithThemingComponent { 9 /* ... code goes here*/ 10}
And your component HTML code is
1<!-- 2file: my-ngx-skeleton-loader-with-theming.component.html 3 4As an example, it's not using themes via [theme] attributes. 5--> 6 7<ngx-skeleton-loader count="5" animation="pulse" />
You can apply theme changes in our stylesheet. At the end it will be
1/* file: `my-ngx-skeleton-loader-with-theming.component.css` 2 * 3 * You can find more details about `:host` at 4 * Angular Component Style Docs https://angular.io/guide/component-styles#host 5 */ 6:host >>> ngx-skeleton-loader .skeleton-loader { 7 border-radius: 5px; 8 height: 50px; 9 background-color: #992929; 10 border: 1px solid white; 11}
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 or check it out a content load simulation in this Stackblitz Live Demo Link
npm start
and access the link http://localhost:4200
in your browsernpm test
for run tests. In case you want to test using watch, please use npm run tdd
this project is using np
package to publish, which makes things straightforward. EX: npx np <patch|minor|major> --no-yarn --no-cleanup --contents=dist/ngx-skeleton-loader
For more details, please check np package on npmjs.com
For any type of contribution, please follow the instructions in CONTRIBUTING.md and read CODE_OF_CONDUCT.md files.
Wilson Mendes (willmendesneto)
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
3 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 4
Reason
Found 3/18 approved changesets -- score normalized to 1
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
project is not fuzzed
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Reason
14 existing vulnerabilities detected
Details
Score
Last Scanned on 2024-11-18
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More@ngx-translate/http-loader
http loader for dynamically loading translation files for @ngx-translate/core
ngx-translate-multi-http-loader
A loader for [ngx-translate](https://github.com/ngx-translate/core) that loads translations using http.
ngx-ui-loader
An all-in-one and fully customizable loader/spinner for Angular applications. It supports foreground, background spinner/loader, indicative progress bar and multiple loaders.
ngx-mask
awesome ngx mask