import { RendererFactory2 } from '@angular/core'; import { PoDensityMode } from '../../enums/po-density-mode.enum'; import { PoThemeA11yEnum } from './enum/po-theme-a11y.enum'; import { PoThemeTypeEnum } from './enum/po-theme-type.enum'; import { PoTheme, PoThemeActive } from './interfaces/po-theme.interface'; /** * @description * * O serviço `PoThemeService` permite customizar as cores do tema padrão do `PO-UI` e definir o nível de acessibilidade * mais adequado ao projeto. * * O nível **AAA** (padrão) garante maior contraste, áreas clicáveis amplas e espaçamentos maiores entre os elementos, * enquanto o nível **AA** mantém a conformidade com as diretrizes de acessibilidade, mas com proporções mais equilibradas * e contornos mais sutis. * * O serviço também possibilita configurar a **densidade de espaçamentos**, permitindo ajustar o espaço entre e dentro dos * componentes. Essa configuração pode ser utilizada com qualquer nível de acessibilidade. * * > Observação: a customização das cores de `feedback` não é recomendada por motivos de acessibilidade e usabilidade. * * > Para saber mais sobre como customizar o tema padrão, consulte o item * [Customização de Temas usando o serviço PO-UI](guides/theme-service) na aba `Guias`. */ /** * @example * * * * * * */ export declare class PoThemeService { private readonly document; private readonly renderer; private theme; constructor(document: Document, rendererFactory: RendererFactory2); /** * Aplica um tema ao componente de acordo com o tipo de tema e o nível de acessibilidade especificados. * * Este método configura o tema do componente com base no objeto `themeConfig` fornecido, no `themeType` e no `a11yLevel`. * Além disso, ele pode opcionalmente salvar a preferência de tema no localStorage, se solicitado. * * @param {PoTheme} themeConfig - Configuração de tema a ser aplicada ao componente. * @param {PoThemeTypeEnum} [themeType=PoThemeTypeEnum.light] - (Opcional) Tipo de tema, podendo ser 'light' (claro) ou 'dark' (escuro). O tema claro é o padrão. * @param {PoThemeA11yEnum} [a11yLevel=PoThemeA11yEnum.AAA] - (Opcional) Nível de acessibilidade dos componentes, podendo ser AA ou AAA. Padrão é AAA. * @param {boolean} [persistPreference=true] - (Opcional) Define se a preferência de tema deve ser salva no * localStorage para persistência. Por padrão é `true`, ou seja, a preferência será salva automaticamente. */ setTheme(themeConfig: PoTheme, themeType?: PoThemeTypeEnum, a11yLevel?: PoThemeA11yEnum, persistPreference?: boolean): Promise; private setDataDefaultSizeHTML; /** * Retorna o nível de acessibilidade configurado no tema. * Se não estiver configurado, retorna `AAA` como padrão. * @returns {PoThemeA11yEnum} O nível de acessibilidade, que pode ser `AA` ou `AAA`. */ getA11yLevel(): PoThemeA11yEnum; /** * Define o tamanho `small` como padrão para componentes que não possuem um tamanho definido. Essa configuração é * aplicada globalmente apenas quando o nível de acessibilidade for `AA`. O valor definido é salvo no * `localStorage` sob a chave `po-default-size` e o atributo `data-default-size` é adicionado ao elemento HTML * para que os componentes possam aplicar o tamanho * * Exemplo de uso: * * ```typescript * import { poThemeDefault, PoThemeService, PoThemeTypeEnum, PoThemeA11yEnum } from '@po-ui/ng-components'; * * private themeService = inject(PoThemeService); * * constructor() { * this.themeService.setA11yDefaultSizeSmall(true); * this.themeService.setTheme(poThemeDefault, PoThemeTypeEnum.light, PoThemeA11yEnum.AA); * } * ``` * * > Para garantir que o tamanho `small` seja aplicado corretamente a todos os componentes, recomendamos * definir esta configuração **junto com o nível de acessibilidade `AA` na inicialização da aplicação**. * > Para ajustar a densidade visual dos componentes agrupadores (como pages, container, etc.), utilize também * o método `setDensityMode` conforme necessário. * * @param {boolean} enable Habilita ou desabilita o tamanho `small` globalmente. */ setA11yDefaultSizeSmall(enable: boolean): boolean; /** * Retorna o modo de adensamento dos componentes agrupadores. * Se não estiver configurado, retorna `medium` como padrão. * @returns {PoDensityMode} O modo de adensamento, que pode ser `small` ou `medium`. */ getDensityMode(): PoDensityMode; /** * Aplica o modo de adensamento compacto (`small`) ou espaçoso (`medium`) para os componentes agrupadores, * independentemente do nível de acessibilidade. O valor definido é salvo no `localStorage` sob a chave * `po-density-mode`. * * @param {'small' | 'medium'} mode Define o modo de densidade: `small` para compacto, `medium` para espaçoso. * O valor padrão é `medium`. */ setDensityMode(mode: string): void; /** * @docsPrivate * Retorna a preferência global de tamanho dos componentes. * * @returns `'small'` ou `'medium'`. */ getA11yDefaultSize(): string; /** * @docsPrivate * * Aplica estilos customizados para o componente e para o root HTML, utilizando os tokens definidos. * * Esse método é chamado para inserir ou atualizar estilos no DOM, aplicando tanto tokens de `onRoot` (ex: `--font-family: 'Roboto'`) * quanto estilos específicos de componentes (`perComponent`, como `po-listbox [hidden]: { display: 'flex !important' }`). * * O seletor CSS gerado leva em consideração o tema (`type`) e as configurações de acessibilidade (`a11y`) do tema ativo. * A classe do tema é aplicada no HTML e pode ser formatada como `html[class*="-light-AA"]` para personalizações * em temas específicos. * * @param {PoThemeActive} active - Configuração do tema ativo: * @param {any} perComponent - Objeto contendo os estilos específicos para componentes a serem aplicados. * @param {any} onRoot - Objeto contendo tokens de estilo que serão aplicados diretamente no seletor `:root` do HTML. * @param {string | Array} [classPrefix] - Prefixo(s) de classe para direcionamento preciso. * * @example * #### 1. Com prefixo único * ```typescript * setPerComponentAndOnRoot( * { type: 'dark', a11y: 'AA' }, * { 'po-input': { background: '#222' } }, * { '--text-color': '#fff' }, * 'myTheme' * ); * ``` * **Saída:** * ```css * :root[class*="-dark-AA"][class*="myTheme"] { * --text-color: #fff; * po-input { background: #222; } * } * ``` * * #### 2. Com múltiplos prefixos * ```typescript * setPerComponentAndOnRoot( * { type: 'light' }, * null, * { '--primary': '#3e8ed0' }, * ['myTheme', 'portal-v2'] * ); * ``` * **Saída:** * ```css * :root[class*="-light"][class*="myTheme"], * :root[class*="-light"][class*="portal-v2"] { * --primary: #3e8ed0; * } * ``` * * - Quando usado com array, gera um seletor CSS com múltiplos targets (separados por vírgula). * - Mantém a especificidade original do tema (`[class*="-type-a11y"]`) combinada com cada prefixo. * */ setPerComponentAndOnRoot(active: PoThemeActive, perComponent: any, onRoot: any, classPrefix?: string | Array): void; /** * @docsPrivate * * Gera estilos adicionais com base nos tokens de tema fornecidos, excluindo os tokens de cor. * @param theme Os tokens de tema contendo os estilos adicionais a serem gerados. * @returns Uma string contendo os estilos adicionais formatados. */ private generateAdditionalStyles; /** * @docsPrivate * * Aplica os estilos de tema ao documento. * @param styleCss Os estilos CSS a serem aplicados. */ private applyThemeStyles; private changeThemeType; /** * Restaura e aplica as preferências visuais do usuário para o tema da aplicação, garantindo que essas preferências * sejam persistidas no `localStorage` para uso em recarregamentos futuros. * * @returns {PoTheme} O tema atualmente aplicado. */ persistThemeActive(): PoTheme; private formatTheme; applyTheme(theme?: any): any; /** * Altera o tipo do tema armazenado e aplica os novos estilos ao documento. * * Este método altera o tipo do tema armazenado ativo (light/dark) * * @param {PoThemeTypeEnum} themeType O tipo de tema a ser aplicado, light ou dark. */ changeCurrentThemeType(type: PoThemeTypeEnum): void; /** * Método remove o tema armazenado e limpa todos os estilos de tema * aplicados ao documento. * * @param {boolean} [persistPreference=true] - (Opcional) Define se a preferência de tema não deve ser mantida no localStorage para persistência. `true` para remover, `false` para manter. */ cleanThemeActive(persistPreference?: boolean): void; private getActiveTypeFromTheme; private getActiveA11yFromTheme; private isValidA11yLevel; /** * @docsPrivate * * Este método define um dados do tema e o armazena. * @param theme Os tokens de tema contendo os estilos adicionais a serem gerados. */ private setThemeLocal; /** * Retorna o tema ativo como um observable. Este método funcionará apenas se o tema estiver armazenado no `localStorage`. * * @returns {PoTheme} Tema ativo. */ getThemeActive(): PoTheme; /** * @docsPrivate * * Gera estilos CSS com base nos tokens de cores fornecidos. * @param css Os tokens de cor a serem usados para gerar os estilos. * @param id id do style a ser aplicado. * @returns Uma string contendo os estilos CSS gerados. */ private createStyleElement; /** * @docsPrivate * * Gera estilos CSS com base nos tokens de cores fornecidos. * @param themeColor Os tokens de cor a serem usados para gerar os estilos. * @returns Uma string contendo os estilos CSS gerados. */ private generateThemeStyles; /** * @docsPrivate * * Gera estilos CSS com base nos tokens per Component fornecidos. * @param themePerComponent Os tokens de cor a serem usados para gerar os estilos. * @returns Uma string contendo os estilos CSS gerados. */ private generatePerComponentStyles; /** * Define o tema atual como o tema "PoUI Padrão". * * @param {PoThemeTypeEnum} type O tipo de Tema a ser aplicado, light / dark. */ setDefaultTheme(type: PoThemeTypeEnum): void; /** * @docsPrivate * * Retorna o estilo CSS para o fundo dos ícones do componente po-select, com base nas cores do tema. * * @param {PoThemeColor} themeColor - Objeto contendo as cores do tema. * @returns {string} - Estilo CSS para o fundo dos ícones do po-select. */ private getSelectBgIconsStyle; /** * @docsPrivate * * Retorna a imagem SVG utilizada como fundo do po-select. * * @param {string} color Cor da Imagem - Utilizada no atributo 'fill'. * @returns {string} Imagem SVG utilizada no po-select. */ private getSelectBgIcon; private dispatchEvent; /** * Define o tipo (light/dark) quando um tema está sendo aplicado. * * @param {PoTheme} theme - Objeto contendo as definições de tema a serem aplicadas no componente. * @param {PoThemeTypeEnum} [themeType=PoThemeTypeEnum.light] - (Opcional) Tipo de tema a ser aplicado, podendo ser 'light' (claro) ou 'dark' (escuro). Por padrão, o tema claro é aplicado. */ setThemeType(theme: PoTheme, themeType?: PoThemeTypeEnum): void; /** * Define o tipo (light/dark) para um tema já ativo. * * @param {PoThemeTypeEnum} [themeType=PoThemeTypeEnum.light] - (Opcional) Tipo de tema a ser aplicado, podendo ser 'light' (claro) ou 'dark' (escuro). Por padrão, o tema claro é aplicado. */ setCurrentThemeType(themeType?: PoThemeTypeEnum): void; /** * Define o nível de acessibilidade quando um tema está sendo aplicado. * * @param {PoTheme} theme - Objeto contendo as definições de tema a serem aplicadas no componente. * @param {PoThemeA11yEnum} [a11y=PoThemeA11yEnum.AAA] - (Opcional) Nível de acessibilidade dos componentes podendo ser * AA ou AAA. Por padrão a acessibilidade é AAA. */ setThemeA11y(theme: PoTheme, a11y?: PoThemeA11yEnum): void; /** * Define o nível de acessibilidade para um tema já ativo. * * @param {PoThemeA11yEnum} [a11y=PoThemeA11yEnum.AAA] - (Opcional) Nível de acessibilidade dos componentes podendo ser * AA ou AAA. Por padrão a acessibilidade é AAA. */ setCurrentThemeA11y(a11y?: PoThemeA11yEnum): void; resetBaseTheme(): void; private setDefaultBaseStyle; }