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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@careonbrasil/ng-charts

v14.0.6

Published

Biblioteca de componentes de gráficos SVG para Angular 14 da CareOn

Readme

@careon-brasil/charts

Biblioteca oficial de componentes de gráficos SVG reativos desenvolvida para o ecossistema CareOn.

Todos os componentes são construídos com SVG declarativo inline (sem dependências pesadas como D3 ou Chart.js), suporte nativo a ChangeDetectionStrategy.OnPush, validação estrita de schema em tempo de execução, tipagem TypeScript e eventos bidirecionais de interação.


Sumário

  1. Instalação
  2. Configuração
  3. Recursos Universais
  4. Componentes
  5. Compilação e Publicação

1. Instalação

Instale o pacote através do registro privado da CareOn via NPM ou Yarn:

npm install @careon-brasil/charts

Dependências de Peer

  • @angular/core: >=14.0.0 <15.0.0
  • @angular/common: >=14.0.0 <15.0.0
  • tslib: ^2.3.0

2. Configuração

Importe o módulo CareonChartsModule no seu módulo Angular (ex: AppModule ou feature module):

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { CareonChartsModule } from '@careon-brasil/charts';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    CareonChartsModule
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

3. Recursos Universais

Metadados e Tipagem Genérica (id e payload)

Todos os modelos de dados dos 5 gráficos estendem um contrato com suporte a genéricos <T = any>:

export interface BaseChartItem<T = any> {
  /** Identificador opcional do item (ex: ID no banco de dados) */
  id?: string | number;
  /** Objeto de domínio complementar (ex: entidade do backend, metadados de auditoria) */
  payload?: T;
}

Tipagem Segura: Diferente de um dicionário genérico [key: string]: any;, esta abordagem preserva a verificação de erros de digitação em tempo de compilação do TypeScript (ex: passar valeu: 10 em vez de value: 10 gerará um erro de compilação imediato), enquanto permite anexar com segurança qualquer entidade customizada via payload.

Evento de Seleção (itemSelected)

Todos os 5 gráficos emitem o evento @Output() itemSelected ao clicar em elementos gráficos (barras, pontos de linha, fatias, segmentos ou legendas). O evento retorna a referência exata do item passado no array de entrada [data]:

<careon-timeline-bar-chart
  [data]="points"
  (itemSelected)="onItemSelected($event)"
></careon-timeline-bar-chart>
import { TimelinePoint } from '@careon-brasil/charts';

onItemSelected(item: TimelinePoint): void {
  console.log('Item selecionado:', item.label);
  console.log('ID do registro:', item.id);
  console.log('Payload anexado:', item.payload);
}

Validação e Mensagens de Erro

Se o input [data] receber um valor nulo, indefinido, formato incompatível (ex: um objeto {} em vez de array []) ou itens sem as propriedades obrigatórias, o gráfico renderiza automaticamente um painel de alerta amigável de erro de validação com o diagnóstico exato do tipo recebido e a estrutura esperada.


4. Componentes

1. Timeline Bar Chart (<careon-timeline-bar-chart>)

Gráfico de barras temporais desenhado em SVG inline. Suporta hachurado listrado para períodos passados (isPast), destaque do dia atual (isCurrent), linha pontilhada de tendência conectando o topo das barras, tooltips flutuantes e navegação com scroll horizontal para mais de 7 itens.

Modelo de Dados: TimelinePoint<T = any>

export interface TimelinePoint<T = any> {
  /** Rótulo exibido no eixo X (ex: 'Seg', '15/09', 'Sem 1') */
  label: string;
  /** Valor numérico da barra */
  value: number;
  /** Indica se o ponto é do passado (aplica preenchimento listrado) */
  isPast?: boolean;
  /** Indica se é o dia/período corrente (aplica destaque de cor) */
  isCurrent?: boolean;
  /** Identificador único opcional */
  id?: string | number;
  /** Dados arbitrários de domínio */
  payload?: T;
}

Inputs e Outputs

| Propriedade | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | [data] | TimelinePoint[] | Obrigatório | Array de pontos temporais a serem plotados. | | [autoBarWidth] | boolean | true | Quando true, calcula a largura ótima da barra com base no dicionário de densidade. | | [barWidth] | number | 50 | Largura fixa da barra em pixels (usada quando autoBarWidth = false). | | [itemSlotWidth] | number | 80 | Espaço alocado por item em pixels quando o scroll horizontal estiver ativo (> 7 itens). | | [currentBarColor] | string | '#3B82F6' | Cor de preenchimento para a barra do período atual (isCurrent = true). | | [barColor] | string | '#3B82F6' | Cor de preenchimento padrão para barras normais. | | [pastHatchColor] | string | '#e2e8f0' | Cor das listras de hachurado para períodos passados (isPast = true). | | [zeroColor] | string | '#ef4444' | Cor de destaque para barras com valor zero. | | [trendLineColor] | string | '#1e293b' | Cor da linha pontilhada de tendência. | | [dotColor] | string | '#1e293b' | Cor dos marcadores circulares nos topos das barras. | | [tooltipBgColor] | string | '#29285A' | Cor de fundo do tooltip flutuante. | | [tooltipTextColor] | string | '#ffffff' | Cor do texto dentro do tooltip flutuante. | | [textColor] | string | '#64748b' | Cor padrão dos rótulos do eixo X. | | [activeTextColor] | string | '#0f172a' | Cor dos rótulos para o período atual. | | (itemSelected) | EventEmitter<TimelinePoint> | — | Disparado ao clicar em uma barra, marcador ou rótulo do eixo X. |

Exemplo de Uso

<careon-timeline-bar-chart
  [data]="timelineData"
  [autoBarWidth]="true"
  [currentBarColor]="'#059669'"
  (itemSelected)="onTimelineSelect($event)"
></careon-timeline-bar-chart>
timelineData: TimelinePoint[] = [
  { label: 'Dom', value: 3, isPast: true, id: 1 },
  { label: 'Seg', value: 7, isPast: true, id: 2 },
  { label: 'Ter', value: 5, isPast: true, id: 3 },
  { label: 'Qua', value: 9, isPast: true, id: 4 },
  { label: 'Qui', value: 0, isPast: true, id: 5 },
  { label: 'Sex', value: 6, isPast: true, id: 6 },
  { label: 'Sáb', value: 11, isCurrent: true, id: 7, payload: { plantoesConfirmados: 11 } }
];

2. Comparison Bar Chart (<careon-comparison-bar-chart>)

Gráfico de barras comparativas verticais em SVG inline com ordenação alfabética automática em português (pt-BR), filtro Top 10, linha pontilhada de tendência conectando o topo das barras e rolagem suave com botões integrados de navegação.

Modelo de Dados: ComparisonItem<T = any>

export interface ComparisonItem<T = any> {
  /** Rótulo da categoria ou vaga (ex: 'Enfermeiro UTI') */
  label: string;
  /** Quantidade ou valor numérico */
  value: number;
  /** Identificador único opcional */
  id?: string | number;
  /** Dados arbitrários de domínio */
  payload?: T;
}

Inputs e Outputs

| Propriedade | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | [data] | ComparisonItem[] | Obrigatório | Lista de itens a serem comparados. | | [limitTop10] | boolean | false | Quando true, filtra e exibe apenas os 10 itens com maiores valores. | | [autoBarWidth] | boolean | true | Quando true, calcula dinamicamente a largura das barras via dicionário proporcional. Quando false, usa barWidth. | | [barWidth] | number | 46 | Largura em pixels de cada barra vertical (usada quando autoBarWidth = false). | | [itemSlotWidth] | number | 100 | Espaço horizontal em pixels alocado por coluna (ativa scroll quando ultrapassar a tela). | | [barColor] | string | '#3B82F6' | Cor de preenchimento das barras com valor > 0. | | [zeroColor] | string | '#ef4444' | Cor das barras com valor zero (estado vazio/alerta). | | [trendLineColor] | string | '#1e293b' | Cor da linha pontilhada conectando os topos das barras. | | [dotColor] | string | '#1e293b' | Cor do ponto marcador no topo de cada barra. | | [textColor] | string | '#0f172a' | Cor dos rótulos de texto de cada coluna. | | (itemSelected) | EventEmitter<ComparisonItem> | — | Disparado ao clicar em uma barra, marcador circular ou rótulo do eixo X. |

Exemplo de Uso

<careon-comparison-bar-chart
  [data]="vagas"
  [limitTop10]="true"
  [barWidth]="48"
  [itemSlotWidth]="110"
  (itemSelected)="onVagaClick($event)"
></careon-comparison-bar-chart>

3. Donut Chart (<careon-donut-chart>)

Gráfico circular tipo rosca desenhado através de arcos SVG reativos com stroke-dasharray. Suporta legenda interativa com valores absolutos e percentuais, tooltips no hover, orifício central com texto customizado e estado vazio elegante.

Modelo de Dados: DonutChartItem<T = any>

export interface DonutChartItem<T = any> {
  /** Rótulo da fatia (ex: 'Visualizações', 'Cardiologia') */
  label: string;
  /** Valor numérico */
  count: number;
  /** Cor hexadecimal específica para esta fatia (opcional) */
  color?: string;
  /** Identificador único opcional */
  id?: string | number;
  /** Dados arbitrários de domínio */
  payload?: T;
}

Inputs e Outputs

| Propriedade | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | [data] | DonutChartItem[] | Obrigatório | Lista de fatias que compõem a rosca. | | [title] | string | undefined | Título opcional exibido no topo do card. | | [size] | number | 110 | Dimensão SVG (largura e altura) em pixels. | | [strokeWidth] | number | 14 | Espessura do aro circular da rosca em pixels. | | [maxItems] | number | 6 | Limite máximo de fatias antes de agrupar ou limitar. | | [showLegend] | boolean | true | Exibe ou oculta a legenda textual ao lado do gráfico. | | [showLegendPercentage]| boolean| false | Quando true, exibe também a porcentagem correspondente na legenda. | | [showTooltip] | boolean | true | Exibe tooltip flutuante ao passar o mouse sobre uma fatia. | | [centerText] | string | undefined | Texto customizado a ser renderizado dentro do orifício central. | | [emptyColor] | string | '#e2e8f0' | Cor do aro quando todos os valores forem zero. | | [textColor] | string | '#0f172a' | Cor dos textos da legenda. | | (itemSelected) | EventEmitter<DonutChartItem> | — | Disparado ao clicar em uma fatia circular ou em um item da legenda. |

Exemplo de Uso

<careon-donut-chart
  [data]="candidaturas"
  [size]="130"
  [strokeWidth]="16"
  [showLegend]="true"
  [showLegendPercentage]="true"
  (itemSelected)="onDonutSelect($event)"
></careon-donut-chart>

4. Stacked Horizontal Bar (<careon-stacked-horizontal-bar>)

Barra horizontal proporcional empilhada desenhada em HTML/CSS Flexbox com cantos arredondados, legenda descritiva, contagem total agregada no cabeçalho e suporte completo a estado vazio customizável.

Modelo de Dados: StackedBarItem<T = any>

export interface StackedBarItem<T = any> {
  /** Rótulo do segmento (ex: 'Abertas', 'Encerradas') */
  label: string;
  /** Valor numérico daquele segmento */
  value: number;
  /** Cor de preenchimento hexadecimal */
  color: string;
  /** Identificador único opcional */
  id?: string | number;
  /** Dados arbitrários de domínio */
  payload?: T;
}

Inputs e Outputs

| Propriedade | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | [data] | StackedBarItem[] | Obrigatório | Lista de segmentos da barra horizontal. | | [title] | string | 'title' | Título do cabeçalho (invariante oficial). | | [totalLabel] | string | 'total label' | Rótulo explicativo ao lado do valor total (invariante oficial). | | [showHeader] | boolean | true | Exibe ou oculta o cabeçalho superior com título e total. | | [showLegend] | boolean | true | Exibe ou oculta a legenda abaixo da barra. | | [emptyText] | string | 'empty text' | Texto exibido quando todos os valores forem zero (invariante oficial). | | [emptyTrackColor] | string | '#f1f5f9' | Cor de fundo da barra quando estiver em estado vazio. | | [maxSegments] | number | 6 | Quantidade máxima de segmentos suportados. | | (itemSelected) | EventEmitter<StackedBarItem> | — | Disparado ao clicar em um segmento da barra ou em um item da legenda. |

Exemplo de Uso

<careon-stacked-horizontal-bar
  [data]="statusVagas"
  [title]="'Vagas no Período'"
  [totalLabel]="'total de vagas'"
  [emptyText]="'nao existe comparativo'"
  (itemSelected)="onSegmentSelect($event)"
></careon-stacked-horizontal-bar>

5. Funnel Bar (<careon-funnel-bar>)

Funil horizontal de conversão. Cada etapa é representada por uma barra horizontal cuja largura é matematicamente dimensionada de forma proporcional ao valor da maior etapa do funil, calculando automaticamente as taxas de retenção percentual.

Modelo de Dados: FunnelBarItem<T = any>

export interface FunnelBarItem<T = any> {
  /** Nome da etapa do funil (ex: 'Visualizações', 'Candidaturas') */
  label: string;
  /** Quantidade numérica de registros */
  count: number;
  /** Cor customizada da barra da etapa (opcional) */
  barColor?: string;
  /** Cor da fonte do texto dentro da barra (opcional) */
  fontColor?: string;
  /** Identificador único opcional */
  id?: string | number;
  /** Dados arbitrários de domínio */
  payload?: T;
}

Inputs e Outputs

| Propriedade | Tipo | Padrão | Descrição | | :--- | :--- | :--- | :--- | | [data] | FunnelBarItem[] | Obrigatório | Lista ordenada de etapas do funil de conversão. | | [title] | string | undefined | Título opcional acima do funil. | | [fontColor] | string | '#ffffff' | Cor do texto renderizado dentro das barras do funil. | | [minBarWidth] | number | undefined | Largura mínima em pixels para garantir legibilidade em etapas com poucos registros. | | (itemSelected) | EventEmitter<FunnelBarItem> | — | Disparado ao clicar em qualquer barra do funil. |

Exemplo de Uso

<careon-funnel-bar
  [data]="etapasFunil"
  [title]="'Funil de Conversão do Processo Seletivo'"
  [minBarWidth]="70"
  (itemSelected)="onFunnelClick($event)"
></careon-funnel-bar>