@bravobit/bb-foundation 0.21.4 → 0.22.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 (268) hide show
  1. package/auth/lib/auth.interceptor.d.ts +1 -1
  2. package/auth/lib/auth.module.d.ts +4 -5
  3. package/auth/lib/auth.service.d.ts +4 -7
  4. package/auth/lib/directives/abstract.directive.d.ts +12 -0
  5. package/auth/lib/directives/authenticated.directive.d.ts +7 -4
  6. package/auth/lib/directives/permission.directive.d.ts +11 -11
  7. package/auth/lib/guards/anonymous.guard.d.ts +8 -5
  8. package/auth/lib/guards/authenticated.guard.d.ts +8 -5
  9. package/auth/lib/guards/permission.guard.d.ts +15 -0
  10. package/auth/lib/interfaces/config.interface.d.ts +14 -8
  11. package/auth/lib/interfaces/permission.interface.d.ts +6 -0
  12. package/auth/lib/interfaces/provider.interface.d.ts +10 -3
  13. package/auth/lib/permissions/permissions.handler.d.ts +9 -0
  14. package/auth/lib/permissions/permissions.service.d.ts +16 -0
  15. package/auth/lib/providers/email.provider.d.ts +2 -8
  16. package/auth/lib/providers/verify.provider.d.ts +2 -6
  17. package/auth/public_api.d.ts +4 -4
  18. package/controls/lib/checkbox/checkbox/checkbox.component.d.ts +5 -1
  19. package/controls/lib/control-error/control-error/control-error.animation.d.ts +1 -0
  20. package/controls/lib/control-error/control-error/control-error.component.d.ts +17 -0
  21. package/controls/lib/control-error/control-error-submit.directive.d.ts +15 -0
  22. package/controls/lib/control-error/control-error.defaults.d.ts +2 -0
  23. package/controls/lib/control-error/control-error.interface.d.ts +12 -0
  24. package/controls/lib/control-error/control-error.module.d.ts +9 -0
  25. package/controls/lib/controls.interfaces.d.ts +4 -0
  26. package/controls/lib/controls.module.d.ts +7 -2
  27. package/controls/lib/form-control/form-control/form-control.component.d.ts +31 -0
  28. package/controls/lib/form-control/form-control-addon/form-control-addon.component.d.ts +6 -0
  29. package/controls/lib/form-control/form-control-input.directive.d.ts +35 -0
  30. package/controls/lib/form-control/form-control.module.d.ts +11 -0
  31. package/controls/public_api.d.ts +9 -0
  32. package/dashboard/lib/dashboard/dashboard.component.d.ts +2 -1
  33. package/dialog/lib/dialog-confirm/dialog-confirm.component.d.ts +10 -5
  34. package/dialog/lib/dialog-container/dialog-container.animations.d.ts +1 -0
  35. package/dialog/lib/dialog-container/dialog-container.component.d.ts +5 -7
  36. package/dialog/lib/dialog-header/dialog-header.component.d.ts +1 -3
  37. package/dialog/lib/dialog-modal/dialog-modal.component.d.ts +7 -3
  38. package/dialog/lib/dialog-overlay/dialog-overlay.animations.d.ts +1 -0
  39. package/dialog/lib/dialog-overlay/dialog-overlay.component.d.ts +5 -7
  40. package/dialog/lib/dialog.service.d.ts +4 -3
  41. package/elements/lib/directives/focus-trap.directive.d.ts +1 -1
  42. package/elements/lib/directives/focus.directive.d.ts +1 -3
  43. package/elements/lib/directives/form-submitter.directive.d.ts +9 -0
  44. package/elements/lib/elements.module.d.ts +25 -24
  45. package/elements/lib/form-error/form-error.component.d.ts +9 -5
  46. package/elements/lib/pipes/file-image.pipe.d.ts +2 -1
  47. package/elements/public_api.d.ts +1 -0
  48. package/esm2020/auth/lib/auth.interceptor.mjs +9 -12
  49. package/esm2020/auth/lib/auth.module.mjs +7 -17
  50. package/esm2020/auth/lib/auth.service.mjs +29 -55
  51. package/esm2020/auth/lib/directives/abstract.directive.mjs +40 -0
  52. package/esm2020/auth/lib/directives/authenticated.directive.mjs +25 -14
  53. package/esm2020/auth/lib/directives/permission.directive.mjs +24 -46
  54. package/esm2020/auth/lib/guards/anonymous.guard.mjs +28 -19
  55. package/esm2020/auth/lib/guards/authenticated.guard.mjs +31 -20
  56. package/esm2020/auth/lib/guards/permission.guard.mjs +53 -0
  57. package/esm2020/auth/lib/helpers/jwt.helper.mjs +7 -7
  58. package/esm2020/auth/lib/interfaces/config.interface.mjs +1 -1
  59. package/esm2020/auth/lib/interfaces/permission.interface.mjs +2 -0
  60. package/esm2020/auth/lib/interfaces/provider.interface.mjs +1 -1
  61. package/esm2020/auth/lib/permissions/permissions.handler.mjs +33 -0
  62. package/esm2020/auth/lib/permissions/permissions.service.mjs +64 -0
  63. package/esm2020/auth/lib/providers/email.provider.mjs +8 -9
  64. package/esm2020/auth/lib/providers/verify.provider.mjs +8 -5
  65. package/esm2020/auth/public_api.mjs +5 -5
  66. package/esm2020/collections/lib/collections.module.mjs +4 -4
  67. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +3 -3
  68. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +3 -3
  69. package/esm2020/collections/lib/components/collections.directive.mjs +12 -12
  70. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +19 -6
  71. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +4 -4
  72. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +4 -4
  73. package/esm2020/controls/lib/control-error/control-error/control-error.animation.mjs +14 -0
  74. package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +63 -0
  75. package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +47 -0
  76. package/esm2020/controls/lib/control-error/control-error.defaults.mjs +26 -0
  77. package/esm2020/controls/lib/control-error/control-error.interface.mjs +3 -0
  78. package/esm2020/controls/lib/control-error/control-error.module.mjs +19 -0
  79. package/esm2020/controls/lib/controls.interfaces.mjs +2 -0
  80. package/esm2020/controls/lib/controls.module.mjs +45 -8
  81. package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +94 -0
  82. package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +22 -0
  83. package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +124 -0
  84. package/esm2020/controls/lib/form-control/form-control.module.mjs +33 -0
  85. package/esm2020/controls/public_api.mjs +10 -1
  86. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +7 -6
  87. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +3 -3
  88. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +3 -3
  89. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +3 -3
  90. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +3 -3
  91. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +3 -3
  92. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +3 -3
  93. package/esm2020/dashboard/lib/dashboard.module.mjs +4 -4
  94. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
  95. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +17 -11
  96. package/esm2020/dialog/lib/dialog-container/dialog-container.animations.mjs +29 -0
  97. package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +28 -104
  98. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +7 -14
  99. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +4 -4
  100. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +29 -8
  101. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.animations.mjs +26 -0
  102. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +29 -84
  103. package/esm2020/dialog/lib/dialog.insertion.mjs +3 -3
  104. package/esm2020/dialog/lib/dialog.module.mjs +4 -4
  105. package/esm2020/dialog/lib/dialog.service.mjs +8 -7
  106. package/esm2020/elements/lib/avatar/avatar.component.mjs +8 -6
  107. package/esm2020/elements/lib/button/button.component.mjs +6 -6
  108. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +3 -3
  109. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +3 -3
  110. package/esm2020/elements/lib/directives/addon.directive.mjs +6 -6
  111. package/esm2020/elements/lib/directives/autosize.directive.mjs +3 -3
  112. package/esm2020/elements/lib/directives/focus-trap.directive.mjs +5 -5
  113. package/esm2020/elements/lib/directives/focus.directive.mjs +7 -9
  114. package/esm2020/elements/lib/directives/form-submit.directive.mjs +3 -3
  115. package/esm2020/elements/lib/directives/form-submitter.directive.mjs +25 -0
  116. package/esm2020/elements/lib/directives/input.directive.mjs +6 -6
  117. package/esm2020/elements/lib/directives/template.directive.mjs +3 -3
  118. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +6 -6
  119. package/esm2020/elements/lib/elements.module.mjs +9 -5
  120. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +3 -3
  121. package/esm2020/elements/lib/form-control/form-control.component.mjs +3 -3
  122. package/esm2020/elements/lib/form-error/form-error.component.mjs +22 -7
  123. package/esm2020/elements/lib/form-group/form-group.component.mjs +3 -3
  124. package/esm2020/elements/lib/icon/icon.component.mjs +3 -3
  125. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +3 -3
  126. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +8 -7
  127. package/esm2020/elements/lib/pipes/file-size.pipe.mjs +3 -3
  128. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +3 -3
  129. package/esm2020/elements/lib/spinner/spinner.component.mjs +3 -3
  130. package/esm2020/elements/lib/tag/tag.component.mjs +3 -3
  131. package/esm2020/elements/public_api.mjs +2 -1
  132. package/esm2020/http/lib/http.module.mjs +4 -4
  133. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +3 -3
  134. package/esm2020/http/lib/interceptors/error.interceptor.mjs +3 -3
  135. package/esm2020/lib/core/services/clipboard.service.mjs +5 -5
  136. package/esm2020/lib/core/services/exif.service.mjs +5 -5
  137. package/esm2020/lib/core/services/file-loader.service.mjs +3 -3
  138. package/esm2020/lib/core/services/image-converter.service.mjs +5 -5
  139. package/esm2020/lib/core/services/languages.service.mjs +3 -3
  140. package/esm2020/lib/core/services/network.service.mjs +7 -7
  141. package/esm2020/lib/core/services/patch.service.mjs +7 -7
  142. package/esm2020/localize/lib/localize.module.mjs +4 -4
  143. package/esm2020/localize/lib/localize.pipe.mjs +3 -3
  144. package/esm2020/localize/lib/localize.service.mjs +5 -5
  145. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +3 -3
  146. package/esm2020/localize/lib/views/localize-template-or-string.directive.mjs +3 -3
  147. package/esm2020/localize/lib/views/localize-template.directive.mjs +3 -3
  148. package/esm2020/masking/lib/directives/currency-mask.directive.mjs +3 -3
  149. package/esm2020/masking/lib/directives/date-mask.directive.mjs +3 -3
  150. package/esm2020/masking/lib/directives/input-mask.directive.mjs +7 -7
  151. package/esm2020/masking/lib/masking.module.mjs +4 -4
  152. package/esm2020/masking/lib/masking.service.mjs +3 -3
  153. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +5 -5
  154. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +7 -7
  155. package/esm2020/notifications/lib/notifications.module.mjs +4 -4
  156. package/esm2020/notifications/lib/notifications.service.mjs +5 -5
  157. package/esm2020/public_api.mjs +1 -2
  158. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +3 -3
  159. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +10 -10
  160. package/esm2020/recaptcha/lib/recaptcha.module.mjs +4 -4
  161. package/esm2020/storage/lib/storage.service.mjs +5 -5
  162. package/esm2020/table/lib/components/table/table.component.mjs +9 -9
  163. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +3 -3
  164. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +3 -3
  165. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +3 -3
  166. package/esm2020/table/lib/table.module.mjs +4 -4
  167. package/esm2020/theming/lib/themes/checkbox-group.theme.mjs +17 -2
  168. package/esm2020/theming/lib/themes/checkbox.theme.mjs +35 -2
  169. package/esm2020/theming/lib/themes/control-error.theme.mjs +11 -0
  170. package/esm2020/theming/lib/themes/form-control-addon.theme.mjs +6 -0
  171. package/esm2020/theming/lib/themes/form-control.theme.mjs +45 -0
  172. package/esm2020/theming/lib/theming.data.mjs +82 -0
  173. package/esm2020/theming/lib/theming.directive.mjs +38 -0
  174. package/esm2020/theming/lib/theming.interface.mjs +2 -3
  175. package/esm2020/theming/lib/theming.module.mjs +12 -34
  176. package/esm2020/theming/lib/utils/theming.variable.mjs +41 -0
  177. package/esm2020/theming/public_api.mjs +6 -3
  178. package/fesm2015/bravobit-bb-foundation-auth.mjs +326 -284
  179. package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -1
  180. package/fesm2015/bravobit-bb-foundation-collections.mjs +22 -22
  181. package/fesm2015/bravobit-bb-foundation-controls.mjs +493 -24
  182. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -1
  183. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +29 -28
  184. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  185. package/fesm2015/bravobit-bb-foundation-dialog.mjs +185 -233
  186. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -1
  187. package/fesm2015/bravobit-bb-foundation-elements.mjs +140 -99
  188. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -1
  189. package/fesm2015/bravobit-bb-foundation-http.mjs +10 -10
  190. package/fesm2015/bravobit-bb-foundation-localize.mjs +20 -20
  191. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -1
  192. package/fesm2015/bravobit-bb-foundation-masking.mjs +20 -19
  193. package/fesm2015/bravobit-bb-foundation-masking.mjs.map +1 -1
  194. package/fesm2015/bravobit-bb-foundation-notifications.mjs +18 -17
  195. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -1
  196. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +16 -16
  197. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  198. package/fesm2015/bravobit-bb-foundation-storage.mjs +4 -4
  199. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -1
  200. package/fesm2015/bravobit-bb-foundation-table.mjs +22 -22
  201. package/fesm2015/bravobit-bb-foundation-theming.mjs +251 -128
  202. package/fesm2015/bravobit-bb-foundation-theming.mjs.map +1 -1
  203. package/fesm2015/bravobit-bb-foundation.mjs +33 -73
  204. package/fesm2015/bravobit-bb-foundation.mjs.map +1 -1
  205. package/fesm2020/bravobit-bb-foundation-auth.mjs +306 -277
  206. package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -1
  207. package/fesm2020/bravobit-bb-foundation-collections.mjs +22 -22
  208. package/fesm2020/bravobit-bb-foundation-controls.mjs +477 -24
  209. package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -1
  210. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +29 -28
  211. package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  212. package/fesm2020/bravobit-bb-foundation-dialog.mjs +175 -233
  213. package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -1
  214. package/fesm2020/bravobit-bb-foundation-elements.mjs +140 -99
  215. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -1
  216. package/fesm2020/bravobit-bb-foundation-http.mjs +10 -10
  217. package/fesm2020/bravobit-bb-foundation-localize.mjs +20 -20
  218. package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -1
  219. package/fesm2020/bravobit-bb-foundation-masking.mjs +19 -19
  220. package/fesm2020/bravobit-bb-foundation-masking.mjs.map +1 -1
  221. package/fesm2020/bravobit-bb-foundation-notifications.mjs +17 -17
  222. package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -1
  223. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +16 -16
  224. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  225. package/fesm2020/bravobit-bb-foundation-storage.mjs +4 -4
  226. package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -1
  227. package/fesm2020/bravobit-bb-foundation-table.mjs +22 -22
  228. package/fesm2020/bravobit-bb-foundation-theming.mjs +252 -120
  229. package/fesm2020/bravobit-bb-foundation-theming.mjs.map +1 -1
  230. package/fesm2020/bravobit-bb-foundation.mjs +32 -70
  231. package/fesm2020/bravobit-bb-foundation.mjs.map +1 -1
  232. package/lib/core/services/clipboard.service.d.ts +2 -2
  233. package/lib/core/services/exif.service.d.ts +1 -1
  234. package/lib/core/services/image-converter.service.d.ts +1 -1
  235. package/lib/core/services/network.service.d.ts +4 -4
  236. package/lib/core/services/patch.service.d.ts +4 -4
  237. package/localize/lib/localize.service.d.ts +1 -1
  238. package/notifications/lib/notifications-item/notifications-item.component.d.ts +1 -1
  239. package/notifications/lib/notifications.service.d.ts +1 -1
  240. package/package.json +4 -4
  241. package/public_api.d.ts +0 -1
  242. package/recaptcha/lib/recaptcha-loader.service.d.ts +3 -3
  243. package/storage/lib/storage.service.d.ts +1 -1
  244. package/theming/lib/themes/checkbox-group.theme.d.ts +14 -3
  245. package/theming/lib/themes/checkbox.theme.d.ts +30 -17
  246. package/theming/lib/themes/control-error.theme.d.ts +9 -0
  247. package/theming/lib/themes/form-control-addon.theme.d.ts +5 -0
  248. package/theming/lib/themes/form-control.theme.d.ts +32 -0
  249. package/theming/lib/theming.data.d.ts +17 -0
  250. package/theming/lib/theming.directive.d.ts +13 -0
  251. package/theming/lib/theming.interface.d.ts +19 -8
  252. package/theming/lib/theming.module.d.ts +3 -9
  253. package/theming/lib/utils/theming.variable.d.ts +16 -0
  254. package/theming/public_api.d.ts +5 -2
  255. package/auth/lib/directives/role.directive.d.ts +0 -16
  256. package/auth/lib/helpers/mapper.helper.d.ts +0 -23
  257. package/auth/lib/interfaces/mapper.interface.d.ts +0 -19
  258. package/auth/lib/permissions.service.d.ts +0 -14
  259. package/esm2020/auth/lib/directives/role.directive.mjs +0 -37
  260. package/esm2020/auth/lib/helpers/mapper.helper.mjs +0 -35
  261. package/esm2020/auth/lib/interfaces/mapper.interface.mjs +0 -2
  262. package/esm2020/auth/lib/permissions.service.mjs +0 -56
  263. package/esm2020/lib/core/services/platform.service.mjs +0 -42
  264. package/esm2020/theming/lib/themes/theme.mjs +0 -34
  265. package/esm2020/theming/lib/theming.service.mjs +0 -77
  266. package/lib/core/services/platform.service.d.ts +0 -18
  267. package/theming/lib/themes/theme.d.ts +0 -12
  268. package/theming/lib/theming.service.d.ts +0 -22
@@ -1,9 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, EventEmitter, forwardRef, ViewChild, Output, NgModule } from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, EventEmitter, forwardRef, ViewChild, Output, NgModule, Directive, Optional, Self, HostBinding, InjectionToken, Inject, ContentChild } from '@angular/core';
3
3
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
4
  import * as i1 from '@angular/common';
5
5
  import { CommonModule } from '@angular/common';
6
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
+ import * as i2 from '@angular/forms';
7
+ import { NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
8
+ import { startWith, map, distinctUntilChanged, pairwise, switchMap, delay, debounceTime } from 'rxjs/operators';
9
+ import { Subscription, fromEvent, merge, of, BehaviorSubject } from 'rxjs';
10
+ import { trigger, transition, style, animate } from '@angular/animations';
11
+ import * as i1$1 from '@bravobit/bb-foundation/localize';
7
12
 
8
13
  class BbiCheckboxGroup {
9
14
  constructor(_changeDetectorRef) {
@@ -42,16 +47,16 @@ class BbiCheckboxGroup {
42
47
  }
43
48
  }
44
49
  }
45
- BbiCheckboxGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: BbiCheckboxGroup, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
46
- BbiCheckboxGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: BbiCheckboxGroup, selector: "bbi-checkbox-group", inputs: { label: "label", grouped: "grouped", required: "required", inline: "inline" }, host: { properties: { "class.grouped": "grouped", "class.required": "required", "class.inline": "inline" }, classAttribute: "bbi-checkbox-group" }, ngImport: i0, template: "<label *ngIf=\"label as label\"\n class=\"bbi-checkbox-group-label\">\n {{ label }}\n</label>\n\n<div class=\"bbi-checkbox-group-items\">\n <ng-content select=\"bbi-checkbox\"></ng-content>\n</div>\n", styles: [".bbi-checkbox-group{display:block}.bbi-checkbox-group.grouped{margin-bottom:var(--checkbox-group-grouping, 20px)}.bbi-checkbox-group.required>.bbi-checkbox-group-label:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5}.bbi-checkbox-group-label{border:0;padding:0;line-height:1.33;margin-bottom:4px;font-family:inherit;display:inline-block;box-sizing:border-box;vertical-align:initial;color:var(--checkbox-group-label-color, #525252);font-size:var(--checkbox-group-label-font-size, 14px);font-weight:var(--checkbox-group-label-font-weight, 400)}.bbi-checkbox-group-items{display:flex;flex-direction:column}.bbi-checkbox-group-items:not(:empty){margin-bottom:-var(--checkbox-group-item-spacing-vertical,4px)}.bbi-checkbox-group-items>*{margin-bottom:var(--checkbox-group-item-spacing-vertical, 4px)}@media only screen and (min-width: 768px){.bbi-checkbox-group.inline>.bbi-checkbox-group-items{flex-wrap:wrap;flex-direction:row}.bbi-checkbox-group.inline>.bbi-checkbox-group-items>*:not(:last-child){margin-right:var(--checkbox-group-item-spacing-horizontal, 10px)}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: BbiCheckboxGroup, decorators: [{
50
+ BbiCheckboxGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiCheckboxGroup, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
51
+ BbiCheckboxGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: BbiCheckboxGroup, selector: "bbi-checkbox-group", inputs: { label: "label", grouped: "grouped", required: "required", inline: "inline" }, host: { properties: { "class.grouped": "grouped", "class.required": "required", "class.inline": "inline" }, classAttribute: "bbi-checkbox-group" }, ngImport: i0, template: "<label *ngIf=\"label as label\"\n class=\"bbi-checkbox-group-label\">\n {{ label }}\n</label>\n\n<div class=\"bbi-checkbox-group-items\">\n <ng-content select=\"bbi-checkbox\"></ng-content>\n</div>\n", styles: [".bbi-checkbox-group{display:block}.bbi-checkbox-group.grouped{margin-bottom:var(--checkbox-group-grouping, 20px)}.bbi-checkbox-group.required>.bbi-checkbox-group-label:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5}.bbi-checkbox-group-label{border:0;padding:0;font-family:inherit;display:inline-block;box-sizing:border-box;vertical-align:initial;color:var(--checkbox-group-label-color, #525252);font-size:var(--checkbox-group-label-font-size, 14px);margin-bottom:var(--checkbox-group-label-offset, 4px);line-height:var(--checkbox-group-label-line-height, 1.33);font-weight:var(--checkbox-group-label-font-weight, 400)}.bbi-checkbox-group-items{display:flex;flex-direction:column}.bbi-checkbox-group-items:not(:empty){margin-bottom:-var(--checkbox-group-item-spacing-vertical,4px)}.bbi-checkbox-group-items>*{margin-bottom:var(--checkbox-group-item-spacing-vertical, 4px)}@media only screen and (min-width: 768px){.bbi-checkbox-group.inline>.bbi-checkbox-group-items{flex-wrap:wrap;flex-direction:row}.bbi-checkbox-group.inline>.bbi-checkbox-group-items>*:not(:last-child){margin-right:var(--checkbox-group-item-spacing-horizontal, 10px)}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiCheckboxGroup, decorators: [{
48
53
  type: Component,
49
54
  args: [{ selector: 'bbi-checkbox-group', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
50
55
  'class': 'bbi-checkbox-group',
51
56
  '[class.grouped]': 'grouped',
52
57
  '[class.required]': 'required',
53
58
  '[class.inline]': 'inline'
54
- }, preserveWhitespaces: false, template: "<label *ngIf=\"label as label\"\n class=\"bbi-checkbox-group-label\">\n {{ label }}\n</label>\n\n<div class=\"bbi-checkbox-group-items\">\n <ng-content select=\"bbi-checkbox\"></ng-content>\n</div>\n", styles: [".bbi-checkbox-group{display:block}.bbi-checkbox-group.grouped{margin-bottom:var(--checkbox-group-grouping, 20px)}.bbi-checkbox-group.required>.bbi-checkbox-group-label:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5}.bbi-checkbox-group-label{border:0;padding:0;line-height:1.33;margin-bottom:4px;font-family:inherit;display:inline-block;box-sizing:border-box;vertical-align:initial;color:var(--checkbox-group-label-color, #525252);font-size:var(--checkbox-group-label-font-size, 14px);font-weight:var(--checkbox-group-label-font-weight, 400)}.bbi-checkbox-group-items{display:flex;flex-direction:column}.bbi-checkbox-group-items:not(:empty){margin-bottom:-var(--checkbox-group-item-spacing-vertical,4px)}.bbi-checkbox-group-items>*{margin-bottom:var(--checkbox-group-item-spacing-vertical, 4px)}@media only screen and (min-width: 768px){.bbi-checkbox-group.inline>.bbi-checkbox-group-items{flex-wrap:wrap;flex-direction:row}.bbi-checkbox-group.inline>.bbi-checkbox-group-items>*:not(:last-child){margin-right:var(--checkbox-group-item-spacing-horizontal, 10px)}}\n"] }]
59
+ }, preserveWhitespaces: false, template: "<label *ngIf=\"label as label\"\n class=\"bbi-checkbox-group-label\">\n {{ label }}\n</label>\n\n<div class=\"bbi-checkbox-group-items\">\n <ng-content select=\"bbi-checkbox\"></ng-content>\n</div>\n", styles: [".bbi-checkbox-group{display:block}.bbi-checkbox-group.grouped{margin-bottom:var(--checkbox-group-grouping, 20px)}.bbi-checkbox-group.required>.bbi-checkbox-group-label:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5}.bbi-checkbox-group-label{border:0;padding:0;font-family:inherit;display:inline-block;box-sizing:border-box;vertical-align:initial;color:var(--checkbox-group-label-color, #525252);font-size:var(--checkbox-group-label-font-size, 14px);margin-bottom:var(--checkbox-group-label-offset, 4px);line-height:var(--checkbox-group-label-line-height, 1.33);font-weight:var(--checkbox-group-label-font-weight, 400)}.bbi-checkbox-group-items{display:flex;flex-direction:column}.bbi-checkbox-group-items:not(:empty){margin-bottom:-var(--checkbox-group-item-spacing-vertical,4px)}.bbi-checkbox-group-items>*{margin-bottom:var(--checkbox-group-item-spacing-vertical, 4px)}@media only screen and (min-width: 768px){.bbi-checkbox-group.inline>.bbi-checkbox-group-items{flex-wrap:wrap;flex-direction:row}.bbi-checkbox-group.inline>.bbi-checkbox-group-items>*:not(:last-child){margin-right:var(--checkbox-group-item-spacing-horizontal, 10px)}}\n"] }]
55
60
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
56
61
  type: Input
57
62
  }], grouped: [{
@@ -62,13 +67,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImpor
62
67
  type: Input
63
68
  }] } });
64
69
 
65
- let nextUniqueId = 0;
70
+ let nextUniqueId$1 = 0;
66
71
  class BbiCheckbox {
67
72
  constructor(_renderer, _changeDetectorRef) {
68
73
  this._renderer = _renderer;
69
74
  this._changeDetectorRef = _changeDetectorRef;
70
75
  // Readonly data.
71
- this.labelId = `bbi-checkbox-${nextUniqueId++}`;
76
+ this.labelId = `bbi-checkbox-${nextUniqueId$1++}`;
72
77
  // Outputs.
73
78
  this.checkedChange = new EventEmitter();
74
79
  this.indeterminateChange = new EventEmitter();
@@ -77,6 +82,7 @@ class BbiCheckbox {
77
82
  this._grouped = false;
78
83
  this._indeterminate = false;
79
84
  this._required = false;
85
+ this._hideText = false;
80
86
  // Methods.
81
87
  this.onChange = () => ({});
82
88
  this.onTouched = () => ({});
@@ -123,6 +129,15 @@ class BbiCheckbox {
123
129
  this._changeDetectorRef.markForCheck();
124
130
  }
125
131
  }
132
+ // Hide text.
133
+ get hideText() { return this._hideText; }
134
+ set hideText(value) {
135
+ const newValue = coerceBooleanProperty(value);
136
+ if (newValue !== this.hideText) {
137
+ this._hideText = newValue;
138
+ this._changeDetectorRef.markForCheck();
139
+ }
140
+ }
126
141
  ngAfterViewInit() {
127
142
  this.syncField('indeterminate', this._indeterminate);
128
143
  }
@@ -178,11 +193,11 @@ class BbiCheckbox {
178
193
  this._renderer.setProperty(element, field, value);
179
194
  }
180
195
  }
181
- BbiCheckbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: BbiCheckbox, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
182
- BbiCheckbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: BbiCheckbox, selector: "bbi-checkbox", inputs: { checked: "checked", disabled: "disabled", grouped: "grouped", indeterminate: "indeterminate", required: "required" }, outputs: { checkedChange: "checkedChange", indeterminateChange: "indeterminateChange" }, host: { properties: { "class.grouped": "grouped", "class.indeterminate": "indeterminate", "class.required": "required" }, classAttribute: "bbi-checkbox" }, providers: [
196
+ BbiCheckbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiCheckbox, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
197
+ BbiCheckbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: BbiCheckbox, selector: "bbi-checkbox", inputs: { checked: "checked", disabled: "disabled", grouped: "grouped", indeterminate: "indeterminate", required: "required", hideText: "hideText" }, outputs: { checkedChange: "checkedChange", indeterminateChange: "indeterminateChange" }, host: { properties: { "class.grouped": "grouped", "class.indeterminate": "indeterminate", "class.required": "required" }, classAttribute: "bbi-checkbox" }, providers: [
183
198
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbiCheckbox), multi: true }
184
- ], viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: "<input #input\n [id]=\"labelId\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"onChangeEvent($event)\"\n (click)=\"onClickEvent($event)\"\n (blur)=\"onTouched()\"\n class=\"bbi-checkbox-input\"\n type=\"checkbox\">\n<label [attr.for]=\"labelId\"\n class=\"bbi-checkbox-label\">\n <span class=\"bbi-checkbox-text\"><ng-content></ng-content></span>\n</label>\n", styles: [".bbi-checkbox{display:block}.bbi-checkbox.grouped{margin-bottom:var(--checkbox-grouping, 20px)}.bbi-checkbox.required>.bbi-checkbox-label>.bbi-checkbox-text:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5;margin-left:3px}.bbi-checkbox-input{border:0;width:1px;padding:0;height:1px;margin:-1px;overflow:hidden;position:absolute;visibility:inherit;white-space:nowrap;clip:rect(0,0,0,0)}.bbi-checkbox-input:checked+.bbi-checkbox-label:before,.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:before{background-color:var(--checkbox-accent-color, var(--accent-color, #1565c0));border:var(--checkbox-border-thickness, 1px) solid var(--checkbox-accent-color, var(--accent-color, #1565c0))}.bbi-checkbox-input:checked+.bbi-checkbox-label:after,.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:after{opacity:1;transform:scale(1) rotate(-45deg)}.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:after{left:calc(var(--checkbox-size, 20px) / 4);width:calc(var(--checkbox-size, 20px) / 2);transform:scale(1) rotate(0);border-left:0 solid var(--checkbox-check-color, white);border-bottom:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white)}.bbi-checkbox-input:focus+.bbi-checkbox-label:before{outline-color:var(--checkbox-outline-color, var(--accent-color, #1565c0))}.bbi-checkbox-input:disabled+.bbi-checkbox-label{cursor:not-allowed;color:var(--checkbox-disabled-color, #c6c6c6)}.bbi-checkbox-input:disabled+.bbi-checkbox-label:before{border-color:var(--checkbox-disabled-color, #c6c6c6)}.bbi-checkbox-input:disabled+.bbi-checkbox-label>.bbi-checkbox-text{color:var(--checkbox-disabled-color, #c6c6c6)}.bbi-checkbox-input:checked:disabled+.bbi-checkbox-label:before,.bbi-checkbox-input:indeterminate:disabled+.bbi-checkbox-label:before{background-color:var(--checkbox-disabled-color, #c6c6c6)}.bbi-checkbox-label{border:0;margin:0;display:flex;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;align-items:center;font-family:inherit;vertical-align:initial;min-height:var(--checkbox-size, 20px);padding-left:var(--checkbox-size, 20px)}.bbi-checkbox-label:before{left:0;content:\"\";position:absolute;width:var(--checkbox-size, 20px);height:var(--checkbox-size, 20px);background-color:initial;border-radius:var(--checkbox-border-radius, 4px);outline-offset:var(--checkbox-outline-offset, 1px);outline:var(--checkbox-outline-thickness, 2px) solid transparent;border:var(--checkbox-border-thickness, 1px) solid var(--checkbox-border-color, #111111);transition:outline-color .2s cubic-bezier(0,0,.2,1),background-color .18s cubic-bezier(0,0,.2,1),border-color .18s cubic-bezier(0,0,.2,1)}.bbi-checkbox-label:after{opacity:0;content:\"\";background:none;position:absolute;transform-origin:center;width:var(--checkbox-check-size, 12px);transform:scale(.85) rotate(-60deg);height:calc(var(--checkbox-check-size, 12px) / 2);top:calc(50% - var(--checkbox-check-size, 12px) / 2 * .75);left:calc((var(--checkbox-size, 20px) - var(--checkbox-check-size, 12px)) / 2);border-left:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white);border-bottom:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white);transition:opacity .12s cubic-bezier(0,0,.2,1),transform .18s cubic-bezier(0,0,.2,1)}.bbi-checkbox-text{color:var(--checkbox-label-color, #111111);padding-left:var(--checkbox-label-offset, 6px);font-size:var(--checkbox-label-font-size, 16px);font-weight:var(--checkbox-label-font-weight, 400);line-height:var(--checkbox-label-line-height, 1.28)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: BbiCheckbox, decorators: [{
199
+ ], viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: "<input #input\n [id]=\"labelId\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"onChangeEvent($event)\"\n (click)=\"onClickEvent($event)\"\n (blur)=\"onTouched()\"\n class=\"bbi-checkbox-input\"\n type=\"checkbox\">\n<label [attr.for]=\"labelId\"\n class=\"bbi-checkbox-label\">\n <span *ngIf=\"!hideText\"\n class=\"bbi-checkbox-text\"><ng-content></ng-content></span>\n</label>\n", styles: [".bbi-checkbox{display:block}.bbi-checkbox.grouped{margin-bottom:var(--checkbox-grouping, 20px)}.bbi-checkbox.required>.bbi-checkbox-label>.bbi-checkbox-text:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5;margin-left:3px}.bbi-checkbox-input{border:0;width:1px;padding:0;height:1px;margin:-1px;overflow:hidden;position:absolute;visibility:inherit;white-space:nowrap;clip:rect(0,0,0,0)}.bbi-checkbox-input:checked+.bbi-checkbox-label:before,.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:before{background-color:var(--checkbox-colors-accent, var(--accent-color, #1565c0));border:var(--checkbox-border-thickness, 1px) solid var(--checkbox-colors-accent, var(--accent-color, #1565c0))}.bbi-checkbox-input:checked+.bbi-checkbox-label:after,.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:after{opacity:1;transform:scale(1) rotate(-45deg)}.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:after{left:calc(var(--checkbox-size, 20px) / 4);width:calc(var(--checkbox-size, 20px) / 2);transform:scale(1) rotate(0);border-left:0 solid var(--checkbox-check-color, white);border-bottom:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white)}.bbi-checkbox-input:focus+.bbi-checkbox-label:before{outline-color:var(--checkbox-outline-color, var(--accent-color, #1565c0))}.bbi-checkbox-input:disabled+.bbi-checkbox-label{cursor:not-allowed;color:var(--checkbox-colors-disabled, #c6c6c6)}.bbi-checkbox-input:disabled+.bbi-checkbox-label:before{border-color:var(--checkbox-colors-disabled, #c6c6c6)}.bbi-checkbox-input:disabled+.bbi-checkbox-label>.bbi-checkbox-text{color:var(--checkbox-colors-disabled, #c6c6c6)}.bbi-checkbox-input:checked:disabled+.bbi-checkbox-label:before,.bbi-checkbox-input:indeterminate:disabled+.bbi-checkbox-label:before{background-color:var(--checkbox-colors-disabled, #c6c6c6)}.bbi-checkbox-label{border:0;margin:0;display:flex;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;align-items:center;font-family:inherit;vertical-align:initial;min-height:var(--checkbox-size, 20px);padding-left:var(--checkbox-size, 20px)}.bbi-checkbox-label:before{left:0;content:\"\";position:absolute;width:var(--checkbox-size, 20px);height:var(--checkbox-size, 20px);background-color:initial;border-radius:var(--checkbox-border-radius, 4px);outline-offset:var(--checkbox-outline-offset, 1px);outline:var(--checkbox-outline-thickness, 2px) solid transparent;border:var(--checkbox-border-thickness, 1px) solid var(--checkbox-border-color, #111111);transition:outline-color .2s cubic-bezier(0,0,.2,1),background-color .18s cubic-bezier(0,0,.2,1),border-color .18s cubic-bezier(0,0,.2,1)}.bbi-checkbox-label:after{opacity:0;content:\"\";background:none;position:absolute;transform-origin:center;width:var(--checkbox-check-size, 12px);transform:scale(.85) rotate(-60deg);height:calc(var(--checkbox-check-size, 12px) / 2);top:calc(50% - var(--checkbox-check-size, 12px) / 2 * .75);left:calc((var(--checkbox-size, 20px) - var(--checkbox-check-size, 12px)) / 2);border-left:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white);border-bottom:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white);transition:opacity .12s cubic-bezier(0,0,.2,1),transform .18s cubic-bezier(0,0,.2,1)}.bbi-checkbox-text{color:var(--checkbox-label-color, #111111);padding-left:var(--checkbox-label-offset, 6px);font-size:var(--checkbox-label-font-size, 16px);font-weight:var(--checkbox-label-font-weight, 400);line-height:var(--checkbox-label-line-height, 1.28)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiCheckbox, decorators: [{
186
201
  type: Component,
187
202
  args: [{ selector: 'bbi-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
188
203
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbiCheckbox), multi: true }
@@ -191,7 +206,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImpor
191
206
  '[class.grouped]': 'grouped',
192
207
  '[class.indeterminate]': 'indeterminate',
193
208
  '[class.required]': 'required'
194
- }, preserveWhitespaces: false, template: "<input #input\n [id]=\"labelId\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"onChangeEvent($event)\"\n (click)=\"onClickEvent($event)\"\n (blur)=\"onTouched()\"\n class=\"bbi-checkbox-input\"\n type=\"checkbox\">\n<label [attr.for]=\"labelId\"\n class=\"bbi-checkbox-label\">\n <span class=\"bbi-checkbox-text\"><ng-content></ng-content></span>\n</label>\n", styles: [".bbi-checkbox{display:block}.bbi-checkbox.grouped{margin-bottom:var(--checkbox-grouping, 20px)}.bbi-checkbox.required>.bbi-checkbox-label>.bbi-checkbox-text:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5;margin-left:3px}.bbi-checkbox-input{border:0;width:1px;padding:0;height:1px;margin:-1px;overflow:hidden;position:absolute;visibility:inherit;white-space:nowrap;clip:rect(0,0,0,0)}.bbi-checkbox-input:checked+.bbi-checkbox-label:before,.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:before{background-color:var(--checkbox-accent-color, var(--accent-color, #1565c0));border:var(--checkbox-border-thickness, 1px) solid var(--checkbox-accent-color, var(--accent-color, #1565c0))}.bbi-checkbox-input:checked+.bbi-checkbox-label:after,.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:after{opacity:1;transform:scale(1) rotate(-45deg)}.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:after{left:calc(var(--checkbox-size, 20px) / 4);width:calc(var(--checkbox-size, 20px) / 2);transform:scale(1) rotate(0);border-left:0 solid var(--checkbox-check-color, white);border-bottom:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white)}.bbi-checkbox-input:focus+.bbi-checkbox-label:before{outline-color:var(--checkbox-outline-color, var(--accent-color, #1565c0))}.bbi-checkbox-input:disabled+.bbi-checkbox-label{cursor:not-allowed;color:var(--checkbox-disabled-color, #c6c6c6)}.bbi-checkbox-input:disabled+.bbi-checkbox-label:before{border-color:var(--checkbox-disabled-color, #c6c6c6)}.bbi-checkbox-input:disabled+.bbi-checkbox-label>.bbi-checkbox-text{color:var(--checkbox-disabled-color, #c6c6c6)}.bbi-checkbox-input:checked:disabled+.bbi-checkbox-label:before,.bbi-checkbox-input:indeterminate:disabled+.bbi-checkbox-label:before{background-color:var(--checkbox-disabled-color, #c6c6c6)}.bbi-checkbox-label{border:0;margin:0;display:flex;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;align-items:center;font-family:inherit;vertical-align:initial;min-height:var(--checkbox-size, 20px);padding-left:var(--checkbox-size, 20px)}.bbi-checkbox-label:before{left:0;content:\"\";position:absolute;width:var(--checkbox-size, 20px);height:var(--checkbox-size, 20px);background-color:initial;border-radius:var(--checkbox-border-radius, 4px);outline-offset:var(--checkbox-outline-offset, 1px);outline:var(--checkbox-outline-thickness, 2px) solid transparent;border:var(--checkbox-border-thickness, 1px) solid var(--checkbox-border-color, #111111);transition:outline-color .2s cubic-bezier(0,0,.2,1),background-color .18s cubic-bezier(0,0,.2,1),border-color .18s cubic-bezier(0,0,.2,1)}.bbi-checkbox-label:after{opacity:0;content:\"\";background:none;position:absolute;transform-origin:center;width:var(--checkbox-check-size, 12px);transform:scale(.85) rotate(-60deg);height:calc(var(--checkbox-check-size, 12px) / 2);top:calc(50% - var(--checkbox-check-size, 12px) / 2 * .75);left:calc((var(--checkbox-size, 20px) - var(--checkbox-check-size, 12px)) / 2);border-left:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white);border-bottom:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white);transition:opacity .12s cubic-bezier(0,0,.2,1),transform .18s cubic-bezier(0,0,.2,1)}.bbi-checkbox-text{color:var(--checkbox-label-color, #111111);padding-left:var(--checkbox-label-offset, 6px);font-size:var(--checkbox-label-font-size, 16px);font-weight:var(--checkbox-label-font-weight, 400);line-height:var(--checkbox-label-line-height, 1.28)}\n"] }]
209
+ }, preserveWhitespaces: false, template: "<input #input\n [id]=\"labelId\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"onChangeEvent($event)\"\n (click)=\"onClickEvent($event)\"\n (blur)=\"onTouched()\"\n class=\"bbi-checkbox-input\"\n type=\"checkbox\">\n<label [attr.for]=\"labelId\"\n class=\"bbi-checkbox-label\">\n <span *ngIf=\"!hideText\"\n class=\"bbi-checkbox-text\"><ng-content></ng-content></span>\n</label>\n", styles: [".bbi-checkbox{display:block}.bbi-checkbox.grouped{margin-bottom:var(--checkbox-grouping, 20px)}.bbi-checkbox.required>.bbi-checkbox-label>.bbi-checkbox-text:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5;margin-left:3px}.bbi-checkbox-input{border:0;width:1px;padding:0;height:1px;margin:-1px;overflow:hidden;position:absolute;visibility:inherit;white-space:nowrap;clip:rect(0,0,0,0)}.bbi-checkbox-input:checked+.bbi-checkbox-label:before,.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:before{background-color:var(--checkbox-colors-accent, var(--accent-color, #1565c0));border:var(--checkbox-border-thickness, 1px) solid var(--checkbox-colors-accent, var(--accent-color, #1565c0))}.bbi-checkbox-input:checked+.bbi-checkbox-label:after,.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:after{opacity:1;transform:scale(1) rotate(-45deg)}.bbi-checkbox-input:indeterminate+.bbi-checkbox-label:after{left:calc(var(--checkbox-size, 20px) / 4);width:calc(var(--checkbox-size, 20px) / 2);transform:scale(1) rotate(0);border-left:0 solid var(--checkbox-check-color, white);border-bottom:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white)}.bbi-checkbox-input:focus+.bbi-checkbox-label:before{outline-color:var(--checkbox-outline-color, var(--accent-color, #1565c0))}.bbi-checkbox-input:disabled+.bbi-checkbox-label{cursor:not-allowed;color:var(--checkbox-colors-disabled, #c6c6c6)}.bbi-checkbox-input:disabled+.bbi-checkbox-label:before{border-color:var(--checkbox-colors-disabled, #c6c6c6)}.bbi-checkbox-input:disabled+.bbi-checkbox-label>.bbi-checkbox-text{color:var(--checkbox-colors-disabled, #c6c6c6)}.bbi-checkbox-input:checked:disabled+.bbi-checkbox-label:before,.bbi-checkbox-input:indeterminate:disabled+.bbi-checkbox-label:before{background-color:var(--checkbox-colors-disabled, #c6c6c6)}.bbi-checkbox-label{border:0;margin:0;display:flex;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative;align-items:center;font-family:inherit;vertical-align:initial;min-height:var(--checkbox-size, 20px);padding-left:var(--checkbox-size, 20px)}.bbi-checkbox-label:before{left:0;content:\"\";position:absolute;width:var(--checkbox-size, 20px);height:var(--checkbox-size, 20px);background-color:initial;border-radius:var(--checkbox-border-radius, 4px);outline-offset:var(--checkbox-outline-offset, 1px);outline:var(--checkbox-outline-thickness, 2px) solid transparent;border:var(--checkbox-border-thickness, 1px) solid var(--checkbox-border-color, #111111);transition:outline-color .2s cubic-bezier(0,0,.2,1),background-color .18s cubic-bezier(0,0,.2,1),border-color .18s cubic-bezier(0,0,.2,1)}.bbi-checkbox-label:after{opacity:0;content:\"\";background:none;position:absolute;transform-origin:center;width:var(--checkbox-check-size, 12px);transform:scale(.85) rotate(-60deg);height:calc(var(--checkbox-check-size, 12px) / 2);top:calc(50% - var(--checkbox-check-size, 12px) / 2 * .75);left:calc((var(--checkbox-size, 20px) - var(--checkbox-check-size, 12px)) / 2);border-left:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white);border-bottom:var(--checkbox-check-thickness, 2px) solid var(--checkbox-check-color, white);transition:opacity .12s cubic-bezier(0,0,.2,1),transform .18s cubic-bezier(0,0,.2,1)}.bbi-checkbox-text{color:var(--checkbox-label-color, #111111);padding-left:var(--checkbox-label-offset, 6px);font-size:var(--checkbox-label-font-size, 16px);font-weight:var(--checkbox-label-font-weight, 400);line-height:var(--checkbox-label-line-height, 1.28)}\n"] }]
195
210
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { inputElementRef: [{
196
211
  type: ViewChild,
197
212
  args: ['input', { static: true }]
@@ -209,14 +224,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImpor
209
224
  type: Input
210
225
  }], required: [{
211
226
  type: Input
227
+ }], hideText: [{
228
+ type: Input
212
229
  }] } });
213
230
 
214
231
  class CheckboxModule {
215
232
  }
216
- CheckboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: CheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
217
- CheckboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.4", ngImport: i0, type: CheckboxModule, declarations: [BbiCheckbox, BbiCheckboxGroup], imports: [CommonModule], exports: [BbiCheckbox, BbiCheckboxGroup] });
218
- CheckboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: CheckboxModule, imports: [CommonModule] });
219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: CheckboxModule, decorators: [{
233
+ CheckboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: CheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
234
+ CheckboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.1", ngImport: i0, type: CheckboxModule, declarations: [BbiCheckbox, BbiCheckboxGroup], imports: [CommonModule], exports: [BbiCheckbox, BbiCheckboxGroup] });
235
+ CheckboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: CheckboxModule, imports: [CommonModule] });
236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: CheckboxModule, decorators: [{
220
237
  type: NgModule,
221
238
  args: [{
222
239
  imports: [CommonModule],
@@ -225,16 +242,452 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImpor
225
242
  }]
226
243
  }] });
227
244
 
245
+ class BbiFormControlInput {
246
+ constructor(_elementRef, _formControl, _changeDetectorRef, _ngControl) {
247
+ this._elementRef = _elementRef;
248
+ this._formControl = _formControl;
249
+ this._changeDetectorRef = _changeDetectorRef;
250
+ this._ngControl = _ngControl;
251
+ // Readonly data.
252
+ this.labelId = this._formControl?.labelId ?? null;
253
+ // State.
254
+ this.errors = null;
255
+ this.focused = false;
256
+ // Subscriptions.
257
+ this._subscription = new Subscription();
258
+ this._disabled = false;
259
+ this._readonly = false;
260
+ this._required = false;
261
+ }
262
+ ngOnInit() {
263
+ this.handleControlDisabledStatus();
264
+ this.handleControlErrorStatus();
265
+ this.handleFocusedState();
266
+ }
267
+ ngOnDestroy() {
268
+ this._subscription?.unsubscribe();
269
+ }
270
+ get control() {
271
+ return this._ngControl ?? null;
272
+ }
273
+ get disabled() { return this._disabled; }
274
+ set disabled(value) {
275
+ const newValue = coerceBooleanProperty(value);
276
+ if (newValue !== this.disabled) {
277
+ this._disabled = newValue;
278
+ this._changeDetectorRef.markForCheck();
279
+ }
280
+ }
281
+ get readonly() { return this._readonly; }
282
+ set readonly(value) {
283
+ const newValue = coerceBooleanProperty(value);
284
+ if (newValue !== this.readonly) {
285
+ this._readonly = newValue;
286
+ this._changeDetectorRef.markForCheck();
287
+ }
288
+ }
289
+ get required() {
290
+ if (this._ngControl) {
291
+ return this._ngControl?.control?.hasValidator(Validators.required);
292
+ }
293
+ return this._required;
294
+ }
295
+ set required(value) {
296
+ const newValue = coerceBooleanProperty(value);
297
+ if (newValue !== this.required) {
298
+ this._required = newValue;
299
+ this._changeDetectorRef.markForCheck();
300
+ }
301
+ }
302
+ handleControlErrorStatus() {
303
+ if (!this._ngControl) {
304
+ return;
305
+ }
306
+ const errors$ = this._ngControl.statusChanges.pipe(startWith(this._ngControl.status), map(() => this._ngControl?.errors ?? null));
307
+ const subscription = errors$.subscribe(errors => {
308
+ this.errors = errors;
309
+ this._changeDetectorRef.markForCheck();
310
+ });
311
+ this._subscription.add(subscription);
312
+ }
313
+ handleControlDisabledStatus() {
314
+ if (!this._ngControl) {
315
+ return;
316
+ }
317
+ const disabled$ = this._ngControl.statusChanges.pipe(startWith(this._ngControl.status), map(status => status === 'DISABLED'), distinctUntilChanged());
318
+ const subscription = disabled$.subscribe(disabled => {
319
+ this.disabled = disabled;
320
+ });
321
+ this._subscription.add(subscription);
322
+ }
323
+ handleFocusedState() {
324
+ const focus$ = fromEvent(this._elementRef.nativeElement, 'focus').pipe(map(() => true));
325
+ const blur$ = fromEvent(this._elementRef.nativeElement, 'blur').pipe(map(() => false));
326
+ const focused$ = merge(focus$, blur$).pipe(startWith(false), pairwise(), switchMap(([oldValue, currentValue]) => {
327
+ if (oldValue && !currentValue) {
328
+ return of(currentValue).pipe(delay(100));
329
+ }
330
+ return of(currentValue);
331
+ }), distinctUntilChanged());
332
+ const subscription = focused$.subscribe(focused => this.focused = focused);
333
+ this._subscription.add(subscription);
334
+ }
335
+ }
336
+ BbiFormControlInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiFormControlInput, deps: [{ token: i0.ElementRef }, { token: BbiFormControl }, { token: i0.ChangeDetectorRef }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
337
+ BbiFormControlInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: BbiFormControlInput, selector: "input[bbiFormControlInput]", inputs: { disabled: "disabled", readonly: "readonly", required: "required" }, host: { properties: { "attr.id": "this.labelId", "required": "this.required" } }, ngImport: i0 });
338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiFormControlInput, decorators: [{
339
+ type: Directive,
340
+ args: [{
341
+ selector: 'input[bbiFormControlInput]'
342
+ }]
343
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: BbiFormControl }, { type: i0.ChangeDetectorRef }, { type: i2.NgControl, decorators: [{
344
+ type: Optional
345
+ }, {
346
+ type: Self
347
+ }] }]; }, propDecorators: { labelId: [{
348
+ type: HostBinding,
349
+ args: ['attr.id']
350
+ }], disabled: [{
351
+ type: Input
352
+ }], readonly: [{
353
+ type: Input
354
+ }], required: [{
355
+ type: HostBinding,
356
+ args: ['required']
357
+ }, {
358
+ type: Input
359
+ }] } });
360
+
361
+ class BbiControlErrorSubmit {
362
+ constructor(_elementRef) {
363
+ this._elementRef = _elementRef;
364
+ // State.
365
+ this._submitted$ = new BehaviorSubject(false);
366
+ // Subscriptions.
367
+ this._subscription = new Subscription();
368
+ }
369
+ ngOnInit() {
370
+ this.handleNativeForm();
371
+ }
372
+ get submitted() {
373
+ return this._submitted$.getValue();
374
+ }
375
+ submit() {
376
+ this._submitted$.next(true);
377
+ }
378
+ reset() {
379
+ this._submitted$.next(false);
380
+ }
381
+ handleNativeForm() {
382
+ const element = this._elementRef?.nativeElement;
383
+ if (!element) {
384
+ return;
385
+ }
386
+ const formSubmit$ = fromEvent(element, 'submit').pipe(map(() => true));
387
+ const formReset$ = fromEvent(element, 'reset').pipe(map(() => false));
388
+ const subscription = merge(formSubmit$, formReset$).subscribe(submitted => {
389
+ this._submitted$.next(submitted);
390
+ });
391
+ this._subscription.add(subscription);
392
+ }
393
+ }
394
+ BbiControlErrorSubmit.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiControlErrorSubmit, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
395
+ BbiControlErrorSubmit.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: BbiControlErrorSubmit, selector: "form", exportAs: ["bbiControlErrorSubmit"], ngImport: i0 });
396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiControlErrorSubmit, decorators: [{
397
+ type: Directive,
398
+ args: [{
399
+ selector: 'form',
400
+ exportAs: 'bbiControlErrorSubmit'
401
+ }]
402
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
403
+
404
+ const BBI_CONTROL_ERRORS = new InjectionToken('bbi_control_errors');
405
+
406
+ const controlErrorAnimation = trigger('errorAnimation', [
407
+ transition(':enter', [
408
+ style({ height: 0, opacity: 0, overflow: 'hidden' }),
409
+ animate('150ms cubic-bezier(0, 0, 0.2, 1)', style({ height: '*' })),
410
+ animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({ opacity: 1 }))
411
+ ]),
412
+ transition(':leave', [
413
+ style({ overflow: 'hidden' }),
414
+ animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({ opacity: 0 })),
415
+ animate('150ms cubic-bezier(0, 0, 0.2, 1)', style({ height: 0 }))
416
+ ])
417
+ ]);
418
+
419
+ class BbiControlError {
420
+ constructor(_localize, _functions) {
421
+ this._localize = _localize;
422
+ this._functions = _functions;
423
+ // Readonly data.
424
+ this.errorFunctions = (this._functions ?? [])
425
+ .reduce((previous, current) => ({ ...previous, ...current }), {});
426
+ // Host bindings.
427
+ this.animation = true;
428
+ // State.
429
+ this.error = null;
430
+ }
431
+ // Inputs.
432
+ set errors(errors) {
433
+ this.error = this.parseError(errors);
434
+ }
435
+ parseError(errors) {
436
+ const errorName = Object.keys(errors ?? {})?.[0] ?? null;
437
+ if (!errorName) {
438
+ return null;
439
+ }
440
+ const errorFunction = this.errorFunctions?.[errorName] ?? this.errorFunctions?.['unknown'] ?? null;
441
+ if (!errorFunction) {
442
+ return null;
443
+ }
444
+ const errorData = errors?.[errorName] ?? {};
445
+ const result = errorFunction(errorData);
446
+ if (!result) {
447
+ return null;
448
+ }
449
+ const resultObject = typeof result === 'string' ? { token: result } : result;
450
+ return this.getErrorSentence(resultObject);
451
+ }
452
+ getErrorSentence(data) {
453
+ return !!this._localize
454
+ ? this._localize.translate(data)
455
+ : data?.token;
456
+ }
457
+ }
458
+ BbiControlError.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiControlError, deps: [{ token: i1$1.Localize, optional: true }, { token: BBI_CONTROL_ERRORS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
459
+ BbiControlError.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: BbiControlError, selector: "bbi-control-error", inputs: { errors: "errors" }, host: { properties: { "@errorAnimation": "this.animation" }, classAttribute: "bbi-control-error" }, ngImport: i0, template: "{{ error ?? '...' }}\n", styles: [".bbi-control-error{color:var(--control-error-color, var(--error-color, #bd322a));display:block;margin-top:var(--control-error-spacing, 4px);font-size:var(--control-error-font-size, 13px);font-weight:var(--control-error-font-weight, 400);line-height:var(--control-error-line-height, 1.5)}\n"], animations: [controlErrorAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
460
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiControlError, decorators: [{
461
+ type: Component,
462
+ args: [{ selector: 'bbi-control-error', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bbi-control-error' }, preserveWhitespaces: false, animations: [controlErrorAnimation], template: "{{ error ?? '...' }}\n", styles: [".bbi-control-error{color:var(--control-error-color, var(--error-color, #bd322a));display:block;margin-top:var(--control-error-spacing, 4px);font-size:var(--control-error-font-size, 13px);font-weight:var(--control-error-font-weight, 400);line-height:var(--control-error-line-height, 1.5)}\n"] }]
463
+ }], ctorParameters: function () { return [{ type: i1$1.Localize, decorators: [{
464
+ type: Optional
465
+ }] }, { type: undefined, decorators: [{
466
+ type: Optional
467
+ }, {
468
+ type: Inject,
469
+ args: [BBI_CONTROL_ERRORS]
470
+ }] }]; }, propDecorators: { animation: [{
471
+ type: HostBinding,
472
+ args: ['@errorAnimation']
473
+ }], errors: [{
474
+ type: Input
475
+ }] } });
476
+
477
+ let nextUniqueId = 0;
478
+ class BbiFormControl {
479
+ constructor(_changeDetectorRef, _errorSubmit) {
480
+ this._changeDetectorRef = _changeDetectorRef;
481
+ this._errorSubmit = _errorSubmit;
482
+ // Readonly data.
483
+ this.labelId = `bbi-form-control-${nextUniqueId++}`;
484
+ // Inputs.
485
+ this.label = null;
486
+ this.hint = null;
487
+ this.errorMode = 'blur';
488
+ // State.
489
+ this.validationErrors$ = new BehaviorSubject(null);
490
+ this.errors$ = this.validationErrors$.pipe(debounceTime(5), distinctUntilChanged());
491
+ this._grouped = false;
492
+ }
493
+ // Grouped.
494
+ get grouped() { return this._grouped; }
495
+ set grouped(value) {
496
+ const newValue = coerceBooleanProperty(value);
497
+ if (newValue !== this.grouped) {
498
+ this._grouped = newValue;
499
+ this._changeDetectorRef.markForCheck();
500
+ }
501
+ }
502
+ ngDoCheck() {
503
+ const hasErrors = this.showErrors();
504
+ const errors = this.formControlInput?.errors ?? null;
505
+ const newValue = hasErrors ? errors : null;
506
+ const equal = JSON.stringify(newValue) === JSON.stringify(this.validationErrors$.getValue());
507
+ if (equal) {
508
+ return;
509
+ }
510
+ this.validationErrors$.next(newValue);
511
+ }
512
+ showErrors() {
513
+ // When the error mode is none we don't want to show
514
+ if (this.errorMode === 'hidden' || this.formControlInput?.readonly) {
515
+ return false;
516
+ }
517
+ // When submitted always show the errors.
518
+ const focused = this.formControlInput?.focused;
519
+ if (this._errorSubmit?.submitted && !focused) {
520
+ return true;
521
+ }
522
+ // We want to show changes even when the user is focused.
523
+ if (this.errorMode === 'changes') {
524
+ return this.formControlInput?.control?.dirty ?? false;
525
+ }
526
+ // On blur show the error.
527
+ if (this.errorMode === 'blur' && !focused) {
528
+ return this.formControlInput?.control?.touched ?? false;
529
+ }
530
+ // Must not show the errors.
531
+ return false;
532
+ }
533
+ }
534
+ BbiFormControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiFormControl, deps: [{ token: i0.ChangeDetectorRef }, { token: BbiControlErrorSubmit, optional: true }], target: i0.ɵɵFactoryTarget.Component });
535
+ BbiFormControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: BbiFormControl, selector: "bbi-form-control", inputs: { label: "label", hint: "hint", errorMode: "errorMode", grouped: "grouped" }, host: { properties: { "class.grouped": "grouped", "class.disabled": "formControlInput?.disabled", "class.required": "formControlInput?.required", "class.readonly": "formControlInput?.readonly", "class.focused": "formControlInput?.focused", "class.error": "validationErrors$?.getValue()" }, classAttribute: "bbi-form-control" }, queries: [{ propertyName: "formControlInput", first: true, predicate: BbiFormControlInput, descendants: true }], ngImport: i0, template: "<!-- Label of the form control. -->\n<label *ngIf=\"label as labelContent\"\n [attr.for]=\"labelId\"\n class=\"bbi-form-control-label\">\n {{ labelContent }}\n</label>\n\n<div class=\"bbi-form-control-container\">\n <ng-content select=\"[bbi-form-control-addon=prefix]\"></ng-content>\n <ng-content select=\"input[bbiFormControlInput]\"></ng-content>\n <ng-content select=\"[bbi-form-control-addon=suffix]\"></ng-content>\n</div>\n\n<bbi-control-error *ngIf=\"errors$ | async as errors\"\n [errors]=\"errors\">\n</bbi-control-error>\n\n<div *ngIf=\"hint as hintContent\"\n class=\"bbi-form-control-hint\">\n {{ hintContent }}\n</div>\n", styles: [".bbi-form-control{display:block}.bbi-form-control.grouped{margin-bottom:var(--form-control-grouping, 20px)}.bbi-form-control.disabled{pointer-events:none;opacity:var(--form-control-disabled-opacity, .25)}.bbi-form-control.disabled>.bbi-form-control-container{color:var(--form-control-disabled-color, #111111);background:var(--form-control-disabled-background, white);border-radius:var(--form-control-disabled-border-radius, 6px);border:var(--form-control-disabled-border-width, 1px) var(--form-control-disabled-border-style, solid) var(--form-control-disabled-border-color, #212121)}.bbi-form-control.required:not([data-required-visually-hidden])>.bbi-form-control-label:after{content:\"*\";color:#bd322a;font-size:14px;vertical-align:text-top}.bbi-form-control:not(.readonly).focused>.bbi-form-control-container{color:var(--form-control-focused-color, #111111);box-shadow:var(--form-control-focused-shadow, 0 0 0 3px rgba(0, 123, 255, .2));background:var(--form-control-focused-background, white);border-radius:var(--form-control-focused-border-radius, 6px);border:var(--form-control-focused-border-width, 1px) var(--form-control-focused-border-style, solid) var(--form-control-focused-border-color, #212121)}.bbi-form-control:not(.readonly).error>.bbi-form-control-label{color:var(--form-control-error-color, var(--error-color, #bd322a))}.bbi-form-control:not(.readonly).error>.bbi-form-control-container{color:var(--form-control-error-color, var(--error-color, #bd322a));border-color:var(--form-control-error-color, var(--error-color, #bd322a));background:var(--form-control-error-background, rgba(189, 50, 42, .1))}.bbi-form-control:not(.readonly).error>.bbi-form-control-container>input::placeholder{color:var(--form-control-error-placeholder-color, rgba(189, 50, 42, .4))}.bbi-form-control-label{color:#525252;display:block;font-size:14px;font-weight:400;margin-bottom:4px}.bbi-form-control-container{display:flex;align-items:center;color:var(--form-control-color, #111111);border-radius:var(--form-control-border-radius, 6px);background-color:var(--form-control-background, white);border:var(--form-control-border-width, 1px) var(--form-control-border-style, solid) var(--form-control-border-color, rgba(67, 90, 111, .3))}.bbi-form-control-container>input{width:100%;border:none;height:40px;color:inherit;padding:0 10px;background-color:transparent}.bbi-form-control-container>input::placeholder{color:#d2d2d2}.bbi-form-control-hint{display:block;color:#525252;font-size:13px;margin-top:4px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BbiControlError, selector: "bbi-control-error", inputs: ["errors"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
536
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiFormControl, decorators: [{
537
+ type: Component,
538
+ args: [{ selector: 'bbi-form-control', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
539
+ 'class': 'bbi-form-control',
540
+ '[class.grouped]': 'grouped',
541
+ '[class.disabled]': 'formControlInput?.disabled',
542
+ '[class.required]': 'formControlInput?.required',
543
+ '[class.readonly]': 'formControlInput?.readonly',
544
+ '[class.focused]': 'formControlInput?.focused',
545
+ '[class.error]': 'validationErrors$?.getValue()'
546
+ }, preserveWhitespaces: false, template: "<!-- Label of the form control. -->\n<label *ngIf=\"label as labelContent\"\n [attr.for]=\"labelId\"\n class=\"bbi-form-control-label\">\n {{ labelContent }}\n</label>\n\n<div class=\"bbi-form-control-container\">\n <ng-content select=\"[bbi-form-control-addon=prefix]\"></ng-content>\n <ng-content select=\"input[bbiFormControlInput]\"></ng-content>\n <ng-content select=\"[bbi-form-control-addon=suffix]\"></ng-content>\n</div>\n\n<bbi-control-error *ngIf=\"errors$ | async as errors\"\n [errors]=\"errors\">\n</bbi-control-error>\n\n<div *ngIf=\"hint as hintContent\"\n class=\"bbi-form-control-hint\">\n {{ hintContent }}\n</div>\n", styles: [".bbi-form-control{display:block}.bbi-form-control.grouped{margin-bottom:var(--form-control-grouping, 20px)}.bbi-form-control.disabled{pointer-events:none;opacity:var(--form-control-disabled-opacity, .25)}.bbi-form-control.disabled>.bbi-form-control-container{color:var(--form-control-disabled-color, #111111);background:var(--form-control-disabled-background, white);border-radius:var(--form-control-disabled-border-radius, 6px);border:var(--form-control-disabled-border-width, 1px) var(--form-control-disabled-border-style, solid) var(--form-control-disabled-border-color, #212121)}.bbi-form-control.required:not([data-required-visually-hidden])>.bbi-form-control-label:after{content:\"*\";color:#bd322a;font-size:14px;vertical-align:text-top}.bbi-form-control:not(.readonly).focused>.bbi-form-control-container{color:var(--form-control-focused-color, #111111);box-shadow:var(--form-control-focused-shadow, 0 0 0 3px rgba(0, 123, 255, .2));background:var(--form-control-focused-background, white);border-radius:var(--form-control-focused-border-radius, 6px);border:var(--form-control-focused-border-width, 1px) var(--form-control-focused-border-style, solid) var(--form-control-focused-border-color, #212121)}.bbi-form-control:not(.readonly).error>.bbi-form-control-label{color:var(--form-control-error-color, var(--error-color, #bd322a))}.bbi-form-control:not(.readonly).error>.bbi-form-control-container{color:var(--form-control-error-color, var(--error-color, #bd322a));border-color:var(--form-control-error-color, var(--error-color, #bd322a));background:var(--form-control-error-background, rgba(189, 50, 42, .1))}.bbi-form-control:not(.readonly).error>.bbi-form-control-container>input::placeholder{color:var(--form-control-error-placeholder-color, rgba(189, 50, 42, .4))}.bbi-form-control-label{color:#525252;display:block;font-size:14px;font-weight:400;margin-bottom:4px}.bbi-form-control-container{display:flex;align-items:center;color:var(--form-control-color, #111111);border-radius:var(--form-control-border-radius, 6px);background-color:var(--form-control-background, white);border:var(--form-control-border-width, 1px) var(--form-control-border-style, solid) var(--form-control-border-color, rgba(67, 90, 111, .3))}.bbi-form-control-container>input{width:100%;border:none;height:40px;color:inherit;padding:0 10px;background-color:transparent}.bbi-form-control-container>input::placeholder{color:#d2d2d2}.bbi-form-control-hint{display:block;color:#525252;font-size:13px;margin-top:4px}\n"] }]
547
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: BbiControlErrorSubmit, decorators: [{
548
+ type: Optional
549
+ }] }]; }, propDecorators: { formControlInput: [{
550
+ type: ContentChild,
551
+ args: [BbiFormControlInput, { static: false }]
552
+ }], label: [{
553
+ type: Input
554
+ }], hint: [{
555
+ type: Input
556
+ }], errorMode: [{
557
+ type: Input
558
+ }], grouped: [{
559
+ type: Input
560
+ }] } });
561
+
562
+ class BbiFormControlAddon {
563
+ constructor() {
564
+ // Inputs.
565
+ this.type = null;
566
+ }
567
+ }
568
+ BbiFormControlAddon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiFormControlAddon, deps: [], target: i0.ɵɵFactoryTarget.Component });
569
+ BbiFormControlAddon.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: BbiFormControlAddon, selector: "[bbi-form-control-addon]", inputs: { type: ["bbi-form-control-addon", "type"] }, host: { properties: { "class.prefix": "type === 'prefix'", "class.suffix": "type === 'suffix'" }, classAttribute: "bbi-form-control-addon" }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [".bbi-form-control-addon{margin:0 10px;color:inherit;display:block}.bbi-form-control-addon.suffix{margin-left:0}.bbi-form-control-addon.prefix{margin-right:0}a.bbi-form-control-addon,button.bbi-form-control-addon{width:32px;height:32px;border:none;display:flex;-webkit-appearance:none;appearance:none;margin-right:4px;border-radius:6px;align-items:center;text-decoration:none;justify-content:center;background-color:transparent}a.bbi-form-control-addon,a.bbi-form-control-addon:visited,button.bbi-form-control-addon,button.bbi-form-control-addon:visited{color:inherit}a.bbi-form-control-addon:hover,button.bbi-form-control-addon:hover{background-color:#1565c014}a.bbi-form-control-addon:focus,button.bbi-form-control-addon:focus{background-color:#1565c01f}a.bbi-form-control-addon:active,button.bbi-form-control-addon:active{background-color:#1565c029}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
570
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiFormControlAddon, decorators: [{
571
+ type: Component,
572
+ args: [{ selector: '[bbi-form-control-addon]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
573
+ 'class': 'bbi-form-control-addon',
574
+ '[class.prefix]': 'type === \'prefix\'',
575
+ '[class.suffix]': 'type === \'suffix\''
576
+ }, preserveWhitespaces: false, template: "<ng-content></ng-content>\n", styles: [".bbi-form-control-addon{margin:0 10px;color:inherit;display:block}.bbi-form-control-addon.suffix{margin-left:0}.bbi-form-control-addon.prefix{margin-right:0}a.bbi-form-control-addon,button.bbi-form-control-addon{width:32px;height:32px;border:none;display:flex;-webkit-appearance:none;appearance:none;margin-right:4px;border-radius:6px;align-items:center;text-decoration:none;justify-content:center;background-color:transparent}a.bbi-form-control-addon,a.bbi-form-control-addon:visited,button.bbi-form-control-addon,button.bbi-form-control-addon:visited{color:inherit}a.bbi-form-control-addon:hover,button.bbi-form-control-addon:hover{background-color:#1565c014}a.bbi-form-control-addon:focus,button.bbi-form-control-addon:focus{background-color:#1565c01f}a.bbi-form-control-addon:active,button.bbi-form-control-addon:active{background-color:#1565c029}\n"] }]
577
+ }], propDecorators: { type: [{
578
+ type: Input,
579
+ args: ['bbi-form-control-addon']
580
+ }] } });
581
+
582
+ class ControlErrorModule {
583
+ }
584
+ ControlErrorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ControlErrorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
585
+ ControlErrorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.1", ngImport: i0, type: ControlErrorModule, declarations: [BbiControlError, BbiControlErrorSubmit], imports: [CommonModule], exports: [BbiControlError, BbiControlErrorSubmit] });
586
+ ControlErrorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ControlErrorModule, imports: [CommonModule] });
587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ControlErrorModule, decorators: [{
588
+ type: NgModule,
589
+ args: [{
590
+ imports: [CommonModule],
591
+ declarations: [BbiControlError, BbiControlErrorSubmit],
592
+ exports: [BbiControlError, BbiControlErrorSubmit]
593
+ }]
594
+ }] });
595
+
596
+ class FormControlModule {
597
+ }
598
+ FormControlModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormControlModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
599
+ FormControlModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.1", ngImport: i0, type: FormControlModule, declarations: [BbiFormControl,
600
+ BbiFormControlInput,
601
+ BbiFormControlAddon], imports: [CommonModule, ControlErrorModule], exports: [BbiFormControl,
602
+ BbiFormControlInput,
603
+ BbiFormControlAddon] });
604
+ FormControlModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormControlModule, imports: [CommonModule, ControlErrorModule] });
605
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormControlModule, decorators: [{
606
+ type: NgModule,
607
+ args: [{
608
+ imports: [CommonModule, ControlErrorModule],
609
+ declarations: [
610
+ BbiFormControl,
611
+ BbiFormControlInput,
612
+ BbiFormControlAddon
613
+ ],
614
+ exports: [
615
+ BbiFormControl,
616
+ BbiFormControlInput,
617
+ BbiFormControlAddon
618
+ ]
619
+ }]
620
+ }] });
621
+
622
+ const controlErrorDefaults = {
623
+ unknown: () => 'form-control-errors.unknown',
624
+ required: () => 'form-control-errors.required',
625
+ pattern: () => 'form-control-errors.pattern',
626
+ email: () => 'form-control-errors.email',
627
+ emailTaken: () => 'form-control-errors.emailTaken',
628
+ passwordMatch: () => 'form-control-errors.passwordMatch',
629
+ confirm: () => 'form-control-errors.confirm',
630
+ fullNumber: () => 'form-control-errors.fullNumber',
631
+ min: ({ min }) => ({ token: 'form-control-errors.min', data: { min } }),
632
+ max: ({ max }) => ({ token: 'form-control-errors.max', data: { max } }),
633
+ maxFileSize: ({ maxSize }) => ({ token: 'form-control-errors.maxFileSize', data: { maxSize } }),
634
+ minDate: ({ date }) => ({ token: 'form-control-errors.minDate', data: { date } }),
635
+ maxDate: ({ date }) => ({ token: 'form-control-errors.maxDate', data: { date } }),
636
+ invalidDate: () => 'form-control-errors.invalidDate',
637
+ invalidFileType: () => 'form-control-errors.invalidFileType',
638
+ minlength: ({ requiredLength, actualLength }) => ({
639
+ token: 'form-control-errors.minlength',
640
+ data: { requiredLength, actualLength }
641
+ }),
642
+ maxlength: ({ requiredLength, actualLength }) => ({
643
+ token: 'form-control-errors.maxlength',
644
+ data: { requiredLength, actualLength }
645
+ })
646
+ };
647
+
228
648
  class ControlsModule {
649
+ static forRoot(config) {
650
+ return {
651
+ ngModule: ControlsModule,
652
+ providers: [
653
+ {
654
+ provide: BBI_CONTROL_ERRORS,
655
+ useValue: { ...controlErrorDefaults, ...(config?.errors ?? {}) },
656
+ multi: true
657
+ },
658
+ {
659
+ provide: null,
660
+ useFactory: () => '',
661
+ multi: true
662
+ }
663
+ ]
664
+ };
665
+ }
229
666
  }
230
- ControlsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: ControlsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
231
- ControlsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.4", ngImport: i0, type: ControlsModule, imports: [CheckboxModule], exports: [CheckboxModule] });
232
- ControlsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: ControlsModule, imports: [CheckboxModule, CheckboxModule] });
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: ControlsModule, decorators: [{
667
+ ControlsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ControlsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
668
+ ControlsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.1", ngImport: i0, type: ControlsModule, imports: [FormControlModule,
669
+ CheckboxModule,
670
+ ControlErrorModule], exports: [FormControlModule,
671
+ CheckboxModule,
672
+ ControlErrorModule] });
673
+ ControlsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ControlsModule, imports: [FormControlModule,
674
+ CheckboxModule,
675
+ ControlErrorModule, FormControlModule,
676
+ CheckboxModule,
677
+ ControlErrorModule] });
678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ControlsModule, decorators: [{
234
679
  type: NgModule,
235
680
  args: [{
236
- imports: [CheckboxModule],
237
- exports: [CheckboxModule]
681
+ imports: [
682
+ FormControlModule,
683
+ CheckboxModule,
684
+ ControlErrorModule
685
+ ],
686
+ exports: [
687
+ FormControlModule,
688
+ CheckboxModule,
689
+ ControlErrorModule
690
+ ]
238
691
  }]
239
692
  }] });
240
693
 
@@ -242,5 +695,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImpor
242
695
  * Generated bundle index. Do not edit.
243
696
  */
244
697
 
245
- export { BbiCheckbox, BbiCheckboxGroup, CheckboxModule, ControlsModule };
698
+ export { BBI_CONTROL_ERRORS, BbiCheckbox, BbiCheckboxGroup, BbiControlError, BbiControlErrorSubmit, BbiFormControl, BbiFormControlAddon, BbiFormControlInput, CheckboxModule, ControlErrorModule, ControlsModule, FormControlModule, controlErrorDefaults };
246
699
  //# sourceMappingURL=bravobit-bb-foundation-controls.mjs.map