@bravobit/bb-foundation 0.23.7 → 0.24.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 (207) hide show
  1. package/auth/lib/auth.module.d.ts +2 -3
  2. package/auth/lib/interfaces/config.interface.d.ts +0 -4
  3. package/auth/public_api.d.ts +0 -5
  4. package/esm2020/auth/lib/auth.interceptor.mjs +4 -4
  5. package/esm2020/auth/lib/auth.module.mjs +7 -16
  6. package/esm2020/auth/lib/auth.service.mjs +5 -5
  7. package/esm2020/auth/lib/directives/authenticated.directive.mjs +4 -4
  8. package/esm2020/auth/lib/guards/anonymous.guard.mjs +4 -4
  9. package/esm2020/auth/lib/guards/authenticated.guard.mjs +4 -4
  10. package/esm2020/auth/lib/interfaces/config.interface.mjs +1 -1
  11. package/esm2020/auth/public_api.mjs +1 -6
  12. package/esm2020/collections/lib/collections.module.mjs +5 -5
  13. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +4 -4
  14. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +4 -4
  15. package/esm2020/collections/lib/components/collections.directive.mjs +13 -13
  16. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +4 -4
  17. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +4 -4
  18. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +5 -5
  19. package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +4 -4
  20. package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +4 -4
  21. package/esm2020/controls/lib/control-error/control-error.module.mjs +5 -5
  22. package/esm2020/controls/lib/controls.module.mjs +5 -5
  23. package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +4 -4
  24. package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +4 -4
  25. package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +4 -4
  26. package/esm2020/controls/lib/form-control/form-control.module.mjs +5 -5
  27. package/esm2020/controls/lib/radio/radio-button/radio-button.component.mjs +4 -4
  28. package/esm2020/controls/lib/radio/radio-group/radio-group.component.mjs +4 -4
  29. package/esm2020/controls/lib/radio/radio.module.mjs +5 -5
  30. package/esm2020/controls/lib/toggle/toggle/toggle.component.mjs +4 -4
  31. package/esm2020/controls/lib/toggle/toggle-group/toggle-group.component.mjs +4 -4
  32. package/esm2020/controls/lib/toggle/toggle.module.mjs +5 -5
  33. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +4 -4
  34. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +4 -4
  35. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +4 -4
  36. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +4 -4
  37. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +4 -4
  38. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +4 -4
  39. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +4 -4
  40. package/esm2020/dashboard/lib/dashboard.module.mjs +5 -5
  41. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +4 -4
  42. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +4 -4
  43. package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +4 -4
  44. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +4 -4
  45. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +4 -4
  46. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +4 -4
  47. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +4 -4
  48. package/esm2020/dialog/lib/dialog.insertion.mjs +4 -4
  49. package/esm2020/dialog/lib/dialog.module.mjs +5 -5
  50. package/esm2020/dialog/lib/dialog.service.mjs +4 -4
  51. package/esm2020/elements/lib/avatar/avatar.component.mjs +4 -4
  52. package/esm2020/elements/lib/button/button.component.mjs +7 -7
  53. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +4 -4
  54. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +4 -4
  55. package/esm2020/elements/lib/directives/addon.directive.mjs +7 -7
  56. package/esm2020/elements/lib/directives/form-submit.directive.mjs +4 -4
  57. package/esm2020/elements/lib/directives/form-submitter.directive.mjs +4 -4
  58. package/esm2020/elements/lib/directives/input.directive.mjs +7 -7
  59. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +7 -7
  60. package/esm2020/elements/lib/elements.module.mjs +5 -5
  61. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +4 -4
  62. package/esm2020/elements/lib/form-control/form-control.component.mjs +4 -4
  63. package/esm2020/elements/lib/form-error/form-error.component.mjs +4 -4
  64. package/esm2020/elements/lib/form-group/form-group.component.mjs +4 -4
  65. package/esm2020/elements/lib/icon/icon.component.mjs +4 -4
  66. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +4 -4
  67. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +4 -4
  68. package/esm2020/elements/lib/pipes/file-size.pipe.mjs +4 -4
  69. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +4 -4
  70. package/esm2020/elements/lib/spinner/spinner.component.mjs +4 -4
  71. package/esm2020/elements/lib/tag/tag.component.mjs +4 -4
  72. package/esm2020/http/lib/http.module.mjs +5 -5
  73. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +4 -4
  74. package/esm2020/http/lib/interceptors/error.interceptor.mjs +4 -4
  75. package/esm2020/lib/core/services/clipboard.service.mjs +4 -4
  76. package/esm2020/lib/core/services/exif.service.mjs +4 -4
  77. package/esm2020/lib/core/services/file-loader.service.mjs +4 -4
  78. package/esm2020/lib/core/services/image-converter.service.mjs +4 -4
  79. package/esm2020/lib/core/services/languages.service.mjs +4 -4
  80. package/esm2020/lib/core/services/network.service.mjs +4 -4
  81. package/esm2020/lib/core/services/patch.service.mjs +4 -4
  82. package/esm2020/localize/lib/localize.module.mjs +5 -5
  83. package/esm2020/localize/lib/localize.pipe.mjs +4 -4
  84. package/esm2020/localize/lib/localize.service.mjs +4 -4
  85. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +4 -4
  86. package/esm2020/localize/lib/views/localize-template.directive.mjs +4 -4
  87. package/esm2020/masking/lib/directives/currency-mask.directive.mjs +4 -4
  88. package/esm2020/masking/lib/directives/date-mask.directive.mjs +4 -4
  89. package/esm2020/masking/lib/directives/input-mask.directive.mjs +4 -4
  90. package/esm2020/masking/lib/masking.module.mjs +5 -5
  91. package/esm2020/masking/lib/masking.service.mjs +4 -4
  92. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +4 -4
  93. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +4 -4
  94. package/esm2020/notifications/lib/notifications.module.mjs +5 -5
  95. package/esm2020/notifications/lib/notifications.service.mjs +4 -4
  96. package/esm2020/permissions/bravobit-bb-foundation-permissions.mjs +5 -0
  97. package/esm2020/permissions/lib/directives/permission.directive.mjs +88 -0
  98. package/esm2020/permissions/lib/guards/permission.guard.mjs +57 -0
  99. package/esm2020/permissions/lib/handlers/abstract.handler.mjs +3 -0
  100. package/esm2020/permissions/lib/handlers/role.handler.mjs +27 -0
  101. package/esm2020/permissions/lib/permissions.interface.mjs +3 -0
  102. package/esm2020/permissions/lib/permissions.module.mjs +39 -0
  103. package/esm2020/permissions/lib/permissions.service.mjs +86 -0
  104. package/esm2020/permissions/public_api.mjs +8 -0
  105. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +4 -4
  106. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +4 -4
  107. package/esm2020/recaptcha/lib/recaptcha.module.mjs +5 -5
  108. package/esm2020/storage/lib/storage.service.mjs +4 -4
  109. package/esm2020/table/lib/components/table/table.component.mjs +10 -10
  110. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +4 -4
  111. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +4 -4
  112. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +4 -4
  113. package/esm2020/table/lib/table.module.mjs +5 -5
  114. package/esm2020/theming/lib/theming.directive.mjs +4 -4
  115. package/esm2020/theming/lib/theming.module.mjs +5 -5
  116. package/esm2020/utils/lib/directives/autosize.directive.mjs +4 -4
  117. package/esm2020/utils/lib/directives/focus-trap.directive.mjs +4 -4
  118. package/esm2020/utils/lib/directives/focus.directive.mjs +4 -4
  119. package/esm2020/utils/lib/directives/template.directive.mjs +4 -4
  120. package/esm2020/utils/lib/utils.module.mjs +5 -5
  121. package/fesm2015/bravobit-bb-foundation-auth.mjs +30 -261
  122. package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -1
  123. package/fesm2015/bravobit-bb-foundation-collections.mjs +22 -22
  124. package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -1
  125. package/fesm2015/bravobit-bb-foundation-controls.mjs +57 -57
  126. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -1
  127. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +25 -25
  128. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  129. package/fesm2015/bravobit-bb-foundation-dialog.mjs +31 -31
  130. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -1
  131. package/fesm2015/bravobit-bb-foundation-elements.mjs +76 -76
  132. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -1
  133. package/fesm2015/bravobit-bb-foundation-http.mjs +10 -10
  134. package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -1
  135. package/fesm2015/bravobit-bb-foundation-localize.mjs +16 -16
  136. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -1
  137. package/fesm2015/bravobit-bb-foundation-masking.mjs +16 -16
  138. package/fesm2015/bravobit-bb-foundation-masking.mjs.map +1 -1
  139. package/fesm2015/bravobit-bb-foundation-notifications.mjs +13 -13
  140. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -1
  141. package/fesm2015/bravobit-bb-foundation-permissions.mjs +301 -0
  142. package/fesm2015/bravobit-bb-foundation-permissions.mjs.map +1 -0
  143. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +10 -10
  144. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  145. package/fesm2015/bravobit-bb-foundation-storage.mjs +3 -3
  146. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -1
  147. package/fesm2015/bravobit-bb-foundation-table.mjs +22 -22
  148. package/fesm2015/bravobit-bb-foundation-table.mjs.map +1 -1
  149. package/fesm2015/bravobit-bb-foundation-theming.mjs +7 -7
  150. package/fesm2015/bravobit-bb-foundation-theming.mjs.map +1 -1
  151. package/fesm2015/bravobit-bb-foundation-utils.mjs +16 -16
  152. package/fesm2015/bravobit-bb-foundation-utils.mjs.map +1 -1
  153. package/fesm2015/bravobit-bb-foundation.mjs +21 -21
  154. package/fesm2015/bravobit-bb-foundation.mjs.map +1 -1
  155. package/fesm2020/bravobit-bb-foundation-auth.mjs +25 -239
  156. package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -1
  157. package/fesm2020/bravobit-bb-foundation-collections.mjs +22 -22
  158. package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -1
  159. package/fesm2020/bravobit-bb-foundation-controls.mjs +57 -57
  160. package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -1
  161. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +25 -25
  162. package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  163. package/fesm2020/bravobit-bb-foundation-dialog.mjs +31 -31
  164. package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -1
  165. package/fesm2020/bravobit-bb-foundation-elements.mjs +76 -76
  166. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -1
  167. package/fesm2020/bravobit-bb-foundation-http.mjs +10 -10
  168. package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -1
  169. package/fesm2020/bravobit-bb-foundation-localize.mjs +16 -16
  170. package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -1
  171. package/fesm2020/bravobit-bb-foundation-masking.mjs +16 -16
  172. package/fesm2020/bravobit-bb-foundation-masking.mjs.map +1 -1
  173. package/fesm2020/bravobit-bb-foundation-notifications.mjs +13 -13
  174. package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -1
  175. package/fesm2020/bravobit-bb-foundation-permissions.mjs +289 -0
  176. package/fesm2020/bravobit-bb-foundation-permissions.mjs.map +1 -0
  177. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +10 -10
  178. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  179. package/fesm2020/bravobit-bb-foundation-storage.mjs +3 -3
  180. package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -1
  181. package/fesm2020/bravobit-bb-foundation-table.mjs +22 -22
  182. package/fesm2020/bravobit-bb-foundation-table.mjs.map +1 -1
  183. package/fesm2020/bravobit-bb-foundation-theming.mjs +7 -7
  184. package/fesm2020/bravobit-bb-foundation-theming.mjs.map +1 -1
  185. package/fesm2020/bravobit-bb-foundation-utils.mjs +16 -16
  186. package/fesm2020/bravobit-bb-foundation-utils.mjs.map +1 -1
  187. package/fesm2020/bravobit-bb-foundation.mjs +21 -21
  188. package/fesm2020/bravobit-bb-foundation.mjs.map +1 -1
  189. package/package.json +13 -5
  190. package/permissions/index.d.ts +5 -0
  191. package/{auth → permissions}/lib/directives/permission.directive.d.ts +9 -4
  192. package/{auth → permissions}/lib/guards/permission.guard.d.ts +4 -5
  193. package/permissions/lib/handlers/abstract.handler.d.ts +4 -0
  194. package/permissions/lib/handlers/role.handler.d.ts +9 -0
  195. package/permissions/lib/permissions.interface.d.ts +11 -0
  196. package/permissions/lib/permissions.module.d.ts +10 -0
  197. package/permissions/lib/permissions.service.d.ts +22 -0
  198. package/permissions/public_api.d.ts +7 -0
  199. package/README.md +0 -47
  200. package/auth/lib/interfaces/permission.interface.d.ts +0 -6
  201. package/auth/lib/permissions/permissions.handler.d.ts +0 -9
  202. package/auth/lib/permissions/permissions.service.d.ts +0 -18
  203. package/esm2020/auth/lib/directives/permission.directive.mjs +0 -58
  204. package/esm2020/auth/lib/guards/permission.guard.mjs +0 -63
  205. package/esm2020/auth/lib/interfaces/permission.interface.mjs +0 -2
  206. package/esm2020/auth/lib/permissions/permissions.handler.mjs +0 -33
  207. package/esm2020/auth/lib/permissions/permissions.service.mjs +0 -73
@@ -0,0 +1,289 @@
1
+ import { map, distinctUntilChanged, switchMap } from 'rxjs/operators';
2
+ import * as i0 from '@angular/core';
3
+ import { Injectable, Directive, Input, Optional, NgModule } from '@angular/core';
4
+ import { BehaviorSubject, Subscription, of, isObservable, combineLatest } from 'rxjs';
5
+ import * as i1 from '@angular/router';
6
+ import { Auth } from '@bravobit/bb-foundation/auth';
7
+
8
+ class PermissionsHandler {
9
+ }
10
+
11
+ class RolePermissionHandler extends PermissionsHandler {
12
+ constructor(auth, localPermissions) {
13
+ super();
14
+ this.auth = auth;
15
+ this.localPermissions = localPermissions;
16
+ }
17
+ get() {
18
+ return this.auth.user.pipe(map(user => user?.role ?? null), map(role => {
19
+ if (role === null || role === undefined) {
20
+ return [];
21
+ }
22
+ return this.getPermissionsForRole(role);
23
+ }));
24
+ }
25
+ getPermissionsForRole(role) {
26
+ return Object.keys(this.localPermissions ?? {}).reduce((previous, current) => {
27
+ const roles = this.localPermissions?.[current] ?? [];
28
+ if (roles === '*' || roles?.includes(role)) {
29
+ return [...previous, current];
30
+ }
31
+ return previous;
32
+ }, []);
33
+ }
34
+ }
35
+
36
+ class Permissions {
37
+ constructor(_handler) {
38
+ this._handler = _handler;
39
+ // State.
40
+ this._activePermissions$ = new BehaviorSubject([]);
41
+ // Subscriptions.
42
+ this._subscription = new Subscription();
43
+ this.trackPermissions();
44
+ }
45
+ ngOnDestroy() {
46
+ this._subscription?.unsubscribe();
47
+ }
48
+ all() {
49
+ return this._activePermissions$.asObservable();
50
+ }
51
+ allSync() {
52
+ return this._activePermissions$.getValue();
53
+ }
54
+ has(value, options) {
55
+ const requiredPermissions = this.getRequiredPermissions(value);
56
+ if (requiredPermissions?.length <= 0) {
57
+ return of(false);
58
+ }
59
+ return this._activePermissions$.pipe(map(activePermissions => this.hasPermission(requiredPermissions, activePermissions, options)), distinctUntilChanged());
60
+ }
61
+ hasSync(value, options) {
62
+ const requiredPermissions = this.getRequiredPermissions(value);
63
+ if (requiredPermissions?.length <= 0) {
64
+ return false;
65
+ }
66
+ const activePermissions = this._activePermissions$.getValue();
67
+ return this.hasPermission(requiredPermissions, activePermissions, options);
68
+ }
69
+ hasPermission(requiredPermissions, activePermissions, options) {
70
+ const mode = options?.mode ?? 'and';
71
+ switch (mode) {
72
+ case 'or':
73
+ return this.verifyModeOr(requiredPermissions, activePermissions);
74
+ case 'and':
75
+ default:
76
+ return this.verifyModeAnd(requiredPermissions, activePermissions);
77
+ }
78
+ }
79
+ verifyModeAnd(permissions, activePermissions) {
80
+ for (const permission of permissions) {
81
+ const verified = activePermissions?.includes(permission);
82
+ if (!verified) {
83
+ return false;
84
+ }
85
+ }
86
+ return true;
87
+ }
88
+ verifyModeOr(permissions, activePermissions) {
89
+ for (const permission of permissions) {
90
+ const verified = activePermissions?.includes(permission);
91
+ if (verified) {
92
+ return true;
93
+ }
94
+ }
95
+ return false;
96
+ }
97
+ getRequiredPermissions(value) {
98
+ return Array.isArray(value)
99
+ ? value
100
+ : [value];
101
+ }
102
+ trackPermissions() {
103
+ const data = this._handler.get();
104
+ const permissions$ = isObservable(data) ? data : of(data);
105
+ const subscription = permissions$.subscribe(permissions => {
106
+ this._activePermissions$.next(permissions ?? []);
107
+ });
108
+ this._subscription.add(subscription);
109
+ }
110
+ }
111
+ Permissions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: Permissions, deps: [{ token: PermissionsHandler }], target: i0.ɵɵFactoryTarget.Injectable });
112
+ Permissions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: Permissions });
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: Permissions, decorators: [{
114
+ type: Injectable
115
+ }], ctorParameters: function () { return [{ type: PermissionsHandler }]; } });
116
+
117
+ class BbPermission {
118
+ constructor(_permissions, _templateRef, _viewContainerRef) {
119
+ this._permissions = _permissions;
120
+ this._templateRef = _templateRef;
121
+ this._viewContainerRef = _viewContainerRef;
122
+ // Templates.
123
+ this._elseTemplateRef = null;
124
+ // View refs.
125
+ this._thenViewRef = null;
126
+ this._elseViewRef = null;
127
+ // Data.
128
+ this._valid = false;
129
+ this._permission$ = new BehaviorSubject([]);
130
+ this._mode$ = new BehaviorSubject('and');
131
+ // Subscriptions.
132
+ this._subscription = new Subscription();
133
+ }
134
+ set bbPermission(value) {
135
+ const permissions = Array.isArray(value) ? value : [value];
136
+ this._permission$.next(permissions);
137
+ this.updateView();
138
+ }
139
+ set bbPermissionElse(templateRef) {
140
+ this.assertTemplate('bbPermissionElse', templateRef);
141
+ this._elseTemplateRef = templateRef;
142
+ this.updateView();
143
+ }
144
+ set bbPermissionMode(mode) {
145
+ this._mode$.next(mode);
146
+ }
147
+ ngOnInit() {
148
+ const check$ = combineLatest([this._permission$, this._mode$]).pipe(switchMap(([permissions, mode]) => this._permissions.has(permissions, { mode })), distinctUntilChanged());
149
+ const subscription = check$.subscribe(valid => {
150
+ this._valid = valid;
151
+ this.updateView();
152
+ });
153
+ this._subscription.add(subscription);
154
+ }
155
+ ngOnDestroy() {
156
+ this._subscription?.unsubscribe();
157
+ }
158
+ updateView() {
159
+ if (this._valid) {
160
+ if (!this._thenViewRef) {
161
+ this._viewContainerRef.clear();
162
+ this._elseViewRef = null;
163
+ if (this._templateRef) {
164
+ this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);
165
+ }
166
+ }
167
+ }
168
+ else {
169
+ if (!this._elseViewRef) {
170
+ this._viewContainerRef.clear();
171
+ this._thenViewRef = null;
172
+ if (this._elseTemplateRef) {
173
+ this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ assertTemplate(property, templateRef) {
179
+ const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
180
+ if (!isTemplateRefOrNull) {
181
+ throw new Error(`${property} must be a TemplateRef.`);
182
+ }
183
+ }
184
+ }
185
+ BbPermission.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbPermission, deps: [{ token: Permissions }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
186
+ BbPermission.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.10", type: BbPermission, selector: "[bbPermission]", inputs: { bbPermission: "bbPermission", bbPermissionElse: "bbPermissionElse", bbPermissionMode: "bbPermissionMode" }, ngImport: i0 });
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbPermission, decorators: [{
188
+ type: Directive,
189
+ args: [{
190
+ selector: '[bbPermission]'
191
+ }]
192
+ }], ctorParameters: function () { return [{ type: Permissions }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { bbPermission: [{
193
+ type: Input
194
+ }], bbPermissionElse: [{
195
+ type: Input
196
+ }], bbPermissionMode: [{
197
+ type: Input
198
+ }] } });
199
+
200
+ class PermissionsConfig {
201
+ }
202
+
203
+ class BbPermissionGuard {
204
+ constructor(_router, _permissions, _config) {
205
+ this._router = _router;
206
+ this._permissions = _permissions;
207
+ this._config = _config;
208
+ }
209
+ canActivate(snapshot, state) {
210
+ const permission = snapshot?.data?.['permission'] ?? null;
211
+ const permission$ = this.parsePermission(permission);
212
+ return permission$.pipe(map(valid => {
213
+ if (valid) {
214
+ return true;
215
+ }
216
+ const onPermissionDeniedFn = this._config?.onPermissionDenied ?? null;
217
+ console.log(onPermissionDeniedFn);
218
+ if (!onPermissionDeniedFn) {
219
+ return false;
220
+ }
221
+ const urlTree = onPermissionDeniedFn(this._router, snapshot, state);
222
+ if (!urlTree) {
223
+ return false;
224
+ }
225
+ return valid ? true : urlTree;
226
+ }));
227
+ }
228
+ canActivateChild(childRoute, state) {
229
+ return this.canActivate(childRoute, state);
230
+ }
231
+ parsePermission(data) {
232
+ if ((typeof ngDevMode === 'undefined' || ngDevMode) && (data === undefined || data === null)) {
233
+ console?.warn?.(`No "data.permission" property was passed.`);
234
+ return of(false);
235
+ }
236
+ if (Array.isArray(data) || typeof data === 'string') {
237
+ return this._permissions.has(data);
238
+ }
239
+ return this._permissions.has(data?.value, data?.options);
240
+ }
241
+ }
242
+ BbPermissionGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbPermissionGuard, deps: [{ token: i1.Router }, { token: Permissions }, { token: PermissionsConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
243
+ BbPermissionGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbPermissionGuard, providedIn: 'root' });
244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbPermissionGuard, decorators: [{
245
+ type: Injectable,
246
+ args: [{
247
+ providedIn: 'root'
248
+ }]
249
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: Permissions }, { type: PermissionsConfig, decorators: [{
250
+ type: Optional
251
+ }] }]; } });
252
+
253
+ class PermissionsModule {
254
+ static forRoot(config) {
255
+ const defaultProvider = {
256
+ provide: PermissionsHandler,
257
+ deps: [Auth],
258
+ useFactory: (auth) => {
259
+ return new RolePermissionHandler(auth, config?.permissions ?? {});
260
+ }
261
+ };
262
+ const permissionHandlerProvider = config?.provider ?? defaultProvider;
263
+ return {
264
+ ngModule: PermissionsModule,
265
+ providers: [
266
+ { provide: PermissionsConfig, useValue: config },
267
+ permissionHandlerProvider,
268
+ Permissions
269
+ ]
270
+ };
271
+ }
272
+ }
273
+ PermissionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: PermissionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
274
+ PermissionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.10", ngImport: i0, type: PermissionsModule, declarations: [BbPermission], exports: [BbPermission] });
275
+ PermissionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: PermissionsModule });
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: PermissionsModule, decorators: [{
277
+ type: NgModule,
278
+ args: [{
279
+ declarations: [BbPermission],
280
+ exports: [BbPermission]
281
+ }]
282
+ }] });
283
+
284
+ /**
285
+ * Generated bundle index. Do not edit.
286
+ */
287
+
288
+ export { BbPermission, BbPermissionGuard, Permissions, PermissionsConfig, PermissionsHandler, PermissionsModule, RolePermissionHandler };
289
+ //# sourceMappingURL=bravobit-bb-foundation-permissions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bravobit-bb-foundation-permissions.mjs","sources":["../../../projects/bb-foundation/permissions/src/lib/handlers/abstract.handler.ts","../../../projects/bb-foundation/permissions/src/lib/handlers/role.handler.ts","../../../projects/bb-foundation/permissions/src/lib/permissions.service.ts","../../../projects/bb-foundation/permissions/src/lib/directives/permission.directive.ts","../../../projects/bb-foundation/permissions/src/lib/permissions.interface.ts","../../../projects/bb-foundation/permissions/src/lib/guards/permission.guard.ts","../../../projects/bb-foundation/permissions/src/lib/permissions.module.ts","../../../projects/bb-foundation/permissions/src/bravobit-bb-foundation-permissions.ts"],"sourcesContent":["import {Observable} from 'rxjs';\n\nexport abstract class PermissionsHandler {\n\n abstract get(): Observable<string[]> | string[];\n\n}\n","import {PermissionsHandler} from './abstract.handler';\nimport {Auth} from '@bravobit/bb-foundation/auth';\nimport {map} from 'rxjs/operators';\n\nexport class RolePermissionHandler extends PermissionsHandler {\n\n constructor(protected auth: Auth,\n protected localPermissions: Record<string, string[] | '*'>) {\n super();\n }\n\n override get() {\n return this.auth.user.pipe(\n map(user => user?.role ?? null),\n map(role => {\n if (role === null || role === undefined) {\n return [];\n }\n\n return this.getPermissionsForRole(role);\n })\n );\n }\n\n protected getPermissionsForRole(role: string) {\n return Object.keys(this.localPermissions ?? {}).reduce((previous, current) => {\n const roles = this.localPermissions?.[current] ?? [];\n if (roles === '*' || roles?.includes(role)) {\n return [...previous, current];\n }\n\n return previous;\n }, []);\n }\n\n}\n","import {BehaviorSubject, isObservable, of, Subscription} from 'rxjs';\nimport {PermissionsHandler} from './handlers/abstract.handler';\nimport {PermissionOptions} from './permissions.interface';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {Injectable, OnDestroy} from '@angular/core';\n\n@Injectable()\nexport class Permissions implements OnDestroy {\n\n // State.\n private _activePermissions$ = new BehaviorSubject<string[]>([]);\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n constructor(private _handler: PermissionsHandler) {\n this.trackPermissions();\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n all() {\n return this._activePermissions$.asObservable();\n }\n\n allSync() {\n return this._activePermissions$.getValue();\n }\n\n has(value: string | string[], options?: PermissionOptions) {\n const requiredPermissions = this.getRequiredPermissions(value);\n if (requiredPermissions?.length <= 0) {\n return of(false);\n }\n\n return this._activePermissions$.pipe(\n map(activePermissions => this.hasPermission(requiredPermissions, activePermissions, options)),\n distinctUntilChanged()\n );\n }\n\n hasSync(value: string | string[], options?: PermissionOptions) {\n const requiredPermissions = this.getRequiredPermissions(value);\n if (requiredPermissions?.length <= 0) {\n return false;\n }\n\n const activePermissions = this._activePermissions$.getValue();\n return this.hasPermission(requiredPermissions, activePermissions, options);\n }\n\n private hasPermission(requiredPermissions: string[], activePermissions: string[], options?: PermissionOptions) {\n const mode = options?.mode ?? 'and';\n switch (mode) {\n case 'or':\n return this.verifyModeOr(requiredPermissions, activePermissions);\n case 'and':\n default:\n return this.verifyModeAnd(requiredPermissions, activePermissions);\n }\n }\n\n private verifyModeAnd(permissions: string[], activePermissions: string[]) {\n for (const permission of permissions) {\n const verified = activePermissions?.includes(permission);\n if (!verified) {\n return false;\n }\n }\n\n return true;\n }\n\n private verifyModeOr(permissions: string[], activePermissions: string[]) {\n for (const permission of permissions) {\n const verified = activePermissions?.includes(permission);\n if (verified) {\n return true;\n }\n }\n\n return false;\n }\n\n private getRequiredPermissions(value: string | string[]) {\n return Array.isArray(value)\n ? value\n : [value];\n }\n\n private trackPermissions() {\n const data = this._handler.get();\n const permissions$ = isObservable(data) ? data : of(data);\n\n const subscription = permissions$.subscribe(permissions => {\n this._activePermissions$.next(permissions ?? []);\n });\n this._subscription.add(subscription);\n }\n\n}\n","import {Directive, EmbeddedViewRef, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Subscription} from 'rxjs';\nimport {distinctUntilChanged, switchMap} from 'rxjs/operators';\nimport {PermissionMode} from '../permissions.interface';\nimport {Permissions} from '../permissions.service';\n\n@Directive({\n selector: '[bbPermission]'\n})\nexport class BbPermission implements OnInit, OnDestroy {\n\n // Templates.\n private _elseTemplateRef: TemplateRef<any> | null = null;\n\n // View refs.\n private _thenViewRef: EmbeddedViewRef<any> | null = null;\n private _elseViewRef: EmbeddedViewRef<any> | null = null;\n\n // Data.\n private _valid: boolean = false;\n private _permission$ = new BehaviorSubject<string[]>([]);\n private _mode$ = new BehaviorSubject<PermissionMode>('and');\n\n @Input()\n set bbPermission(value: string | string[]) {\n const permissions = Array.isArray(value) ? value : [value];\n this._permission$.next(permissions);\n this.updateView();\n }\n\n @Input()\n set bbPermissionElse(templateRef: TemplateRef<any>) {\n this.assertTemplate('bbPermissionElse', templateRef);\n this._elseTemplateRef = templateRef;\n this.updateView();\n }\n\n @Input()\n set bbPermissionMode(mode: PermissionMode) {\n this._mode$.next(mode);\n }\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n constructor(private _permissions: Permissions,\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n }\n\n ngOnInit() {\n const check$ = combineLatest([this._permission$, this._mode$]).pipe(\n switchMap(([permissions, mode]) => this._permissions.has(permissions, {mode})),\n distinctUntilChanged()\n );\n\n const subscription = check$.subscribe(valid => {\n this._valid = valid;\n this.updateView();\n });\n this._subscription.add(subscription);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n private updateView() {\n if (this._valid) {\n if (!this._thenViewRef) {\n this._viewContainerRef.clear();\n this._elseViewRef = null;\n if (this._templateRef) {\n this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n }\n } else {\n if (!this._elseViewRef) {\n this._viewContainerRef.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);\n }\n }\n }\n }\n\n private assertTemplate(property: string, templateRef: TemplateRef<any> | null) {\n const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n if (!isTemplateRefOrNull) {\n throw new Error(`${property} must be a TemplateRef.`);\n }\n }\n\n static ngAcceptInputType_bbPermission: string | string[];\n static ngAcceptInputType_bbPermissionElse: TemplateRef<any>;\n static ngAcceptInputType_bbPermissionMode: PermissionMode;\n\n}\n","import {ActivatedRouteSnapshot, Router, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {Provider} from '@angular/core';\n\nexport class PermissionsConfig {\n permissions?: Record<string, string[] | '*'>;\n provider?: Provider;\n onPermissionDenied?: (router: Router, snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) => UrlTree;\n}\n\nexport interface PermissionOptions {\n mode?: PermissionMode;\n}\n\nexport type PermissionMode = 'and' | 'or';\n","import {ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot} from '@angular/router';\nimport {PermissionOptions, PermissionsConfig} from '../permissions.interface';\nimport {Injectable, Optional} from '@angular/core';\nimport {Permissions} from '../permissions.service';\nimport {map} from 'rxjs/operators';\nimport {of} from 'rxjs';\n\ndeclare let ngDevMode;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BbPermissionGuard implements CanActivate, CanActivateChild {\n\n constructor(private _router: Router,\n private _permissions: Permissions,\n @Optional() private _config?: PermissionsConfig) {\n }\n\n canActivate(snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n const permission = snapshot?.data?.['permission'] ?? null;\n const permission$ = this.parsePermission(permission);\n return permission$.pipe(\n map(valid => {\n if (valid) {\n return true;\n }\n\n const onPermissionDeniedFn = this._config?.onPermissionDenied ?? null;\n console.log(onPermissionDeniedFn);\n if (!onPermissionDeniedFn) {\n return false;\n }\n\n const urlTree = onPermissionDeniedFn(this._router, snapshot, state);\n if (!urlTree) {\n return false;\n }\n\n return valid ? true : urlTree;\n })\n );\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.canActivate(childRoute, state);\n }\n\n private parsePermission(data: string | string[] | { value: string | string[], options?: PermissionOptions }) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && (data === undefined || data === null)) {\n console?.warn?.(`No \"data.permission\" property was passed.`);\n return of(false);\n }\n\n if (Array.isArray(data) || typeof data === 'string') {\n return this._permissions.has(data);\n }\n\n return this._permissions.has(data?.value, data?.options);\n }\n\n}\n","import {ModuleWithProviders, NgModule, Provider} from '@angular/core';\nimport {PermissionsHandler} from './handlers/abstract.handler';\nimport {BbPermission} from './directives/permission.directive';\nimport {RolePermissionHandler} from './handlers/role.handler';\nimport {PermissionsConfig} from './permissions.interface';\nimport {Permissions} from './permissions.service';\nimport {Auth} from '@bravobit/bb-foundation/auth';\n\n@NgModule({\n declarations: [BbPermission],\n exports: [BbPermission]\n})\nexport class PermissionsModule {\n\n static forRoot(config?: PermissionsConfig): ModuleWithProviders<PermissionsModule> {\n const defaultProvider: Provider = {\n provide: PermissionsHandler,\n deps: [Auth],\n useFactory: (auth: Auth) => {\n return new RolePermissionHandler(auth, config?.permissions ?? {});\n }\n };\n const permissionHandlerProvider = config?.provider ?? defaultProvider;\n\n return {\n ngModule: PermissionsModule,\n providers: [\n {provide: PermissionsConfig, useValue: config},\n permissionHandlerProvider,\n Permissions\n ]\n };\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.PermissionsHandler","i1.Permissions","i2.Permissions","i3.PermissionsConfig"],"mappings":"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"}
@@ -76,9 +76,9 @@ class RecaptchaLoader {
76
76
  .join('&');
77
77
  }
78
78
  }
79
- RecaptchaLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaLoader, deps: [{ token: i1.Platform }, { token: i0.RendererFactory2 }, { token: i2.Localize, optional: true }, { token: LOCALE_ID, optional: true }, { token: DOCUMENT, optional: true }, { token: RECAPTCHA_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
80
- RecaptchaLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaLoader });
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaLoader, decorators: [{
79
+ RecaptchaLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaLoader, deps: [{ token: i1.Platform }, { token: i0.RendererFactory2 }, { token: i2.Localize, optional: true }, { token: LOCALE_ID, optional: true }, { token: DOCUMENT, optional: true }, { token: RECAPTCHA_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
80
+ RecaptchaLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaLoader });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaLoader, decorators: [{
82
82
  type: Injectable
83
83
  }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i0.RendererFactory2 }, { type: i2.Localize, decorators: [{
84
84
  type: Optional
@@ -255,15 +255,15 @@ class RecaptchaComponent extends BbRecaptchaMixinBase {
255
255
  this._renderer.setAttribute(frame, 'src', newSrc);
256
256
  }
257
257
  }
258
- RecaptchaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaComponent, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: RecaptchaLoader }, { token: LOCALIZE_ID }, { token: RECAPTCHA_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
259
- RecaptchaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.5", type: RecaptchaComponent, selector: "bb-recaptcha", inputs: { grouped: "grouped", id: "id", siteKey: "siteKey", tabIndex: "tabIndex", type: "type", size: "size", theme: "theme", badge: "badge", errorMode: "errorMode" }, outputs: { resolved: "resolved", error: "error" }, host: { properties: { "class.grouped": "grouped", "attr.id": "this.id" }, classAttribute: "bb-recaptcha" }, providers: [
258
+ RecaptchaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaComponent, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: RecaptchaLoader }, { token: LOCALIZE_ID }, { token: RECAPTCHA_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
259
+ RecaptchaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.10", type: RecaptchaComponent, selector: "bb-recaptcha", inputs: { grouped: "grouped", id: "id", siteKey: "siteKey", tabIndex: "tabIndex", type: "type", size: "size", theme: "theme", badge: "badge", errorMode: "errorMode" }, outputs: { resolved: "resolved", error: "error" }, host: { properties: { "class.grouped": "grouped", "attr.id": "this.id" }, classAttribute: "bb-recaptcha" }, providers: [
260
260
  {
261
261
  provide: NG_VALUE_ACCESSOR,
262
262
  useExisting: forwardRef(() => RecaptchaComponent),
263
263
  multi: true
264
264
  }
265
265
  ], exportAs: ["bbRecaptcha"], usesInheritance: true, ngImport: i0, template: "", styles: [".bb-recaptcha{display:block}.bb-recaptcha.grouped{margin-bottom:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaComponent, decorators: [{
266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaComponent, decorators: [{
267
267
  type: Component,
268
268
  args: [{ selector: 'bb-recaptcha', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'bbRecaptcha', providers: [
269
269
  {
@@ -319,10 +319,10 @@ class RecaptchaModule {
319
319
  };
320
320
  }
321
321
  }
322
- RecaptchaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
323
- RecaptchaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaModule, declarations: [RecaptchaComponent], exports: [RecaptchaComponent] });
324
- RecaptchaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaModule });
325
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: RecaptchaModule, decorators: [{
322
+ RecaptchaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
323
+ RecaptchaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaModule, declarations: [RecaptchaComponent], exports: [RecaptchaComponent] });
324
+ RecaptchaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaModule });
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RecaptchaModule, decorators: [{
326
326
  type: NgModule,
327
327
  args: [{
328
328
  declarations: [RecaptchaComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"bravobit-bb-foundation-recaptcha.mjs","sources":["../../../projects/bb-foundation/recaptcha/src/lib/recaptcha.interface.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha-loader.service.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha/recaptcha.component.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha/recaptcha.component.html","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha.module.ts","../../../projects/bb-foundation/recaptcha/src/bravobit-bb-foundation-recaptcha.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const RECAPTCHA_CONFIG = new InjectionToken<RecaptchaConfig>('bb-recaptcha-config');\n\nexport interface RecaptchaConfig {\n baseUrl?: string;\n nonce?: string;\n siteKey?: string;\n theme?: ReCaptchaV2.Theme;\n type?: ReCaptchaV2.Type;\n size?: ReCaptchaV2.Size;\n badge?: ReCaptchaV2.Badge;\n}\n\nexport type NeverUndefined<T> = T extends undefined ? never : T;\nexport type RecaptchaErrorParameters = Parameters<NeverUndefined<ReCaptchaV2.Parameters['error-callback']>>;\n","import {Inject, Injectable, LOCALE_ID, Optional, Renderer2, RendererFactory2} from '@angular/core';\nimport {RECAPTCHA_CONFIG, RecaptchaConfig} from './recaptcha.interface';\nimport {Localize} from '@bravobit/bb-foundation/localize';\nimport {Platform} from '@angular/cdk/platform';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject} from 'rxjs';\n\n@Injectable()\nexport class RecaptchaLoader {\n\n // Ready state.\n readonly ready$: BehaviorSubject<ReCaptchaV2.ReCaptcha | null> | null = null;\n\n // Data.\n private readonly _windowLoadFn: string = 'bbRecaptchaLoad';\n private readonly _renderer: Renderer2 | null = null;\n\n constructor(private _platform: Platform,\n private _renderFactory: RendererFactory2,\n @Optional() private _localize?: Localize,\n @Optional() @Inject(LOCALE_ID) private _localeId?: string,\n @Optional() @Inject(DOCUMENT) private _document?: Document,\n @Optional() @Inject(RECAPTCHA_CONFIG) private _config?: RecaptchaConfig) {\n // Create a renderer.\n this._renderer = this._renderFactory.createRenderer(null, null);\n\n // Set the ready subject if not exists.\n if (this.ready$) {\n return;\n }\n this.ready$ = new BehaviorSubject<ReCaptchaV2.ReCaptcha | null>(null);\n\n // Create the script.\n this.createScript(captcha => this.ready$.next(captcha));\n }\n\n private createScript(callback: (grecaptcha: ReCaptchaV2.ReCaptcha) => void) {\n // Validate we are on a browser.\n if (!this._platform.isBrowser) {\n return;\n }\n\n // Create the script.\n const script = this._renderer.createElement('script');\n\n // Set properties on the script.\n this._renderer.setProperty(script, 'src', this.getUrl());\n this._renderer.setProperty(script, 'async', true);\n this._renderer.setProperty(script, 'defer', true);\n\n // Set the nonce.\n if (this._config.nonce) {\n this._renderer.setAttribute(script, 'nonce', this._config.nonce);\n }\n\n // Set the loading function.\n if (this._platform.isBrowser) {\n window[this._windowLoadFn] = () => callback(grecaptcha);\n }\n\n // Append the script tag.\n this._renderer.appendChild(this._document?.body, script);\n }\n\n private getUrl() {\n const baseUrl = this._config?.baseUrl ?? 'https://www.google.com/recaptcha/api.js';\n return [baseUrl, this.getQueryParams()]\n .filter(item => !!item)\n .join('?');\n }\n\n private getQueryParams() {\n const localeId = this._localize?.current?.id ?? this._localeId ?? null;\n const params = {\n render: 'explicit',\n onload: this._windowLoadFn ?? null,\n hl: localeId\n };\n\n return Object.keys(params)\n .map(key => ({key, value: params[key]}))\n .filter(item => !!item.value)\n .map(item => `${item?.key}=${item?.value}`)\n .join('&');\n }\n\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output, Renderer2,\n ViewEncapsulation\n} from '@angular/core';\nimport {RECAPTCHA_CONFIG, RecaptchaConfig, RecaptchaErrorParameters} from '../recaptcha.interface';\nimport {IsGroupedConstructor, mixinGrouped} from '@bravobit/bb-foundation';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {LOCALIZE_ID} from '@bravobit/bb-foundation/localize';\nimport {RecaptchaLoader} from '../recaptcha-loader.service';\nimport {Platform} from '@angular/cdk/platform';\nimport {Observable, Subscription} from 'rxjs';\n\nlet nextUniqueId = 0;\n\nclass BbRecaptchaBase {\n}\n\nconst BbRecaptchaMixinBase: IsGroupedConstructor\n & typeof BbRecaptchaBase\n = mixinGrouped(BbRecaptchaBase);\n\n@Component({\n selector: 'bb-recaptcha',\n templateUrl: './recaptcha.component.html',\n styleUrls: ['./recaptcha.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'bbRecaptcha',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RecaptchaComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'bb-recaptcha',\n '[class.grouped]': 'grouped'\n },\n inputs: ['grouped'],\n preserveWhitespaces: false\n})\nexport class RecaptchaComponent extends BbRecaptchaMixinBase implements ControlValueAccessor, AfterViewInit, OnDestroy {\n\n // Host bindings.\n @HostBinding('attr.id') @Input() id: string = `bb-recaptcha-${nextUniqueId++}`;\n\n // Inputs.\n @Input() siteKey: string | null = null;\n @Input() tabIndex: number | null = null;\n @Input() type: ReCaptchaV2.Type | null = null;\n @Input() size: ReCaptchaV2.Size | null = null;\n @Input() theme: ReCaptchaV2.Theme | null = null;\n @Input() badge: ReCaptchaV2.Badge | null = null;\n @Input() errorMode: 'handled' | 'default' = 'default';\n\n // Outputs.\n @Output() resolved = new EventEmitter<string>();\n @Output() error = new EventEmitter<RecaptchaErrorParameters>();\n\n // Data.\n private _widgetId: number | null = null;\n private _grecaptcha: ReCaptchaV2.ReCaptcha | null = null;\n private _executeRequested: boolean = false;\n\n // Form methods.\n private _onChange: (value: string) => void | null = null;\n private _onTouched: () => void | null = null;\n\n // Subscriptions.\n private _subscriptions = new Subscription();\n\n constructor(private _zone: NgZone,\n private _platform: Platform,\n private _renderer: Renderer2,\n private _elementRef: ElementRef,\n private _loader: RecaptchaLoader,\n @Inject(LOCALIZE_ID) private _localizeId: Observable<string>,\n @Optional() @Inject(RECAPTCHA_CONFIG) private _config?: RecaptchaConfig) {\n super();\n this.initializeProperties();\n }\n\n ngAfterViewInit() {\n this.handleOnLoad();\n this.handleLocaleChanges();\n }\n\n ngOnDestroy() {\n // Reset the captcha.\n this.resetCaptchaElement();\n\n // Unsubscribe of ready data.\n this._subscriptions?.unsubscribe();\n }\n\n execute() {\n // Check if the captcha is invisible.\n if (this.size !== 'invisible') {\n return;\n }\n\n // Check if the widget exists else return.\n if (this._widgetId == null) {\n this._executeRequested = true;\n return;\n }\n\n // Execute the captcha.\n this._grecaptcha.execute(this._widgetId);\n }\n\n reset() {\n if (this._widgetId == null) {\n return;\n }\n\n if (this._grecaptcha.getResponse(this._widgetId)) {\n this.resolved.emit(null);\n }\n\n this.resetCaptchaElement();\n }\n\n writeValue(value: string) {\n if (value) {\n return;\n }\n\n this.reset();\n }\n\n registerOnChange(fn: (value: string) => void) {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this._onTouched = fn;\n }\n\n onResolve(event: string) {\n // Emit the value.\n this.resolved.emit(event);\n\n // Call the form functions.\n this._onChange?.(event);\n this._onTouched?.();\n }\n\n private renderCaptchaElement() {\n const parameters: ReCaptchaV2.Parameters = {\n badge: this.badge,\n sitekey: this.siteKey,\n size: this.size,\n tabindex: this.tabIndex,\n theme: this.theme,\n type: this.type,\n 'callback': (response: string) => this._zone.run(() => this.onResolve(response)),\n 'expired-callback': () => this._zone.run(() => this.onResolve(null))\n };\n\n if (this.errorMode === 'handled') {\n parameters['error-callback'] = (...args: RecaptchaErrorParameters) => {\n return this._zone.run(() => this.error.emit(args));\n };\n }\n\n this._widgetId = this._grecaptcha.render(this._elementRef.nativeElement, parameters);\n\n if (this._executeRequested) {\n this._executeRequested = false;\n this.execute();\n }\n }\n\n private resetCaptchaElement() {\n if (this._widgetId == null) {\n return;\n }\n\n this._zone.runOutsideAngular(() => this._grecaptcha.reset(this._widgetId));\n }\n\n private initializeProperties() {\n this.siteKey = this.siteKey ?? this._config?.siteKey;\n this.theme = this.theme ?? this._config?.theme;\n this.size = this.size ?? this._config?.size;\n this.type = this.type ?? this._config?.type;\n this.badge = this.badge ?? this._config?.badge;\n }\n\n private handleOnLoad() {\n const subscription = this._loader.ready$.subscribe((grecaptcha: ReCaptchaV2.ReCaptcha) => {\n if (grecaptcha == null || !(grecaptcha.render instanceof Function)) {\n return;\n }\n\n this._grecaptcha = grecaptcha;\n this.renderCaptchaElement();\n });\n\n this._subscriptions.add(subscription);\n }\n\n private handleLocaleChanges() {\n const subscription = this._localizeId.subscribe(locale => this.onLocaleChanged(locale));\n this._subscriptions.add(subscription);\n }\n\n private onLocaleChanged(locale: string) {\n const element = this._elementRef?.nativeElement ?? null;\n if (!element || !this._platform.isBrowser) {\n return;\n }\n\n const frame = element?.querySelector('iframe');\n if (!frame) {\n return;\n }\n\n const src = frame.getAttribute('src');\n const currentLanguageId = src.match(/hl=(.*?)&/).pop();\n if (currentLanguageId === locale) {\n return;\n }\n\n const newSrc = src.replace(/hl=(.*?)&/, `hl=${locale}&`);\n this._renderer.setAttribute(frame, 'src', newSrc);\n }\n\n}\n","","import {RECAPTCHA_CONFIG, RecaptchaConfig} from './recaptcha.interface';\nimport {RecaptchaComponent} from './recaptcha/recaptcha.component';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RecaptchaLoader} from './recaptcha-loader.service';\n\n@NgModule({\n declarations: [RecaptchaComponent],\n exports: [RecaptchaComponent]\n})\nexport class RecaptchaModule {\n\n static forRoot(config?: RecaptchaConfig): ModuleWithProviders<RecaptchaModule> {\n return {\n ngModule: RecaptchaModule,\n providers: [\n {provide: RECAPTCHA_CONFIG, useValue: config},\n RecaptchaLoader\n ]\n };\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.RecaptchaLoader"],"mappings":"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"}
1
+ {"version":3,"file":"bravobit-bb-foundation-recaptcha.mjs","sources":["../../../projects/bb-foundation/recaptcha/src/lib/recaptcha.interface.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha-loader.service.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha/recaptcha.component.ts","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha/recaptcha.component.html","../../../projects/bb-foundation/recaptcha/src/lib/recaptcha.module.ts","../../../projects/bb-foundation/recaptcha/src/bravobit-bb-foundation-recaptcha.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport const RECAPTCHA_CONFIG = new InjectionToken<RecaptchaConfig>('bb-recaptcha-config');\n\nexport interface RecaptchaConfig {\n baseUrl?: string;\n nonce?: string;\n siteKey?: string;\n theme?: ReCaptchaV2.Theme;\n type?: ReCaptchaV2.Type;\n size?: ReCaptchaV2.Size;\n badge?: ReCaptchaV2.Badge;\n}\n\nexport type NeverUndefined<T> = T extends undefined ? never : T;\nexport type RecaptchaErrorParameters = Parameters<NeverUndefined<ReCaptchaV2.Parameters['error-callback']>>;\n","import {Inject, Injectable, LOCALE_ID, Optional, Renderer2, RendererFactory2} from '@angular/core';\nimport {RECAPTCHA_CONFIG, RecaptchaConfig} from './recaptcha.interface';\nimport {Localize} from '@bravobit/bb-foundation/localize';\nimport {Platform} from '@angular/cdk/platform';\nimport {DOCUMENT} from '@angular/common';\nimport {BehaviorSubject} from 'rxjs';\n\n@Injectable()\nexport class RecaptchaLoader {\n\n // Ready state.\n readonly ready$: BehaviorSubject<ReCaptchaV2.ReCaptcha | null> | null = null;\n\n // Data.\n private readonly _windowLoadFn: string = 'bbRecaptchaLoad';\n private readonly _renderer: Renderer2 | null = null;\n\n constructor(private _platform: Platform,\n private _renderFactory: RendererFactory2,\n @Optional() private _localize?: Localize,\n @Optional() @Inject(LOCALE_ID) private _localeId?: string,\n @Optional() @Inject(DOCUMENT) private _document?: Document,\n @Optional() @Inject(RECAPTCHA_CONFIG) private _config?: RecaptchaConfig) {\n // Create a renderer.\n this._renderer = this._renderFactory.createRenderer(null, null);\n\n // Set the ready subject if not exists.\n if (this.ready$) {\n return;\n }\n this.ready$ = new BehaviorSubject<ReCaptchaV2.ReCaptcha | null>(null);\n\n // Create the script.\n this.createScript(captcha => this.ready$.next(captcha));\n }\n\n private createScript(callback: (grecaptcha: ReCaptchaV2.ReCaptcha) => void) {\n // Validate we are on a browser.\n if (!this._platform.isBrowser) {\n return;\n }\n\n // Create the script.\n const script = this._renderer.createElement('script');\n\n // Set properties on the script.\n this._renderer.setProperty(script, 'src', this.getUrl());\n this._renderer.setProperty(script, 'async', true);\n this._renderer.setProperty(script, 'defer', true);\n\n // Set the nonce.\n if (this._config.nonce) {\n this._renderer.setAttribute(script, 'nonce', this._config.nonce);\n }\n\n // Set the loading function.\n if (this._platform.isBrowser) {\n window[this._windowLoadFn] = () => callback(grecaptcha);\n }\n\n // Append the script tag.\n this._renderer.appendChild(this._document?.body, script);\n }\n\n private getUrl() {\n const baseUrl = this._config?.baseUrl ?? 'https://www.google.com/recaptcha/api.js';\n return [baseUrl, this.getQueryParams()]\n .filter(item => !!item)\n .join('?');\n }\n\n private getQueryParams() {\n const localeId = this._localize?.current?.id ?? this._localeId ?? null;\n const params = {\n render: 'explicit',\n onload: this._windowLoadFn ?? null,\n hl: localeId\n };\n\n return Object.keys(params)\n .map(key => ({key, value: params[key]}))\n .filter(item => !!item.value)\n .map(item => `${item?.key}=${item?.value}`)\n .join('&');\n }\n\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output, Renderer2,\n ViewEncapsulation\n} from '@angular/core';\nimport {RECAPTCHA_CONFIG, RecaptchaConfig, RecaptchaErrorParameters} from '../recaptcha.interface';\nimport {IsGroupedConstructor, mixinGrouped} from '@bravobit/bb-foundation';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {LOCALIZE_ID} from '@bravobit/bb-foundation/localize';\nimport {RecaptchaLoader} from '../recaptcha-loader.service';\nimport {Platform} from '@angular/cdk/platform';\nimport {Observable, Subscription} from 'rxjs';\n\nlet nextUniqueId = 0;\n\nclass BbRecaptchaBase {\n}\n\nconst BbRecaptchaMixinBase: IsGroupedConstructor\n & typeof BbRecaptchaBase\n = mixinGrouped(BbRecaptchaBase);\n\n@Component({\n selector: 'bb-recaptcha',\n templateUrl: './recaptcha.component.html',\n styleUrls: ['./recaptcha.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'bbRecaptcha',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RecaptchaComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'bb-recaptcha',\n '[class.grouped]': 'grouped'\n },\n inputs: ['grouped'],\n preserveWhitespaces: false\n})\nexport class RecaptchaComponent extends BbRecaptchaMixinBase implements ControlValueAccessor, AfterViewInit, OnDestroy {\n\n // Host bindings.\n @HostBinding('attr.id') @Input() id: string = `bb-recaptcha-${nextUniqueId++}`;\n\n // Inputs.\n @Input() siteKey: string | null = null;\n @Input() tabIndex: number | null = null;\n @Input() type: ReCaptchaV2.Type | null = null;\n @Input() size: ReCaptchaV2.Size | null = null;\n @Input() theme: ReCaptchaV2.Theme | null = null;\n @Input() badge: ReCaptchaV2.Badge | null = null;\n @Input() errorMode: 'handled' | 'default' = 'default';\n\n // Outputs.\n @Output() resolved = new EventEmitter<string>();\n @Output() error = new EventEmitter<RecaptchaErrorParameters>();\n\n // Data.\n private _widgetId: number | null = null;\n private _grecaptcha: ReCaptchaV2.ReCaptcha | null = null;\n private _executeRequested: boolean = false;\n\n // Form methods.\n private _onChange: (value: string) => void | null = null;\n private _onTouched: () => void | null = null;\n\n // Subscriptions.\n private _subscriptions = new Subscription();\n\n constructor(private _zone: NgZone,\n private _platform: Platform,\n private _renderer: Renderer2,\n private _elementRef: ElementRef,\n private _loader: RecaptchaLoader,\n @Inject(LOCALIZE_ID) private _localizeId: Observable<string>,\n @Optional() @Inject(RECAPTCHA_CONFIG) private _config?: RecaptchaConfig) {\n super();\n this.initializeProperties();\n }\n\n ngAfterViewInit() {\n this.handleOnLoad();\n this.handleLocaleChanges();\n }\n\n ngOnDestroy() {\n // Reset the captcha.\n this.resetCaptchaElement();\n\n // Unsubscribe of ready data.\n this._subscriptions?.unsubscribe();\n }\n\n execute() {\n // Check if the captcha is invisible.\n if (this.size !== 'invisible') {\n return;\n }\n\n // Check if the widget exists else return.\n if (this._widgetId == null) {\n this._executeRequested = true;\n return;\n }\n\n // Execute the captcha.\n this._grecaptcha.execute(this._widgetId);\n }\n\n reset() {\n if (this._widgetId == null) {\n return;\n }\n\n if (this._grecaptcha.getResponse(this._widgetId)) {\n this.resolved.emit(null);\n }\n\n this.resetCaptchaElement();\n }\n\n writeValue(value: string) {\n if (value) {\n return;\n }\n\n this.reset();\n }\n\n registerOnChange(fn: (value: string) => void) {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this._onTouched = fn;\n }\n\n onResolve(event: string) {\n // Emit the value.\n this.resolved.emit(event);\n\n // Call the form functions.\n this._onChange?.(event);\n this._onTouched?.();\n }\n\n private renderCaptchaElement() {\n const parameters: ReCaptchaV2.Parameters = {\n badge: this.badge,\n sitekey: this.siteKey,\n size: this.size,\n tabindex: this.tabIndex,\n theme: this.theme,\n type: this.type,\n 'callback': (response: string) => this._zone.run(() => this.onResolve(response)),\n 'expired-callback': () => this._zone.run(() => this.onResolve(null))\n };\n\n if (this.errorMode === 'handled') {\n parameters['error-callback'] = (...args: RecaptchaErrorParameters) => {\n return this._zone.run(() => this.error.emit(args));\n };\n }\n\n this._widgetId = this._grecaptcha.render(this._elementRef.nativeElement, parameters);\n\n if (this._executeRequested) {\n this._executeRequested = false;\n this.execute();\n }\n }\n\n private resetCaptchaElement() {\n if (this._widgetId == null) {\n return;\n }\n\n this._zone.runOutsideAngular(() => this._grecaptcha.reset(this._widgetId));\n }\n\n private initializeProperties() {\n this.siteKey = this.siteKey ?? this._config?.siteKey;\n this.theme = this.theme ?? this._config?.theme;\n this.size = this.size ?? this._config?.size;\n this.type = this.type ?? this._config?.type;\n this.badge = this.badge ?? this._config?.badge;\n }\n\n private handleOnLoad() {\n const subscription = this._loader.ready$.subscribe((grecaptcha: ReCaptchaV2.ReCaptcha) => {\n if (grecaptcha == null || !(grecaptcha.render instanceof Function)) {\n return;\n }\n\n this._grecaptcha = grecaptcha;\n this.renderCaptchaElement();\n });\n\n this._subscriptions.add(subscription);\n }\n\n private handleLocaleChanges() {\n const subscription = this._localizeId.subscribe(locale => this.onLocaleChanged(locale));\n this._subscriptions.add(subscription);\n }\n\n private onLocaleChanged(locale: string) {\n const element = this._elementRef?.nativeElement ?? null;\n if (!element || !this._platform.isBrowser) {\n return;\n }\n\n const frame = element?.querySelector('iframe');\n if (!frame) {\n return;\n }\n\n const src = frame.getAttribute('src');\n const currentLanguageId = src.match(/hl=(.*?)&/).pop();\n if (currentLanguageId === locale) {\n return;\n }\n\n const newSrc = src.replace(/hl=(.*?)&/, `hl=${locale}&`);\n this._renderer.setAttribute(frame, 'src', newSrc);\n }\n\n}\n","","import {RECAPTCHA_CONFIG, RecaptchaConfig} from './recaptcha.interface';\nimport {RecaptchaComponent} from './recaptcha/recaptcha.component';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RecaptchaLoader} from './recaptcha-loader.service';\n\n@NgModule({\n declarations: [RecaptchaComponent],\n exports: [RecaptchaComponent]\n})\nexport class RecaptchaModule {\n\n static forRoot(config?: RecaptchaConfig): ModuleWithProviders<RecaptchaModule> {\n return {\n ngModule: RecaptchaModule,\n providers: [\n {provide: RECAPTCHA_CONFIG, useValue: config},\n RecaptchaLoader\n ]\n };\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.RecaptchaLoader"],"mappings":"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"}
@@ -391,9 +391,9 @@ class Storage {
391
391
  return this._strategies.memory;
392
392
  }
393
393
  }
394
- Storage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: Storage, deps: [{ token: i1.Platform }, { token: COOKIE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
395
- Storage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: Storage, providedIn: 'root' });
396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImport: i0, type: Storage, decorators: [{
394
+ Storage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: Storage, deps: [{ token: i1.Platform }, { token: COOKIE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
395
+ Storage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: Storage, providedIn: 'root' });
396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: Storage, decorators: [{
397
397
  type: Injectable,
398
398
  args: [{
399
399
  providedIn: 'root'