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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@nowzoo/ngx-strap

v0.0.2

Published

Minimal Angular directives for Bootstrap.

Downloads

5

Readme

ngx-strap

Minimal Angular directives for Bootstrap. Unlike other Angular/Bootstrap libraries, ngx-strap leverages native Bootstrap javascript and css rather than recreating them from scratch.

This means the library depends on bootstrap.js and its dependencies. If the statement declare const jQuery: any gives you agita, you should probably look elsewhere.

The library focuses on those Bootstrap components that cannot be easily implemented using plain markup, or where there's a clear case for exposing Bootstrap's logic and events to Angular.

The library does not create extra markup, styles or animations, relying instead on Bootstrap. The library provides directives rather than components. (One exception: the tooltip and popover directives use a component internally to display dynamic templates. You should not have to worry about it, though.)

What's Included

Modals There's a clear, recurring case for listening to the modal open and close events, e.g. to automatically focus a form field on open or to collect form values on close. See the ngxStrapModal directive.

Tooltips and Popovers These cannot be automatically instantiated via markup (they're "opt-in" in Bootstrap terms,) and it's a pain to insert dynamic HTML content. The library provides the ngxStrapPopover and ngxStrapPopover directives. These directives enable you to set popup title and content with plain or dynamic strings, or templates.

Collapse Bootstrap's implementation of collapse ties the collapse element's visibility to a button or link that toggles it. The library provides a simple directive that shows or hides an element, based on a boolean, without reference to any other element. See ngxStrapCollapse.

What's Not Included

  • Things like tabs, dropdowns and "toggled" collapse that can easily be implemented with plain Bootstrap markup.
  • Things like datepickers, timepickers, colorpickers, typeaheads. These belong elsewhere.

Demo Site

Installation

Install the library and its dependencies (jQuery, popper.js and bootstrap).

npm i --save @nowzoo/ngx-strap jquery popper.js bootstrap

Include Bootstrap and its dependencies in your build. The best way to do this is to add the scripts and css in angular.json.

// angular.json
"styles": [
  "node_modules/bootstrap/dist/css/bootstrap.min.css",
  "src/styles.css"
],
"scripts": [
  "node_modules/jquery/dist/jquery.slim.js",
  "node_modules/popper.js/dist/umd/popper.min.js",
  "node_modules/bootstrap/dist/js/bootstrap.min.js"
]

See below for how to import the individual modules.

Usage

Modals

Import the ModalModule. This module exports the ngxStrapModal directive.

import { ModalModule } from '@nowzoo/ngx-strap';
@NgModule({
  imports: [
    ModalModule
  ]
})
export class MyModule { }

Create a modal by placing complete Bootstrap modal markup within an ng-template. The template tag should contain the ngxStrapModal selector. Note that the directive is exported as ngxStrapModal. In most cases you'll want to use this to grab a reference to the directive: #myVar="ngxStrapModal".

<ng-template ngxStrapModal #myModal="ngxStrapModal">
  <div class="modal fade" id="exampleModal1" tabindex="-1" role="dialog"
    aria-labelledby="exampleModal1Label" aria-hidden="true">
    <div class="modal-dialog" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="exampleModal1Label">Simple Modal</h5>
          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          Hello there. It's {{time}}.
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-dismiss="modal">OK</button>
        </div>
      </div>
    </div>
  </div>
</ng-template>
<button type="button"
  class="btn btn-primary"
  (click)="myModal.show()">
  Open Modal
</button>

ModalDirective API

  • Selector: [ngxStrapModal]
  • Export As: ngxStrapModal

Inputs

None. Bootstrap modal options are set in the markup you place inside the ng-template, via the native Bootstrap data- attributes and css classes.

  • Bootstrap modal options (except show) can be set via data- attributes in the top-level <div class="modal>" tag:
    • backdrop: data-backdrop
    • keyboard: data-keyboard
    • focus: data-focus
  • Animation is controlled by adding or omitting the fade class in the top-level <div class="modal>" tag.
  • Modal size is controlled by adding the modal-lg or modal-sm classes to the <div class="modal-dialog"> tag.
  • You can center the dialog vertically in the viewport by adding the modal-dialog-centered class to the <div class="modal-dialog"> tag.

Outputs

  • events: EventEmitter<Event> The native bootstrap modal events.

Methods

  • show(): {shown: Promise<void>, hidden: Promise<void>} Shows the modal. The shown and hidden promises resolve when the modal is completely shown or hidden (i.e. after the animation completes.)
  • hide(): <void> Hides the modal.
  • update(): <void> Use this when the height of the modal content changes. See the Bootstrap docs.

Tooltips and Popovers

Import the PopupModule. This module contains the ngxStrapTooltip and ngxStrapPopover directives.

import { PopupModule } from '@nowzoo/ngx-strap';
@NgModule({
  imports: [
    PopupModule
  ]
})
export class MyModule { }

Create a tooltip. This can be as simple as:

<button type="button"
  class="btn btn-primary"
  ngxStrapTooltip
  title="I'm a tooltip">
  Tooltip
</button>

Create a popover. Simple example:

<button type="button"
  class="btn btn-primary"
  ngxStrapPopover
  title="Popover Title"
  data-content="Some fascinating content">
  Popover
</button>

Both tooltips and popovers can be populated with dynamic strings...

<button type="button"
  class="btn btn-primary"
  ngxStrapTooltip
  [tooltipTitle]="'The time is ' + time">
  Tooltip
</button>

...or templates...

<button type="button"
  class="btn btn-primary"
  ngxStrapPopover
  [popoverTitle]="myTitleTemplate"
  [popoverContent]="myContentTemplate">
  Popover with Templates
</button>
<ng-template #myTitleTemplate>
  <i class="fas fa-clock fa-fw"></i>
  {{time}}
</ng-template>
<ng-template #myContentTemplate>
  <i class="fas fa-spin fa-spinner fa-fw"></i>
  This popover has been open for {{popoverOpenFor}}s.
</ng-template>

Interface: IPopupOptions

An interface containing most of the Bootstrap toolitip/popover options (all except title, content, and selector.)

  • animation?: boolean
  • html?: boolean
  • delay?: number | {show: number, hide: number}
  • container?: string | HTMLElement | false
  • `placement?: string | ((popupEl: HTMLElement, triggerEl: HTMLElement) => string)``
  • template?: string
  • offset?: number | string
  • fallbackPlacement?: string | string[]
  • boundary?: string | HTMLElement

TooltipDirective API

  • Selector: [ngxStrapTooltip]
  • Export As: ngxStrapTooltip

Inputs

  • tooltipTitle: string | TemplateRef<any> Optional. Pass a string or a template for the tooltip title. If you don’t need a dynamic title use the title or data-title attribute.
  • tooltipEnabled: boolean Optional. Default true. Enable/disable the tooltip.
  • tooltipDismissOnClickOutside: boolean Optional. Use this to hide the tooltip when the user clicks or focuses anywhere outside the tooltip itself.
  • tooltipOptions: IPopupOptions Optional. Note that in most cases you can use the native Bootstrap data- attributes instead. Also note that these options are not dynamic — they are set only once, when the directive is instantiated.

Outputs

  • tooltipEvents: EventEmitter<Event> The native Bootstrap tooltip events.

Methods

  • show(): void Show the tooltip manually.
  • hide(): void Hide the tooltip manually.
  • toggle(): void Toggle the visibility of the tooltip manually.

PopoverDirective API

  • Selector: [ngxStrapPopover]
  • Export As: ngxStrapPopover

Inputs

  • popoverTitle: string | TemplateRef<any> Optional. Pass a string or a template for the popover title. If you don’t need a dynamic title use the title or data-title attribute.
  • popoverContent: string | TemplateRef<any> Optional. Pass a string or a template for the popover content. If you don’t need dynamic content use or data-content attribute.
  • popoverEnabled: boolean Optional. Default true. Enable/disable the popover.
  • popoverDismissOnClickOutside: boolean Optional. Use this to hide the popover when the user clicks or focuses anywhere outside the popover itself.
  • popoverOptions: IPopupOptions Optional. Note that in most cases you can use the native Bootstrap data- attributes instead. Also note that these options are not dynamic — they are set only once, when the directive is instantiated.

Outputs

  • popoverEvents: EventEmitter<Event> The native Bootstrap popover events.

Methods

  • show(): void Show the popover manually.
  • hide(): void Hide the popover manually.
  • toggle(): void Toggle the visibility of the popover manually.

Collapse

Import the CollapseModule. This module exports the ngxStrapCollapse directive.

import { CollapseModule } from '@nowzoo/ngx-strap';
@NgModule({
  imports: [
    CollapseModule
  ]
})
export class MyModule { }

Create a collapse...

export class CollapseDemoComponent {
  open = false;
}
<button
  type="button"
  class="btn btn-primary"
  (click)="open=!open">Toggle</button>
<div class="card mt-2" [ngxStrapCollapse]="open" class="collapse">
  <div class="card-body">
    <p class="card-text">
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </p>
  </div>
</div>

CollapseDirective API

  • Selector: [ngxStrapCollapse]
  • Export As: ngxStrapCollapse

Inputs

  • ngxStrapCollapse: boolean Whether the collapse should be shown.

Outputs

  • events: EventEmitter<Event> The native Bootstrap collapse events.

Development

Contributions are welcome.

git clone [email protected]:nowzoo/ngx-strap.git
cd ngx-strap
npm i

This project was generated with Angular CLI.

The library files are located in projects/ngx-strap

Run ng serve for a dev server with a demo app. Navigate to http://localhost:4200/.

Building the library

Run ng build ngx-strap to build the library after you change it. The dev server does not rebuild the library automatically.

Running unit tests

Run ng test ngx-strap to execute the unit tests via Karma.

The library is also set up to run tests using Wallaby using the config at projects/ngx-strap/wallaby.js

License

MIT