@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.
Files changed (54) hide show
  1. 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
  2. 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
  3. package/fesm2022/po-ui-ng-components.mjs +14353 -11386
  4. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  5. package/lib/components/po-calendar/po-calendar-base.component.d.ts +54 -44
  6. package/lib/components/po-calendar/po-calendar-mode.enum.d.ts +2 -1
  7. package/lib/components/po-calendar/po-calendar.component.d.ts +7 -2
  8. package/lib/components/po-calendar/services/po-calendar.service.d.ts +1 -0
  9. package/lib/components/po-dynamic/po-dynamic-form/interfaces/po-dynamic-form-field.interface.d.ts +28 -8
  10. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields-base.component.d.ts +7 -0
  11. package/lib/components/po-field/index.d.ts +2 -0
  12. package/lib/components/po-field/po-datetimepicker/po-datetimepicker-base.component.d.ts +509 -0
  13. package/lib/components/po-field/po-datetimepicker/po-datetimepicker.component.d.ts +130 -0
  14. package/lib/components/po-field/po-datetimepicker/po-datetimepicker.literals.d.ts +42 -0
  15. package/lib/components/po-field/po-datetimepicker/po-datetimepicker.module.d.ts +7 -0
  16. package/lib/components/po-field/po-field.module.d.ts +1 -1
  17. package/lib/components/po-timer/po-timer.component.d.ts +2 -2
  18. package/lib/services/index.d.ts +1 -0
  19. package/lib/services/po-theme/helpers/types/po-theme-dark-defaults-AA.constant.d.ts +1 -0
  20. package/lib/services/po-theme/helpers/types/po-theme-dark-defaults.constant.d.ts +1 -0
  21. package/lib/services/po-user-guide/enums/index.d.ts +2 -0
  22. package/lib/services/po-user-guide/enums/po-user-guide-alignment.enum.d.ts +18 -0
  23. package/lib/services/po-user-guide/enums/po-user-guide-position.enum.d.ts +24 -0
  24. package/lib/services/po-user-guide/index.d.ts +6 -0
  25. package/lib/services/po-user-guide/interfaces/index.d.ts +6 -0
  26. package/lib/services/po-user-guide/interfaces/po-user-guide-end-event.interface.d.ts +46 -0
  27. package/lib/services/po-user-guide/interfaces/po-user-guide-literals.interface.d.ts +19 -0
  28. package/lib/services/po-user-guide/interfaces/po-user-guide-options.interface.d.ts +195 -0
  29. package/lib/services/po-user-guide/interfaces/po-user-guide-start-event.interface.d.ts +39 -0
  30. package/lib/services/po-user-guide/interfaces/po-user-guide-step-change-event.interface.d.ts +54 -0
  31. package/lib/services/po-user-guide/interfaces/po-user-guide-step.interface.d.ts +173 -0
  32. package/lib/services/po-user-guide/po-user-guide-base.service.d.ts +365 -0
  33. package/lib/services/po-user-guide/po-user-guide-scroll-lock.d.ts +55 -0
  34. package/lib/services/po-user-guide/po-user-guide.literals.d.ts +7 -0
  35. package/lib/services/po-user-guide/po-user-guide.module.d.ts +2 -0
  36. package/lib/services/po-user-guide/po-user-guide.service.d.ts +174 -0
  37. package/package.json +5 -4
  38. package/po-ui-ng-components-21.19.0.tgz +0 -0
  39. package/schematics/ng-add/index.js +1 -1
  40. package/schematics/ng-update/v14/index.js +1 -1
  41. package/schematics/ng-update/v15/index.js +1 -1
  42. package/schematics/ng-update/v16/index.js +1 -1
  43. package/schematics/ng-update/v17/index.js +1 -1
  44. package/schematics/ng-update/v18/index.js +2 -2
  45. package/schematics/ng-update/v19/index.js +2 -2
  46. package/schematics/ng-update/v2/index.js +1 -1
  47. package/schematics/ng-update/v20/index.js +2 -2
  48. package/schematics/ng-update/v21/index.js +1 -1
  49. package/schematics/ng-update/v3/index.js +1 -1
  50. package/schematics/ng-update/v4/index.js +1 -1
  51. package/schematics/ng-update/v5/index.js +1 -1
  52. package/schematics/ng-update/v6/index.js +1 -1
  53. package/types/po-ui-ng-components.d.ts +17321 -15514
  54. 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,7 @@
1
+ import { PoUserGuideLiterals } from './interfaces/po-user-guide-literals.interface';
2
+ export declare const poUserGuideLiteralsDefault: {
3
+ en: PoUserGuideLiterals;
4
+ es: PoUserGuideLiterals;
5
+ pt: PoUserGuideLiterals;
6
+ ru: PoUserGuideLiterals;
7
+ };
@@ -0,0 +1,2 @@
1
+ export declare class PoUserGuideModule {
2
+ }
@@ -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 `&times;` 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.17.0",
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.17.0",
26
- "@po-ui/ng-schematics": "21.17.0",
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.17.0",
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.17.0');
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
  };