@schenkerjon/ng-govbr-tw 0.4.0 → 1.0.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 (63) hide show
  1. package/esm2022/lib/animations/animate.directive.mjs +239 -0
  2. package/esm2022/lib/animations/animation.service.mjs +178 -0
  3. package/esm2022/lib/animations/animation.types.mjs +34 -0
  4. package/esm2022/lib/animations/index.mjs +13 -0
  5. package/esm2022/lib/animations/success-check.component.mjs +129 -0
  6. package/esm2022/lib/components/accordion/br-accordion.component.mjs +98 -47
  7. package/esm2022/lib/components/button/br-button.component.mjs +27 -13
  8. package/esm2022/lib/components/card/br-card.component.mjs +51 -32
  9. package/esm2022/lib/components/chip/br-chip.component.mjs +141 -0
  10. package/esm2022/lib/components/divider/br-divider.component.mjs +104 -0
  11. package/esm2022/lib/components/input/br-input.component.mjs +7 -11
  12. package/esm2022/lib/components/input-cep/br-input-cep.component.mjs +296 -0
  13. package/esm2022/lib/components/input-cnpj/br-input-cnpj.component.mjs +7 -11
  14. package/esm2022/lib/components/input-cpf/br-input-cpf.component.mjs +7 -11
  15. package/esm2022/lib/components/input-money/br-input-money.component.mjs +325 -0
  16. package/esm2022/lib/components/input-telefone/br-input-telefone.component.mjs +264 -0
  17. package/esm2022/lib/components/modal/br-modal.component.mjs +35 -21
  18. package/esm2022/lib/components/notification/br-notification.component.mjs +131 -0
  19. package/esm2022/lib/components/pagination/br-pagination.component.mjs +228 -132
  20. package/esm2022/lib/components/select/br-select.component.mjs +7 -11
  21. package/esm2022/lib/components/signin/br-signin.component.mjs +169 -0
  22. package/esm2022/lib/components/skeleton/br-skeleton.component.mjs +41 -25
  23. package/esm2022/lib/components/stepper/br-stepper.component.mjs +241 -0
  24. package/esm2022/lib/components/switch/br-switch.component.mjs +157 -0
  25. package/esm2022/lib/components/table/br-table.component.mjs +1 -1
  26. package/esm2022/lib/components/textarea/br-textarea.component.mjs +7 -11
  27. package/esm2022/lib/components/timeline/br-timeline.component.mjs +123 -0
  28. package/esm2022/lib/components/tooltip/br-tooltip.component.mjs +31 -14
  29. package/esm2022/lib/components/upload/br-upload.component.mjs +7 -7
  30. package/esm2022/public-api.mjs +13 -1
  31. package/fesm2022/schenkerjon-ng-govbr-tw.mjs +3024 -322
  32. package/fesm2022/schenkerjon-ng-govbr-tw.mjs.map +1 -1
  33. package/lib/animations/animate.directive.d.ts +84 -0
  34. package/lib/animations/animation.service.d.ts +90 -0
  35. package/lib/animations/animation.types.d.ts +117 -0
  36. package/lib/animations/index.d.ts +8 -0
  37. package/lib/animations/success-check.component.d.ts +28 -0
  38. package/lib/components/accordion/br-accordion.component.d.ts +10 -2
  39. package/lib/components/button/br-button.component.d.ts +7 -1
  40. package/lib/components/card/br-card.component.d.ts +5 -1
  41. package/lib/components/chip/br-chip.component.d.ts +19 -0
  42. package/lib/components/divider/br-divider.component.d.ts +14 -0
  43. package/lib/components/input/br-input.component.d.ts +4 -4
  44. package/lib/components/input-cep/br-input-cep.component.d.ts +55 -0
  45. package/lib/components/input-cnpj/br-input-cnpj.component.d.ts +4 -4
  46. package/lib/components/input-cpf/br-input-cpf.component.d.ts +4 -4
  47. package/lib/components/input-money/br-input-money.component.d.ts +44 -0
  48. package/lib/components/input-telefone/br-input-telefone.component.d.ts +36 -0
  49. package/lib/components/modal/br-modal.component.d.ts +4 -0
  50. package/lib/components/notification/br-notification.component.d.ts +26 -0
  51. package/lib/components/pagination/br-pagination.component.d.ts +12 -1
  52. package/lib/components/select/br-select.component.d.ts +4 -4
  53. package/lib/components/signin/br-signin.component.d.ts +32 -0
  54. package/lib/components/skeleton/br-skeleton.component.d.ts +4 -1
  55. package/lib/components/stepper/br-stepper.component.d.ts +23 -0
  56. package/lib/components/switch/br-switch.component.d.ts +24 -0
  57. package/lib/components/textarea/br-textarea.component.d.ts +4 -4
  58. package/lib/components/timeline/br-timeline.component.d.ts +15 -0
  59. package/lib/components/tooltip/br-tooltip.component.d.ts +2 -0
  60. package/package.json +1 -1
  61. package/public-api.d.ts +14 -0
  62. package/src/lib/styles/govbr-components.css +91 -0
  63. package/src/lib/styles/govbr-contrast.css +252 -0
@@ -0,0 +1,239 @@
1
+ import { Directive, ElementRef, Input, Output, EventEmitter, inject, effect, } from '@angular/core';
2
+ import { BrAnimationService } from './animation.service';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Diretiva para aplicar animações a qualquer elemento
6
+ *
7
+ * @example
8
+ * <!-- Animação imediata -->
9
+ * <div brAnimate="fadeInUp">Conteúdo</div>
10
+ *
11
+ * <!-- Animação quando visível -->
12
+ * <div brAnimate="fadeInUp" brAnimateTrigger="visible">Conteúdo</div>
13
+ *
14
+ * <!-- Com configurações -->
15
+ * <div brAnimate="scaleIn" [brAnimateDuration]="300" brAnimateEasing="easeOutBack">
16
+ * Conteúdo
17
+ * </div>
18
+ *
19
+ * <!-- Stagger em lista -->
20
+ * <ul>
21
+ * <li *ngFor="let item of items; let i = index"
22
+ * brAnimate="fadeInUp"
23
+ * [brAnimateDelay]="i * 50">
24
+ * {{ item }}
25
+ * </li>
26
+ * </ul>
27
+ */
28
+ export class BrAnimateDirective {
29
+ constructor() {
30
+ this.el = inject(ElementRef);
31
+ this.animationService = inject(BrAnimationService);
32
+ /** Tipo de animação */
33
+ this.animation = 'fadeIn';
34
+ /** Trigger que inicia a animação */
35
+ this.brAnimateTrigger = 'immediate';
36
+ /** Threshold para Intersection Observer (0-1) */
37
+ this.brAnimateThreshold = 0.1;
38
+ /** Se deve animar apenas uma vez */
39
+ this.brAnimateOnce = true;
40
+ /** Se a animação está habilitada */
41
+ this.brAnimateEnabled = true;
42
+ /** Evento emitido no início da animação */
43
+ this.brAnimateStart = new EventEmitter();
44
+ /** Evento emitido no fim da animação */
45
+ this.brAnimateEnd = new EventEmitter();
46
+ this.hasAnimated = false;
47
+ this.boundHandleAnimationEnd = this.handleAnimationEnd.bind(this);
48
+ this.boundHandleHover = this.handleHover.bind(this);
49
+ this.boundHandleHoverOut = this.handleHoverOut.bind(this);
50
+ this.boundHandleFocus = this.handleFocus.bind(this);
51
+ this.boundHandleBlur = this.handleBlur.bind(this);
52
+ this.boundHandleClick = this.handleClick.bind(this);
53
+ // Reage a mudanças no serviço de animação
54
+ effect(() => {
55
+ if (!this.animationService.isEnabled()) {
56
+ this.clearAnimation();
57
+ }
58
+ });
59
+ }
60
+ ngOnInit() {
61
+ if (!this.brAnimateEnabled)
62
+ return;
63
+ this.setupTrigger();
64
+ }
65
+ ngOnDestroy() {
66
+ this.cleanup();
67
+ }
68
+ /**
69
+ * Inicia a animação programaticamente
70
+ */
71
+ play() {
72
+ if (!this.canAnimate())
73
+ return;
74
+ this.applyAnimation();
75
+ }
76
+ /**
77
+ * Reseta a animação para poder rodar novamente
78
+ */
79
+ reset() {
80
+ this.hasAnimated = false;
81
+ this.clearAnimation();
82
+ }
83
+ setupTrigger() {
84
+ const element = this.el.nativeElement;
85
+ switch (this.brAnimateTrigger) {
86
+ case 'immediate':
87
+ // Pequeno delay para garantir que o elemento está no DOM
88
+ requestAnimationFrame(() => this.play());
89
+ break;
90
+ case 'visible':
91
+ this.setupIntersectionObserver();
92
+ break;
93
+ case 'hover':
94
+ element.addEventListener('mouseenter', this.boundHandleHover);
95
+ element.addEventListener('mouseleave', this.boundHandleHoverOut);
96
+ break;
97
+ case 'focus':
98
+ element.addEventListener('focus', this.boundHandleFocus);
99
+ element.addEventListener('blur', this.boundHandleBlur);
100
+ break;
101
+ case 'click':
102
+ element.addEventListener('click', this.boundHandleClick);
103
+ break;
104
+ case 'manual':
105
+ // Não faz nada, espera chamada programática
106
+ break;
107
+ }
108
+ // Listener para fim da animação
109
+ element.addEventListener('animationend', this.boundHandleAnimationEnd);
110
+ }
111
+ setupIntersectionObserver() {
112
+ if (typeof IntersectionObserver === 'undefined') {
113
+ // Fallback: anima imediatamente
114
+ this.play();
115
+ return;
116
+ }
117
+ this.observer = new IntersectionObserver((entries) => {
118
+ entries.forEach((entry) => {
119
+ if (entry.isIntersecting && this.canAnimate()) {
120
+ this.applyAnimation();
121
+ if (this.brAnimateOnce) {
122
+ this.observer?.disconnect();
123
+ }
124
+ }
125
+ });
126
+ }, { threshold: this.brAnimateThreshold });
127
+ this.observer.observe(this.el.nativeElement);
128
+ }
129
+ canAnimate() {
130
+ if (!this.brAnimateEnabled)
131
+ return false;
132
+ if (!this.animationService.isEnabled())
133
+ return false;
134
+ if (this.brAnimateOnce && this.hasAnimated)
135
+ return false;
136
+ return true;
137
+ }
138
+ applyAnimation() {
139
+ const element = this.el.nativeElement;
140
+ const duration = this.animationService.resolveDuration(this.brAnimateDuration);
141
+ const easing = this.animationService.resolveEasing(this.brAnimateEasing);
142
+ const delay = this.brAnimateDelay || 0;
143
+ // Emite evento de início
144
+ this.brAnimateStart.emit({
145
+ type: this.animation,
146
+ phase: 'start',
147
+ element,
148
+ timestamp: Date.now(),
149
+ });
150
+ // Aplica a animação
151
+ element.style.animation = `br-${this.animation} ${duration}ms ${easing} ${delay}ms both`;
152
+ this.hasAnimated = true;
153
+ }
154
+ clearAnimation() {
155
+ const element = this.el.nativeElement;
156
+ element.style.animation = '';
157
+ }
158
+ handleAnimationEnd() {
159
+ const element = this.el.nativeElement;
160
+ this.brAnimateEnd.emit({
161
+ type: this.animation,
162
+ phase: 'end',
163
+ element,
164
+ timestamp: Date.now(),
165
+ });
166
+ // Para triggers de hover/focus, limpa para poder repetir
167
+ if (this.brAnimateTrigger === 'hover' || this.brAnimateTrigger === 'focus') {
168
+ this.clearAnimation();
169
+ }
170
+ }
171
+ handleHover() {
172
+ if (this.canAnimate() || this.brAnimateTrigger === 'hover') {
173
+ this.hasAnimated = false; // Permite repetir no hover
174
+ this.applyAnimation();
175
+ }
176
+ }
177
+ handleHoverOut() {
178
+ this.clearAnimation();
179
+ }
180
+ handleFocus() {
181
+ if (this.canAnimate() || this.brAnimateTrigger === 'focus') {
182
+ this.hasAnimated = false;
183
+ this.applyAnimation();
184
+ }
185
+ }
186
+ handleBlur() {
187
+ this.clearAnimation();
188
+ }
189
+ handleClick() {
190
+ if (this.canAnimate() || this.brAnimateTrigger === 'click') {
191
+ this.hasAnimated = false;
192
+ this.clearAnimation();
193
+ // Força reflow para reiniciar a animação
194
+ this.el.nativeElement.getBoundingClientRect();
195
+ this.applyAnimation();
196
+ }
197
+ }
198
+ cleanup() {
199
+ const element = this.el.nativeElement;
200
+ this.observer?.disconnect();
201
+ element.removeEventListener('animationend', this.boundHandleAnimationEnd);
202
+ element.removeEventListener('mouseenter', this.boundHandleHover);
203
+ element.removeEventListener('mouseleave', this.boundHandleHoverOut);
204
+ element.removeEventListener('focus', this.boundHandleFocus);
205
+ element.removeEventListener('blur', this.boundHandleBlur);
206
+ element.removeEventListener('click', this.boundHandleClick);
207
+ }
208
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrAnimateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
209
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: BrAnimateDirective, isStandalone: true, selector: "[brAnimate]", inputs: { animation: ["brAnimate", "animation"], brAnimateTrigger: "brAnimateTrigger", brAnimateDuration: "brAnimateDuration", brAnimateDelay: "brAnimateDelay", brAnimateEasing: "brAnimateEasing", brAnimateThreshold: "brAnimateThreshold", brAnimateOnce: "brAnimateOnce", brAnimateEnabled: "brAnimateEnabled" }, outputs: { brAnimateStart: "brAnimateStart", brAnimateEnd: "brAnimateEnd" }, ngImport: i0 }); }
210
+ }
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrAnimateDirective, decorators: [{
212
+ type: Directive,
213
+ args: [{
214
+ selector: '[brAnimate]',
215
+ standalone: true,
216
+ }]
217
+ }], ctorParameters: () => [], propDecorators: { animation: [{
218
+ type: Input,
219
+ args: ['brAnimate']
220
+ }], brAnimateTrigger: [{
221
+ type: Input
222
+ }], brAnimateDuration: [{
223
+ type: Input
224
+ }], brAnimateDelay: [{
225
+ type: Input
226
+ }], brAnimateEasing: [{
227
+ type: Input
228
+ }], brAnimateThreshold: [{
229
+ type: Input
230
+ }], brAnimateOnce: [{
231
+ type: Input
232
+ }], brAnimateEnabled: [{
233
+ type: Input
234
+ }], brAnimateStart: [{
235
+ type: Output
236
+ }], brAnimateEnd: [{
237
+ type: Output
238
+ }] } });
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1nb3Zici10dy9zcmMvbGliL2FuaW1hdGlvbnMvYW5pbWF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFTekQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBS0gsTUFBTSxPQUFPLGtCQUFrQjtJQTJDN0I7UUExQ2lCLE9BQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFL0QsdUJBQXVCO1FBQ0gsY0FBUyxHQUFvQixRQUFRLENBQUM7UUFFMUQsb0NBQW9DO1FBQzNCLHFCQUFnQixHQUF1QixXQUFXLENBQUM7UUFXNUQsaURBQWlEO1FBQ3hDLHVCQUFrQixHQUFHLEdBQUcsQ0FBQztRQUVsQyxvQ0FBb0M7UUFDM0Isa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFOUIsb0NBQW9DO1FBQzNCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUVqQywyQ0FBMkM7UUFDakMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUVoRSx3Q0FBd0M7UUFDOUIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUd0RCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQiw0QkFBdUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELHFCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENB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Q0FBQyxDQUFDO1FBQ3BFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RCxDQUFDOytHQXRPVSxrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3dEQU1xQixTQUFTO3NCQUE1QixLQUFLO3VCQUFDLFdBQVc7Z0JBR1QsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdJLGNBQWM7c0JBQXZCLE1BQU07Z0JBR0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBlZmZlY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJyQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4vYW5pbWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEJyQW5pbWF0aW9uVHlwZSxcclxuICBCckFuaW1hdGlvbkR1cmF0aW9uLFxyXG4gIEJyQW5pbWF0aW9uRWFzaW5nLFxyXG4gIEJyQW5pbWF0aW9uVHJpZ2dlcixcclxuICBCckFuaW1hdGlvbkV2ZW50LFxyXG59IGZyb20gJy4vYW5pbWF0aW9uLnR5cGVzJztcclxuXHJcbi8qKlxyXG4gKiBEaXJldGl2YSBwYXJhIGFwbGljYXIgYW5pbWHDp8O1ZXMgYSBxdWFscXVlciBlbGVtZW50b1xyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8IS0tIEFuaW1hw6fDo28gaW1lZGlhdGEgLS0+XHJcbiAqIDxkaXYgYnJBbmltYXRlPVwiZmFkZUluVXBcIj5Db250ZcO6ZG88L2Rpdj5cclxuICpcclxuICogPCEtLSBBbmltYcOnw6NvIHF1YW5kbyB2aXPDrXZlbCAtLT5cclxuICogPGRpdiBickFuaW1hdGU9XCJmYWRlSW5VcFwiIGJyQW5pbWF0ZVRyaWdnZXI9XCJ2aXNpYmxlXCI+Q29udGXDumRvPC9kaXY+XHJcbiAqXHJcbiAqIDwhLS0gQ29tIGNvbmZpZ3VyYcOnw7VlcyAtLT5cclxuICogPGRpdiBickFuaW1hdGU9XCJzY2FsZUluXCIgW2JyQW5pbWF0ZUR1cmF0aW9uXT1cIjMwMFwiIGJyQW5pbWF0ZUVhc2luZz1cImVhc2VPdXRCYWNrXCI+XHJcbiAqICAgQ29udGXDumRvXHJcbiAqIDwvZGl2PlxyXG4gKlxyXG4gKiA8IS0tIFN0YWdnZXIgZW0gbGlzdGEgLS0+XHJcbiAqIDx1bD5cclxuICogICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIlxyXG4gKiAgICAgICBickFuaW1hdGU9XCJmYWRlSW5VcFwiXHJcbiAqICAgICAgIFtickFuaW1hdGVEZWxheV09XCJpICogNTBcIj5cclxuICogICAgIHt7IGl0ZW0gfX1cclxuICogICA8L2xpPlxyXG4gKiA8L3VsPlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYnJBbmltYXRlXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJyQW5pbWF0ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYW5pbWF0aW9uU2VydmljZSA9IGluamVjdChCckFuaW1hdGlvblNlcnZpY2UpO1xyXG5cclxuICAvKiogVGlwbyBkZSBhbmltYcOnw6NvICovXHJcbiAgQElucHV0KCdickFuaW1hdGUnKSBhbmltYXRpb246IEJyQW5pbWF0aW9uVHlwZSA9ICdmYWRlSW4nO1xyXG5cclxuICAvKiogVHJpZ2dlciBxdWUgaW5pY2lhIGEgYW5pbWHDp8OjbyAqL1xyXG4gIEBJbnB1dCgpIGJyQW5pbWF0ZVRyaWdnZXI6IEJyQW5pbWF0aW9uVHJpZ2dlciA9ICdpbW1lZGlhdGUnO1xyXG5cclxuICAvKiogRHVyYcOnw6NvIGRhIGFuaW1hw6fDo28gKi9cclxuICBASW5wdXQoKSBickFuaW1hdGVEdXJhdGlvbj86IG51bWJlciB8IEJyQW5pbWF0aW9uRHVyYXRpb247XHJcblxyXG4gIC8qKiBEZWxheSBhbnRlcyBkZSBpbmljaWFyICovXHJcbiAgQElucHV0KCkgYnJBbmltYXRlRGVsYXk/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBDdXJ2YSBkZSBlYXNpbmcgKi9cclxuICBASW5wdXQoKSBickFuaW1hdGVFYXNpbmc/OiBCckFuaW1hdGlvbkVhc2luZztcclxuXHJcbiAgLyoqIFRocmVzaG9sZCBwYXJhIEludGVyc2VjdGlvbiBPYnNlcnZlciAoMC0xKSAqL1xyXG4gIEBJbnB1dCgpIGJyQW5pbWF0ZVRocmVzaG9sZCA9IDAuMTtcclxuXHJcbiAgLyoqIFNlIGRldmUgYW5pbWFyIGFwZW5hcyB1bWEgdmV6ICovXHJcbiAgQElucHV0KCkgYnJBbmltYXRlT25jZSA9IHRydWU7XHJcblxyXG4gIC8qKiBTZSBhIGFuaW1hw6fDo28gZXN0w6EgaGFiaWxpdGFkYSAqL1xyXG4gIEBJbnB1dCgpIGJyQW5pbWF0ZUVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAvKiogRXZlbnRvIGVtaXRpZG8gbm8gaW7DrWNpbyBkYSBhbmltYcOnw6NvICovXHJcbiAgQE91dHB1dCgpIGJyQW5pbWF0ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxCckFuaW1hdGlvbkV2ZW50PigpO1xyXG5cclxuICAvKiogRXZlbnRvIGVtaXRpZG8gbm8gZmltIGRhIGFuaW1hw6fDo28gKi9cclxuICBAT3V0cHV0KCkgYnJBbmltYXRlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxCckFuaW1hdGlvbkV2ZW50PigpO1xyXG5cclxuICBwcml2YXRlIG9ic2VydmVyPzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XHJcbiAgcHJpdmF0ZSBoYXNBbmltYXRlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgYm91bmRIYW5kbGVBbmltYXRpb25FbmQgPSB0aGlzLmhhbmRsZUFuaW1hdGlvbkVuZC5iaW5kKHRoaXMpO1xyXG4gIHByaXZhdGUgYm91bmRIYW5kbGVIb3ZlciA9IHRoaXMuaGFuZGxlSG92ZXIuYmluZCh0aGlzKTtcclxuICBwcml2YXRlIGJvdW5kSGFuZGxlSG92ZXJPdXQgPSB0aGlzLmhhbmRsZUhvdmVyT3V0LmJpbmQodGhpcyk7XHJcbiAgcHJpdmF0ZSBib3VuZEhhbmRsZUZvY3VzID0gdGhpcy5oYW5kbGVGb2N1cy5iaW5kKHRoaXMpO1xyXG4gIHByaXZhdGUgYm91bmRIYW5kbGVCbHVyID0gdGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcyk7XHJcbiAgcHJpdmF0ZSBib3VuZEhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIC8vIFJlYWdlIGEgbXVkYW7Dp2FzIG5vIHNlcnZpw6dvIGRlIGFuaW1hw6fDo29cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5hbmltYXRpb25TZXJ2aWNlLmlzRW5hYmxlZCgpKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhckFuaW1hdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJyQW5pbWF0ZUVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnNldHVwVHJpZ2dlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFudXAoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaWNpYSBhIGFuaW1hw6fDo28gcHJvZ3JhbWF0aWNhbWVudGVcclxuICAgKi9cclxuICBwbGF5KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNhbkFuaW1hdGUoKSkgcmV0dXJuO1xyXG4gICAgdGhpcy5hcHBseUFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXRhIGEgYW5pbWHDp8OjbyBwYXJhIHBvZGVyIHJvZGFyIG5vdmFtZW50ZVxyXG4gICAqL1xyXG4gIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5oYXNBbmltYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbGVhckFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFRyaWdnZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5ickFuaW1hdGVUcmlnZ2VyKSB7XHJcbiAgICAgIGNhc2UgJ2ltbWVkaWF0ZSc6XHJcbiAgICAgICAgLy8gUGVxdWVubyBkZWxheSBwYXJhIGdhcmFudGlyIHF1ZSBvIGVsZW1lbnRvIGVzdMOhIG5vIERPTVxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnBsYXkoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICd2aXNpYmxlJzpcclxuICAgICAgICB0aGlzLnNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2hvdmVyJzpcclxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLmJvdW5kSGFuZGxlSG92ZXIpO1xyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuYm91bmRIYW5kbGVIb3Zlck91dCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdmb2N1cyc6XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuYm91bmRIYW5kbGVGb2N1cyk7XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5ib3VuZEhhbmRsZUJsdXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnY2xpY2snOlxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kSGFuZGxlQ2xpY2spO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnbWFudWFsJzpcclxuICAgICAgICAvLyBOw6NvIGZheiBuYWRhLCBlc3BlcmEgY2hhbWFkYSBwcm9ncmFtw6F0aWNhXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTGlzdGVuZXIgcGFyYSBmaW0gZGEgYW5pbWHDp8Ojb1xyXG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCB0aGlzLmJvdW5kSGFuZGxlQW5pbWF0aW9uRW5kKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrOiBhbmltYSBpbWVkaWF0YW1lbnRlXHJcbiAgICAgIHRoaXMucGxheSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcclxuICAgICAgKGVudHJpZXMpID0+IHtcclxuICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgdGhpcy5jYW5BbmltYXRlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYnJBbmltYXRlT25jZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICB7IHRocmVzaG9sZDogdGhpcy5ickFuaW1hdGVUaHJlc2hvbGQgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FuQW5pbWF0ZSgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ickFuaW1hdGVFbmFibGVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXMuYW5pbWF0aW9uU2VydmljZS5pc0VuYWJsZWQoKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuYnJBbmltYXRlT25jZSAmJiB0aGlzLmhhc0FuaW1hdGVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlBbmltYXRpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmFuaW1hdGlvblNlcnZpY2UucmVzb2x2ZUR1cmF0aW9uKHRoaXMuYnJBbmltYXRlRHVyYXRpb24pO1xyXG4gICAgY29uc3QgZWFzaW5nID0gdGhpcy5hbmltYXRpb25TZXJ2aWNlLnJlc29sdmVFYXNpbmcodGhpcy5ickFuaW1hdGVFYXNpbmcpO1xyXG4gICAgY29uc3QgZGVsYXkgPSB0aGlzLmJyQW5pbWF0ZURlbGF5IHx8IDA7XHJcblxyXG4gICAgLy8gRW1pdGUgZXZlbnRvIGRlIGluw61jaW9cclxuICAgIHRoaXMuYnJBbmltYXRlU3RhcnQuZW1pdCh7XHJcbiAgICAgIHR5cGU6IHRoaXMuYW5pbWF0aW9uLFxyXG4gICAgICBwaGFzZTogJ3N0YXJ0JyxcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQXBsaWNhIGEgYW5pbWHDp8Ojb1xyXG4gICAgZWxlbWVudC5zdHlsZS5hbmltYXRpb24gPSBgYnItJHt0aGlzLmFuaW1hdGlvbn0gJHtkdXJhdGlvbn1tcyAke2Vhc2luZ30gJHtkZWxheX1tcyBib3RoYDtcclxuXHJcbiAgICB0aGlzLmhhc0FuaW1hdGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJBbmltYXRpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgZWxlbWVudC5zdHlsZS5hbmltYXRpb24gPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQW5pbWF0aW9uRW5kKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLmJyQW5pbWF0ZUVuZC5lbWl0KHtcclxuICAgICAgdHlwZTogdGhpcy5hbmltYXRpb24sXHJcbiAgICAgIHBoYXNlOiAnZW5kJyxcclxuICAgICAgZWxlbWVudCxcclxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUGFyYSB0cmlnZ2VycyBkZSBob3Zlci9mb2N1cywgbGltcGEgcGFyYSBwb2RlciByZXBldGlyXHJcbiAgICBpZiAodGhpcy5ickFuaW1hdGVUcmlnZ2VyID09PSAnaG92ZXInIHx8IHRoaXMuYnJBbmltYXRlVHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xyXG4gICAgICB0aGlzLmNsZWFyQW5pbWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUhvdmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FuQW5pbWF0ZSgpIHx8IHRoaXMuYnJBbmltYXRlVHJpZ2dlciA9PT0gJ2hvdmVyJykge1xyXG4gICAgICB0aGlzLmhhc0FuaW1hdGVkID0gZmFsc2U7IC8vIFBlcm1pdGUgcmVwZXRpciBubyBob3ZlclxyXG4gICAgICB0aGlzLmFwcGx5QW5pbWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUhvdmVyT3V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhckFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVGb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNhbkFuaW1hdGUoKSB8fCB0aGlzLmJyQW5pbWF0ZVRyaWdnZXIgPT09ICdmb2N1cycpIHtcclxuICAgICAgdGhpcy5oYXNBbmltYXRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmFwcGx5QW5pbWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUJsdXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FuQW5pbWF0ZSgpIHx8IHRoaXMuYnJBbmltYXRlVHJpZ2dlciA9PT0gJ2NsaWNrJykge1xyXG4gICAgICB0aGlzLmhhc0FuaW1hdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2xlYXJBbmltYXRpb24oKTtcclxuICAgICAgLy8gRm9yw6dhIHJlZmxvdyBwYXJhIHJlaW5pY2lhciBhIGFuaW1hw6fDo29cclxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICB0aGlzLmFwcGx5QW5pbWF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFudXAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcclxuXHJcbiAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuYm91bmRIYW5kbGVBbmltYXRpb25FbmQpO1xyXG4gICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5ib3VuZEhhbmRsZUhvdmVyKTtcclxuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuYm91bmRIYW5kbGVIb3Zlck91dCk7XHJcbiAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5ib3VuZEhhbmRsZUZvY3VzKTtcclxuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuYm91bmRIYW5kbGVCbHVyKTtcclxuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kSGFuZGxlQ2xpY2spO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,178 @@
1
+ import { Injectable, signal, computed, inject, InjectionToken } from '@angular/core';
2
+ import { BR_ANIMATION_DEFAULT_CONFIG, BR_ANIMATION_DURATION_MAP, BR_ANIMATION_EASING_MAP, } from './animation.types';
3
+ import * as i0 from "@angular/core";
4
+ /** Token para injetar configuração customizada */
5
+ export const BR_ANIMATION_CONFIG = new InjectionToken('BR_ANIMATION_CONFIG');
6
+ /**
7
+ * Serviço de animações Gov.br
8
+ * @description Gerencia configuração global e estado das animações
9
+ *
10
+ * @example
11
+ * // No módulo/componente principal
12
+ * providers: [
13
+ * {
14
+ * provide: BR_ANIMATION_CONFIG,
15
+ * useValue: { enabled: true, defaultDuration: 'fast' }
16
+ * }
17
+ * ]
18
+ *
19
+ * // No componente
20
+ * constructor(private animationService: BrAnimationService) {
21
+ * this.animationService.enable();
22
+ * }
23
+ */
24
+ export class BrAnimationService {
25
+ constructor() {
26
+ /** Configuração global reativa */
27
+ this._config = signal({ ...BR_ANIMATION_DEFAULT_CONFIG });
28
+ /** Se animações estão habilitadas (considera reduced motion) */
29
+ this.isEnabled = computed(() => {
30
+ const config = this._config();
31
+ if (!config.enabled)
32
+ return false;
33
+ if (config.respectReducedMotion && this._prefersReducedMotion())
34
+ return false;
35
+ return true;
36
+ });
37
+ /** Configuração atual (readonly) */
38
+ this.config = computed(() => this._config());
39
+ /** Cache de media query */
40
+ this._reducedMotionQuery = null;
41
+ /** Custom config injected optionally */
42
+ this._customConfig = inject(BR_ANIMATION_CONFIG, { optional: true });
43
+ // Merge com configuração customizada
44
+ if (this._customConfig) {
45
+ this._config.update(current => ({ ...current, ...this._customConfig }));
46
+ }
47
+ // Setup listener para prefers-reduced-motion
48
+ this._setupReducedMotionListener();
49
+ }
50
+ /**
51
+ * Habilita animações globalmente
52
+ */
53
+ enable() {
54
+ this._config.update(config => ({ ...config, enabled: true }));
55
+ }
56
+ /**
57
+ * Desabilita animações globalmente
58
+ */
59
+ disable() {
60
+ this._config.update(config => ({ ...config, enabled: false }));
61
+ }
62
+ /**
63
+ * Toggle do estado de animações
64
+ */
65
+ toggle() {
66
+ this._config.update(config => ({ ...config, enabled: !config.enabled }));
67
+ }
68
+ /**
69
+ * Atualiza configuração global
70
+ */
71
+ configure(config) {
72
+ this._config.update(current => ({ ...current, ...config }));
73
+ }
74
+ /**
75
+ * Define duração padrão
76
+ */
77
+ setDefaultDuration(duration) {
78
+ this._config.update(config => ({ ...config, defaultDuration: duration }));
79
+ }
80
+ /**
81
+ * Define easing padrão
82
+ */
83
+ setDefaultEasing(easing) {
84
+ this._config.update(config => ({ ...config, defaultEasing: easing }));
85
+ }
86
+ /**
87
+ * Resolve duração para valor em ms
88
+ */
89
+ resolveDuration(duration) {
90
+ if (duration === undefined) {
91
+ const defaultDur = this._config().defaultDuration;
92
+ return typeof defaultDur === 'number' ? defaultDur : BR_ANIMATION_DURATION_MAP[defaultDur];
93
+ }
94
+ return typeof duration === 'number' ? duration : BR_ANIMATION_DURATION_MAP[duration];
95
+ }
96
+ /**
97
+ * Resolve easing para valor CSS
98
+ */
99
+ resolveEasing(easing) {
100
+ const resolvedEasing = easing || this._config().defaultEasing;
101
+ return BR_ANIMATION_EASING_MAP[resolvedEasing];
102
+ }
103
+ /**
104
+ * Gera string de animação CSS
105
+ */
106
+ getAnimationString(config) {
107
+ if (!this.isEnabled())
108
+ return 'none';
109
+ const duration = this.resolveDuration(config.duration);
110
+ const easing = this.resolveEasing(config.easing);
111
+ const delay = config.delay || 0;
112
+ const iterations = config.iterations === 'infinite' ? 'infinite' : (config.iterations || 1);
113
+ const direction = config.direction || 'normal';
114
+ const fillMode = config.fillMode || 'both';
115
+ return `br-${config.type} ${duration}ms ${easing} ${delay}ms ${iterations} ${direction} ${fillMode}`;
116
+ }
117
+ /**
118
+ * Aplica animação a um elemento
119
+ */
120
+ animate(element, config) {
121
+ return new Promise((resolve, reject) => {
122
+ if (!this.isEnabled()) {
123
+ resolve();
124
+ return;
125
+ }
126
+ const animationString = this.getAnimationString(config);
127
+ element.style.animation = animationString;
128
+ const handleEnd = () => {
129
+ element.removeEventListener('animationend', handleEnd);
130
+ element.removeEventListener('animationcancel', handleCancel);
131
+ resolve();
132
+ };
133
+ const handleCancel = () => {
134
+ element.removeEventListener('animationend', handleEnd);
135
+ element.removeEventListener('animationcancel', handleCancel);
136
+ reject(new Error('Animation cancelled'));
137
+ };
138
+ element.addEventListener('animationend', handleEnd);
139
+ element.addEventListener('animationcancel', handleCancel);
140
+ });
141
+ }
142
+ /**
143
+ * Remove animação de um elemento
144
+ */
145
+ clearAnimation(element) {
146
+ element.style.animation = '';
147
+ }
148
+ /**
149
+ * Verifica se usuário prefere movimento reduzido
150
+ */
151
+ _prefersReducedMotion() {
152
+ if (typeof window === 'undefined')
153
+ return false;
154
+ return this._reducedMotionQuery?.matches ?? false;
155
+ }
156
+ /**
157
+ * Configura listener para mudanças de preferência
158
+ */
159
+ _setupReducedMotionListener() {
160
+ if (typeof window === 'undefined')
161
+ return;
162
+ this._reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
163
+ // Força re-avaliação quando preferência muda
164
+ this._reducedMotionQuery.addEventListener('change', () => {
165
+ // Trigger recomputation via signal update
166
+ this._config.update(config => ({ ...config }));
167
+ });
168
+ }
169
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrAnimationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
170
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrAnimationService, providedIn: 'root' }); }
171
+ }
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrAnimationService, decorators: [{
173
+ type: Injectable,
174
+ args: [{
175
+ providedIn: 'root',
176
+ }]
177
+ }], ctorParameters: () => [] });
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1nb3Zici10dy9zcmMvbGliL2FuaW1hdGlvbnMvYW5pbWF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUtMLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDekIsdUJBQXVCLEdBQ3hCLE1BQU0sbUJBQW1CLENBQUM7O0FBRTNCLGtEQUFrRDtBQUNsRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQscUJBQXFCLENBQ3RCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBcUI3QjtRQXBCQSxrQ0FBa0M7UUFDakIsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsRUFBRSxHQUFHLDJCQUEyQixFQUFFLENBQUMsQ0FBQztRQUUvRixnRUFBZ0U7UUFDdkQsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUNsQyxJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDOUUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUMzQixXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRWpELDJCQUEyQjtRQUNuQix3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R0FBRyxFQUFFO1lBQ3ZELDBDQUEwQztZQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBdEtVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQnJBbmltYXRpb25HbG9iYWxDb25maWcsXHJcbiAgQnJBbmltYXRpb25EdXJhdGlvbixcclxuICBCckFuaW1hdGlvbkVhc2luZyxcclxuICBCckFuaW1hdGlvbkNvbmZpZyxcclxuICBCUl9BTklNQVRJT05fREVGQVVMVF9DT05GSUcsXHJcbiAgQlJfQU5JTUFUSU9OX0RVUkFUSU9OX01BUCxcclxuICBCUl9BTklNQVRJT05fRUFTSU5HX01BUCxcclxufSBmcm9tICcuL2FuaW1hdGlvbi50eXBlcyc7XHJcblxyXG4vKiogVG9rZW4gcGFyYSBpbmpldGFyIGNvbmZpZ3VyYcOnw6NvIGN1c3RvbWl6YWRhICovXHJcbmV4cG9ydCBjb25zdCBCUl9BTklNQVRJT05fQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8QnJBbmltYXRpb25HbG9iYWxDb25maWc+PihcclxuICAnQlJfQU5JTUFUSU9OX0NPTkZJRydcclxuKTtcclxuXHJcbi8qKlxyXG4gKiBTZXJ2acOnbyBkZSBhbmltYcOnw7VlcyBHb3YuYnJcclxuICogQGRlc2NyaXB0aW9uIEdlcmVuY2lhIGNvbmZpZ3VyYcOnw6NvIGdsb2JhbCBlIGVzdGFkbyBkYXMgYW5pbWHDp8O1ZXNcclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gTm8gbcOzZHVsby9jb21wb25lbnRlIHByaW5jaXBhbFxyXG4gKiBwcm92aWRlcnM6IFtcclxuICogICB7XHJcbiAqICAgICBwcm92aWRlOiBCUl9BTklNQVRJT05fQ09ORklHLFxyXG4gKiAgICAgdXNlVmFsdWU6IHsgZW5hYmxlZDogdHJ1ZSwgZGVmYXVsdER1cmF0aW9uOiAnZmFzdCcgfVxyXG4gKiAgIH1cclxuICogXVxyXG4gKlxyXG4gKiAvLyBObyBjb21wb25lbnRlXHJcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgYW5pbWF0aW9uU2VydmljZTogQnJBbmltYXRpb25TZXJ2aWNlKSB7XHJcbiAqICAgdGhpcy5hbmltYXRpb25TZXJ2aWNlLmVuYWJsZSgpO1xyXG4gKiB9XHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQnJBbmltYXRpb25TZXJ2aWNlIHtcclxuICAvKiogQ29uZmlndXJhw6fDo28gZ2xvYmFsIHJlYXRpdmEgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWcgPSBzaWduYWw8QnJBbmltYXRpb25HbG9iYWxDb25maWc+KHsgLi4uQlJfQU5JTUFUSU9OX0RFRkFVTFRfQ09ORklHIH0pO1xyXG5cclxuICAvKiogU2UgYW5pbWHDp8O1ZXMgZXN0w6NvIGhhYmlsaXRhZGFzIChjb25zaWRlcmEgcmVkdWNlZCBtb3Rpb24pICovXHJcbiAgcmVhZG9ubHkgaXNFbmFibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5fY29uZmlnKCk7XHJcbiAgICBpZiAoIWNvbmZpZy5lbmFibGVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoY29uZmlnLnJlc3BlY3RSZWR1Y2VkTW90aW9uICYmIHRoaXMuX3ByZWZlcnNSZWR1Y2VkTW90aW9uKCkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0pO1xyXG5cclxuICAvKiogQ29uZmlndXJhw6fDo28gYXR1YWwgKHJlYWRvbmx5KSAqL1xyXG4gIHJlYWRvbmx5IGNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2NvbmZpZygpKTtcclxuXHJcbiAgLyoqIENhY2hlIGRlIG1lZGlhIHF1ZXJ5ICovXHJcbiAgcHJpdmF0ZSBfcmVkdWNlZE1vdGlvblF1ZXJ5OiBNZWRpYVF1ZXJ5TGlzdCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogQ3VzdG9tIGNvbmZpZyBpbmplY3RlZCBvcHRpb25hbGx5ICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY3VzdG9tQ29uZmlnID0gaW5qZWN0KEJSX0FOSU1BVElPTl9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgLy8gTWVyZ2UgY29tIGNvbmZpZ3VyYcOnw6NvIGN1c3RvbWl6YWRhXHJcbiAgICBpZiAodGhpcy5fY3VzdG9tQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpZy51cGRhdGUoY3VycmVudCA9PiAoeyAuLi5jdXJyZW50LCAuLi50aGlzLl9jdXN0b21Db25maWcgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldHVwIGxpc3RlbmVyIHBhcmEgcHJlZmVycy1yZWR1Y2VkLW1vdGlvblxyXG4gICAgdGhpcy5fc2V0dXBSZWR1Y2VkTW90aW9uTGlzdGVuZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhYmlsaXRhIGFuaW1hw6fDtWVzIGdsb2JhbG1lbnRlXHJcbiAgICovXHJcbiAgZW5hYmxlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29uZmlnLnVwZGF0ZShjb25maWcgPT4gKHsgLi4uY29uZmlnLCBlbmFibGVkOiB0cnVlIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc2FiaWxpdGEgYW5pbWHDp8O1ZXMgZ2xvYmFsbWVudGVcclxuICAgKi9cclxuICBkaXNhYmxlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29uZmlnLnVwZGF0ZShjb25maWcgPT4gKHsgLi4uY29uZmlnLCBlbmFibGVkOiBmYWxzZSB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgZG8gZXN0YWRvIGRlIGFuaW1hw6fDtWVzXHJcbiAgICovXHJcbiAgdG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29uZmlnLnVwZGF0ZShjb25maWcgPT4gKHsgLi4uY29uZmlnLCBlbmFibGVkOiAhY29uZmlnLmVuYWJsZWQgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXR1YWxpemEgY29uZmlndXJhw6fDo28gZ2xvYmFsXHJcbiAgICovXHJcbiAgY29uZmlndXJlKGNvbmZpZzogUGFydGlhbDxCckFuaW1hdGlvbkdsb2JhbENvbmZpZz4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbmZpZy51cGRhdGUoY3VycmVudCA9PiAoeyAuLi5jdXJyZW50LCAuLi5jb25maWcgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lIGR1cmHDp8OjbyBwYWRyw6NvXHJcbiAgICovXHJcbiAgc2V0RGVmYXVsdER1cmF0aW9uKGR1cmF0aW9uOiBudW1iZXIgfCBCckFuaW1hdGlvbkR1cmF0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb25maWcudXBkYXRlKGNvbmZpZyA9PiAoeyAuLi5jb25maWcsIGRlZmF1bHREdXJhdGlvbjogZHVyYXRpb24gfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lIGVhc2luZyBwYWRyw6NvXHJcbiAgICovXHJcbiAgc2V0RGVmYXVsdEVhc2luZyhlYXNpbmc6IEJyQW5pbWF0aW9uRWFzaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb25maWcudXBkYXRlKGNvbmZpZyA9PiAoeyAuLi5jb25maWcsIGRlZmF1bHRFYXNpbmc6IGVhc2luZyB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIGR1cmHDp8OjbyBwYXJhIHZhbG9yIGVtIG1zXHJcbiAgICovXHJcbiAgcmVzb2x2ZUR1cmF0aW9uKGR1cmF0aW9uPzogbnVtYmVyIHwgQnJBbmltYXRpb25EdXJhdGlvbik6IG51bWJlciB7XHJcbiAgICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBkZWZhdWx0RHVyID0gdGhpcy5fY29uZmlnKCkuZGVmYXVsdER1cmF0aW9uO1xyXG4gICAgICByZXR1cm4gdHlwZW9mIGRlZmF1bHREdXIgPT09ICdudW1iZXInID8gZGVmYXVsdER1ciA6IEJSX0FOSU1BVElPTl9EVVJBVElPTl9NQVBbZGVmYXVsdER1cl07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyA/IGR1cmF0aW9uIDogQlJfQU5JTUFUSU9OX0RVUkFUSU9OX01BUFtkdXJhdGlvbl07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIGVhc2luZyBwYXJhIHZhbG9yIENTU1xyXG4gICAqL1xyXG4gIHJlc29sdmVFYXNpbmcoZWFzaW5nPzogQnJBbmltYXRpb25FYXNpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVzb2x2ZWRFYXNpbmcgPSBlYXNpbmcgfHwgdGhpcy5fY29uZmlnKCkuZGVmYXVsdEVhc2luZztcclxuICAgIHJldHVybiBCUl9BTklNQVRJT05fRUFTSU5HX01BUFtyZXNvbHZlZEVhc2luZ107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXJhIHN0cmluZyBkZSBhbmltYcOnw6NvIENTU1xyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvblN0cmluZyhjb25maWc6IEJyQW5pbWF0aW9uQ29uZmlnKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuICdub25lJztcclxuXHJcbiAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMucmVzb2x2ZUR1cmF0aW9uKGNvbmZpZy5kdXJhdGlvbik7XHJcbiAgICBjb25zdCBlYXNpbmcgPSB0aGlzLnJlc29sdmVFYXNpbmcoY29uZmlnLmVhc2luZyk7XHJcbiAgICBjb25zdCBkZWxheSA9IGNvbmZpZy5kZWxheSB8fCAwO1xyXG4gICAgY29uc3QgaXRlcmF0aW9ucyA9IGNvbmZpZy5pdGVyYXRpb25zID09PSAnaW5maW5pdGUnID8gJ2luZmluaXRlJyA6IChjb25maWcuaXRlcmF0aW9ucyB8fCAxKTtcclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGNvbmZpZy5kaXJlY3Rpb24gfHwgJ25vcm1hbCc7XHJcbiAgICBjb25zdCBmaWxsTW9kZSA9IGNvbmZpZy5maWxsTW9kZSB8fCAnYm90aCc7XHJcblxyXG4gICAgcmV0dXJuIGBici0ke2NvbmZpZy50eXBlfSAke2R1cmF0aW9ufW1zICR7ZWFzaW5nfSAke2RlbGF5fW1zICR7aXRlcmF0aW9uc30gJHtkaXJlY3Rpb259ICR7ZmlsbE1vZGV9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwbGljYSBhbmltYcOnw6NvIGEgdW0gZWxlbWVudG9cclxuICAgKi9cclxuICBhbmltYXRlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb25maWc6IEJyQW5pbWF0aW9uQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBhbmltYXRpb25TdHJpbmcgPSB0aGlzLmdldEFuaW1hdGlvblN0cmluZyhjb25maWcpO1xyXG4gICAgICBlbGVtZW50LnN0eWxlLmFuaW1hdGlvbiA9IGFuaW1hdGlvblN0cmluZztcclxuXHJcbiAgICAgIGNvbnN0IGhhbmRsZUVuZCA9ICgpID0+IHtcclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIGhhbmRsZUVuZCk7XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25jYW5jZWwnLCBoYW5kbGVDYW5jZWwpO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIGhhbmRsZUVuZCk7XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25jYW5jZWwnLCBoYW5kbGVDYW5jZWwpO1xyXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0FuaW1hdGlvbiBjYW5jZWxsZWQnKSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIGhhbmRsZUVuZCk7XHJcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uY2FuY2VsJywgaGFuZGxlQ2FuY2VsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFuaW1hw6fDo28gZGUgdW0gZWxlbWVudG9cclxuICAgKi9cclxuICBjbGVhckFuaW1hdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgZWxlbWVudC5zdHlsZS5hbmltYXRpb24gPSAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNlIHVzdcOhcmlvIHByZWZlcmUgbW92aW1lbnRvIHJlZHV6aWRvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcHJlZmVyc1JlZHVjZWRNb3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLl9yZWR1Y2VkTW90aW9uUXVlcnk/Lm1hdGNoZXMgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbGlzdGVuZXIgcGFyYSBtdWRhbsOnYXMgZGUgcHJlZmVyw6puY2lhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2V0dXBSZWR1Y2VkTW90aW9uTGlzdGVuZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl9yZWR1Y2VkTW90aW9uUXVlcnkgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKTtcclxuXHJcbiAgICAvLyBGb3LDp2EgcmUtYXZhbGlhw6fDo28gcXVhbmRvIHByZWZlcsOqbmNpYSBtdWRhXHJcbiAgICB0aGlzLl9yZWR1Y2VkTW90aW9uUXVlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAvLyBUcmlnZ2VyIHJlY29tcHV0YXRpb24gdmlhIHNpZ25hbCB1cGRhdGVcclxuICAgICAgdGhpcy5fY29uZmlnLnVwZGF0ZShjb25maWcgPT4gKHsgLi4uY29uZmlnIH0pKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Tipos e interfaces para o sistema de animações Gov.br
3
+ * @description Sistema de animações configurável e acessível
4
+ */
5
+ /** Mapeamento de easing para valores CSS */
6
+ export const BR_ANIMATION_EASING_MAP = {
7
+ linear: 'linear',
8
+ ease: 'ease',
9
+ easeIn: 'ease-in',
10
+ easeOut: 'ease-out',
11
+ easeInOut: 'ease-in-out',
12
+ easeInBack: 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',
13
+ easeOutBack: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
14
+ easeInOutBack: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
15
+ easeInElastic: 'cubic-bezier(0.5, -0.5, 0.75, 1.25)',
16
+ easeOutElastic: 'cubic-bezier(0.25, -0.25, 0.25, 1.5)',
17
+ easeOutBounce: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
18
+ };
19
+ /** Mapeamento de duração para valores em ms */
20
+ export const BR_ANIMATION_DURATION_MAP = {
21
+ instant: 100,
22
+ fast: 150,
23
+ normal: 250,
24
+ slow: 400,
25
+ slower: 600,
26
+ };
27
+ /** Configuração padrão global */
28
+ export const BR_ANIMATION_DEFAULT_CONFIG = {
29
+ enabled: false, // Desabilitado por padrão
30
+ respectReducedMotion: true,
31
+ defaultDuration: 'normal',
32
+ defaultEasing: 'easeOut',
33
+ };
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZ292YnItdHcvc3JjL2xpYi9hbmltYXRpb25zL2FuaW1hdGlvbi50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUEwRkgsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQztJQUN4RSxNQUFNLEVBQUUsUUFBUTtJQUNoQixJQUFJLEVBQUUsTUFBTTtJQUNaLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLFNBQVMsRUFBRSxhQUFhO0lBQ3hCLFVBQVUsRUFBRSx3Q0FBd0M7SUFDcEQsV0FBVyxFQUFFLHlDQUF5QztJQUN0RCxhQUFhLEVBQUUsd0NBQXdDO0lBQ3ZELGFBQWEsRUFBRSxxQ0FBcUM7SUFDcEQsY0FBYyxFQUFFLHNDQUFzQztJQUN0RCxhQUFhLEVBQUUsbUNBQW1DO0NBQzFDLENBQUM7QUFLWCwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQXdDO0lBQzVFLE9BQU8sRUFBRSxHQUFHO0lBQ1osSUFBSSxFQUFFLEdBQUc7SUFDVCxNQUFNLEVBQUUsR0FBRztJQUNYLElBQUksRUFBRSxHQUFHO0lBQ1QsTUFBTSxFQUFFLEdBQUc7Q0FDSCxDQUFDO0FBd0NYLGlDQUFpQztBQUNqQyxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBNEI7SUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSwwQkFBMEI7SUFDMUMsb0JBQW9CLEVBQUUsSUFBSTtJQUMxQixlQUFlLEVBQUUsUUFBUTtJQUN6QixhQUFhLEVBQUUsU0FBUztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFRpcG9zIGUgaW50ZXJmYWNlcyBwYXJhIG8gc2lzdGVtYSBkZSBhbmltYcOnw7VlcyBHb3YuYnJcclxuICogQGRlc2NyaXB0aW9uIFNpc3RlbWEgZGUgYW5pbWHDp8O1ZXMgY29uZmlndXLDoXZlbCBlIGFjZXNzw612ZWxcclxuICovXHJcblxyXG4vKiogVGlwb3MgZGUgYW5pbWHDp8OjbyBkZSBlbnRyYWRhICovXHJcbmV4cG9ydCB0eXBlIEJyQW5pbWF0aW9uRW50ZXIgPVxyXG4gIHwgJ2ZhZGVJbidcclxuICB8ICdmYWRlSW5VcCdcclxuICB8ICdmYWRlSW5Eb3duJ1xyXG4gIHwgJ2ZhZGVJbkxlZnQnXHJcbiAgfCAnZmFkZUluUmlnaHQnXHJcbiAgfCAnc2NhbGVJbidcclxuICB8ICdzbGlkZUluVXAnXHJcbiAgfCAnc2xpZGVJbkRvd24nXHJcbiAgfCAnc2xpZGVJbkxlZnQnXHJcbiAgfCAnc2xpZGVJblJpZ2h0J1xyXG4gIHwgJ2V4cGFuZEhlaWdodCdcclxuICB8ICdleHBhbmRXaWR0aCc7XHJcblxyXG4vKiogVGlwb3MgZGUgYW5pbWHDp8OjbyBkZSBzYcOtZGEgKi9cclxuZXhwb3J0IHR5cGUgQnJBbmltYXRpb25MZWF2ZSA9XHJcbiAgfCAnZmFkZU91dCdcclxuICB8ICdmYWRlT3V0VXAnXHJcbiAgfCAnZmFkZU91dERvd24nXHJcbiAgfCAnZmFkZU91dExlZnQnXHJcbiAgfCAnZmFkZU91dFJpZ2h0J1xyXG4gIHwgJ3NjYWxlT3V0J1xyXG4gIHwgJ3NsaWRlT3V0VXAnXHJcbiAgfCAnc2xpZGVPdXREb3duJ1xyXG4gIHwgJ3NsaWRlT3V0TGVmdCdcclxuICB8ICdzbGlkZU91dFJpZ2h0J1xyXG4gIHwgJ2NvbGxhcHNlSGVpZ2h0J1xyXG4gIHwgJ2NvbGxhcHNlV2lkdGgnO1xyXG5cclxuLyoqIFRpcG9zIGRlIGFuaW1hw6fDo28gZGUgYXRlbsOnw6NvL2ZlZWRiYWNrICovXHJcbmV4cG9ydCB0eXBlIEJyQW5pbWF0aW9uQXR0ZW50aW9uID1cclxuICB8ICdwdWxzZSdcclxuICB8ICdzaGFrZSdcclxuICB8ICdib3VuY2UnXHJcbiAgfCAnd2lnZ2xlJ1xyXG4gIHwgJ2ZsYXNoJ1xyXG4gIHwgJ2hlYXJ0YmVhdCdcclxuICB8ICdzd2luZyc7XHJcblxyXG4vKiogVGlwb3MgZGUgYW5pbWHDp8OjbyBkZSBsb2FkaW5nICovXHJcbmV4cG9ydCB0eXBlIEJyQW5pbWF0aW9uTG9hZGluZyA9XHJcbiAgfCAnc3BpbidcclxuICB8ICdkb3RzJ1xyXG4gIHwgJ2JhcnMnXHJcbiAgfCAnc2hpbW1lcidcclxuICB8ICd3YXZlJ1xyXG4gIHwgJ3Byb2dyZXNzSW5kZXRlcm1pbmF0ZSc7XHJcblxyXG4vKiogVGlwb3MgZGUgYW5pbWHDp8OjbyBkZSBob3ZlciAqL1xyXG5leHBvcnQgdHlwZSBCckFuaW1hdGlvbkhvdmVyID1cclxuICB8ICdsaWZ0J1xyXG4gIHwgJ2dyb3cnXHJcbiAgfCAnc2hyaW5rJ1xyXG4gIHwgJ2dsb3cnXHJcbiAgfCAndW5kZXJsaW5lJ1xyXG4gIHwgJ3JpcHBsZSc7XHJcblxyXG4vKiogVGlwb3MgZGUgYW5pbWHDp8OjbyBkZSBzdWNlc3NvL2ZlZWRiYWNrICovXHJcbmV4cG9ydCB0eXBlIEJyQW5pbWF0aW9uRmVlZGJhY2sgPVxyXG4gIHwgJ2NoZWNrbWFyaydcclxuICB8ICdzdWNjZXNzUG9wJ1xyXG4gIHwgJ2Vycm9yU2hha2UnXHJcbiAgfCAnd2FybmluZ1B1bHNlJztcclxuXHJcbi8qKiBVbmnDo28gZGUgdG9kb3Mgb3MgdGlwb3MgZGUgYW5pbWHDp8OjbyAqL1xyXG5leHBvcnQgdHlwZSBCckFuaW1hdGlvblR5cGUgPVxyXG4gIHwgQnJBbmltYXRpb25FbnRlclxyXG4gIHwgQnJBbmltYXRpb25MZWF2ZVxyXG4gIHwgQnJBbmltYXRpb25BdHRlbnRpb25cclxuICB8IEJyQW5pbWF0aW9uTG9hZGluZ1xyXG4gIHwgQnJBbmltYXRpb25Ib3ZlclxyXG4gIHwgQnJBbmltYXRpb25GZWVkYmFjaztcclxuXHJcbi8qKiBDdXJ2YXMgZGUgZWFzaW5nIGRpc3BvbsOtdmVpcyAqL1xyXG5leHBvcnQgdHlwZSBCckFuaW1hdGlvbkVhc2luZyA9XHJcbiAgfCAnbGluZWFyJ1xyXG4gIHwgJ2Vhc2UnXHJcbiAgfCAnZWFzZUluJ1xyXG4gIHwgJ2Vhc2VPdXQnXHJcbiAgfCAnZWFzZUluT3V0J1xyXG4gIHwgJ2Vhc2VJbkJhY2snXHJcbiAgfCAnZWFzZU91dEJhY2snXHJcbiAgfCAnZWFzZUluT3V0QmFjaydcclxuICB8ICdlYXNlSW5FbGFzdGljJ1xyXG4gIHwgJ2Vhc2VPdXRFbGFzdGljJ1xyXG4gIHwgJ2Vhc2VPdXRCb3VuY2UnO1xyXG5cclxuLyoqIE1hcGVhbWVudG8gZGUgZWFzaW5nIHBhcmEgdmFsb3JlcyBDU1MgKi9cclxuZXhwb3J0IGNvbnN0IEJSX0FOSU1BVElPTl9FQVNJTkdfTUFQOiBSZWNvcmQ8QnJBbmltYXRpb25FYXNpbmcsIHN0cmluZz4gPSB7XHJcbiAgbGluZWFyOiAnbGluZWFyJyxcclxuICBlYXNlOiAnZWFzZScsXHJcbiAgZWFzZUluOiAnZWFzZS1pbicsXHJcbiAgZWFzZU91dDogJ2Vhc2Utb3V0JyxcclxuICBlYXNlSW5PdXQ6ICdlYXNlLWluLW91dCcsXHJcbiAgZWFzZUluQmFjazogJ2N1YmljLWJlemllcigwLjYsIC0wLjI4LCAwLjczNSwgMC4wNDUpJyxcclxuICBlYXNlT3V0QmFjazogJ2N1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KScsXHJcbiAgZWFzZUluT3V0QmFjazogJ2N1YmljLWJlemllcigwLjY4LCAtMC41NSwgMC4yNjUsIDEuNTUpJyxcclxuICBlYXNlSW5FbGFzdGljOiAnY3ViaWMtYmV6aWVyKDAuNSwgLTAuNSwgMC43NSwgMS4yNSknLFxyXG4gIGVhc2VPdXRFbGFzdGljOiAnY3ViaWMtYmV6aWVyKDAuMjUsIC0wLjI1LCAwLjI1LCAxLjUpJyxcclxuICBlYXNlT3V0Qm91bmNlOiAnY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpJyxcclxufSBhcyBjb25zdDtcclxuXHJcbi8qKiBEdXJhw6fDtWVzIHByZWRlZmluaWRhcyAqL1xyXG5leHBvcnQgdHlwZSBCckFuaW1hdGlvbkR1cmF0aW9uID0gJ2luc3RhbnQnIHwgJ2Zhc3QnIHwgJ25vcm1hbCcgfCAnc2xvdycgfCAnc2xvd2VyJztcclxuXHJcbi8qKiBNYXBlYW1lbnRvIGRlIGR1cmHDp8OjbyBwYXJhIHZhbG9yZXMgZW0gbXMgKi9cclxuZXhwb3J0IGNvbnN0IEJSX0FOSU1BVElPTl9EVVJBVElPTl9NQVA6IFJlY29yZDxCckFuaW1hdGlvbkR1cmF0aW9uLCBudW1iZXI+ID0ge1xyXG4gIGluc3RhbnQ6IDEwMCxcclxuICBmYXN0OiAxNTAsXHJcbiAgbm9ybWFsOiAyNTAsXHJcbiAgc2xvdzogNDAwLFxyXG4gIHNsb3dlcjogNjAwLFxyXG59IGFzIGNvbnN0O1xyXG5cclxuLyoqIENvbmZpZ3VyYcOnw6NvIGRlIHVtYSBhbmltYcOnw6NvIGluZGl2aWR1YWwgKi9cclxuZXhwb3J0IGludGVyZmFjZSBCckFuaW1hdGlvbkNvbmZpZyB7XHJcbiAgLyoqIFRpcG8gZGEgYW5pbWHDp8OjbyAqL1xyXG4gIHR5cGU6IEJyQW5pbWF0aW9uVHlwZTtcclxuICAvKiogRHVyYcOnw6NvIGVtIG1zIG91IHByZWRlZmluaWRhICovXHJcbiAgZHVyYXRpb24/OiBudW1iZXIgfCBCckFuaW1hdGlvbkR1cmF0aW9uO1xyXG4gIC8qKiBEZWxheSBhbnRlcyBkZSBpbmljaWFyIGVtIG1zICovXHJcbiAgZGVsYXk/OiBudW1iZXI7XHJcbiAgLyoqIEN1cnZhIGRlIGVhc2luZyAqL1xyXG4gIGVhc2luZz86IEJyQW5pbWF0aW9uRWFzaW5nO1xyXG4gIC8qKiBOw7ptZXJvIGRlIGl0ZXJhw6fDtWVzIChJbmZpbml0eSBwYXJhIGxvb3ApICovXHJcbiAgaXRlcmF0aW9ucz86IG51bWJlciB8ICdpbmZpbml0ZSc7XHJcbiAgLyoqIERpcmXDp8OjbyBkYSBhbmltYcOnw6NvICovXHJcbiAgZGlyZWN0aW9uPzogJ25vcm1hbCcgfCAncmV2ZXJzZScgfCAnYWx0ZXJuYXRlJyB8ICdhbHRlcm5hdGUtcmV2ZXJzZSc7XHJcbiAgLyoqIEVzdGFkbyBmaW5hbCBhcMOzcyBhbmltYcOnw6NvICovXHJcbiAgZmlsbE1vZGU/OiAnbm9uZScgfCAnZm9yd2FyZHMnIHwgJ2JhY2t3YXJkcycgfCAnYm90aCc7XHJcbn1cclxuXHJcbi8qKiBDb25maWd1cmHDp8OjbyBkZSBhbmltYcOnw6NvIGRlIGVudHJhZGEvc2HDrWRhICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQnJUcmFuc2l0aW9uQ29uZmlnIHtcclxuICAvKiogQW5pbWHDp8OjbyBkZSBlbnRyYWRhICovXHJcbiAgZW50ZXI/OiBCckFuaW1hdGlvbkNvbmZpZztcclxuICAvKiogQW5pbWHDp8OjbyBkZSBzYcOtZGEgKi9cclxuICBsZWF2ZT86IEJyQW5pbWF0aW9uQ29uZmlnO1xyXG59XHJcblxyXG4vKiogQ29uZmlndXJhw6fDo28gZ2xvYmFsIGRlIGFuaW1hw6fDtWVzICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQnJBbmltYXRpb25HbG9iYWxDb25maWcge1xyXG4gIC8qKiBIYWJpbGl0YS9kZXNhYmlsaXRhIHRvZGFzIGFzIGFuaW1hw6fDtWVzIGdsb2JhbG1lbnRlICovXHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxuICAvKiogUmVzcGVpdGEgcHJlZmVyw6puY2lhIGRvIHVzdcOhcmlvIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKSAqL1xyXG4gIHJlc3BlY3RSZWR1Y2VkTW90aW9uOiBib29sZWFuO1xyXG4gIC8qKiBEdXJhw6fDo28gcGFkcsOjbyBwYXJhIHRvZGFzIGFzIGFuaW1hw6fDtWVzICovXHJcbiAgZGVmYXVsdER1cmF0aW9uOiBudW1iZXIgfCBCckFuaW1hdGlvbkR1cmF0aW9uO1xyXG4gIC8qKiBFYXNpbmcgcGFkcsOjbyBwYXJhIHRvZGFzIGFzIGFuaW1hw6fDtWVzICovXHJcbiAgZGVmYXVsdEVhc2luZzogQnJBbmltYXRpb25FYXNpbmc7XHJcbn1cclxuXHJcbi8qKiBDb25maWd1cmHDp8OjbyBwYWRyw6NvIGdsb2JhbCAqL1xyXG5leHBvcnQgY29uc3QgQlJfQU5JTUFUSU9OX0RFRkFVTFRfQ09ORklHOiBCckFuaW1hdGlvbkdsb2JhbENvbmZpZyA9IHtcclxuICBlbmFibGVkOiBmYWxzZSwgLy8gRGVzYWJpbGl0YWRvIHBvciBwYWRyw6NvXHJcbiAgcmVzcGVjdFJlZHVjZWRNb3Rpb246IHRydWUsXHJcbiAgZGVmYXVsdER1cmF0aW9uOiAnbm9ybWFsJyxcclxuICBkZWZhdWx0RWFzaW5nOiAnZWFzZU91dCcsXHJcbn0gYXMgY29uc3Q7XHJcblxyXG4vKiogRXN0YWRvIGRlIHVtYSBhbmltYcOnw6NvIGVtIGV4ZWN1w6fDo28gKi9cclxuZXhwb3J0IGludGVyZmFjZSBCckFuaW1hdGlvblN0YXRlIHtcclxuICAvKiogU2UgZXN0w6EgYW5pbWFuZG8gKi9cclxuICBpc0FuaW1hdGluZzogYm9vbGVhbjtcclxuICAvKiogVGlwbyBhdHVhbCAqL1xyXG4gIGN1cnJlbnRBbmltYXRpb246IEJyQW5pbWF0aW9uVHlwZSB8IG51bGw7XHJcbiAgLyoqIFNlIGZvaSBjb25jbHXDrWRhICovXHJcbiAgaXNDb21wbGV0ZWQ6IGJvb2xlYW47XHJcbiAgLyoqIFNlIGZvaSBjYW5jZWxhZGEgKi9cclxuICBpc0NhbmNlbGxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqIEV2ZW50byBlbWl0aWRvIGR1cmFudGUgYW5pbWHDp8OjbyAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEJyQW5pbWF0aW9uRXZlbnQge1xyXG4gIC8qKiBUaXBvIGRhIGFuaW1hw6fDo28gKi9cclxuICB0eXBlOiBCckFuaW1hdGlvblR5cGU7XHJcbiAgLyoqIEZhc2U6IGluw61jaW8sIGZpbSwgY2FuY2VsYW1lbnRvICovXHJcbiAgcGhhc2U6ICdzdGFydCcgfCAnZW5kJyB8ICdjYW5jZWwnO1xyXG4gIC8qKiBFbGVtZW50byBhbHZvICovXHJcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgLyoqIFRpbWVzdGFtcCBkbyBldmVudG8gKi9cclxuICB0aW1lc3RhbXA6IG51bWJlcjtcclxufVxyXG5cclxuLyoqIFRyaWdnZXIgcGFyYSBpbmljaWFyIGFuaW1hw6fDo28gKi9cclxuZXhwb3J0IHR5cGUgQnJBbmltYXRpb25UcmlnZ2VyID1cclxuICB8ICdpbW1lZGlhdGUnICAgICAvLyBJbWVkaWF0YW1lbnRlIGFvIG1vbnRhclxyXG4gIHwgJ3Zpc2libGUnICAgICAgIC8vIFF1YW5kbyB2aXPDrXZlbCBubyB2aWV3cG9ydCAoSW50ZXJzZWN0aW9uIE9ic2VydmVyKVxyXG4gIHwgJ2hvdmVyJyAgICAgICAgIC8vIE5vIGhvdmVyXHJcbiAgfCAnZm9jdXMnICAgICAgICAgLy8gTm8gZm9jdXNcclxuICB8ICdjbGljaycgICAgICAgICAvLyBObyBjbGlja1xyXG4gIHwgJ21hbnVhbCc7ICAgICAgIC8vIENvbnRyb2xhZG8gcHJvZ3JhbWF0aWNhbWVudGVcclxuXHJcbi8qKiBDb25maWd1cmHDp8OjbyBwYXJhIGRpcmV0aXZhIGJyQW5pbWF0ZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEJyQW5pbWF0ZURpcmVjdGl2ZUNvbmZpZyB7XHJcbiAgLyoqIEFuaW1hw6fDo28gYSBleGVjdXRhciAqL1xyXG4gIGFuaW1hdGlvbjogQnJBbmltYXRpb25UeXBlO1xyXG4gIC8qKiBUcmlnZ2VyIHF1ZSBpbmljaWEgYSBhbmltYcOnw6NvICovXHJcbiAgdHJpZ2dlcj86IEJyQW5pbWF0aW9uVHJpZ2dlcjtcclxuICAvKiogRHVyYcOnw6NvICovXHJcbiAgZHVyYXRpb24/OiBudW1iZXIgfCBCckFuaW1hdGlvbkR1cmF0aW9uO1xyXG4gIC8qKiBEZWxheSAqL1xyXG4gIGRlbGF5PzogbnVtYmVyO1xyXG4gIC8qKiBFYXNpbmcgKi9cclxuICBlYXNpbmc/OiBCckFuaW1hdGlvbkVhc2luZztcclxuICAvKiogVGhyZXNob2xkIHBhcmEgSW50ZXJzZWN0aW9uIE9ic2VydmVyICgwLTEpICovXHJcbiAgdmlzaWJpbGl0eVRocmVzaG9sZD86IG51bWJlcjtcclxuICAvKiogU2UgZGV2ZSBhbmltYXIgYXBlbmFzIHVtYSB2ZXogKi9cclxuICBvbmNlPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqIENvbmZpZ3VyYcOnw6NvIHBhcmEgc3RhZ2dlciAoYW5pbWHDp8OjbyBlbSBzZXF1w6puY2lhKSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEJyU3RhZ2dlckNvbmZpZyB7XHJcbiAgLyoqIEFuaW1hw6fDo28gYmFzZSAqL1xyXG4gIGFuaW1hdGlvbjogQnJBbmltYXRpb25UeXBlO1xyXG4gIC8qKiBEZWxheSBlbnRyZSBjYWRhIGl0ZW0gZW0gbXMgKi9cclxuICBzdGFnZ2VyRGVsYXk6IG51bWJlcjtcclxuICAvKiogRGVsYXkgaW5pY2lhbCBhbnRlcyBkbyBwcmltZWlybyBpdGVtICovXHJcbiAgaW5pdGlhbERlbGF5PzogbnVtYmVyO1xyXG4gIC8qKiBEdXJhw6fDo28gZGUgY2FkYSBhbmltYcOnw6NvICovXHJcbiAgZHVyYXRpb24/OiBudW1iZXIgfCBCckFuaW1hdGlvbkR1cmF0aW9uO1xyXG4gIC8qKiBFYXNpbmcgKi9cclxuICBlYXNpbmc/OiBCckFuaW1hdGlvbkVhc2luZztcclxufVxyXG4iXX0=
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Sistema de Animações Gov.br
3
+ * @description Animações configuráveis e acessíveis para componentes Angular
4
+ */
5
+ // Types e interfaces
6
+ export * from './animation.types';
7
+ // Serviço principal
8
+ export { BrAnimationService, BR_ANIMATION_CONFIG } from './animation.service';
9
+ // Diretiva de animação
10
+ export { BrAnimateDirective } from './animate.directive';
11
+ // Componentes de feedback
12
+ export { BrSuccessCheckComponent } from './success-check.component';
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1nb3Zici10dy9zcmMvbGliL2FuaW1hdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgscUJBQXFCO0FBQ3JCLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlFLHVCQUF1QjtBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV6RCwwQkFBMEI7QUFDMUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogU2lzdGVtYSBkZSBBbmltYcOnw7VlcyBHb3YuYnJcclxuICogQGRlc2NyaXB0aW9uIEFuaW1hw6fDtWVzIGNvbmZpZ3Vyw6F2ZWlzIGUgYWNlc3PDrXZlaXMgcGFyYSBjb21wb25lbnRlcyBBbmd1bGFyXHJcbiAqL1xyXG5cclxuLy8gVHlwZXMgZSBpbnRlcmZhY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vYW5pbWF0aW9uLnR5cGVzJztcclxuXHJcbi8vIFNlcnZpw6dvIHByaW5jaXBhbFxyXG5leHBvcnQgeyBCckFuaW1hdGlvblNlcnZpY2UsIEJSX0FOSU1BVElPTl9DT05GSUcgfSBmcm9tICcuL2FuaW1hdGlvbi5zZXJ2aWNlJztcclxuXHJcbi8vIERpcmV0aXZhIGRlIGFuaW1hw6fDo29cclxuZXhwb3J0IHsgQnJBbmltYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9hbmltYXRlLmRpcmVjdGl2ZSc7XHJcblxyXG4vLyBDb21wb25lbnRlcyBkZSBmZWVkYmFja1xyXG5leHBvcnQgeyBCclN1Y2Nlc3NDaGVja0NvbXBvbmVudCB9IGZyb20gJy4vc3VjY2Vzcy1jaGVjay5jb21wb25lbnQnO1xyXG4iXX0=