2.0.0 • Published 3 years ago

@terminus/ui-info-carousel v2.0.0

Weekly downloads
20
License
MIT
Repository
github
Last release
3 years ago

CI/CD Status Codecov MIT License
NPM version Library size

Table of Contents

Installation

Use the ng add command to quickly install all the needed dependencies:

ng add @terminus/ui-info-carousel

CSS imports

In your top-level stylesheet, add these imports:

@import '~@terminus/design-tokens/css/library-design-tokens.css';
@import '~@terminus/ui-styles/terminus-ui.css';

CSS resources

Load the needed font families by adding this link to the <head> of your application:

<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">

Usage

Full example:

<ts-info-carousel
  [paginatorItemTitle]="paginatorItemTitle"
  (activePanelIndexChange)="panelChange($event)"
>
  <h4 tsInfoCarouselTitle><span class="fas fa-bolt"></span> My title!</h4>

  <ng-container *ngFor="let panel of panels">
    <ng-container *tsInfoCarouselPanel>
      <h4 class="ts-info-carousel__item-title">{{ panel.title }}</h4>
      <div class="ts-info-carousel__item-content" [innerHTML]="panel.content"></div>
    </ng-container>
  </ng-container>
</ts-info-carousel>

Label

Define the label element by adding the tsInfoCarouselTitle directive to any DOM element:

<ts-info-carousel>
  <h4 tsInfoCarouselTitle><span class="fas fa-bolt"></span> My title!</h4>
  ...
</ts-info-carousel>

Panels

Define the carousel panels by adding the tsInfoCarouselPanel directive to an <ng-container>:

const panels = [
  {
    title: 'Title one',
    content: `Panel content with <a href="#">a link</a>.`,
  },
  {
    title: 'Title two',
    content: `Second panel content.`,
  },
];
<ts-info-carousel>
  <ng-container *ngFor="let panel of panels">
    <ng-container *tsInfoCarouselPanel>
      <h4 class="ts-info-carousel__item-title">{{ panel.title }}</h4>
      <div class="ts-info-carousel__item-content" [innerHTML]="panel.content"></div>
    </ng-container>
  </ng-container>
</ts-info-carousel>

NOTE: This method does not work if Angular components are passed in (see next section for solution):

const panels = [
  {
    title: 'Title one',
    content: `Panel content with <ts-link>custom link</ts-link>.`,
  },
];

Nested components

If custom components are needed inside a panel, we cannot rely on innerHTML:

<ts-info-carousel>
  <ng-container *tsInfoCarouselPanel>
    <h4 class="ts-info-carousel__item-title">Title One</h4>
    <div class="ts-info-carousel__item-content">My content with a ts-button: <ts-button>My button</ts-button></div>
  </ng-container>

  <ng-container *tsInfoCarouselPanel>
    <h4 class="ts-info-carousel__item-title">Title Two</h4>
    <div class="ts-info-carousel__item-content">Content with a ts-link: <ts-link [destination]="['foo', 'bar']">My link</ts-link></div>
  </ng-container>
</ts-info-carousel>

Styles

Classes are provided to style panel content:

ClassPurpose
ts-info-carousel__item-titleApply default styles to the panel title
ts-info-carousel__item-contentApply default styles to the panel content
<ng-container *tsInfoCarouselPanel>
  <h4 class="ts-info-carousel__item-title">Title Two</h4>
  <div class="ts-info-carousel__item-content">Content with a ts-link: <ts-link [destination]="['foo', 'bar']">My link</ts-link></div>
</ng-container>

If the carousel is on a background color other than our default base white, update the custom CSS property:

.my-wrapper {
  --ts-info-carousel-backgroundColor: #bada55;
}

The label color can also be adjusted this way:

.my-wrapper {
  --ts-info-carousel-label-color: #bada55;
}

Active panel

The active panel can be programmatically set:

<ts-info-carousel activePanelIndex="2">
  ...
</ts-info-carousel>

Paginator item title

The item title can be set for the paginator summary:

<!-- This will render `1 of 3 Tips` as the paginator summary -->
<ts-info-carousel paginatorItemTitle="Tips">
  ...
</ts-info-carousel>

Events

The current active panel index is emitted when it changes:

<ts-info-carousel (activePanelIndexChange)="myChangeEvent($event)">
  ...
</ts-info-carousel>