@po-ui/ng-components 21.17.0 → 21.19.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-CzvA7U-U.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-CzvA7U-U.mjs.map} +1 -1
- package/fesm2022/po-ui-ng-components.mjs +14353 -11386
- 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-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.19.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 +17321 -15514
- package/po-ui-ng-components-21.17.0.tgz +0 -0
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
2
|
+
import { PoLanguageService } from '../../services/po-language/po-language.service';
|
|
3
|
+
import { PoUserGuideBaseService } from './po-user-guide-base.service';
|
|
4
|
+
import { PoUserGuideOptions, PoUserGuideStep } from './interfaces';
|
|
5
|
+
/**
|
|
6
|
+
* @docsExtends PoUserGuideBaseService
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
*
|
|
10
|
+
* <example name="po-user-guide-basic" title="PO User Guide Basic">
|
|
11
|
+
* <file name="sample-po-user-guide-basic/sample-po-user-guide-basic.component.html"> </file>
|
|
12
|
+
* <file name="sample-po-user-guide-basic/sample-po-user-guide-basic.component.ts"> </file>
|
|
13
|
+
* </example>
|
|
14
|
+
*
|
|
15
|
+
* <example name="po-user-guide-labs" title="PO User Guide Labs">
|
|
16
|
+
* <file name="sample-po-user-guide-labs/sample-po-user-guide-labs.component.html"> </file>
|
|
17
|
+
* <file name="sample-po-user-guide-labs/sample-po-user-guide-labs.component.ts"> </file>
|
|
18
|
+
* </example>
|
|
19
|
+
*
|
|
20
|
+
* <example name="po-user-guide-onboarding" title="PO User Guide - Onboarding">
|
|
21
|
+
* <file name="sample-po-user-guide-onboarding/sample-po-user-guide-onboarding.component.html"> </file>
|
|
22
|
+
* <file name="sample-po-user-guide-onboarding/sample-po-user-guide-onboarding.component.ts"> </file>
|
|
23
|
+
* </example>
|
|
24
|
+
*/
|
|
25
|
+
export declare class PoUserGuideService extends PoUserGuideBaseService {
|
|
26
|
+
private readonly sanitizer;
|
|
27
|
+
private driverFactoryCache;
|
|
28
|
+
private driverInstance;
|
|
29
|
+
private pendingEndReason;
|
|
30
|
+
private readonly scrollLock;
|
|
31
|
+
private activeScrollLockEnabled;
|
|
32
|
+
private static stylesInjected;
|
|
33
|
+
constructor(languageService: PoLanguageService, sanitizer: DomSanitizer);
|
|
34
|
+
private isBrowser;
|
|
35
|
+
protected importDriver(): Promise<any>;
|
|
36
|
+
private loadDriverFactory;
|
|
37
|
+
private injectStyles;
|
|
38
|
+
private sanitizeText;
|
|
39
|
+
private mapStepsToDriveSteps;
|
|
40
|
+
private handlePopoverRender;
|
|
41
|
+
private focusPopoverDescription;
|
|
42
|
+
private applyDoneButtonLabel;
|
|
43
|
+
private applyPoButtonStyles;
|
|
44
|
+
/**
|
|
45
|
+
* Substitui o `×` nativo do Driver.js pelo ícone de fechar do PO UI (`ICON_CLOSE`).
|
|
46
|
+
*
|
|
47
|
+
* O ícone é referenciado pela classe da fonte (`an an-x`) via `AnimaliaIconDictionary`,
|
|
48
|
+
* evitando duplicar o codepoint da fonte Animalia diretamente no CSS.
|
|
49
|
+
*/
|
|
50
|
+
private applyCloseButtonIcon;
|
|
51
|
+
private buildDriverConfig;
|
|
52
|
+
private handleHighlightStarted;
|
|
53
|
+
private resolveActiveIndex;
|
|
54
|
+
private resolveShowButtons;
|
|
55
|
+
private handleDestroyed;
|
|
56
|
+
private handleCloseClick;
|
|
57
|
+
/**
|
|
58
|
+
* @description
|
|
59
|
+
*
|
|
60
|
+
* Configura a lista de passos que serão exibidos durante a execução do tour guiado.
|
|
61
|
+
*
|
|
62
|
+
* @param {Array<PoUserGuideStep>} steps Lista de passos do tour a ser configurada. Deve conter ao menos um
|
|
63
|
+
* passo válido com a propriedade `content` definida.
|
|
64
|
+
*
|
|
65
|
+
* @returns {this} A própria instância do serviço, possibilitando o encadeamento fluente de chamadas.
|
|
66
|
+
*
|
|
67
|
+
* @throws {Error} Quando `steps` é `null`, `undefined`, não é um `Array`, está vazio, contém um passo
|
|
68
|
+
* inválido, contém um passo sem a propriedade `content` definida ou contém um passo cujo `element` é
|
|
69
|
+
* uma string com sintaxe de seletor CSS inválida.
|
|
70
|
+
*/
|
|
71
|
+
setSteps(steps: Array<PoUserGuideStep>): this;
|
|
72
|
+
/**
|
|
73
|
+
* @description
|
|
74
|
+
*
|
|
75
|
+
* Configura as opções globais que serão aplicadas durante a execução do tour guiado.
|
|
76
|
+
*
|
|
77
|
+
* @param {PoUserGuideOptions} [options] Objeto com as opções globais do tour a ser configurado. Quando
|
|
78
|
+
* omitido ou `undefined`, apenas os valores padrão do PO UI são aplicados.
|
|
79
|
+
*
|
|
80
|
+
* @returns {this} A própria instância do serviço, possibilitando o encadeamento fluente de chamadas.
|
|
81
|
+
*/
|
|
82
|
+
setOptions(options?: PoUserGuideOptions): this;
|
|
83
|
+
/**
|
|
84
|
+
* @description
|
|
85
|
+
*
|
|
86
|
+
* Inicia a execução do tour previamente configurado por meio de `setSteps` e, opcionalmente, `setOptions`.
|
|
87
|
+
*
|
|
88
|
+
* @override
|
|
89
|
+
*
|
|
90
|
+
* @param {number} [startIndex=0] Índice, com base zero, do passo a partir do qual o tour deve iniciar.
|
|
91
|
+
* Deve ser um inteiro contido no intervalo `[0, steps.length - 1]`.
|
|
92
|
+
*
|
|
93
|
+
* @throws {Error} Quando a lista de passos ainda não foi configurada via `setSteps` ou está vazia.
|
|
94
|
+
* @throws {Error} Quando `startIndex` não é um número inteiro contido em `[0, steps.length - 1]`.
|
|
95
|
+
*
|
|
96
|
+
* @returns {Promise<void>} `Promise` que é resolvida quando o tour é iniciado com sucesso e
|
|
97
|
+
* rejeitada com um `Error` de mensagem padronizada quando ocorre falha na carga da dependência
|
|
98
|
+
* `driver.js` ou na inicialização do tour.
|
|
99
|
+
*/
|
|
100
|
+
start(startIndex?: number): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* @description
|
|
103
|
+
*
|
|
104
|
+
* Encerra o tour em execução, disparando, em sequência, o ciclo de limpeza de estado e a emissão de
|
|
105
|
+
* `tourEnd$`.
|
|
106
|
+
*
|
|
107
|
+
* @override
|
|
108
|
+
*/
|
|
109
|
+
close(): void;
|
|
110
|
+
/**
|
|
111
|
+
* @description
|
|
112
|
+
*
|
|
113
|
+
* Encerra o tour em execução.
|
|
114
|
+
*
|
|
115
|
+
* @override
|
|
116
|
+
*/
|
|
117
|
+
exit(): void;
|
|
118
|
+
/**
|
|
119
|
+
* @description
|
|
120
|
+
*
|
|
121
|
+
* Avança o tour em execução para o próximo passo.
|
|
122
|
+
*
|
|
123
|
+
* @override
|
|
124
|
+
*/
|
|
125
|
+
next(): void;
|
|
126
|
+
/**
|
|
127
|
+
* @description
|
|
128
|
+
*
|
|
129
|
+
* Retrocede o tour em execução para o passo anterior.
|
|
130
|
+
*
|
|
131
|
+
* @override
|
|
132
|
+
*/
|
|
133
|
+
previous(): void;
|
|
134
|
+
/**
|
|
135
|
+
* @description
|
|
136
|
+
*
|
|
137
|
+
* Move o tour diretamente para o passo identificado pelo `index` informado, que deve ser um número inteiro contido em `[0, steps.length - 1]`. Se o tour ainda não estiver em execução, o método inicia o tour a partir do passo indicado por `index`.
|
|
138
|
+
*
|
|
139
|
+
* @override
|
|
140
|
+
*
|
|
141
|
+
* @param {number} index Índice, com base zero, do passo de destino. Deve ser um inteiro contido
|
|
142
|
+
* em `[0, steps.length - 1]`.
|
|
143
|
+
*
|
|
144
|
+
* @throws {Error} Quando `index` não é um número inteiro contido em `[0, steps.length - 1]`.
|
|
145
|
+
*/
|
|
146
|
+
goTo(index: number): void;
|
|
147
|
+
/**
|
|
148
|
+
* @description
|
|
149
|
+
*
|
|
150
|
+
* Indica se há um tour em execução no momento da consulta.
|
|
151
|
+
*
|
|
152
|
+
* @returns {boolean} `true` quando existe um tour em execução; `false` em qualquer outro caso (antes do primeiro `start()`,
|
|
153
|
+
* após `close()`/`exit()` ou após o encerramento natural do tour).
|
|
154
|
+
*/
|
|
155
|
+
isActive(): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* @description
|
|
158
|
+
*
|
|
159
|
+
* Retorna o `PoUserGuideStep` correspondente ao passo ativo no momento da consulta.
|
|
160
|
+
*
|
|
161
|
+
* @returns {PoUserGuideStep | null} O passo ativo, quando há um tour em execução; `null` em qualquer
|
|
162
|
+
* outro caso.
|
|
163
|
+
*/
|
|
164
|
+
getCurrentStep(): PoUserGuideStep | null;
|
|
165
|
+
/**
|
|
166
|
+
* @description
|
|
167
|
+
*
|
|
168
|
+
* Retorna o índice, com base zero, do passo ativo no momento da consulta.
|
|
169
|
+
*
|
|
170
|
+
* @returns {number} O índice, com base zero, do passo ativo, contido em `[0, steps.length - 1]`,
|
|
171
|
+
* quando há um tour em execução; `-1` em qualquer outro caso.
|
|
172
|
+
*/
|
|
173
|
+
getCurrentIndex(): number;
|
|
174
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@po-ui/ng-components",
|
|
3
|
-
"version": "21.
|
|
3
|
+
"version": "21.19.0",
|
|
4
4
|
"description": "PO UI - Components",
|
|
5
5
|
"author": "PO UI",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@angular/cdk": "~21.2.4",
|
|
25
|
-
"@po-ui/style": "21.
|
|
26
|
-
"@po-ui/ng-schematics": "21.
|
|
25
|
+
"@po-ui/style": "21.19.0",
|
|
26
|
+
"@po-ui/ng-schematics": "21.19.0",
|
|
27
|
+
"driver.js": "~1.4.0",
|
|
27
28
|
"echarts": "^5.6.0",
|
|
28
29
|
"tslib": "^2.6.2"
|
|
29
30
|
},
|
|
@@ -38,7 +39,7 @@
|
|
|
38
39
|
"@angular/platform-browser-dynamic": "^21",
|
|
39
40
|
"@angular/router": "^21",
|
|
40
41
|
"@angular-devkit/schematics": "^21",
|
|
41
|
-
"@po-ui/style": "21.
|
|
42
|
+
"@po-ui/style": "21.19.0",
|
|
42
43
|
"rxjs": "~7.8.1",
|
|
43
44
|
"zone.js": "~0.15.0"
|
|
44
45
|
},
|
|
Binary file
|
|
@@ -18,7 +18,7 @@ function default_1(options) {
|
|
|
18
18
|
}
|
|
19
19
|
function addPoPackageAndInstall() {
|
|
20
20
|
return (tree, context) => {
|
|
21
|
-
(0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-components', '21.
|
|
21
|
+
(0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-components', '21.19.0');
|
|
22
22
|
// install packages
|
|
23
23
|
context.addTask(new tasks_1.NodePackageInstallTask());
|
|
24
24
|
};
|