@po-ui/ng-components 21.17.0 → 21.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{po-ui-ng-components-po-chart-modal-table.component-BkH0bb8j.mjs → po-ui-ng-components-po-chart-modal-table.component-ZnSFYVDt.mjs} +4 -4
- package/fesm2022/{po-ui-ng-components-po-chart-modal-table.component-BkH0bb8j.mjs.map → po-ui-ng-components-po-chart-modal-table.component-ZnSFYVDt.mjs.map} +1 -1
- package/fesm2022/po-ui-ng-components.mjs +18094 -14914
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-calendar/po-calendar-base.component.d.ts +54 -44
- package/lib/components/po-calendar/po-calendar-mode.enum.d.ts +2 -1
- package/lib/components/po-calendar/po-calendar.component.d.ts +7 -2
- package/lib/components/po-calendar/services/po-calendar.service.d.ts +1 -0
- package/lib/components/po-dynamic/po-dynamic-form/interfaces/po-dynamic-form-field.interface.d.ts +28 -8
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields-base.component.d.ts +7 -0
- package/lib/components/po-field/index.d.ts +2 -0
- package/lib/components/po-field/po-datetimepicker/po-datetimepicker-base.component.d.ts +509 -0
- package/lib/components/po-field/po-datetimepicker/po-datetimepicker.component.d.ts +130 -0
- package/lib/components/po-field/po-datetimepicker/po-datetimepicker.literals.d.ts +42 -0
- package/lib/components/po-field/po-datetimepicker/po-datetimepicker.module.d.ts +7 -0
- package/lib/components/po-field/po-field.module.d.ts +1 -1
- package/lib/components/po-table/po-table.component.d.ts +35 -4
- package/lib/components/po-timer/po-timer.component.d.ts +2 -2
- package/lib/services/index.d.ts +1 -0
- package/lib/services/po-theme/helpers/types/po-theme-dark-defaults-AA.constant.d.ts +1 -0
- package/lib/services/po-theme/helpers/types/po-theme-dark-defaults.constant.d.ts +1 -0
- package/lib/services/po-user-guide/enums/index.d.ts +2 -0
- package/lib/services/po-user-guide/enums/po-user-guide-alignment.enum.d.ts +18 -0
- package/lib/services/po-user-guide/enums/po-user-guide-position.enum.d.ts +24 -0
- package/lib/services/po-user-guide/index.d.ts +6 -0
- package/lib/services/po-user-guide/interfaces/index.d.ts +6 -0
- package/lib/services/po-user-guide/interfaces/po-user-guide-end-event.interface.d.ts +46 -0
- package/lib/services/po-user-guide/interfaces/po-user-guide-literals.interface.d.ts +19 -0
- package/lib/services/po-user-guide/interfaces/po-user-guide-options.interface.d.ts +195 -0
- package/lib/services/po-user-guide/interfaces/po-user-guide-start-event.interface.d.ts +39 -0
- package/lib/services/po-user-guide/interfaces/po-user-guide-step-change-event.interface.d.ts +54 -0
- package/lib/services/po-user-guide/interfaces/po-user-guide-step.interface.d.ts +173 -0
- package/lib/services/po-user-guide/po-user-guide-base.service.d.ts +365 -0
- package/lib/services/po-user-guide/po-user-guide-scroll-lock.d.ts +55 -0
- package/lib/services/po-user-guide/po-user-guide.literals.d.ts +7 -0
- package/lib/services/po-user-guide/po-user-guide.module.d.ts +2 -0
- package/lib/services/po-user-guide/po-user-guide.service.d.ts +174 -0
- package/package.json +5 -4
- package/po-ui-ng-components-21.18.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v18/index.js +2 -2
- package/schematics/ng-update/v19/index.js +2 -2
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v20/index.js +2 -2
- package/schematics/ng-update/v21/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/types/po-ui-ng-components.d.ts +17342 -15504
- package/po-ui-ng-components-21.17.0.tgz +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { PoUserGuideAlignment } from '../enums/po-user-guide-alignment.enum';
|
|
2
|
+
import { PoUserGuidePosition } from '../enums/po-user-guide-position.enum';
|
|
3
|
+
/**
|
|
4
|
+
* @usedBy PoUserGuideService
|
|
5
|
+
*
|
|
6
|
+
* @description
|
|
7
|
+
*
|
|
8
|
+
* Interface que descreve um passo individual do tour guiado executado pelo `PoUserGuideService`.
|
|
9
|
+
*
|
|
10
|
+
* Cada passo representa uma parada do tour, com um elemento opcional a ser destacado na página,
|
|
11
|
+
* conteúdo textual ou em HTML, configurações de posicionamento do popover, *labels* específicos
|
|
12
|
+
* dos botões de navegação e *hooks* de ciclo de vida do passo.
|
|
13
|
+
*
|
|
14
|
+
* > A propriedade `content` é a única obrigatória e corresponde ao corpo do popover apresentado ao usuário.
|
|
15
|
+
*/
|
|
16
|
+
export interface PoUserGuideStep {
|
|
17
|
+
/**
|
|
18
|
+
* @optional
|
|
19
|
+
*
|
|
20
|
+
* @description
|
|
21
|
+
*
|
|
22
|
+
* Elemento da página que o passo deve destacar.
|
|
23
|
+
*
|
|
24
|
+
* Aceita um seletor CSS válido (`'#id'`, `'.class'`, `'tag'`, `'.container > .item'`) ou uma referência direta a um `HTMLElement`
|
|
25
|
+
* (por exemplo, obtida via `@ViewChild` ou `ElementRef.nativeElement`).
|
|
26
|
+
*
|
|
27
|
+
* > **Recomendação:** ao destacar componentes do PO UI, prefira selecionar pela *tag* do componente
|
|
28
|
+
* > (por exemplo, `'po-button'`) em vez de classes internas (como `'.po-button'`). As classes internas
|
|
29
|
+
* > são detalhes de implementação e podem ser alteradas ou removidas entre versões, quebrando o tour.
|
|
30
|
+
*
|
|
31
|
+
* Quando a propriedade é omitida, o popover é exibido como um modal centralizado na viewport, sem destacar
|
|
32
|
+
* nenhum elemento da página.
|
|
33
|
+
*/
|
|
34
|
+
element?: string | HTMLElement;
|
|
35
|
+
/**
|
|
36
|
+
* @optional
|
|
37
|
+
*
|
|
38
|
+
* @description
|
|
39
|
+
*
|
|
40
|
+
* Título exibido no cabeçalho do popover do passo.
|
|
41
|
+
*
|
|
42
|
+
* Quando omitido, o popover é renderizado apenas com o conteúdo definido em `content`.
|
|
43
|
+
*/
|
|
44
|
+
title?: string;
|
|
45
|
+
/**
|
|
46
|
+
* @description
|
|
47
|
+
*
|
|
48
|
+
* Conteúdo principal do passo, exibido no corpo do popover. Aceita texto puro ou HTML.
|
|
49
|
+
*
|
|
50
|
+
* > **Aviso de segurança:** por padrão, o PO UI sanitiza o conteúdo HTML recebido antes de repassá-lo
|
|
51
|
+
* > ao popover do tour, reduzindo o risco de vulnerabilidades de *Cross-Site Scripting* (XSS).
|
|
52
|
+
* >
|
|
53
|
+
* > Mesmo com essa proteção, recomenda-se que aplicações consumidoras evitem enviar conteúdo HTML
|
|
54
|
+
* > proveniente de fontes não confiáveis sem validação prévia, como entradas de usuário ou dados externos.
|
|
55
|
+
* > A sanitização realizada pelo PO UI atua como uma camada de segurança, mas não substitui boas práticas
|
|
56
|
+
* > de validação e controle dos dados na origem.
|
|
57
|
+
*/
|
|
58
|
+
content: string;
|
|
59
|
+
/**
|
|
60
|
+
* @optional
|
|
61
|
+
*
|
|
62
|
+
* @description
|
|
63
|
+
*
|
|
64
|
+
* Posição preferida do popover em relação ao elemento destacado.
|
|
65
|
+
*
|
|
66
|
+
* Valores aceitos:
|
|
67
|
+
*
|
|
68
|
+
* - `top`: o popover é renderizado acima do elemento destacado.
|
|
69
|
+
* - `right`: o popover é renderizado à direita do elemento destacado.
|
|
70
|
+
* - `bottom`: o popover é renderizado abaixo do elemento destacado.
|
|
71
|
+
* - `left`: o popover é renderizado à esquerda do elemento destacado.
|
|
72
|
+
* - `over`: o popover é renderizado sobreposto ao elemento destacado.
|
|
73
|
+
* - `auto`: a posição é calculada automaticamente conforme o espaço disponível na viewport.
|
|
74
|
+
*
|
|
75
|
+
* @default auto`
|
|
76
|
+
*/
|
|
77
|
+
position?: PoUserGuidePosition;
|
|
78
|
+
/**
|
|
79
|
+
* @optional
|
|
80
|
+
*
|
|
81
|
+
* @description
|
|
82
|
+
*
|
|
83
|
+
* Alinhamento do popover ao longo do eixo da posição configurada em `position`.
|
|
84
|
+
*
|
|
85
|
+
* Valores aceitos: 'start' | 'center' | 'end'
|
|
86
|
+
*
|
|
87
|
+
* @default `start`
|
|
88
|
+
*/
|
|
89
|
+
align?: PoUserGuideAlignment;
|
|
90
|
+
/**
|
|
91
|
+
* @optional
|
|
92
|
+
*
|
|
93
|
+
* @description
|
|
94
|
+
*
|
|
95
|
+
* Sobrescreve o *label* do botão "Próximo" exclusivamente para este passo.
|
|
96
|
+
*
|
|
97
|
+
* Quando omitido, é utilizado o valor configurado em `PoUserGuideOptions.nextLabel` ou o padrão do PO UI (`Próximo`).
|
|
98
|
+
*/
|
|
99
|
+
nextLabel?: string;
|
|
100
|
+
/**
|
|
101
|
+
* @optional
|
|
102
|
+
*
|
|
103
|
+
* @description
|
|
104
|
+
*
|
|
105
|
+
* Sobrescreve o *label* do botão "Anterior" exclusivamente para este passo.
|
|
106
|
+
*
|
|
107
|
+
* Quando omitido, é utilizado o valor configurado em `PoUserGuideOptions.previousLabel` ou o padrão do PO UI (`Anterior`).
|
|
108
|
+
*/
|
|
109
|
+
previousLabel?: string;
|
|
110
|
+
/**
|
|
111
|
+
* @optional
|
|
112
|
+
*
|
|
113
|
+
* @description
|
|
114
|
+
*
|
|
115
|
+
* Sobrescreve o *label* do botão "Finalizar" exclusivamente para este passo.
|
|
116
|
+
*
|
|
117
|
+
* Quando omitido, é utilizado o valor configurado em `PoUserGuideOptions.doneLabel` ou o padrão do PO UI (`Finalizar`).
|
|
118
|
+
*/
|
|
119
|
+
doneLabel?: string;
|
|
120
|
+
/**
|
|
121
|
+
* @optional
|
|
122
|
+
*
|
|
123
|
+
* @description
|
|
124
|
+
*
|
|
125
|
+
* Lista que filtra quais botões de navegação devem ser exibidos no popover deste passo.
|
|
126
|
+
*
|
|
127
|
+
* Aceita qualquer combinação dos valores `'next'`, `'previous'` e `'close'`. Apenas os botões presentes
|
|
128
|
+
* na lista são renderizados, permitindo, por exemplo, ocultar o botão "Anterior" no primeiro passo
|
|
129
|
+
* ou exibir somente o botão "Fechar" em um passo final.
|
|
130
|
+
*
|
|
131
|
+
* Quando a propriedade é omitida, todos os botões padrão (`'next'`, `'previous'` e `'close'`) são exibidos.
|
|
132
|
+
* Quando informada como array vazio, nenhum botão de navegação é exibido — o controle do tour passa a ser
|
|
133
|
+
* 100% programático via `next()`, `previous()`, `goTo()` e `close()` do `PoUserGuideService`.
|
|
134
|
+
*/
|
|
135
|
+
showButtons?: Array<'next' | 'previous' | 'close'>;
|
|
136
|
+
/**
|
|
137
|
+
* @optional
|
|
138
|
+
*
|
|
139
|
+
* @description
|
|
140
|
+
*
|
|
141
|
+
* *Hook* executado imediatamente antes de o passo ser destacado na página, sincronamente à transição.
|
|
142
|
+
*
|
|
143
|
+
* Recebe como argumentos o próprio passo (`step`) e o seu índice (`index`, com base zero) na lista de passos
|
|
144
|
+
* configurada via `PoUserGuideService.setSteps`.
|
|
145
|
+
*
|
|
146
|
+
* Útil para preparar a UI antes do destaque (por exemplo, abrir um menu lateral que contém o elemento alvo).
|
|
147
|
+
*/
|
|
148
|
+
onBeforeHighlight?: (step: PoUserGuideStep, index: number) => void;
|
|
149
|
+
/**
|
|
150
|
+
* @optional
|
|
151
|
+
*
|
|
152
|
+
* @description
|
|
153
|
+
*
|
|
154
|
+
* *Hook* executado imediatamente após o passo ser destacado na página.
|
|
155
|
+
*
|
|
156
|
+
* Recebe como argumentos o próprio passo (`step`) e o seu índice (`index`, com base zero) na lista de passos.
|
|
157
|
+
*
|
|
158
|
+
* Útil para registrar telemetria de visualização ou disparar lógica de negócio dependente da exibição do passo.
|
|
159
|
+
*/
|
|
160
|
+
onHighlighted?: (step: PoUserGuideStep, index: number) => void;
|
|
161
|
+
/**
|
|
162
|
+
* @optional
|
|
163
|
+
*
|
|
164
|
+
* @description
|
|
165
|
+
*
|
|
166
|
+
* *Hook* executado quando o passo deixa de estar ativo, seja por avanço, retrocesso ou encerramento do tour.
|
|
167
|
+
*
|
|
168
|
+
* Recebe como argumentos o próprio passo (`step`) e o seu índice (`index`, com base zero) na lista de passos.
|
|
169
|
+
*
|
|
170
|
+
* Útil para reverter alterações de UI realizadas em `onBeforeHighlight` ou `onHighlighted`.
|
|
171
|
+
*/
|
|
172
|
+
onDeselected?: (step: PoUserGuideStep, index: number) => void;
|
|
173
|
+
}
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import { Observable, Subject } from 'rxjs';
|
|
2
|
+
import { PoLanguageService } from '../../services/po-language/po-language.service';
|
|
3
|
+
import { PoUserGuideLiterals } from './interfaces/po-user-guide-literals.interface';
|
|
4
|
+
import { PoUserGuideEndEvent, PoUserGuideOptions, PoUserGuideStartEvent, PoUserGuideStep, PoUserGuideStepChangeEvent } from './interfaces';
|
|
5
|
+
/**
|
|
6
|
+
* @description
|
|
7
|
+
*
|
|
8
|
+
* Serviço responsável por criar e controlar tours guiados na interface da aplicação.
|
|
9
|
+
*
|
|
10
|
+
* O `PoUserGuideService` permite apresentar uma sequência de passos visuais para orientar
|
|
11
|
+
* o usuário durante o uso de uma tela, funcionalidade ou fluxo específico do sistema.
|
|
12
|
+
* Ele pode ser utilizado, por exemplo, para apresentar uma nova funcionalidade, guiar um
|
|
13
|
+
* primeiro acesso ou destacar pontos importantes da interface.
|
|
14
|
+
*
|
|
15
|
+
* O serviço centraliza a configuração do guia do usuário, incluindo:
|
|
16
|
+
*
|
|
17
|
+
* - os passos que serão exibidos;
|
|
18
|
+
* - as opções gerais de comportamento;
|
|
19
|
+
* - o controle do passo ativo;
|
|
20
|
+
* - os eventos emitidos durante o ciclo de vida do tour.
|
|
21
|
+
*
|
|
22
|
+
* A partir dele, a aplicação pode iniciar, acompanhar e reagir à execução do tour por meio
|
|
23
|
+
* dos eventos públicos `tourStart$`, `stepChange$` e `tourEnd$`.
|
|
24
|
+
*
|
|
25
|
+
* Como o serviço é disponibilizado com `providedIn: 'root'`, não é necessário declará-lo em
|
|
26
|
+
* `providers` nem importá-lo manualmente em módulos específicos.
|
|
27
|
+
* Ele pode ser injetado diretamente em qualquer componente, serviço ou diretiva da aplicação.
|
|
28
|
+
*
|
|
29
|
+
* #### Uso típico
|
|
30
|
+
*
|
|
31
|
+
* O fluxo recomendado de utilização do serviço, que pode ser encadeado fluentemente, configura os
|
|
32
|
+
* passos do tour, ajusta opções globais e dispara a execução em uma única expressão:
|
|
33
|
+
*
|
|
34
|
+
* ```typescript
|
|
35
|
+
* import { Component } from '@angular/core';
|
|
36
|
+
* import { PoUserGuideService } from '@po-ui/ng-components';
|
|
37
|
+
*
|
|
38
|
+
* @Component({ selector: 'app-onboarding', templateUrl: './onboarding.component.html' })
|
|
39
|
+
* export class OnboardingComponent {
|
|
40
|
+
* constructor(private PoUserGuide: PoUserGuideService) {}
|
|
41
|
+
*
|
|
42
|
+
* startTour(): void {
|
|
43
|
+
* this.PoUserGuide
|
|
44
|
+
* .setSteps([
|
|
45
|
+
* { element: '#header', title: 'Bem-vindo!', content: 'Esta é a barra superior.' },
|
|
46
|
+
* { element: '<po-menu>', title: 'Menu', content: 'Acesse aqui as funcionalidades do sistema.' },
|
|
47
|
+
* { element: '#user-profile', title: 'Perfil', content: 'Configure suas preferências.' }
|
|
48
|
+
* ])
|
|
49
|
+
* .setOptions({ showProgress: true, allowClose: true })
|
|
50
|
+
* .start();
|
|
51
|
+
* }
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* #### Boas práticas para seleção de elementos
|
|
56
|
+
*
|
|
57
|
+
* Ao configurar o elemento que será destacado em cada passo do tour, recomenda-se evitar
|
|
58
|
+
* seletores baseados em classes internas, estruturas de HTML ou elementos muito genéricos,
|
|
59
|
+
* como `.minha-classe`, `div`, `span` ou combinações dependentes da hierarquia da página.
|
|
60
|
+
*
|
|
61
|
+
* Esses seletores podem ser sensíveis a mudanças de implementação, refatorações visuais ou
|
|
62
|
+
* alterações nos nomes de classes, o que pode fazer com que o passo deixe de encontrar o
|
|
63
|
+
* elemento esperado.
|
|
64
|
+
*
|
|
65
|
+
* Quando o passo destacar um componente do PO-UI, prefira utilizar o próprio seletor do
|
|
66
|
+
* componente, como: `po-button`, `po-input`, `po-combo` ou `po-table`, sempre que isso for
|
|
67
|
+
* suficiente para identificar o elemento corretamente.
|
|
68
|
+
*
|
|
69
|
+
* Quando houver mais de um componente igual na tela ou quando for necessário apontar para
|
|
70
|
+
* um elemento específico, recomenda-se adicionar um `id` no elemento alvo ou encapsular a
|
|
71
|
+
* área desejada em um elemento próprio da aplicação.
|
|
72
|
+
*
|
|
73
|
+
* #### Aviso de segurança: HTML em `step.content`
|
|
74
|
+
*
|
|
75
|
+
* O PO UI sanitiza o conteúdo HTML informado em `step.content` antes de exibi-lo no
|
|
76
|
+
* *popover* do tour, ajudando a prevenir vulnerabilidades de *Cross-Site Scripting* (XSS).
|
|
77
|
+
*
|
|
78
|
+
* A mesma proteção é aplicada aos *labels* definidos em `PoUserGuideStep` e
|
|
79
|
+
* `PoUserGuideOptions` quando construídos dinamicamente.
|
|
80
|
+
*
|
|
81
|
+
* Ainda assim, recomenda-se validar conteúdos vindos de fontes não confiáveis, como entrada
|
|
82
|
+
* do usuário, APIs externas ou *query strings*, preservando a segurança desde a origem dos dados.
|
|
83
|
+
*
|
|
84
|
+
* #### Tokens customizáveis
|
|
85
|
+
*
|
|
86
|
+
* É possível alterar a aparência do *popover* renderizado pelo `PoUserGuideService` através dos tokens
|
|
87
|
+
* (CSS) consumidos pelo arquivo `po-user-guide.css` distribuído via `@po-ui/style`.
|
|
88
|
+
*
|
|
89
|
+
* > Para maiores informações, acesse o guia [Personalizando o Tema Padrão com Tokens CSS](https://po-ui.io/guides/theme-customization).
|
|
90
|
+
*
|
|
91
|
+
* | Propriedade | Descrição | Valor Padrão |
|
|
92
|
+
* |--------------------------------------------------|--------------------------------------------------------------------------|--------------------------------------------------------|
|
|
93
|
+
* | **Overlay** | | |
|
|
94
|
+
* | `--color-po-user-guide-overlay` | Cor do *overlay* que escurece a página durante o tour | `var(--color-neutral-dark-80)` |
|
|
95
|
+
* | **Popover** | | |
|
|
96
|
+
* | `--font-family` | Família tipográfica usada no *popover* | `var(--font-family-theme)` |
|
|
97
|
+
* | `--color` | Cor padrão do texto do *popover* | `var(--color-neutral-dark-70)` |
|
|
98
|
+
* | `--background-color` | Cor de fundo do *popover* | `var(--color-neutral-light-00)` |
|
|
99
|
+
* | `--border-color` | Cor da borda do *popover* | `var(--color-neutral-light-20)` |
|
|
100
|
+
* | `--border-width` | Espessura da borda do *popover* | `var(--border-width-sm)` |
|
|
101
|
+
* | `--border-radius` | Raio dos cantos do *popover* | `var(--border-radius-md)` |
|
|
102
|
+
* | `--shadow` | Sombra projetada pelo *popover* | `var(--shadow-lg)` |
|
|
103
|
+
* | `--padding` | Espaçamento interno do *popover* | `var(--spacing-sm)` |
|
|
104
|
+
* | `--max-width` | Largura máxima do *popover* | `360px` |
|
|
105
|
+
* | `--arrow-color` | Cor da seta que aponta para o elemento destacado | `var(--color-neutral-light-00)` |
|
|
106
|
+
* | **Título** | | |
|
|
107
|
+
* | `--title-font-size` | Tamanho da fonte do título | `var(--font-size-default)` |
|
|
108
|
+
* | `--title-font-weight` | Peso da fonte do título | `var(--font-weight-bold)` |
|
|
109
|
+
* | `--title-line-height` | Altura de linha do título | `var(--line-height-sm)` |
|
|
110
|
+
* | `--title-color` | Cor do texto do título | `var(--color-neutral-dark-95)` |
|
|
111
|
+
* | `--title-margin-bottom` | Espaçamento inferior do título | `var(--spacing-xs)` |
|
|
112
|
+
* | **Descrição** | | |
|
|
113
|
+
* | `--description-font-size` | Tamanho da fonte da descrição | `var(--font-size-sm)` |
|
|
114
|
+
* | `--description-font-weight` | Peso da fonte da descrição | `var(--font-weight-normal)` |
|
|
115
|
+
* | `--description-line-height` | Altura de linha da descrição | `var(--line-height-md)` |
|
|
116
|
+
* | `--description-color` | Cor do texto da descrição | `var(--color-neutral-dark-70)` |
|
|
117
|
+
* | `--description-margin-bottom` | Espaçamento inferior da descrição | `var(--spacing-xs)` |
|
|
118
|
+
* | **Progresso** | | |
|
|
119
|
+
* | `--progress-font-size` | Tamanho da fonte do indicador de progresso | `var(--font-size-xs)` |
|
|
120
|
+
* | `--progress-font-weight` | Peso da fonte do indicador de progresso | `var(--font-weight-normal)` |
|
|
121
|
+
* | `--progress-line-height` | Altura de linha do indicador de progresso | `var(--line-height-sm)` |
|
|
122
|
+
* | `--progress-color` | Cor do texto do indicador de progresso | `var(--color-neutral-mid-60)` |
|
|
123
|
+
* | **Rodapé** | | |
|
|
124
|
+
* | `--footer-margin-top` | Espaçamento superior do rodapé | `var(--spacing-xs)` |
|
|
125
|
+
* | `--footer-gap` | Espaçamento entre os botões de navegação | `var(--spacing-xxs)` |
|
|
126
|
+
* | `--footer-gap-tertiary` | Espaçamento adicional aplicado ao botão terciário | `var(--spacing-sm)` |
|
|
127
|
+
* | **Botões - base** | | |
|
|
128
|
+
* | `--button-font-weight` | Peso da fonte dos botões | `var(--font-weight-bold)` |
|
|
129
|
+
* | `--button-font-size` | Tamanho da fonte dos botões | `var(--font-size-sm)` |
|
|
130
|
+
* | `--button-line-height` | Altura de linha dos botões | `var(--line-height-none)` |
|
|
131
|
+
* | `--button-border-width` | Espessura da borda dos botões | `var(--border-width-md)` |
|
|
132
|
+
* | `--button-border-radius` | Raio dos cantos dos botões | `var(--border-radius-md)` |
|
|
133
|
+
* | `--button-padding` | Espaçamento interno dos botões | `var(--spacing-xs) var(--spacing-sm)` |
|
|
134
|
+
* | **Botão primário (`Próximo` / `Finalizar`)** | | |
|
|
135
|
+
* | `--button-primary-text-color` | Cor do texto do botão primário | `var(--color-neutral-light-00)` |
|
|
136
|
+
* | `--button-primary-color` | Cor de fundo do botão primário | `var(--color-action-default)` |
|
|
137
|
+
* | `--button-primary-color-hover` | Cor de fundo do botão primário no estado *hover* | `var(--color-action-hover)` |
|
|
138
|
+
* | `--button-primary-color-pressed` | Cor de fundo do botão primário no estado *pressed* | `var(--color-action-pressed)` |
|
|
139
|
+
* | `--button-primary-border-color` | Cor da borda do botão primário | `var(--color-action-default)` |
|
|
140
|
+
* | `--button-primary-shadow` | Sombra do botão primário | `var(--shadow-none)` |
|
|
141
|
+
* | `--button-primary-text-color-disabled` | Cor do texto do botão primário desabilitado | `var(--color-neutral-dark-70)` |
|
|
142
|
+
* | `--button-primary-color-disabled` | Cor de fundo do botão primário desabilitado | `var(--color-neutral-light-30)` |
|
|
143
|
+
* | `--button-primary-border-color-disabled` | Cor da borda do botão primário desabilitado | `var(--color-transparent)` |
|
|
144
|
+
* | **Botão terciário (`Anterior`)** | | |
|
|
145
|
+
* | `--button-tertiary-color` | Cor do texto do botão terciário | `var(--color-action-default)` |
|
|
146
|
+
* | `--button-tertiary-color-hover` | Cor do texto do botão terciário no estado *hover* | `var(--color-brand-01-darkest)` |
|
|
147
|
+
* | `--button-tertiary-color-pressed` | Cor do texto do botão terciário no estado *pressed* | `var(--color-brand-01-darker)` |
|
|
148
|
+
* | `--button-tertiary-background-color` | Cor de fundo do botão terciário | `var(--color-transparent)` |
|
|
149
|
+
* | `--button-tertiary-background-hover` | Cor de fundo do botão terciário no estado *hover* | `var(--color-brand-01-lighter)` |
|
|
150
|
+
* | `--button-tertiary-background-pressed` | Cor de fundo do botão terciário no estado *pressed* | `var(--color-brand-01-light)` |
|
|
151
|
+
* | `--button-tertiary-border-color` | Cor da borda do botão terciário | `var(--color-transparent)` |
|
|
152
|
+
* | `--button-tertiary-border-color-hover` | Cor da borda do botão terciário no estado *hover* | `var(--color-transparent)` |
|
|
153
|
+
* | `--button-tertiary-border-color-pressed` | Cor da borda do botão terciário no estado *pressed* | `var(--color-transparent)` |
|
|
154
|
+
* | `--button-tertiary-shadow` | Sombra do botão terciário | `var(--shadow-none)` |
|
|
155
|
+
* | `--button-tertiary-color-disabled` | Cor do texto do botão terciário desabilitado | `var(--color-neutral-light-30)` |
|
|
156
|
+
* | `--button-tertiary-background-disabled` | Cor de fundo do botão terciário desabilitado | `var(--color-transparent)` |
|
|
157
|
+
* | `--button-tertiary-border-color-disabled` | Cor da borda do botão terciário desabilitado | `var(--color-transparent)` |
|
|
158
|
+
* | **Botão fechar (`X`)** | | |
|
|
159
|
+
* | `--button-close-color` | Cor do botão fechar | `var(--color-neutral-mid-60)` |
|
|
160
|
+
* | `--button-close-color-hover` | Cor do botão fechar no estado *hover* | `var(--color-action-hover)` |
|
|
161
|
+
* | `--button-close-color-pressed` | Cor do botão fechar no estado *pressed* | `var(--color-action-pressed)` |
|
|
162
|
+
* | `--button-close-color-focused` | Cor do botão fechar no estado de foco visível | `var(--color-action-focus)` |
|
|
163
|
+
* | `--button-close-background-color` | Cor de fundo do botão fechar | `var(--color-transparent)` |
|
|
164
|
+
* | `--button-close-background-hover` | Cor de fundo do botão fechar no estado *hover* | `var(--color-neutral-light-10)` |
|
|
165
|
+
* | `--button-close-background-pressed` | Cor de fundo do botão fechar no estado *pressed* | `var(--color-neutral-light-20)` |
|
|
166
|
+
* | `--button-close-border-color` | Cor da borda do botão fechar | `var(--color-transparent)` |
|
|
167
|
+
* | `--button-close-font-size` | Tamanho da fonte/ícone do botão fechar | `var(--font-size-md)` |
|
|
168
|
+
* | `--button-close-padding` | Espaçamento interno do botão fechar | `var(--spacing-xxs) var(--spacing-xs)` |
|
|
169
|
+
* | `--button-close-color-disabled` | Cor do botão fechar desabilitado | `var(--color-neutral-light-30)` |
|
|
170
|
+
* | `--button-close-background-disabled` | Cor de fundo do botão fechar desabilitado | `var(--color-transparent)` |
|
|
171
|
+
* | `--button-close-border-color-disabled` | Cor da borda do botão fechar desabilitado | `var(--color-transparent)` |
|
|
172
|
+
* | **Foco visível** | | |
|
|
173
|
+
* | `--outline-color-focused` | Cor do *outline* aplicado aos botões em foco visível | `var(--color-action-focus)` |
|
|
174
|
+
*/
|
|
175
|
+
export declare abstract class PoUserGuideBaseService {
|
|
176
|
+
private _literals;
|
|
177
|
+
private readonly language;
|
|
178
|
+
protected get defaultOptions(): PoUserGuideOptions;
|
|
179
|
+
/**
|
|
180
|
+
* @optional
|
|
181
|
+
*
|
|
182
|
+
* @description
|
|
183
|
+
*
|
|
184
|
+
* Objeto com as literais usadas no `po-user-guide`.
|
|
185
|
+
*
|
|
186
|
+
* Existem duas maneiras de customizar o serviço, passando um objeto com todas as literais disponíveis:
|
|
187
|
+
*
|
|
188
|
+
* ```
|
|
189
|
+
* const customLiterals: PoUserGuideLiterals = {
|
|
190
|
+
* next: 'Próximo',
|
|
191
|
+
* previous: 'Anterior',
|
|
192
|
+
* done: 'Finalizar',
|
|
193
|
+
* close: 'Fechar'
|
|
194
|
+
* };
|
|
195
|
+
* ```
|
|
196
|
+
*
|
|
197
|
+
* Ou passando apenas as literais que deseja customizar:
|
|
198
|
+
*
|
|
199
|
+
* ```
|
|
200
|
+
* const customLiterals: PoUserGuideLiterals = {
|
|
201
|
+
* next: 'Avançar'
|
|
202
|
+
* };
|
|
203
|
+
* ```
|
|
204
|
+
*
|
|
205
|
+
* E para carregar as literais customizadas, basta passá-las ao método `setOptions`:
|
|
206
|
+
*
|
|
207
|
+
* ```
|
|
208
|
+
* this.poUserGuide.setOptions({ literals: customLiterals }).start();
|
|
209
|
+
* ```
|
|
210
|
+
*
|
|
211
|
+
* > O objeto padrão de literais será traduzido de acordo com o idioma do
|
|
212
|
+
* [`PoI18nService`](/documentation/po-i18n) ou do browser.
|
|
213
|
+
*/
|
|
214
|
+
get literals(): PoUserGuideLiterals;
|
|
215
|
+
set literals(value: PoUserGuideLiterals);
|
|
216
|
+
/**
|
|
217
|
+
* @docsPrivate
|
|
218
|
+
*
|
|
219
|
+
* Lista de passos do tour configurada pela aplicação consumidora através do método `setSteps`.
|
|
220
|
+
* É reinicializada como um array vazio enquanto nenhum passo é configurado.
|
|
221
|
+
*/
|
|
222
|
+
protected steps: Array<PoUserGuideStep>;
|
|
223
|
+
/**
|
|
224
|
+
* @docsPrivate
|
|
225
|
+
*
|
|
226
|
+
* Opções globais do tour configuradas pela aplicação consumidora através do método `setOptions`.
|
|
227
|
+
*/
|
|
228
|
+
protected options: PoUserGuideOptions;
|
|
229
|
+
/**
|
|
230
|
+
* @docsPrivate
|
|
231
|
+
*
|
|
232
|
+
* Índice, com base zero, do passo ativo durante a execução do tour.
|
|
233
|
+
*
|
|
234
|
+
* Permanece em `-1` enquanto não houver tour em andamento, sinalizando ausência de execução para os
|
|
235
|
+
* métodos de consulta de estado expostos pela classe PoUserGuideService.
|
|
236
|
+
*/
|
|
237
|
+
protected currentIndex: number;
|
|
238
|
+
/**
|
|
239
|
+
* @docsPrivate
|
|
240
|
+
*
|
|
241
|
+
* `Subject` interno utilizado pela classe PoUserGuideService para emitir o evento de início do tour.
|
|
242
|
+
*
|
|
243
|
+
* É exposto publicamente apenas como `Observable` somente leitura através da propriedade `tourStart$`.
|
|
244
|
+
*/
|
|
245
|
+
protected readonly _tourStart: Subject<PoUserGuideStartEvent>;
|
|
246
|
+
/**
|
|
247
|
+
* @docsPrivate
|
|
248
|
+
*
|
|
249
|
+
* `Subject` interno utilizado pela classe PoUserGuideService para emitir o evento de encerramento do tour.
|
|
250
|
+
*
|
|
251
|
+
* É exposto publicamente apenas como `Observable` somente leitura através da propriedade `tourEnd$`.
|
|
252
|
+
*/
|
|
253
|
+
protected readonly _tourEnd: Subject<PoUserGuideEndEvent>;
|
|
254
|
+
/**
|
|
255
|
+
* @docsPrivate
|
|
256
|
+
*
|
|
257
|
+
* `Subject` interno utilizado pela classe PoUserGuideService para emitir os eventos de mudança de passo
|
|
258
|
+
* durante a execução do tour.
|
|
259
|
+
*
|
|
260
|
+
* É exposto publicamente apenas como `Observable` somente leitura através da propriedade `stepChange$`.
|
|
261
|
+
*/
|
|
262
|
+
protected readonly _stepChange: Subject<PoUserGuideStepChangeEvent>;
|
|
263
|
+
/**
|
|
264
|
+
* `Observable` que emite um `PoUserGuideEvent` no início de cada execução do tour.
|
|
265
|
+
*
|
|
266
|
+
* É emitido exatamente uma vez por execução, imediatamente após a configuração da instância do tour
|
|
267
|
+
* e antes da primeira emissão de `stepChange$`. As aplicações consumidoras podem assinar este
|
|
268
|
+
* `Observable` para registrar telemetria do início do tour, exibir mensagens contextuais ou disparar
|
|
269
|
+
* lógica de negócio dependente do início da jornada do usuário.
|
|
270
|
+
*/
|
|
271
|
+
readonly tourStart$: Observable<PoUserGuideStartEvent>;
|
|
272
|
+
/**
|
|
273
|
+
* `Observable` que emite um `PoUserGuideEndEvent` no encerramento de cada execução do tour.
|
|
274
|
+
*
|
|
275
|
+
* É emitido exatamente uma vez por execução, sempre após a última emissão de `stepChange$` e após a
|
|
276
|
+
* limpeza do estado interno do serviço. As aplicações consumidoras podem assinar este `Observable`
|
|
277
|
+
* para registrar telemetria de conclusão ou de abandono do tour, executar limpezas de UI ou disparar
|
|
278
|
+
* lógica de negócio dependente do encerramento da jornada do usuário.
|
|
279
|
+
*/
|
|
280
|
+
readonly tourEnd$: Observable<PoUserGuideEndEvent>;
|
|
281
|
+
/**
|
|
282
|
+
* `Observable` que emite um `PoUserGuideStepChangeEvent` a cada mudança de passo durante a execução do tour.
|
|
283
|
+
*
|
|
284
|
+
* As aplicações consumidoras podem assinar este `Observable` para reagir à navegação do usuário,
|
|
285
|
+
* atualizar a UI conforme o passo ativo, registrar telemetria de progresso ou disparar lógica de
|
|
286
|
+
* negócio contextual ao passo corrente.
|
|
287
|
+
*/
|
|
288
|
+
readonly stepChange$: Observable<PoUserGuideStepChangeEvent>;
|
|
289
|
+
constructor(languageService: PoLanguageService);
|
|
290
|
+
protected validateSteps(steps: Array<PoUserGuideStep>): void;
|
|
291
|
+
protected resolveOptions(options?: PoUserGuideOptions): PoUserGuideOptions;
|
|
292
|
+
/**
|
|
293
|
+
* @description
|
|
294
|
+
*
|
|
295
|
+
* Inicia a execução do tour previamente configurado por meio dos métodos `setSteps` e, opcionalmente,
|
|
296
|
+
* `setOptions`.
|
|
297
|
+
*
|
|
298
|
+
* Quando invocado sem argumentos, o tour é iniciado a partir do primeiro passo (`startIndex = 0`).
|
|
299
|
+
* Caso um valor seja informado, a execução começa diretamente no passo correspondente. O método
|
|
300
|
+
* exibe a camada de *overlay* sobre a aplicação, renderiza o *popover* destacando o elemento do passo
|
|
301
|
+
* inicial e emite uma única notificação em `tourStart$` antes da primeira emissão em `stepChange$`.
|
|
302
|
+
*
|
|
303
|
+
* Quando invocado com um tour já em execução, a implementação concreta encerra o tour atual
|
|
304
|
+
* (equivalente a `close()` com `reason: 'closed'`) antes de iniciar o novo tour, preservando a
|
|
305
|
+
* propriedade de reentrância documentada no design do serviço.
|
|
306
|
+
*
|
|
307
|
+
* @param {number} [startIndex=0] Índice, com base zero, do passo a partir do qual o tour deve iniciar.
|
|
308
|
+
* Deve estar contido no intervalo `[0, steps.length - 1]`.
|
|
309
|
+
*
|
|
310
|
+
* @throws {Error} Quando a lista de passos ainda não foi configurada ou está vazia.
|
|
311
|
+
* @throws {Error} Quando `startIndex` está fora do intervalo `[0, steps.length - 1]`.
|
|
312
|
+
*
|
|
313
|
+
* @returns {Promise<void>} `Promise` que é resolvida quando o tour é iniciado com sucesso e
|
|
314
|
+
* rejeitada com um `Error` de mensagem padronizada quando ocorre falha na carga da dependência
|
|
315
|
+
* `driver.js` ou na inicialização do tour. As aplicações consumidoras podem encadear `.catch` ou
|
|
316
|
+
* utilizar `await` em um bloco `try/catch` para reagir a essas falhas.
|
|
317
|
+
*/
|
|
318
|
+
abstract start(startIndex?: number): Promise<void>;
|
|
319
|
+
/**
|
|
320
|
+
* @description
|
|
321
|
+
*
|
|
322
|
+
* Encerra o tour em execução, removendo a camada de *overlay* e o *popover* do DOM e zerando o estado
|
|
323
|
+
* interno do serviço.
|
|
324
|
+
*
|
|
325
|
+
* O método emite uma única notificação em `tourEnd$` com `reason: 'closed'` e atualiza
|
|
326
|
+
* `getCurrentIndex()` para `-1`, fazendo `isActive()` retornar `false` em chamadas subsequentes.
|
|
327
|
+
*
|
|
328
|
+
*/
|
|
329
|
+
abstract close(): void;
|
|
330
|
+
/**
|
|
331
|
+
* @description
|
|
332
|
+
*
|
|
333
|
+
* Avança o tour em execução para o próximo passo, atualizando o estado interno e emitindo uma
|
|
334
|
+
* notificação em `stepChange$` com `direction: 'next'` para o passo recém-ativado.
|
|
335
|
+
*
|
|
336
|
+
* Quando o passo ativo é o último da lista (`currentIndex === steps.length - 1`), o método encerra o
|
|
337
|
+
* tour com `reason: 'completed'` e emite `tourEnd$`, sinalizando que o usuário concluiu integralmente
|
|
338
|
+
* a jornada configurada.
|
|
339
|
+
*
|
|
340
|
+
*/
|
|
341
|
+
abstract next(): void;
|
|
342
|
+
/**
|
|
343
|
+
* @description
|
|
344
|
+
*
|
|
345
|
+
* Retrocede o tour em execução para o passo anterior, atualizando o estado interno e emitindo uma
|
|
346
|
+
* notificação em `stepChange$` com `direction: 'previous'` para o passo recém-ativado.
|
|
347
|
+
*
|
|
348
|
+
*/
|
|
349
|
+
abstract previous(): void;
|
|
350
|
+
/**
|
|
351
|
+
* @description
|
|
352
|
+
*
|
|
353
|
+
* Navega o tour diretamente para o passo localizado em `index`, sem percorrer os passos intermediários.
|
|
354
|
+
*
|
|
355
|
+
* Quando há tour em execução, o método atualiza o estado interno e emite uma notificação em
|
|
356
|
+
* `stepChange$` com `direction: 'goto'` para o passo recém-ativado. Quando não há tour em execução, o
|
|
357
|
+
* método inicia o tour a partir do índice informado, seguindo o mesmo fluxo de `start(index)`.
|
|
358
|
+
*
|
|
359
|
+
* @param {number} index Índice, com base zero, do passo de destino. Deve estar contido no intervalo
|
|
360
|
+
* `[0, steps.length - 1]`.
|
|
361
|
+
*
|
|
362
|
+
* @throws {Error} Quando `index` está fora do intervalo `[0, steps.length - 1]`.
|
|
363
|
+
*/
|
|
364
|
+
abstract goTo(index: number): void;
|
|
365
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export interface ScrollLockSnapshot {
|
|
2
|
+
scrollX: number;
|
|
3
|
+
scrollY: number;
|
|
4
|
+
scrollbarWidth: number;
|
|
5
|
+
documentElement: {
|
|
6
|
+
overflow: string;
|
|
7
|
+
overflowX: string;
|
|
8
|
+
overflowY: string;
|
|
9
|
+
position: string;
|
|
10
|
+
top: string;
|
|
11
|
+
left: string;
|
|
12
|
+
width: string;
|
|
13
|
+
paddingRight: string;
|
|
14
|
+
};
|
|
15
|
+
body: {
|
|
16
|
+
overflow: string;
|
|
17
|
+
overflowX: string;
|
|
18
|
+
overflowY: string;
|
|
19
|
+
position: string;
|
|
20
|
+
top: string;
|
|
21
|
+
left: string;
|
|
22
|
+
width: string;
|
|
23
|
+
paddingRight: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export type ScrollLockMode = 'blocked' | 'free';
|
|
27
|
+
export declare const SCROLL_KEYS: ReadonlySet<string>;
|
|
28
|
+
export declare function resolveScrollLockMode(options?: {
|
|
29
|
+
allowScroll?: unknown;
|
|
30
|
+
} | null): ScrollLockMode;
|
|
31
|
+
/**
|
|
32
|
+
* @internal
|
|
33
|
+
*
|
|
34
|
+
* Classe interna do PoUserGuideService responsável por congelar o scroll do navegador
|
|
35
|
+
* (`document.documentElement` e `document.body`) durante o
|
|
36
|
+
* ciclo de vida de um tour conduzido pelo `driver.js` e por restaurar o estado original
|
|
37
|
+
* de forma síncrona em qualquer caminho de saída.
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
export declare class PoUserGuideScrollLock {
|
|
41
|
+
private active;
|
|
42
|
+
private snapshot;
|
|
43
|
+
private wheelListener;
|
|
44
|
+
private touchListener;
|
|
45
|
+
private keydownListener;
|
|
46
|
+
isActive(): boolean;
|
|
47
|
+
lock(): void;
|
|
48
|
+
unlock(): void;
|
|
49
|
+
private isBrowser;
|
|
50
|
+
private captureSnapshot;
|
|
51
|
+
private applyLockStyles;
|
|
52
|
+
private restoreSnapshot;
|
|
53
|
+
private isScrollKey;
|
|
54
|
+
private isWithinEditableInPopover;
|
|
55
|
+
}
|