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

ngx-opalbytes-components

v1.12.0

Published

Uma biblioteca de componentes de UI reutilizáveis para aplicações Angular, projetada para acelerar o desenvolvimento e manter a consistência visual.

Readme

ngx-opalbytes-components

Uma biblioteca de componentes de UI reutilizáveis para aplicações Angular, projetada para acelerar o desenvolvimento e manter a consistência visual.


Compatibilidade

|Tecnologia | Versão | Descrição | |------------|----------|-------------------------------------| | Angular | ^21.0.0 | Framework principal da biblioteca |

Instalação

Para instalar a biblioteca, execute o seguinte comando:

npm install ngx-opalbytes-components

Dependências

Esta biblioteca possui as seguintes dependências:

peerDependencies

| Pacote | Versão | | :----- | :----- | | @angular/common | ^21.0.0 | | @angular/core | ^21.0.0 | | @angular/material | ^21.0.3 |

dependencies

| Pacote | Versão | | :----- | :----- | | tslib | ^2.3.0 |


Como Usar

Os componentes nesta biblioteca são standalone, o que significa que você pode importá-los diretamente nos seus componentes ou módulos.

Exemplo de importação em um componente:

import { Component } from '@angular/core';
// Importe os componentes desejados
import { BaseButton, CaoAutocompleteComponent } from 'ngx-opalbytes-components';
import { FormControl, ReactiveFormsModule } from '@angular/forms'; // Adicione ReactiveFormsModule e FormControl

@Component({
  selector: 'app-exemplo',
  standalone: true,
  imports: [
    BaseButton, // Adicione o componente aos imports
    CaoAutocompleteComponent, // Adicione o componente aos imports
    ReactiveFormsModule // Importe ReactiveFormsModule
  ],
  template: `
    <cao-button buttonText="Clique Aqui"></cao-button>
    <cao-autocomplete label="Selecione um Item" [options]="opcoesExemplo" [control]="meuControl"></cao-autocomplete>
  `
})
export class ExemploComponent {
  meuControl = new FormControl();
  opcoesExemplo = [
    { id: 1, nome: 'Opção 1' },
    { id: 2, nome: 'Opção 2' }
  ];
}

Organização de Pastas

Dentro da pasta src/lib/, os componentes são organizados em shared/components/ e cada componente reside em sua própria pasta, contendo seus arquivos (.ts, .html, .css, .spec.ts).

src/
└── lib/
    └── shared/
        └── components/
        |   ├── autocomplete/
        |   ├── base-button/
        |   ├── base-input/
        |   ├── base-time-range/
        |   ├── drop-down/
        |   ├── footer/
        |   ├── links-button/
        |   ├── paginator/
        |   ├── stepper/
        |   └── time-picker/
        └── features/
            ├── base-modal/
            ├── base-table/
            ├── base-table-paginated/
            ├── base-dialog/
            └── base-alert/
            

Detalhes dos Componentes

BaseButton

Um botão customizável com suporte a ícones, estado de loading e tooltip.

Seletor: <cao-button>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | --- | --- | --- | --- | | buttonText | string | 'Clique!' | O texto exibido no botão. | | isDarkMode | boolean | false | Aplica o tema escuro ao botão. | | isDisabled | boolean | false | Desabilita o botão. | | isLoading | boolean | false | Exibe um spinner de carregamento no botão. | | btnClass | string | '' | Classes CSS customizadas para o botão. | | tooltip | string | undefined | Texto a ser exibido em uma tooltip. | | trailingIcon | string | undefined | Ícone a ser exibido após o texto. | | leadingIcon | string | undefined | Ícone a ser exibido antes do texto. | | isLucideIcon | boolean | true | Define se o ícone é do pacote Lucide. | | dataCy | string | undefined | Atributo para testes E2E com Cypress. |

Eventos (Outputs)

| Evento | Tipo | Descrição | | --- | --- | --- | | buttonClick | EventEmitter<void> | Emitido quando o botão é clicado. |


Stepper

Um componente de passo a passo que guia o usuário através de um processo.

Seletor: <cao-stepper>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | -------- | -------- | ------ | ------------------------------------- | | title | string | '' | O título exibido acima do stepper. |

Eventos (Outputs)

| Evento | Tipo | Descrição | | ----------------- | ------------------- | ------------------------------------------------- | | maxReachedEvent | EventEmitter<null> | Emitido quando o último passo do stepper é alcançado. |

Métodos

| Método | Descrição | | -------------- | -------------------------------------------------------------------------------------- | | nextStep() | Avança para o próximo passo. Se estiver no último passo, emite o evento maxReachedEvent. | | prevStep() | Retorna ao passo anterior. Não faz nada se estiver no primeiro passo. | | resetStepper()| Reinicia o stepper, voltando ao primeiro passo e desativando todos os outros. |

Uso com Step

O Stepper deve ser usado em conjunto com o componente Step.

<cao-stepper title="Meu Stepper">
  <cao-step title="1"></cao-step>
  <cao-step title="2"></cao-step>
  <cao-step title="3"></cao-step>
</cao-stepper>

Step

Representa um único passo dentro do componente Stepper.

Seletor: <cao-step>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | ---------- | --------- | ------- | ----------------------------------------- | | title | string | '' | O texto exibido dentro do passo (ex: "1"). | | isActive | boolean | false | Define se o passo está ativo. |


BaseInput

Um campo de entrada de texto customizável com suporte a ícones, máscaras e validação.

Seletor: <cao-input>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | --- | --- | --- | --- | | type | string | 'text' | O tipo de input (text, password, email, etc). | | placeholder | string | '' | O texto de placeholder. | | label | string | '' | O rótulo do campo. | | inputClass | string | '' | Classes CSS customizadas para o input. | | value | string | number | boolean | Date | '' | O valor do input. | | errorMessage | string | '' | Mensagem de erro a ser exibida. | | isDisabled | boolean | false | Desabilita o input. | | maxLength | number | undefined | Número máximo de caracteres. | | searchMode | boolean | false | Ativa o modo de busca, exibindo um ícone de busca. | | showBorder | boolean | false | Exibe uma borda no input. | | isLucideIcon | boolean | false | Define se o ícone é do pacote Lucide. | | mask | string | undefined | Máscara a ser aplicada ao input (usando ngx-mask). | | control | AbstractControl | null | null | O FormControl associado. | | tooltip | string | '' | Texto a ser exibido em uma tooltip. | | dataCy | string | undefined | Atributo para testes E2E com Cypress. | | textareaRows | string | undefined | Número de linhas para um textarea. | | decimalMarker | '.' \| ',' \| ['.', ','] | ',' | Marcador decimal para números. | | thousandSeparator | string | '.' | Separador de milhares para números. | | allowNegativeNumbers| boolean| false| Permite números negativos. | | separatorLimit | string | '' | Limite do separador. | | leadingIcon | string | undefined | Ícone a ser exibido antes do texto. | | trailingIcon | string | undefined | Ícone a ser exibido após o texto. |

Eventos (Outputs)

| Evento | Tipo | Descrição | | --- | --- | --- | | valueChange | EventEmitter<string> | Emitido quando o valor do input muda. | | searchClick | EventEmitter<void> | Emitido quando o ícone de busca é clicado. | | inputChange | EventEmitter<string> | Emitido a cada mudança no input. |


BaseAlert

Um componente para exibir alertas de sucesso, erro, informação ou aviso. Geralmente utilizado com um serviço de diálogo.

Seletor: <cao-alert>

Atributos (Inputs via data)

| Atributo | Tipo | Descrição | | --- | --- | --- | | type | 'success' \| 'error' \| 'info' \| 'warning' | O tipo de alerta a ser exibido. | | title | string | O título do alerta. | | message | string | A mensagem do alerta. | | alertIcon | string | (Opcional) Caminho para um ícone customizado. |


AlertService

O AlertService é responsável por exibir os alertas na tela. Por padrão, ele utiliza o componente BaseAlert.

Como estender o AlertService para usar um componente de alerta customizado:

Para personalizar a aparência ou o comportamento dos alertas, você pode estender o AlertService e sobrescrever o método generateComponentPortal(). Este método deve retornar o seu componente customizado, que DEVE estender o BaseAlert.

Exemplo:

  1. Crie seu componente de alerta customizado (ex: CustomAlertComponent):

    // custom-alert.component.ts
    import { Component } from '@angular/core';
    import { BaseAlert } from 'ngx-opalbytes-components';
    
    @Component({
      selector: 'app-custom-alert',
      template: `
        <div class="custom-alert-container" [ngClass]="data.type">
          <img *ngIf="data.alertIcon" [src]="data.alertIcon" alt="Alert Icon" class="alert-icon">
          <div class="content">
            <h3 class="title">{{ data.title }}</h3>
            <p class="message">{{ data.message }}</p>
          </div>
        </div>
      `,
      styles: [`
        .custom-alert-container {
          /* seus estilos personalizados */
        }
      `]
    })
    export class CustomAlertComponent extends BaseAlert {
      // Você pode adicionar lógica específica aqui se precisar
    }
  2. Crie um serviço que estende o AlertService:

    // custom-alert.service.ts
    import { Injectable } from '@angular/core';
    import { AlertService } from 'ngx-opalbytes-components';
    import { CustomAlertComponent } from './custom-alert.component'; // Importe seu componente customizado
    
    @Injectable({
      providedIn: 'root'
    })
    export class CustomAlertService extends AlertService {
      override generateComponentPortal(): typeof CustomAlertComponent {
        return CustomAlertComponent;
      }
    }

BaseDialog

Exibe uma caixa de diálogo modal para interações que exigem confirmação do usuário.

Seletor: <cao-dialog>

Atributos (Inputs via config)

| Atributo | Tipo | Descrição | | --- | --- | --- | | type | 'success' \| 'error' \| 'info' \| 'warning' | O tipo de diálogo. | | title | string | O título do diálogo. | | logoIcon | string | (Opcional) Caminho para o ícone do logo. | | message | string | A mensagem principal do diálogo. | | confirmButtonText| string | Texto para o botão de confirmação. | | cancelButtonText | string | Texto para o botão de cancelamento. | | onConfirm | () => void | Função a ser executada na confirmação. | | onCancel | () => void | Função a ser executada no cancelamento. |

Como estender o DialogService para usar um componente de dialoga customizado:

Para personalizar a aparência ou o comportamento dos dialogos, você pode estender o DialogService e sobrescrever o método generateComponentPortal(). Este método deve retornar o seu componente customizado, que DEVE estender o BaseDialog.

Exemplo:

  1. Crie seu componente de dialoga customizado (ex: CustomDialogComponent):

    // custom-dialog.component.ts
    import { Component } from '@angular/core';
    import { BaseDialog } from 'ngx-opalbytes-components';
    
    @Component({
      selector: 'app-custom-dialog',
      template: `
        <div class="custom-dialog-container" [ngClass]="data.type">
          <img *ngIf="data.dialogIcon" [src]="data.dialogIcon" alt="Dialog Icon" class="dialog-icon">
          <div class="content">
            <h3 class="title">{{ data.title }}</h3>
            <p class="message">{{ data.message }}</p>
             @if (config.cancelButtonText) {
              <button
                type="button"
                class="cancel-button"
                [attr.data-cy]="config.cancelButtonText"
                (keydown)="handleCancel()"
                (click)="handleCancel()">
                {{ config.cancelButtonText }}
              </button>
              } @if (config.confirmButtonText) {
              <button
                type="button"
                class="confirm-button"
                [ngClass]="config.type"
                [attr.data-cy]="config.confirmButtonText"
                (click)="handleConfirm()"
                (keydown)="handleConfirm()"
                >
                {{ config.confirmButtonText }}
              </button>
              }
          </div>
        </div>
      `,
      styles: [`
        .custom-dialog-container {
          /* seus estilos personalizados */
        }
      `]
    })
    export class CustomDialogComponent extends BaseDialog {
      // Você pode adicionar lógica específica aqui se precisar
    }
  2. Crie um serviço que estende o DialogService:

    // custom-dialog.service.ts
    import { Injectable } from '@angular/core';
    import { DialogService } from 'ngx-opalbytes-components';
    import { CustomDialogComponent } from './custom-dialog.component'; // Importe seu componente customizado
    
    @Injectable({
      providedIn: 'root'
    })
    export class CustomDialogService extends DialogService {
      override generateComponentPortal(): typeof CustomDialogComponent {
        return CustomDialogComponent;
      }
    }

FeatureBaseModal

Um componente de modal genérico que pode ser customizado.

Seletor: <cao-feature-base-modal>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | --- | --- | --- | --- | | showModal | boolean | false | Controla a visibilidade do modal. | | title | string | '' | O título do modal. | | data | T | undefined | Dados a serem passados para o conteúdo do modal. | | modalTypeClass | 'default' \| 'custom' | 'default' | Classe de tipo de modal. | | modalClass | string | 'modal-default' | Classe CSS customizada para o modal. | | modalSize | 'w-100' \| 'w-90' \| ... | 'w-70' | Largura do modal. | | closeOnOverlayClick| boolean| false| Fecha o modal ao clicar no overlay. |


CaoAutocompleteComponent

Um campo de preenchimento automático que funciona com ngModel ou formControlName.

Seletor: <cao-autocomplete>

Atributos (Inputs)

| Atributo | Tipo | Descrição | | --- | --- | --- | | label | string | O rótulo do campo. | | placeholder | string | O texto de placeholder. | | options | IAutoCompleteOption[] | A lista de opções para o autocomplete. | | control | AbstractControl | O FormControl associado. | | dataCy | string | Atributo para testes E2E. | | controlName | string | O nome do controle de formulário. |


BaseTable

Uma tabela de dados com ordenação, paginação e seleção de linhas. A configuração é feita através do TableService.

Seletor: <cao-table>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | --- | --- | --- | --- | | customClass | string | '' | Classe CSS customizada para a tabela. | | pageSizeOptions | number[] | [5, 10, 20, 50] | Opções para o número de itens por página. | | showFirstLastButtons| boolean| true | Exibe os botões de primeira/última página. | | isPaginatedByServer| boolean| false | Define se a paginação é controlada pelo servidor. |

Eventos (Outputs)

| Evento | Tipo | Descrição | | --- | --- | --- | | pageChanged | EventEmitter<number> | Emitido quando a página muda. | | pageSizeChanged | EventEmitter<number> | Emitido quando o tamanho da página muda. | | firstPageClicked | EventEmitter<void> | Emitido ao clicar no botão de primeira página. | | lastPageClicked | EventEmitter<void> | Emitido ao clicar no botão de última página. | | selectionChanged | EventEmitter<any[]> | Emitido quando a seleção de linhas muda. | | pageEvent | EventEmitter<PageEvent>| Emitido em qualquer evento de paginação. |


BaseTablePaginated

Uma tabela de dados leve com paginação no lado do cliente. Herda a maioria de suas funcionalidades do BaseTable.

Seletor: <cao-table-light-paginated>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | --- | --- | --- | --- | | getColumnCssClass| (columnKey: string, value: any) => string | null | Função para obter classes CSS customizadas para células. | | customClass | string | '' | Classe CSS customizada para a tabela. | | pageSizeOptions | number[] | [5, 10, 20, 50] | Opções para o número de itens por página. | | showFirstLastButtons| boolean| true | Exibe os botões de primeira/última página. | | isPaginatedByServer| boolean| true | Define se a paginação é controlada pelo servidor (sempre true neste componente). |

Eventos (Outputs)

| Evento | Tipo | Descrição | | --- | --- | --- | | rowClicked | EventEmitter<any> | Emitido quando uma linha da tabela é clicada. | | pageChanged | EventEmitter<number> | Emitido quando a página muda. | | pageSizeChanged | EventEmitter<number> | Emitido quando o tamanho da página muda. | | firstPageClicked | EventEmitter<void> | Emitido ao clicar no botão de primeira página. | | lastPageClicked | EventEmitter<void> | Emitido ao clicar no botão de última página. | | selectionChanged | EventEmitter<any[]> | Emitido quando a seleção de linhas muda. | | pageEvent | EventEmitter<PageEvent>| Emitido em qualquer evento de paginação. |


BaseTimeRange

Um seletor de intervalo de datas.

Seletor: <cao-base-time-range>

Atributos (Inputs)

| Atributo | Tipo | Descrição | | --- | --- | --- | | label | string | O rótulo do campo. | | max | Date | A data máxima permitida. | | minDate | Date | A data mínima permitida. | | maxDate | Date | A data máxima permitida para o segundo campo. | | startDate | Date | A data de início pré-selecionada. | | finalDate | Date | A data final pré-selecionada. | | dataCy | string | Atributo para testes E2E. | | controlName | string | O nome do controle de formulário. |

Eventos (Outputs)

| Evento | Tipo | Descrição | | --- | --- | --- | | rangeSelected| EventEmitter<Date[]> | Emitido quando um intervalo de datas é selecionado. |


DropDown

Um menu suspenso (dropdown) com busca, que funciona com ngModel ou formControlName.

Seletor: <cao-drop-down>

Atributos (Inputs)

| Atributo | Tipo | Descrição | | --- | --- | --- | | textHeader | string | Texto do cabeçalho do dropdown. | | options | IDropDownOption[] | Lista de opções. | | isDisabled | boolean | Desabilita o componente. | | tooltip | string | Texto para a tooltip. | | dropDirectionInput| 'up' \| 'down' | Direção em que o dropdown abrirá. | | control | AbstractControl | O FormControl associado. |

Eventos (Outputs)

| Evento | Tipo | Descrição | | --- | --- | --- | | itemSelected| EventEmitter<IDropDownOption> | Emitido quando um item é selecionado. |


Footer

Um rodapé simples para a aplicação.

Seletor: <cao-footer>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | --- | --- | --- | --- | | currentRoute | string | undefined | A rota atual (usado para lógica interna). | | footerText | string | undefined | Texto customizado para o rodapé. | | isFixed | boolean | true | Fixa o rodapé na parte inferior da página. |


LinksButton

Exibe uma lista de links de navegação como botões.

Seletor: <cao-links-button>

Atributos (Inputs)

| Atributo | Tipo | Descrição | | --- | --- | --- | | navContent | Signal<INavContent> | Obrigatório. Objeto com o título e a lista de links. |


Paginator

Controle de paginação para tabelas ou listas.

Seletor: <cao-paginator>

Atributos (Inputs)

| Atributo | Tipo | Padrão | Descrição | | --- | --- | --- | --- | | totalItems | number | 0 | O número total de itens. | | pageSize | number | 10 | O número de itens por página. | | currentPage| number | 1 | A página atual. | | pageSizeOptions| number[] | [5, 10, 20, 50] | Opções para o tamanho da página. | | showFirstLastButtons| boolean| true | Exibe os botões de primeira/última página. |

Eventos (Outputs)

| Evento | Tipo | Descrição | | --- | --- | --- | | pageEvent | EventEmitter<PageEvent> | Emitido em qualquer evento de paginação. |


TimePicker

Um seletor de horário.

Seletor: <cao-time-picker>

Atributos (Inputs)

| Atributo | Tipo | Descrição | | --- | --- | --- | | control | FormControl<Date \| null> | O FormControl associado. | | isDisabled | boolean | Desabilita o seletor. | | dataCy | string | Atributo para testes E2E. | | min | string | (setter) Horário mínimo no formato 'HH:mm'. | | max | string | (setter) Horário máximo no formato 'HH:mm'. |

Eventos (Outputs)

| Evento | Tipo | Descrição | | --- | --- | --- | | timeChange | EventEmitter<Date> | Emitido quando o horário é alterado. |


Como Contribuir

Para adicionar um novo componente a esta biblioteca, siga os passos abaixo:

  1. Crie os arquivos do seu componente dentro da pasta src/lib/shared/components/, seguindo a estrutura de pastas existente.

  2. Exponha o componente na API pública da biblioteca, adicionando uma linha de exportação no arquivo src/public-api.ts.

  3. Adicione ou atualize os testes unitários para garantir a cobertura e o funcionamento esperado.

  4. Faça o commit seguindo as regras de commit do projeto, usando o escopo components.

    git commit -m "feat(components): add new component"

Regras e Convenções

Prefixo

O prefixo para componentes nesta biblioteca é cao.

  • Componentes: Utilize o prefixo <cao-...> nos seletores dos elementos.