npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

clinic-care

v0.0.0

Published

1: install nodeJS from `nodejs.org`

Downloads

4

Readme

Requirements to begin working on the app

1: install nodeJS from nodejs.org

2: install yarn package manager from https://yarnpkg.com/en/docs/install#windows-stable

3: install Git from https://www.git-scm.com/

4: After installing all previous applications, open a terminal and type npm install --global @angular/cli@latest

Steps to work on the application.

1: Clone the repo from github using git clone git@github.com:XephyLon/HeartCare.git.

2: Go inside the repo's folder and open a terminal.

3: type yarn to install all the needed dependencies to begin working

4: Create and switch to a new branch after installing dependencies by using git checkout -b <branch-name>

5: type ng serve to serve the application at Http://localhost:4200

6: After making changes, you can check which files were edited by using terminal command git status

7: To stage all the changes, use the terminal command git add .

8: To commit the changes, use the terminal command git commit -m"<commit-message-goes-here>"

  • Try to commit frequently not to undo big changes if something goes wrong.

9: To push the new branch and the commit to GitHub, type git push -u origin <branch-name>

Template grid and responsive design

  • We use flex-layout to handle shaping templates and implementing responsive design
  • Link to the repository : https://github.com/angular/flex-layout

Steps to create a new page

1: Create a module for the new page using ng g m <module-name>

2: Add SharedModule to imports in the new module after creating it

3: Create a main component that would be rendered when you navigate to that page using ng g c <component-name> -m <module-name>

  • It's better that the page's root component has the same name as the module
  • All components that have states must have its Change Detection Strategy set to OnPush
  @Component({
  selector: "app-test",
  templateUrl: "./test.component.html",
  styleUrls: ["./test.component.scss"],
  changeDetection: ChangeDetectionStrategy.OnPush // Setting this gives a huge performance boost since Angular only detects state changes.
})
export class TestComponent {  }

4: Add the page path to the app-routing.module.ts module. Use the other paths are reference to lazy-load it.

const Routes: [] = [
  ...,
  {
    path: "page",
    loadChildren: () => import("./page/page.module").then(m => m.PageModule)
  }
]

5: Create a state for the new page using AngularConsole VSCode extension or use an existing state for reference and LazyLoad it by importing it as a feature for the page module

  • more info at https://www.ngxs.io/advanced/lazy
@NgModule({
  declarations: [],
  imports: [
    CommonModule,
    SharedModule, // Must add
    NgxsModule.forFeature([StockState]) // Adding the state as a feature lazy-loads it
  ]
})
export class NewPageModule { }

regarding references

Angular: Angular docs can be found at https://angular.io/

RxJS: Angular makes heavy use of RxJS and understanding reactive pattern is a must. Documentation can be found at https://rxjs-dev.firebaseapp.com/

Adding a table/grid to a component

1: In the component you wish yo add a grid for, go to the HTML file and add the pbl-ngrid component

<pbl-ngrid
  class="min-height selectable"
  [dataSource]="dataSource"
  [columns]="columns"
  vScrollNone>
  </pbl-ngrid>
  • Check out the nGrid docs at https://shlomiassaf.github.io/ngrid/

2: Go to the TypeScript file and define the columns. You can use the columns object in SpecializationsComponent or StockComponent as reference or check out the nGrid docs

  • You mainly need a property name
    Example :
export const ITEMS_COLUMNS = columnFactory().table(
  { prop: "number", label: "#", type: "id", width: "24px" },
  { prop: "ItemLevel.Code", pIndex: true, width: "128px" }, // prop take an object property chain as a string
  { prop: "ItemLevel.Name", label: "Name", editable: true, width: "128px" } // Use label to set a different column name than the property's
);

3: build the columns inside the component TS class

4: The data is always fetched from the Store which calls the API and returns an observable we can use here as a selector

  • Check out Selectors in NGXS Docs to learn more
@Component({
  // ...
})
export class SomeComponent {
  @Selector(SomeState.getStateData) stateData$ // Observable must always be affixed with a dollarsign "$"
  dataSource = createDS().onTrigger(() => this.stateData$).create() // This is the dataSource you'll be passing to the dataSource directive 
  columns = ITEMS_COLUMNS.build() // This variable is what you will be passing to the columns directive in <pbl-ngrid> component 
}

Creating a Form

  • Check out Angular docs' Reactive forms https://angular.io/guide/reactive-forms
  • Check out NGXS Forms plugin at https://www.ngxs.io/plugins/form

Adding CRUD operations to a form

1: In the form component, add the CRUD component tag at the end of it

<app-crud [crud]="crud" [id]="dataId" [form]="someForm.value"></app-crud>

2: In the state file, define the CRUD operations, injecting the API service into the state class

  • For example, check out stock.state.ts for CRUD implementation for the state
@State({
  name: 'newPage',
  defaults: {
    // ...
  },
  children: [ ... ] // Children is used to lazy-load sub-states. You can read about it in NGXS docs.
})
@Injectable() // Required for Angular 9+
export class newPageState {
  constructor(private api: ApiService) {} // Injhecting the API service to create state actions that handle the CRUD operations for this page/module/state
}

3: In the form component TS file, define a crud object which has the create, update, and delete as methods

  • Check out stock-form.component.ts for crud object implementation.