@bravobit/bb-foundation 0.42.4 → 0.42.7

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 (162) hide show
  1. package/dialog/lib/dialog.config.d.ts +1 -1
  2. package/elements/lib/directives/file-drop.directive.d.ts +13 -0
  3. package/elements/lib/elements.module.d.ts +20 -19
  4. package/elements/lib/file-picker/file-picker.component.d.ts +3 -8
  5. package/elements/lib/multi-file-control/multi-file-control.component.d.ts +5 -7
  6. package/elements/public_api.d.ts +1 -0
  7. package/esm2022/auth/lib/auth.interceptor.mjs +3 -3
  8. package/esm2022/auth/lib/auth.module.mjs +4 -4
  9. package/esm2022/auth/lib/auth.service.mjs +3 -3
  10. package/esm2022/auth/lib/directives/authenticated.directive.mjs +3 -3
  11. package/esm2022/collections/lib/collections.module.mjs +4 -4
  12. package/esm2022/collections/lib/components/collections-actions/collections-actions.component.mjs +3 -3
  13. package/esm2022/collections/lib/components/collections-grid/collections-grid.component.mjs +3 -3
  14. package/esm2022/collections/lib/components/collections-pager/collections-pager.component.mjs +3 -3
  15. package/esm2022/collections/lib/components/collections-table/collections-table.component.mjs +3 -3
  16. package/esm2022/collections/lib/components/collections-table-label/collections-table-label.component.mjs +3 -3
  17. package/esm2022/collections/lib/components/collections-table-sorting/collections-table-sorting.component.mjs +3 -3
  18. package/esm2022/collections/lib/components/collections-viewer/collections-viewer.component.mjs +3 -3
  19. package/esm2022/collections/lib/directives/collections-data-row.directive.mjs +3 -3
  20. package/esm2022/collections/lib/directives/collections-data.directive.mjs +3 -3
  21. package/esm2022/collections/lib/directives/collections-empty.directive.mjs +3 -3
  22. package/esm2022/collections/lib/directives/collections-error.directive.mjs +3 -3
  23. package/esm2022/collections/lib/directives/collections-initial.directive.mjs +3 -3
  24. package/esm2022/collections/lib/directives/collections-item.directive.mjs +3 -3
  25. package/esm2022/combobox/combobox/combobox-container.directive.mjs +3 -3
  26. package/esm2022/combobox/combobox/combobox.component.mjs +3 -3
  27. package/esm2022/combobox/combobox-label.directive.mjs +3 -3
  28. package/esm2022/combobox/combobox-option.directive.mjs +3 -3
  29. package/esm2022/combobox/combobox-panel/combobox-panel.component.mjs +3 -3
  30. package/esm2022/dashboard/lib/dashboard/dashboard.component.mjs +3 -3
  31. package/esm2022/dashboard/lib/dashboard-header/dashboard-header.component.mjs +3 -3
  32. package/esm2022/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +3 -3
  33. package/esm2022/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +3 -3
  34. package/esm2022/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +4 -4
  35. package/esm2022/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +5 -5
  36. package/esm2022/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +3 -3
  37. package/esm2022/dashboard/lib/dashboard.module.mjs +4 -4
  38. package/esm2022/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
  39. package/esm2022/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +3 -3
  40. package/esm2022/dialog/lib/dialog-container/dialog-container.component.mjs +3 -3
  41. package/esm2022/dialog/lib/dialog-header/dialog-header.component.mjs +3 -3
  42. package/esm2022/dialog/lib/dialog-link/dialog-link.component.mjs +3 -3
  43. package/esm2022/dialog/lib/dialog-modal/dialog-modal.component.mjs +3 -3
  44. package/esm2022/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +3 -3
  45. package/esm2022/dialog/lib/dialog.config.mjs +1 -1
  46. package/esm2022/dialog/lib/dialog.insertion.mjs +3 -3
  47. package/esm2022/dialog/lib/dialog.module.mjs +4 -4
  48. package/esm2022/dialog/lib/dialog.service.mjs +3 -3
  49. package/esm2022/dialog/lib/directives/confirm.directive.mjs +3 -3
  50. package/esm2022/elements/lib/avatar/avatar.component.mjs +3 -3
  51. package/esm2022/elements/lib/button/button.component.mjs +9 -9
  52. package/esm2022/elements/lib/checkbox/checkbox.component.mjs +3 -3
  53. package/esm2022/elements/lib/checkbox-group/checkbox-group.component.mjs +3 -3
  54. package/esm2022/elements/lib/date-picker/date-picker.component.mjs +3 -3
  55. package/esm2022/elements/lib/directives/addon.directive.mjs +6 -6
  56. package/esm2022/elements/lib/directives/extra-error-controls.directive.mjs +3 -3
  57. package/esm2022/elements/lib/directives/file-drop.directive.mjs +62 -0
  58. package/esm2022/elements/lib/directives/form-submit.directive.mjs +3 -3
  59. package/esm2022/elements/lib/directives/form-submitter.directive.mjs +3 -3
  60. package/esm2022/elements/lib/directives/image-upload.directive.mjs +3 -3
  61. package/esm2022/elements/lib/directives/input.directive.mjs +3 -3
  62. package/esm2022/elements/lib/elements.config.mjs +2 -1
  63. package/esm2022/elements/lib/elements.module.mjs +9 -5
  64. package/esm2022/elements/lib/file-picker/file-picker.component.mjs +19 -72
  65. package/esm2022/elements/lib/form-control/form-control.component.mjs +5 -5
  66. package/esm2022/elements/lib/form-error/form-error.component.mjs +3 -3
  67. package/esm2022/elements/lib/form-group/form-group.component.mjs +3 -3
  68. package/esm2022/elements/lib/icon/icon.component.mjs +3 -3
  69. package/esm2022/elements/lib/image-picker/image-picker.component.mjs +3 -3
  70. package/esm2022/elements/lib/multi-file-control/multi-file-control.component.mjs +29 -49
  71. package/esm2022/elements/lib/pipes/date.pipe.mjs +3 -3
  72. package/esm2022/elements/lib/pipes/file-image.pipe.mjs +3 -3
  73. package/esm2022/elements/lib/pipes/file-size.pipe.mjs +3 -3
  74. package/esm2022/elements/lib/pipes/relative-time.pipe.mjs +3 -3
  75. package/esm2022/elements/lib/radio-button/radio-button.component.mjs +3 -3
  76. package/esm2022/elements/lib/radio-group/radio-group.component.mjs +3 -3
  77. package/esm2022/elements/lib/spinner/spinner.component.mjs +3 -3
  78. package/esm2022/elements/public_api.mjs +2 -1
  79. package/esm2022/http/lib/http.module.mjs +4 -4
  80. package/esm2022/http/lib/interceptors/base-url.interceptor.mjs +3 -3
  81. package/esm2022/http/lib/interceptors/error.interceptor.mjs +3 -3
  82. package/esm2022/lib/core/services/exif.service.mjs +3 -3
  83. package/esm2022/lib/core/services/file-loader.service.mjs +3 -3
  84. package/esm2022/lib/core/services/files.service.mjs +3 -3
  85. package/esm2022/lib/core/services/image-converter.service.mjs +3 -3
  86. package/esm2022/lib/core/services/languages.service.mjs +3 -3
  87. package/esm2022/lib/core/services/network.service.mjs +3 -3
  88. package/esm2022/lib/core/services/patch.service.mjs +3 -3
  89. package/esm2022/localize/lib/localizations/dutch.localization.mjs +2 -1
  90. package/esm2022/localize/lib/localizations/english.localization.mjs +2 -1
  91. package/esm2022/localize/lib/localizations/papiamento.localization.mjs +2 -1
  92. package/esm2022/localize/lib/localize.module.mjs +4 -4
  93. package/esm2022/localize/lib/localize.pipe.mjs +3 -3
  94. package/esm2022/localize/lib/localize.service.mjs +3 -3
  95. package/esm2022/localize/lib/views/localize-string/localize-string.component.mjs +3 -3
  96. package/esm2022/localize/lib/views/localize-template.directive.mjs +3 -3
  97. package/esm2022/masking/lib/directives/currency-mask.directive.mjs +3 -3
  98. package/esm2022/masking/lib/directives/date-mask.directive.mjs +3 -3
  99. package/esm2022/masking/lib/directives/input-mask.directive.mjs +3 -3
  100. package/esm2022/masking/lib/masking.module.mjs +4 -4
  101. package/esm2022/masking/lib/masking.service.mjs +3 -3
  102. package/esm2022/notifications/lib/notifications-item/notifications-item.component.mjs +3 -3
  103. package/esm2022/notifications/lib/notifications-list/notifications-list.component.mjs +3 -3
  104. package/esm2022/notifications/lib/notifications.module.mjs +4 -4
  105. package/esm2022/notifications/lib/notifications.service.mjs +3 -3
  106. package/esm2022/permissions/lib/directives/permission.directive.mjs +3 -3
  107. package/esm2022/permissions/lib/permissions.module.mjs +4 -4
  108. package/esm2022/permissions/lib/permissions.service.mjs +3 -3
  109. package/esm2022/recaptcha/lib/recaptcha/recaptcha.component.mjs +3 -3
  110. package/esm2022/recaptcha/lib/recaptcha-loader.service.mjs +3 -3
  111. package/esm2022/recaptcha/lib/recaptcha.module.mjs +4 -4
  112. package/esm2022/select/lib/select/select.component.mjs +15 -12
  113. package/esm2022/select/lib/select-label.directive.mjs +3 -3
  114. package/esm2022/select/lib/select-multi-label.directive.mjs +3 -3
  115. package/esm2022/select/lib/select-option-group.directive.mjs +3 -3
  116. package/esm2022/select/lib/select-option.directive.mjs +3 -3
  117. package/esm2022/select/lib/select.module.mjs +4 -4
  118. package/esm2022/storage/lib/storage.service.mjs +3 -3
  119. package/esm2022/table/lib/components/table/table.component.mjs +9 -9
  120. package/esm2022/table/lib/components/table-cell/table-cell.component.mjs +3 -3
  121. package/esm2022/table/lib/components/table-header-cell/table-header-cell.component.mjs +3 -3
  122. package/esm2022/table/lib/components/table-pager/table-pager.component.mjs +3 -3
  123. package/esm2022/table/lib/table.module.mjs +4 -4
  124. package/esm2022/tooltip/lib/tooltip-container/tooltip-container.component.mjs +3 -3
  125. package/esm2022/tooltip/lib/tooltip.directive.mjs +3 -3
  126. package/esm2022/tooltip/lib/tooltip.module.mjs +4 -4
  127. package/esm2022/utils/lib/directives/autosize.directive.mjs +3 -3
  128. package/esm2022/utils/lib/directives/focus-trap.directive.mjs +3 -3
  129. package/esm2022/utils/lib/directives/focus.directive.mjs +3 -3
  130. package/esm2022/utils/lib/directives/template.directive.mjs +3 -3
  131. package/esm2022/utils/lib/utils.module.mjs +4 -4
  132. package/fesm2022/bravobit-bb-foundation-auth.mjs +13 -13
  133. package/fesm2022/bravobit-bb-foundation-collections.mjs +43 -43
  134. package/fesm2022/bravobit-bb-foundation-collections.mjs.map +1 -1
  135. package/fesm2022/bravobit-bb-foundation-combobox.mjs +15 -15
  136. package/fesm2022/bravobit-bb-foundation-dashboard.mjs +27 -27
  137. package/fesm2022/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  138. package/fesm2022/bravobit-bb-foundation-dialog.mjs +34 -34
  139. package/fesm2022/bravobit-bb-foundation-dialog.mjs.map +1 -1
  140. package/fesm2022/bravobit-bb-foundation-elements.mjs +189 -200
  141. package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -1
  142. package/fesm2022/bravobit-bb-foundation-http.mjs +10 -10
  143. package/fesm2022/bravobit-bb-foundation-localize.mjs +19 -16
  144. package/fesm2022/bravobit-bb-foundation-localize.mjs.map +1 -1
  145. package/fesm2022/bravobit-bb-foundation-masking.mjs +16 -16
  146. package/fesm2022/bravobit-bb-foundation-notifications.mjs +13 -13
  147. package/fesm2022/bravobit-bb-foundation-permissions.mjs +10 -10
  148. package/fesm2022/bravobit-bb-foundation-recaptcha.mjs +10 -10
  149. package/fesm2022/bravobit-bb-foundation-select.mjs +30 -27
  150. package/fesm2022/bravobit-bb-foundation-select.mjs.map +1 -1
  151. package/fesm2022/bravobit-bb-foundation-storage.mjs +3 -3
  152. package/fesm2022/bravobit-bb-foundation-table.mjs +22 -22
  153. package/fesm2022/bravobit-bb-foundation-table.mjs.map +1 -1
  154. package/fesm2022/bravobit-bb-foundation-tooltip.mjs +10 -10
  155. package/fesm2022/bravobit-bb-foundation-utils.mjs +16 -16
  156. package/fesm2022/bravobit-bb-foundation.mjs +21 -21
  157. package/localize/lib/localizations/dutch.localization.d.ts +1 -0
  158. package/localize/lib/localizations/english.localization.d.ts +1 -0
  159. package/localize/lib/localizations/papiamento.localization.d.ts +1 -0
  160. package/package.json +23 -23
  161. package/select/lib/select/select.component.d.ts +1 -1
  162. package/styles/theme.scss +54 -2
@@ -48,10 +48,10 @@ class BbFormSubmit {
48
48
  }
49
49
  return this._formDirective.ngSubmit.pipe(map(() => true));
50
50
  }
51
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormSubmit, deps: [{ token: i0.ElementRef }, { token: i1.FormGroupDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
52
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: BbFormSubmit, isStandalone: true, selector: "form", exportAs: ["bbForm"], ngImport: i0 });
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormSubmit, deps: [{ token: i0.ElementRef }, { token: i1.FormGroupDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
52
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: BbFormSubmit, isStandalone: true, selector: "form", exportAs: ["bbForm"], ngImport: i0 });
53
53
  }
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormSubmit, decorators: [{
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormSubmit, decorators: [{
55
55
  type: Directive,
56
56
  args: [{
57
57
  selector: 'form',
@@ -73,10 +73,10 @@ class BbFormSubmitter {
73
73
  reset() {
74
74
  this.submitted$.next(false);
75
75
  }
76
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormSubmitter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
77
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: BbFormSubmitter, isStandalone: true, selector: "[bbFormSubmitter]", exportAs: ["bbFormSubmitter"], ngImport: i0 });
76
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormSubmitter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
77
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: BbFormSubmitter, isStandalone: true, selector: "[bbFormSubmitter]", exportAs: ["bbFormSubmitter"], ngImport: i0 });
78
78
  }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormSubmitter, decorators: [{
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormSubmitter, decorators: [{
80
80
  type: Directive,
81
81
  args: [{
82
82
  selector: '[bbFormSubmitter]',
@@ -111,10 +111,10 @@ class BbExtraErrorControls {
111
111
  this._subscription = errors$
112
112
  .subscribe(errors => this.changes.next(errors ?? null));
113
113
  }
114
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbExtraErrorControls, deps: [], target: i0.ɵɵFactoryTarget.Directive });
115
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: BbExtraErrorControls, isStandalone: true, selector: "[bbExtraErrorControls]", inputs: { extraControls: ["bbExtraErrorControls", "extraControls"] }, ngImport: i0 });
114
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbExtraErrorControls, deps: [], target: i0.ɵɵFactoryTarget.Directive });
115
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: BbExtraErrorControls, isStandalone: true, selector: "[bbExtraErrorControls]", inputs: { extraControls: ["bbExtraErrorControls", "extraControls"] }, ngImport: i0 });
116
116
  }
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbExtraErrorControls, decorators: [{
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbExtraErrorControls, decorators: [{
118
118
  type: Directive,
119
119
  args: [{
120
120
  selector: '[bbExtraErrorControls]',
@@ -195,10 +195,10 @@ class BbFormError {
195
195
  const extraError$ = this._extraErrorControls?.changes?.asObservable() ?? of(null);
196
196
  return combineLatest([error$, extraError$]).pipe(map(([error, extraError]) => error ?? extraError ?? null), distinctUntilChanged());
197
197
  }
198
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormError, deps: [{ token: BbFormSubmit, optional: true }, { token: i1.NgControl, optional: true }, { token: BbFormSubmitter, optional: true }, { token: BbExtraErrorControls, optional: true }, { token: ELEMENTS_ERRORS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
199
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbFormError, isStandalone: true, selector: "bb-form-error", inputs: { control: "control" }, outputs: { errorChange: "errorChange" }, host: { classAttribute: "bb-form-error" }, ngImport: i0, template: "@if (error$ | async; as error) {\n @if (error?.token | bbLocalize:{optional: true, data: error?.data}; as message) {\n <p class=\"bb-form-error-message\">{{ message }}</p>\n }\n}\n", styles: [".bb-form-error{display:block}.bb-form-error-message{color:#c23934;display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: BbLocalize, name: "bbLocalize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
198
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormError, deps: [{ token: BbFormSubmit, optional: true }, { token: i1.NgControl, optional: true }, { token: BbFormSubmitter, optional: true }, { token: BbExtraErrorControls, optional: true }, { token: ELEMENTS_ERRORS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
199
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbFormError, isStandalone: true, selector: "bb-form-error", inputs: { control: "control" }, outputs: { errorChange: "errorChange" }, host: { classAttribute: "bb-form-error" }, ngImport: i0, template: "@if (error$ | async; as error) {\n @if (error?.token | bbLocalize:{optional: true, data: error?.data}; as message) {\n <p class=\"bb-form-error-message\">{{ message }}</p>\n }\n}\n", styles: [".bb-form-error{display:block}.bb-form-error-message{color:#c23934;display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: BbLocalize, name: "bbLocalize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
200
200
  }
201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormError, decorators: [{
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormError, decorators: [{
202
202
  type: Component,
203
203
  args: [{ selector: 'bb-form-error', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bb-form-error' }, preserveWhitespaces: false, standalone: true, imports: [AsyncPipe, BbLocalize], template: "@if (error$ | async; as error) {\n @if (error?.token | bbLocalize:{optional: true, data: error?.data}; as message) {\n <p class=\"bb-form-error-message\">{{ message }}</p>\n }\n}\n", styles: [".bb-form-error{display:block}.bb-form-error-message{color:#c23934;display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem}\n"] }]
204
204
  }], ctorParameters: () => [{ type: BbFormSubmit, decorators: [{
@@ -236,16 +236,16 @@ class BbFormControl {
236
236
  onErrorChange(error) {
237
237
  this.error = !!error;
238
238
  }
239
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormControl, deps: [], target: i0.ɵɵFactoryTarget.Component });
240
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbFormControl, isStandalone: true, selector: "bb-form-control", inputs: { label: "label", hint: "hint", grouped: ["grouped", "grouped", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute] }, host: { properties: { "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-form-control" }, queries: [{ propertyName: "ngControl", first: true, predicate: NgControl, descendants: true }], ngImport: i0, template: "<!-- Label of the form control. -->\n@if (label; as labelContent) {\n <label [attr.for]=\"labelId\"\n class=\"bb-form-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<!-- The input with the addons. -->\n<div class=\"bb-form-control-container\">\n <ng-content select=\"[bbPrefix]\"></ng-content>\n <ng-content select=\"[bbInput]\"></ng-content>\n <ng-content select=\"[bbSuffix]\"></ng-content>\n</div>\n\n<!-- The error component. -->\n@if (!hideErrors) {\n <bb-form-error [control]=\"ngControl\"\n (errorChange)=\"onErrorChange($event)\">\n </bb-form-error>\n}\n\n<!-- The form control hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-form-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-form-control{color:#111;display:block}.bb-form-control>.bb-form-control-container>*.bb-prefix,.bb-form-control>.bb-form-control-container>*.bb-suffix{color:#b4b4b4;transition:color .3s cubic-bezier(0,0,.2,1)}.bb-form-control>.bb-form-control-container>*.bb-prefix{margin-left:.5rem}.bb-form-control>.bb-form-control-container>*.bb-suffix{margin-right:.5rem}.bb-form-control.grouped{margin-bottom:1.5rem}.bb-form-control.small{max-width:15rem}.bb-form-control.medium{max-width:30rem}.bb-form-control.large{max-width:45rem}.bb-form-control:has(input:required,textarea:required,select:required)>.bb-form-control-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,textarea:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){border-color:#757e8a;box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-form-control-box-shadow)}.bb-form-control-container:has(input:not(:disabled):read-only,textarea:not(:disabled):read-only){cursor:default;border-style:dotted;border-color:#bdc4c9}.bb-form-control-container:has(input:disabled,textarea:disabled,select:disabled){cursor:default;pointer-events:none;color:gray;background-color:#e6e6e6}.bb-form-control.error>.bb-form-control-label{color:#c23934}.bb-form-control.error>.bb-form-control-hint{display:none}.bb-form-control.error>.bb-form-control-container>*.bb-prefix,.bb-form-control.error>.bb-form-control-container>.bb-suffix{color:#b51c1c}.bb-form-control.error>.bb-form-control-container>input::placeholder,.bb-form-control.error>.bb-form-control-container>textarea::placeholder{color:#ea7b7b}.bb-form-control.error>.bb-form-control-container,.bb-form-control.error>.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,textarea:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){border:1px solid hsl(0,73%,30%);background-color:#f8d3d3;box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-form-control-container:has(select):after{top:0;right:0;bottom:0;content:\"\";width:1.5rem;display:flex;height:2.5rem;min-width:1.5rem;position:absolute;pointer-events:none;background-repeat:no-repeat;background-size:.75rem .375rem;background-position:calc(100% - .5rem) center;background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 6\"%3E%3Cpath fill=\"%23D8D8D8\" fill-rule=\"evenodd\" d=\"m6 6 6-6H0z\"/%3E%3C/svg%3E')}.bb-form-control-container{width:100%;display:flex;color:#111;overflow:hidden;position:relative;align-items:center;border-radius:.5rem;background-color:#fff;transition-duration:.25s;border:1px solid hsl(213,8%,74%);transition-property:background-color,box-shadow;transition-timing-function:cubic-bezier(0,0,.2,1);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-form-control-container>input::placeholder,.bb-form-control-container>textarea::placeholder{color:#d1d1d1;transition:color .3s cubic-bezier(0,0,.2,1)}.bb-form-control-container>input,.bb-form-control-container>textarea,.bb-form-control-container>select{margin:0;width:100%;border:none;color:inherit;font-size:1rem;appearance:none;background-color:transparent}.bb-form-control-container>input,.bb-form-control-container>select{height:2.5rem;padding:0 .5rem}.bb-form-control-container>select{padding-right:2rem}.bb-form-control-container>select>::-ms-expand{display:none}.bb-form-control-container>input::-ms-clear,.bb-form-control-container>input::-ms-reveal{width:0;height:0;display:none}.bb-form-control-container>input::-webkit-search-decoration,.bb-form-control-container>input::-webkit-search-cancel-button,.bb-form-control-container>input::-webkit-search-results-button,.bb-form-control-container>input::-webkit-search-results-decoration{display:none}.bb-form-control-container>textarea{resize:none;padding:.5rem}.bb-form-control-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-form-control-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"], dependencies: [{ kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "component", type: BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
239
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormControl, deps: [], target: i0.ɵɵFactoryTarget.Component });
240
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbFormControl, isStandalone: true, selector: "bb-form-control", inputs: { label: "label", hint: "hint", grouped: ["grouped", "grouped", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute] }, host: { properties: { "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-form-control" }, queries: [{ propertyName: "ngControl", first: true, predicate: NgControl, descendants: true }], ngImport: i0, template: "<!-- Label of the form control. -->\n@if (label; as labelContent) {\n <label [attr.for]=\"labelId\"\n class=\"bb-form-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<!-- The input with the addons. -->\n<div class=\"bb-form-control-container\">\n <ng-content select=\"[bbPrefix]\"></ng-content>\n <ng-content select=\"[bbInput]\"></ng-content>\n <ng-content select=\"[bbSuffix]\"></ng-content>\n</div>\n\n<!-- The error component. -->\n@if (!hideErrors) {\n <bb-form-error [control]=\"ngControl\"\n (errorChange)=\"onErrorChange($event)\">\n </bb-form-error>\n}\n\n<!-- The form control hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-form-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-form-control{color:#111;display:block}.bb-form-control>.bb-form-control-container>*.bb-prefix,.bb-form-control>.bb-form-control-container>*.bb-suffix{color:#b4b4b4;transition:color .3s cubic-bezier(0,0,.2,1)}.bb-form-control>.bb-form-control-container>*.bb-prefix{margin-left:.5rem}.bb-form-control>.bb-form-control-container>*.bb-suffix{margin-right:.5rem}.bb-form-control.grouped{margin-bottom:1.5rem}.bb-form-control.small{max-width:15rem}.bb-form-control.medium{max-width:30rem}.bb-form-control.large{max-width:45rem}.bb-form-control:has(input:required,textarea:required,select:required)>.bb-form-control-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,textarea:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){border-color:var(--bb-form-control-focus-border-color);box-shadow:var(--bb-form-control-focus-box-shadow)}.bb-form-control-container:has(input:not(:disabled):read-only,textarea:not(:disabled):read-only){cursor:default;border-style:dotted;border-color:#bdc4c9}.bb-form-control-container:has(input:disabled,textarea:disabled,select:disabled){cursor:default;pointer-events:none;color:gray;background-color:#e6e6e6}.bb-form-control.error>.bb-form-control-label{color:#c23934}.bb-form-control.error>.bb-form-control-hint{display:none}.bb-form-control.error>.bb-form-control-container>*.bb-prefix,.bb-form-control.error>.bb-form-control-container>.bb-suffix{color:#b51c1c}.bb-form-control.error>.bb-form-control-container>input::placeholder,.bb-form-control.error>.bb-form-control-container>textarea::placeholder{color:#ea7b7b}.bb-form-control.error>.bb-form-control-container,.bb-form-control.error>.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,textarea:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){border:1px solid hsl(0,73%,30%);background-color:#f8d3d3;box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-form-control-container:has(select):after{top:0;right:0;bottom:0;content:\"\";width:1.5rem;display:flex;height:2.5rem;min-width:1.5rem;position:absolute;pointer-events:none;background-repeat:no-repeat;background-size:.75rem .375rem;background-position:calc(100% - .5rem) center;background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 6\"%3E%3Cpath fill=\"%23D8D8D8\" fill-rule=\"evenodd\" d=\"m6 6 6-6H0z\"/%3E%3C/svg%3E')}.bb-form-control-container{width:100%;display:flex;color:#111;overflow:hidden;position:relative;align-items:center;transition-duration:.25s;box-shadow:var(--bb-form-control-box-shadow);transition-property:background-color,box-shadow;border:1px solid var(--bb-form-control-border-color);transition-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--bb-form-control-background-color);border-radius:var(--bb-form-control-border-radius, .5rem)}.bb-form-control-container>input::placeholder,.bb-form-control-container>textarea::placeholder{color:#d1d1d1;transition:color .3s cubic-bezier(0,0,.2,1)}.bb-form-control-container>input,.bb-form-control-container>textarea,.bb-form-control-container>select{margin:0;width:100%;border:none;color:inherit;font-size:1rem;appearance:none;background-color:transparent}.bb-form-control-container>input,.bb-form-control-container>select{height:2.5rem;padding:0 .5rem}.bb-form-control-container>select{padding-right:2rem}.bb-form-control-container>select>::-ms-expand{display:none}.bb-form-control-container>input::-ms-clear,.bb-form-control-container>input::-ms-reveal{width:0;height:0;display:none}.bb-form-control-container>input::-webkit-search-decoration,.bb-form-control-container>input::-webkit-search-cancel-button,.bb-form-control-container>input::-webkit-search-results-button,.bb-form-control-container>input::-webkit-search-results-decoration{display:none}.bb-form-control-container>textarea{resize:none;padding:.5rem}.bb-form-control-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-form-control-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"], dependencies: [{ kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "component", type: BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
241
241
  }
242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormControl, decorators: [{
242
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormControl, decorators: [{
243
243
  type: Component,
244
244
  args: [{ selector: 'bb-form-control', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
245
245
  'class': 'bb-form-control',
246
246
  '[class.grouped]': 'grouped',
247
247
  '[class.error]': 'error'
248
- }, preserveWhitespaces: false, standalone: true, imports: [BbTemplate, BbFormError], template: "<!-- Label of the form control. -->\n@if (label; as labelContent) {\n <label [attr.for]=\"labelId\"\n class=\"bb-form-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<!-- The input with the addons. -->\n<div class=\"bb-form-control-container\">\n <ng-content select=\"[bbPrefix]\"></ng-content>\n <ng-content select=\"[bbInput]\"></ng-content>\n <ng-content select=\"[bbSuffix]\"></ng-content>\n</div>\n\n<!-- The error component. -->\n@if (!hideErrors) {\n <bb-form-error [control]=\"ngControl\"\n (errorChange)=\"onErrorChange($event)\">\n </bb-form-error>\n}\n\n<!-- The form control hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-form-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-form-control{color:#111;display:block}.bb-form-control>.bb-form-control-container>*.bb-prefix,.bb-form-control>.bb-form-control-container>*.bb-suffix{color:#b4b4b4;transition:color .3s cubic-bezier(0,0,.2,1)}.bb-form-control>.bb-form-control-container>*.bb-prefix{margin-left:.5rem}.bb-form-control>.bb-form-control-container>*.bb-suffix{margin-right:.5rem}.bb-form-control.grouped{margin-bottom:1.5rem}.bb-form-control.small{max-width:15rem}.bb-form-control.medium{max-width:30rem}.bb-form-control.large{max-width:45rem}.bb-form-control:has(input:required,textarea:required,select:required)>.bb-form-control-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,textarea:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){border-color:#757e8a;box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-form-control-box-shadow)}.bb-form-control-container:has(input:not(:disabled):read-only,textarea:not(:disabled):read-only){cursor:default;border-style:dotted;border-color:#bdc4c9}.bb-form-control-container:has(input:disabled,textarea:disabled,select:disabled){cursor:default;pointer-events:none;color:gray;background-color:#e6e6e6}.bb-form-control.error>.bb-form-control-label{color:#c23934}.bb-form-control.error>.bb-form-control-hint{display:none}.bb-form-control.error>.bb-form-control-container>*.bb-prefix,.bb-form-control.error>.bb-form-control-container>.bb-suffix{color:#b51c1c}.bb-form-control.error>.bb-form-control-container>input::placeholder,.bb-form-control.error>.bb-form-control-container>textarea::placeholder{color:#ea7b7b}.bb-form-control.error>.bb-form-control-container,.bb-form-control.error>.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,textarea:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){border:1px solid hsl(0,73%,30%);background-color:#f8d3d3;box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-form-control-container:has(select):after{top:0;right:0;bottom:0;content:\"\";width:1.5rem;display:flex;height:2.5rem;min-width:1.5rem;position:absolute;pointer-events:none;background-repeat:no-repeat;background-size:.75rem .375rem;background-position:calc(100% - .5rem) center;background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 6\"%3E%3Cpath fill=\"%23D8D8D8\" fill-rule=\"evenodd\" d=\"m6 6 6-6H0z\"/%3E%3C/svg%3E')}.bb-form-control-container{width:100%;display:flex;color:#111;overflow:hidden;position:relative;align-items:center;border-radius:.5rem;background-color:#fff;transition-duration:.25s;border:1px solid hsl(213,8%,74%);transition-property:background-color,box-shadow;transition-timing-function:cubic-bezier(0,0,.2,1);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-form-control-container>input::placeholder,.bb-form-control-container>textarea::placeholder{color:#d1d1d1;transition:color .3s cubic-bezier(0,0,.2,1)}.bb-form-control-container>input,.bb-form-control-container>textarea,.bb-form-control-container>select{margin:0;width:100%;border:none;color:inherit;font-size:1rem;appearance:none;background-color:transparent}.bb-form-control-container>input,.bb-form-control-container>select{height:2.5rem;padding:0 .5rem}.bb-form-control-container>select{padding-right:2rem}.bb-form-control-container>select>::-ms-expand{display:none}.bb-form-control-container>input::-ms-clear,.bb-form-control-container>input::-ms-reveal{width:0;height:0;display:none}.bb-form-control-container>input::-webkit-search-decoration,.bb-form-control-container>input::-webkit-search-cancel-button,.bb-form-control-container>input::-webkit-search-results-button,.bb-form-control-container>input::-webkit-search-results-decoration{display:none}.bb-form-control-container>textarea{resize:none;padding:.5rem}.bb-form-control-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-form-control-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"] }]
248
+ }, preserveWhitespaces: false, standalone: true, imports: [BbTemplate, BbFormError], template: "<!-- Label of the form control. -->\n@if (label; as labelContent) {\n <label [attr.for]=\"labelId\"\n class=\"bb-form-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<!-- The input with the addons. -->\n<div class=\"bb-form-control-container\">\n <ng-content select=\"[bbPrefix]\"></ng-content>\n <ng-content select=\"[bbInput]\"></ng-content>\n <ng-content select=\"[bbSuffix]\"></ng-content>\n</div>\n\n<!-- The error component. -->\n@if (!hideErrors) {\n <bb-form-error [control]=\"ngControl\"\n (errorChange)=\"onErrorChange($event)\">\n </bb-form-error>\n}\n\n<!-- The form control hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-form-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-form-control{color:#111;display:block}.bb-form-control>.bb-form-control-container>*.bb-prefix,.bb-form-control>.bb-form-control-container>*.bb-suffix{color:#b4b4b4;transition:color .3s cubic-bezier(0,0,.2,1)}.bb-form-control>.bb-form-control-container>*.bb-prefix{margin-left:.5rem}.bb-form-control>.bb-form-control-container>*.bb-suffix{margin-right:.5rem}.bb-form-control.grouped{margin-bottom:1.5rem}.bb-form-control.small{max-width:15rem}.bb-form-control.medium{max-width:30rem}.bb-form-control.large{max-width:45rem}.bb-form-control:has(input:required,textarea:required,select:required)>.bb-form-control-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,textarea:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){border-color:var(--bb-form-control-focus-border-color);box-shadow:var(--bb-form-control-focus-box-shadow)}.bb-form-control-container:has(input:not(:disabled):read-only,textarea:not(:disabled):read-only){cursor:default;border-style:dotted;border-color:#bdc4c9}.bb-form-control-container:has(input:disabled,textarea:disabled,select:disabled){cursor:default;pointer-events:none;color:gray;background-color:#e6e6e6}.bb-form-control.error>.bb-form-control-label{color:#c23934}.bb-form-control.error>.bb-form-control-hint{display:none}.bb-form-control.error>.bb-form-control-container>*.bb-prefix,.bb-form-control.error>.bb-form-control-container>.bb-suffix{color:#b51c1c}.bb-form-control.error>.bb-form-control-container>input::placeholder,.bb-form-control.error>.bb-form-control-container>textarea::placeholder{color:#ea7b7b}.bb-form-control.error>.bb-form-control-container,.bb-form-control.error>.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,textarea:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){border:1px solid hsl(0,73%,30%);background-color:#f8d3d3;box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-form-control-container:has(select):after{top:0;right:0;bottom:0;content:\"\";width:1.5rem;display:flex;height:2.5rem;min-width:1.5rem;position:absolute;pointer-events:none;background-repeat:no-repeat;background-size:.75rem .375rem;background-position:calc(100% - .5rem) center;background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 6\"%3E%3Cpath fill=\"%23D8D8D8\" fill-rule=\"evenodd\" d=\"m6 6 6-6H0z\"/%3E%3C/svg%3E')}.bb-form-control-container{width:100%;display:flex;color:#111;overflow:hidden;position:relative;align-items:center;transition-duration:.25s;box-shadow:var(--bb-form-control-box-shadow);transition-property:background-color,box-shadow;border:1px solid var(--bb-form-control-border-color);transition-timing-function:cubic-bezier(0,0,.2,1);background-color:var(--bb-form-control-background-color);border-radius:var(--bb-form-control-border-radius, .5rem)}.bb-form-control-container>input::placeholder,.bb-form-control-container>textarea::placeholder{color:#d1d1d1;transition:color .3s cubic-bezier(0,0,.2,1)}.bb-form-control-container>input,.bb-form-control-container>textarea,.bb-form-control-container>select{margin:0;width:100%;border:none;color:inherit;font-size:1rem;appearance:none;background-color:transparent}.bb-form-control-container>input,.bb-form-control-container>select{height:2.5rem;padding:0 .5rem}.bb-form-control-container>select{padding-right:2rem}.bb-form-control-container>select>::-ms-expand{display:none}.bb-form-control-container>input::-ms-clear,.bb-form-control-container>input::-ms-reveal{width:0;height:0;display:none}.bb-form-control-container>input::-webkit-search-decoration,.bb-form-control-container>input::-webkit-search-cancel-button,.bb-form-control-container>input::-webkit-search-results-button,.bb-form-control-container>input::-webkit-search-results-decoration{display:none}.bb-form-control-container>textarea{resize:none;padding:.5rem}.bb-form-control-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-form-control-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"] }]
249
249
  }], propDecorators: { ngControl: [{
250
250
  type: ContentChild,
251
251
  args: [NgControl]
@@ -282,10 +282,10 @@ class BbInput {
282
282
  this._required = value;
283
283
  }
284
284
  _required = false;
285
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbInput, deps: [{ token: i0.ElementRef }, { token: BbFormControl, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
286
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.1.0", type: BbInput, isStandalone: true, selector: "input[bbInput],textarea[bbInput],select[bbInput]", inputs: { required: ["required", "required", booleanAttribute] }, host: { properties: { "attr.id": "this.id", "attr.required": "this.required" } }, ngImport: i0 });
285
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbInput, deps: [{ token: i0.ElementRef }, { token: BbFormControl, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
286
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.0", type: BbInput, isStandalone: true, selector: "input[bbInput],textarea[bbInput],select[bbInput]", inputs: { required: ["required", "required", booleanAttribute] }, host: { properties: { "attr.id": "this.id", "attr.required": "this.required" } }, ngImport: i0 });
287
287
  }
288
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbInput, decorators: [{
288
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbInput, decorators: [{
289
289
  type: Directive,
290
290
  args: [{
291
291
  selector: 'input[bbInput],textarea[bbInput],select[bbInput]',
@@ -307,10 +307,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
307
307
  }] } });
308
308
 
309
309
  class BbSuffix {
310
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbSuffix, deps: [], target: i0.ɵɵFactoryTarget.Directive });
311
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: BbSuffix, isStandalone: true, selector: "[bbSuffix]", host: { classAttribute: "bb-suffix" }, ngImport: i0 });
310
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbSuffix, deps: [], target: i0.ɵɵFactoryTarget.Directive });
311
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: BbSuffix, isStandalone: true, selector: "[bbSuffix]", host: { classAttribute: "bb-suffix" }, ngImport: i0 });
312
312
  }
313
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbSuffix, decorators: [{
313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbSuffix, decorators: [{
314
314
  type: Directive,
315
315
  args: [{
316
316
  selector: '[bbSuffix]',
@@ -319,10 +319,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
319
319
  }]
320
320
  }] });
321
321
  class BbPrefix {
322
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbPrefix, deps: [], target: i0.ɵɵFactoryTarget.Directive });
323
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: BbPrefix, isStandalone: true, selector: "[bbPrefix]", host: { classAttribute: "bb-prefix" }, ngImport: i0 });
322
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbPrefix, deps: [], target: i0.ɵɵFactoryTarget.Directive });
323
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: BbPrefix, isStandalone: true, selector: "[bbPrefix]", host: { classAttribute: "bb-prefix" }, ngImport: i0 });
324
324
  }
325
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbPrefix, decorators: [{
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbPrefix, decorators: [{
326
326
  type: Directive,
327
327
  args: [{
328
328
  selector: '[bbPrefix]',
@@ -440,10 +440,10 @@ class BbImageUpload {
440
440
  return 'image';
441
441
  }
442
442
  }
443
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbImageUpload, deps: [{ token: i1$1.Files }, { token: i2.Platform }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
444
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.1.0", type: BbImageUpload, isStandalone: true, selector: "button[bbImageUpload]", inputs: { width: ["bbImageUploadWidth", "width", numberAttribute], height: ["bbImageUploadHeight", "height", numberAttribute], mode: ["bbImageUploadMode", "mode"], type: ["bbImageUploadType", "type"] }, outputs: { onDataUri: "onDataUri", onFile: "onFile" }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 });
443
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbImageUpload, deps: [{ token: i1$1.Files }, { token: i2.Platform }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
444
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.0", type: BbImageUpload, isStandalone: true, selector: "button[bbImageUpload]", inputs: { width: ["bbImageUploadWidth", "width", numberAttribute], height: ["bbImageUploadHeight", "height", numberAttribute], mode: ["bbImageUploadMode", "mode"], type: ["bbImageUploadType", "type"] }, outputs: { onDataUri: "onDataUri", onFile: "onFile" }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 });
445
445
  }
446
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbImageUpload, decorators: [{
446
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbImageUpload, decorators: [{
447
447
  type: Directive,
448
448
  args: [{
449
449
  selector: 'button[bbImageUpload]',
@@ -470,6 +470,66 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
470
470
  args: ['click']
471
471
  }] } });
472
472
 
473
+ class BbFileDrop {
474
+ // Inputs.
475
+ disabled = false;
476
+ // Outputs.
477
+ onFileDropped = new EventEmitter();
478
+ // State.
479
+ hovered = false;
480
+ onDrag(event, isHovered) {
481
+ if (this.disabled) {
482
+ return;
483
+ }
484
+ event.preventDefault();
485
+ event.stopPropagation();
486
+ this.setHovered(isHovered);
487
+ }
488
+ onDrop(event) {
489
+ if (this.disabled) {
490
+ return;
491
+ }
492
+ event.preventDefault();
493
+ event.stopPropagation();
494
+ this.setHovered(false);
495
+ const files = Array.from(event['dataTransfer'].files);
496
+ if (files?.length <= 0) {
497
+ return;
498
+ }
499
+ this.onFileDropped.emit(files);
500
+ }
501
+ setHovered(value) {
502
+ this.hovered = value;
503
+ }
504
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFileDrop, deps: [], target: i0.ɵɵFactoryTarget.Directive });
505
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.0", type: BbFileDrop, isStandalone: true, selector: "[bbFileDrop]", inputs: { disabled: ["bbFileDropDisabled", "disabled", booleanAttribute] }, outputs: { onFileDropped: "bbFileDrop" }, host: { listeners: { "dragover": "onDrag($event,true)", "dragleave": "onDrag($event,false)", "drop": "onDrop($event)" }, properties: { "class.is-hovered": "this.hovered" } }, ngImport: i0 });
506
+ }
507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFileDrop, decorators: [{
508
+ type: Directive,
509
+ args: [{
510
+ selector: '[bbFileDrop]',
511
+ standalone: true
512
+ }]
513
+ }], propDecorators: { disabled: [{
514
+ type: Input,
515
+ args: [{ alias: 'bbFileDropDisabled', transform: booleanAttribute }]
516
+ }], onFileDropped: [{
517
+ type: Output,
518
+ args: ['bbFileDrop']
519
+ }], hovered: [{
520
+ type: HostBinding,
521
+ args: ['class.is-hovered']
522
+ }], onDrag: [{
523
+ type: HostListener,
524
+ args: ['dragover', ['$event', 'true']]
525
+ }, {
526
+ type: HostListener,
527
+ args: ['dragleave', ['$event', 'false']]
528
+ }], onDrop: [{
529
+ type: HostListener,
530
+ args: ['drop', ['$event']]
531
+ }] } });
532
+
473
533
  class BbFileSize {
474
534
  transform(value) {
475
535
  return this.format(value);
@@ -484,10 +544,10 @@ class BbFileSize {
484
544
  const index = Math.floor(Math.log(value) / Math.log(k));
485
545
  return parseFloat((value / Math.pow(k, index)).toFixed(dm)) + ' ' + sizes[index];
486
546
  };
487
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFileSize, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
488
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: BbFileSize, isStandalone: true, name: "bbFileSize" });
547
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFileSize, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
548
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: BbFileSize, isStandalone: true, name: "bbFileSize" });
489
549
  }
490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFileSize, decorators: [{
550
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFileSize, decorators: [{
491
551
  type: Pipe,
492
552
  args: [{
493
553
  name: 'bbFileSize',
@@ -527,10 +587,10 @@ class BbFileImage {
527
587
  return null;
528
588
  });
529
589
  }
530
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFileImage, deps: [{ token: i2.Platform }, { token: i1$1.ImageConverter }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
531
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: BbFileImage, isStandalone: true, name: "bbFileImage" });
590
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFileImage, deps: [{ token: i2.Platform }, { token: i1$1.ImageConverter }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
591
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: BbFileImage, isStandalone: true, name: "bbFileImage" });
532
592
  }
533
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFileImage, decorators: [{
593
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFileImage, decorators: [{
534
594
  type: Pipe,
535
595
  args: [{
536
596
  name: 'bbFileImage',
@@ -617,10 +677,10 @@ class BbRelativeTime {
617
677
  date?.getMonth() === tomorrow?.getMonth() &&
618
678
  date?.getFullYear() === tomorrow?.getFullYear();
619
679
  };
620
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbRelativeTime, deps: [{ token: LOCALE_ID }, { token: i1$2.Localize, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
621
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: BbRelativeTime, isStandalone: true, name: "bbRelativeTime" });
680
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbRelativeTime, deps: [{ token: LOCALE_ID }, { token: i1$2.Localize, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
681
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: BbRelativeTime, isStandalone: true, name: "bbRelativeTime" });
622
682
  }
623
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbRelativeTime, decorators: [{
683
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbRelativeTime, decorators: [{
624
684
  type: Pipe,
625
685
  args: [{
626
686
  name: 'bbRelativeTime',
@@ -645,10 +705,10 @@ class BbDate {
645
705
  const locale = this._localize?.current?.locale ?? this._localeId ?? 'en-US';
646
706
  return formatDate(date, format ?? 'mediumDate', locale);
647
707
  }
648
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbDate, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
649
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: BbDate, isStandalone: true, name: "bbDate" });
708
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbDate, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
709
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: BbDate, isStandalone: true, name: "bbDate" });
650
710
  }
651
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbDate, decorators: [{
711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbDate, decorators: [{
652
712
  type: Pipe,
653
713
  args: [{
654
714
  name: 'bbDate',
@@ -661,10 +721,10 @@ class BbSpinner {
661
721
  color = 'hsla(212, 80%, 42%, 1)';
662
722
  alt = 'Loading...';
663
723
  disabled = false;
664
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
665
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.0", type: BbSpinner, isStandalone: true, selector: "bb-spinner", inputs: { color: "color", alt: "alt", disabled: ["disabled", "disabled", booleanAttribute] }, host: { classAttribute: "bb-spinner" }, ngImport: i0, template: "<!--\n The spinner element.\n\n This element contains a circle with a 25% bar that spins\n indefinitely. The border color can be set via the \"color\"\n property.\n-->\n<div class=\"bb-spinner-container\">\n <div [style.border-left-color]=\"color\"\n [class.disabled]=\"disabled\"\n class=\"bb-spinner-loader\"\n aria-live=\"assertive\"\n role=\"alert\">\n {{ alt }}\n </div>\n <ng-content select=\"img\"></ng-content>\n</div>\n\n<!--\n The content of the spinner.\n\n This element contains the content of the spinner. The user\n can set the content inside the tag.\n-->\n<span class=\"bb-spinner-content\">\n <ng-content></ng-content>\n</span>\n", styles: [".bb-spinner{padding:1.5rem 0;text-align:center;align-items:center;display:inline-flex;flex-direction:column;justify-content:center;color:#666}.bb-spinner.block{display:flex}.bb-spinner.inverse .bb-spinner-loader{border-color:#fff3}.bb-spinner.inverse .bb-spinner-content{color:#fff}.bb-spinner.small .bb-spinner-loader,.bb-spinner.small .bb-spinner-loader:after{width:1.5rem;height:1.5rem;min-width:1.5rem;min-height:1.5rem}.bb-spinner.small .bb-spinner-loader{border-width:.125rem}.bb-spinner.small .bb-spinner-content{font-size:.75rem}.bb-spinner.medium .bb-spinner-loader,.bb-spinner.medium .bb-spinner-loader:after{width:3rem;height:3rem;min-width:3rem;min-height:3rem}.bb-spinner.medium .bb-spinner-loader{border-width:.1875rem}.bb-spinner.medium .bb-spinner-content{font-size:.875rem}.bb-spinner.large .bb-spinner-loader,.bb-spinner.large .bb-spinner-loader:after{width:4.5rem;height:4.5rem;min-width:4.5rem;min-height:4.5rem}.bb-spinner.large .bb-spinner-loader{border-width:.25rem}.bb-spinner.large .bb-spinner-content{font-size:1rem}.bb-spinner.horizontal{text-align:left;flex-direction:row}.bb-spinner.horizontal .bb-spinner-content:not(:empty){margin-top:0;margin-left:.75rem}.bb-spinner.vertical{text-align:center;flex-direction:column}.bb-spinner.vertical .bb-spinner-content:not(:empty){margin-left:0;margin-top:.75rem}.bb-spinner-container{display:flex;position:relative}.bb-spinner-container>img{top:20%;left:20%;width:60%;height:60%;position:absolute}.bb-spinner-loader{margin:0;padding:0;overflow:hidden;text-indent:100%;color:transparent;position:relative;display:inline-block;vertical-align:middle;border:.1875rem solid #f2f4f6;animation:1s linear infinite spin}.bb-spinner-loader,.bb-spinner-loader:after{width:3rem;height:3rem;min-width:3rem;min-height:3rem;border-radius:50%}.bb-spinner-loader.disabled{cursor:default;-webkit-user-select:none;user-select:none;pointer-events:none;animation-play-state:paused}.bb-spinner-content:not(:empty){font-weight:400;font-size:.875rem;margin-top:.75rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
724
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
725
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: BbSpinner, isStandalone: true, selector: "bb-spinner", inputs: { color: "color", alt: "alt", disabled: ["disabled", "disabled", booleanAttribute] }, host: { classAttribute: "bb-spinner" }, ngImport: i0, template: "<!--\n The spinner element.\n\n This element contains a circle with a 25% bar that spins\n indefinitely. The border color can be set via the \"color\"\n property.\n-->\n<div class=\"bb-spinner-container\">\n <div [style.border-left-color]=\"color\"\n [class.disabled]=\"disabled\"\n class=\"bb-spinner-loader\"\n aria-live=\"assertive\"\n role=\"alert\">\n {{ alt }}\n </div>\n <ng-content select=\"img\"></ng-content>\n</div>\n\n<!--\n The content of the spinner.\n\n This element contains the content of the spinner. The user\n can set the content inside the tag.\n-->\n<span class=\"bb-spinner-content\">\n <ng-content></ng-content>\n</span>\n", styles: [".bb-spinner{padding:1.5rem 0;text-align:center;align-items:center;display:inline-flex;flex-direction:column;justify-content:center;color:#666}.bb-spinner.block{display:flex}.bb-spinner.inverse .bb-spinner-loader{border-color:#fff3}.bb-spinner.inverse .bb-spinner-content{color:#fff}.bb-spinner.small .bb-spinner-loader,.bb-spinner.small .bb-spinner-loader:after{width:1.5rem;height:1.5rem;min-width:1.5rem;min-height:1.5rem}.bb-spinner.small .bb-spinner-loader{border-width:.125rem}.bb-spinner.small .bb-spinner-content{font-size:.75rem}.bb-spinner.medium .bb-spinner-loader,.bb-spinner.medium .bb-spinner-loader:after{width:3rem;height:3rem;min-width:3rem;min-height:3rem}.bb-spinner.medium .bb-spinner-loader{border-width:.1875rem}.bb-spinner.medium .bb-spinner-content{font-size:.875rem}.bb-spinner.large .bb-spinner-loader,.bb-spinner.large .bb-spinner-loader:after{width:4.5rem;height:4.5rem;min-width:4.5rem;min-height:4.5rem}.bb-spinner.large .bb-spinner-loader{border-width:.25rem}.bb-spinner.large .bb-spinner-content{font-size:1rem}.bb-spinner.horizontal{text-align:left;flex-direction:row}.bb-spinner.horizontal .bb-spinner-content:not(:empty){margin-top:0;margin-left:.75rem}.bb-spinner.vertical{text-align:center;flex-direction:column}.bb-spinner.vertical .bb-spinner-content:not(:empty){margin-left:0;margin-top:.75rem}.bb-spinner-container{display:flex;position:relative}.bb-spinner-container>img{top:20%;left:20%;width:60%;height:60%;position:absolute}.bb-spinner-loader{margin:0;padding:0;overflow:hidden;text-indent:100%;color:transparent;position:relative;display:inline-block;vertical-align:middle;border:.1875rem solid #f2f4f6;animation:1s linear infinite spin}.bb-spinner-loader,.bb-spinner-loader:after{width:3rem;height:3rem;min-width:3rem;min-height:3rem;border-radius:50%}.bb-spinner-loader.disabled{cursor:default;-webkit-user-select:none;user-select:none;pointer-events:none;animation-play-state:paused}.bb-spinner-content:not(:empty){font-weight:400;font-size:.875rem;margin-top:.75rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
666
726
  }
667
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbSpinner, decorators: [{
727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbSpinner, decorators: [{
668
728
  type: Component,
669
729
  args: [{ selector: 'bb-spinner', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bb-spinner' }, preserveWhitespaces: false, standalone: true, template: "<!--\n The spinner element.\n\n This element contains a circle with a 25% bar that spins\n indefinitely. The border color can be set via the \"color\"\n property.\n-->\n<div class=\"bb-spinner-container\">\n <div [style.border-left-color]=\"color\"\n [class.disabled]=\"disabled\"\n class=\"bb-spinner-loader\"\n aria-live=\"assertive\"\n role=\"alert\">\n {{ alt }}\n </div>\n <ng-content select=\"img\"></ng-content>\n</div>\n\n<!--\n The content of the spinner.\n\n This element contains the content of the spinner. The user\n can set the content inside the tag.\n-->\n<span class=\"bb-spinner-content\">\n <ng-content></ng-content>\n</span>\n", styles: [".bb-spinner{padding:1.5rem 0;text-align:center;align-items:center;display:inline-flex;flex-direction:column;justify-content:center;color:#666}.bb-spinner.block{display:flex}.bb-spinner.inverse .bb-spinner-loader{border-color:#fff3}.bb-spinner.inverse .bb-spinner-content{color:#fff}.bb-spinner.small .bb-spinner-loader,.bb-spinner.small .bb-spinner-loader:after{width:1.5rem;height:1.5rem;min-width:1.5rem;min-height:1.5rem}.bb-spinner.small .bb-spinner-loader{border-width:.125rem}.bb-spinner.small .bb-spinner-content{font-size:.75rem}.bb-spinner.medium .bb-spinner-loader,.bb-spinner.medium .bb-spinner-loader:after{width:3rem;height:3rem;min-width:3rem;min-height:3rem}.bb-spinner.medium .bb-spinner-loader{border-width:.1875rem}.bb-spinner.medium .bb-spinner-content{font-size:.875rem}.bb-spinner.large .bb-spinner-loader,.bb-spinner.large .bb-spinner-loader:after{width:4.5rem;height:4.5rem;min-width:4.5rem;min-height:4.5rem}.bb-spinner.large .bb-spinner-loader{border-width:.25rem}.bb-spinner.large .bb-spinner-content{font-size:1rem}.bb-spinner.horizontal{text-align:left;flex-direction:row}.bb-spinner.horizontal .bb-spinner-content:not(:empty){margin-top:0;margin-left:.75rem}.bb-spinner.vertical{text-align:center;flex-direction:column}.bb-spinner.vertical .bb-spinner-content:not(:empty){margin-left:0;margin-top:.75rem}.bb-spinner-container{display:flex;position:relative}.bb-spinner-container>img{top:20%;left:20%;width:60%;height:60%;position:absolute}.bb-spinner-loader{margin:0;padding:0;overflow:hidden;text-indent:100%;color:transparent;position:relative;display:inline-block;vertical-align:middle;border:.1875rem solid #f2f4f6;animation:1s linear infinite spin}.bb-spinner-loader,.bb-spinner-loader:after{width:3rem;height:3rem;min-width:3rem;min-height:3rem;border-radius:50%}.bb-spinner-loader.disabled{cursor:default;-webkit-user-select:none;user-select:none;pointer-events:none;animation-play-state:paused}.bb-spinner-content:not(:empty){font-weight:400;font-size:.875rem;margin-top:.75rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
670
730
  }], propDecorators: { color: [{
@@ -688,16 +748,16 @@ class BbButton {
688
748
  const element = this.elementRef?.nativeElement ?? null;
689
749
  element?.focus?.();
690
750
  }
691
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbButton, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
692
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbButton, isStandalone: true, selector: "button[bb-button]", inputs: { disabled: ["disabled", "disabled", booleanAttribute], loading: ["loading", "loading", booleanAttribute] }, host: { properties: { "class.loading": "loading", "attr.disabled": "disabled || loading || null" }, classAttribute: "bb-button" }, exportAs: ["bbButton"], ngImport: i0, template: "@if (loading) {\n <bb-spinner class=\"bb-button-spinner small\"></bb-spinner>\n}\n\n<ng-content select=\"[prefix]\"></ng-content>\n<span class=\"bb-button-content\"><ng-content></ng-content></span>\n<ng-content select=\"[suffix]\"></ng-content>\n", styles: [".bb-button{height:2.5rem;cursor:pointer;font-size:1rem;max-width:100%;overflow:hidden;font-weight:400;padding:0 .5rem;-webkit-user-select:none;user-select:none;position:relative;font-style:normal;text-align:center;align-items:center;display:inline-flex;border-radius:.5rem;text-decoration:none;text-overflow:ellipsis;justify-content:center;transition-duration:.2s;border:1px solid transparent;background-color:transparent;transition-property:background-color,box-shadow;transition-timing-function:cubic-bezier(0,0,.2,1)}.bb-button,.bb-button:visited{color:var(--bb-button-color)}.bb-button:hover{background-color:var(--bb-button-hover-background-color)}.bb-button:focus{border-color:var(--bb-button-focus-border-color);box-shadow:var(--bb-button-focus-box-shadow)}.bb-button:active{background-color:var(--bb-button-active-background-color)}.bb-button.small{height:2rem;font-size:.875rem}.bb-button.large{height:3rem;font-size:1.125rem}.bb-button.full{width:100%}.bb-button.square{padding:0;width:2.5rem;min-width:2.5rem}.bb-button.square.small{width:2rem;min-width:2rem}.bb-button.square.large{width:3rem;min-width:3rem}.bb-button>[prefix]{margin-right:.25rem}.bb-button>[suffix]{margin-left:.25rem}.bb-button.secondary{border-color:var(--bb-button-secondary-border-color)}.bb-button.secondary,.bb-button.secondary:visited{color:var(--bb-button-secondary-color)}.bb-button.secondary:hover{background-color:var(--bb-button-secondary-hover-background-color)}.bb-button.secondary:focus{box-shadow:var(--bb-button-secondary-focus-box-shadow)}.bb-button.secondary:active{background-color:var(--bb-button-secondary-active-background-color)}.bb-button.primary{border-color:var(--bb-button-primary-border-color);background-color:var(--bb-button-primary-background-color)}.bb-button.primary,.bb-button.primary:visited{color:var(--bb-button-primary-color)}.bb-button.primary:hover{background-color:var(--bb-button-primary-hover-background-color)}.bb-button.primary:focus{box-shadow:var(--bb-button-primary-focus-box-shadow)}.bb-button.primary:active{background-color:var(--bb-button-primary-active-background-color)}.bb-button.destructive{border-color:var(--bb-button-destructive-border-color);background-color:var(--bb-button-destructive-background-color)}.bb-button.destructive,.bb-button.destructive:visited{color:var(--bb-button-destructive-color)}.bb-button.destructive:hover{background-color:var(--bb-button-destructive-hover-background-color)}.bb-button.destructive:focus{box-shadow:var(--bb-button-destructive-focus-box-shadow)}.bb-button.destructive:active{background-color:var(--bb-button-destructive-active-background-color)}.bb-button:disabled,.bb-button:disabled:focus,.bb-button:disabled:hover,.bb-button:disabled:active,.bb-button[disabled],.bb-button[disabled]:focus,.bb-button[disabled]:hover,.bb-button[disabled]:active,.bb-button.loading,.bb-button.loading:focus,.bb-button.loading:hover,.bb-button.loading:active{cursor:default;box-shadow:none;opacity:var(--bb-button-disabled-opacity)}.bb-button.loading>*:not(.bb-button-spinner){opacity:0}.bb-button>.bb-button-spinner{left:50%;padding:0;overflow:hidden;position:absolute;transform:translate(-50%)}.bb-button-content{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: BbSpinner, selector: "bb-spinner", inputs: ["color", "alt", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
751
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbButton, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
752
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbButton, isStandalone: true, selector: "button[bb-button]", inputs: { disabled: ["disabled", "disabled", booleanAttribute], loading: ["loading", "loading", booleanAttribute] }, host: { properties: { "class.loading": "loading", "attr.disabled": "disabled || loading || null" }, classAttribute: "bb-button" }, exportAs: ["bbButton"], ngImport: i0, template: "@if (loading) {\n <bb-spinner class=\"bb-button-spinner small\"></bb-spinner>\n}\n\n<ng-content select=\"[prefix]\"></ng-content>\n<span class=\"bb-button-content\"><ng-content></ng-content></span>\n<ng-content select=\"[suffix]\"></ng-content>\n", styles: [".bb-button{height:2.5rem;cursor:pointer;font-size:1rem;max-width:100%;overflow:hidden;font-weight:400;padding:0 .5rem;-webkit-user-select:none;user-select:none;position:relative;font-style:normal;text-align:center;align-items:center;display:inline-flex;text-decoration:none;text-overflow:ellipsis;justify-content:center;transition-duration:.2s;border:1px solid transparent;background-color:transparent;transition-property:background-color,box-shadow;border-radius:var(--bb-button-border-radius, .5rem);transition-timing-function:cubic-bezier(0,0,.2,1)}.bb-button,.bb-button:visited{color:var(--bb-button-color)}.bb-button:hover{background-color:var(--bb-button-hover-background-color)}.bb-button:focus{border-color:var(--bb-button-focus-border-color);box-shadow:var(--bb-button-focus-box-shadow)}.bb-button:active{background-color:var(--bb-button-active-background-color)}.bb-button.small{height:2rem;font-size:.875rem}.bb-button.large{height:3rem;font-size:1.125rem}.bb-button.full{width:100%}.bb-button.square{padding:0;width:2.5rem;min-width:2.5rem}.bb-button.square.small{width:2rem;min-width:2rem}.bb-button.square.large{width:3rem;min-width:3rem}.bb-button>[prefix]{margin-right:.25rem}.bb-button>[suffix]{margin-left:.25rem}.bb-button.secondary{border-color:var(--bb-button-secondary-border-color)}.bb-button.secondary,.bb-button.secondary:visited{color:var(--bb-button-secondary-color)}.bb-button.secondary:hover{background-color:var(--bb-button-secondary-hover-background-color)}.bb-button.secondary:focus{box-shadow:var(--bb-button-secondary-focus-box-shadow)}.bb-button.secondary:active{background-color:var(--bb-button-secondary-active-background-color)}.bb-button.primary{border-color:var(--bb-button-primary-border-color);background-color:var(--bb-button-primary-background-color)}.bb-button.primary,.bb-button.primary:visited{color:var(--bb-button-primary-color)}.bb-button.primary:hover{background-color:var(--bb-button-primary-hover-background-color)}.bb-button.primary:focus{box-shadow:var(--bb-button-primary-focus-box-shadow)}.bb-button.primary:active{background-color:var(--bb-button-primary-active-background-color)}.bb-button.destructive{border-color:var(--bb-button-destructive-border-color);background-color:var(--bb-button-destructive-background-color)}.bb-button.destructive,.bb-button.destructive:visited{color:var(--bb-button-destructive-color)}.bb-button.destructive:hover{background-color:var(--bb-button-destructive-hover-background-color)}.bb-button.destructive:focus{box-shadow:var(--bb-button-destructive-focus-box-shadow)}.bb-button.destructive:active{background-color:var(--bb-button-destructive-active-background-color)}.bb-button:disabled,.bb-button:disabled:focus,.bb-button:disabled:hover,.bb-button:disabled:active,.bb-button[disabled],.bb-button[disabled]:focus,.bb-button[disabled]:hover,.bb-button[disabled]:active,.bb-button.loading,.bb-button.loading:focus,.bb-button.loading:hover,.bb-button.loading:active{cursor:default;box-shadow:none;opacity:var(--bb-button-disabled-opacity)}.bb-button.loading>*:not(.bb-button-spinner){opacity:0}.bb-button>.bb-button-spinner{left:50%;padding:0;overflow:hidden;position:absolute;transform:translate(-50%)}.bb-button-content{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: BbSpinner, selector: "bb-spinner", inputs: ["color", "alt", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
693
753
  }
694
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbButton, decorators: [{
754
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbButton, decorators: [{
695
755
  type: Component,
696
756
  args: [{ selector: 'button[bb-button]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'bbButton', host: {
697
757
  'class': 'bb-button',
698
758
  '[class.loading]': 'loading',
699
759
  '[attr.disabled]': 'disabled || loading || null'
700
- }, preserveWhitespaces: false, standalone: true, imports: [BbSpinner], template: "@if (loading) {\n <bb-spinner class=\"bb-button-spinner small\"></bb-spinner>\n}\n\n<ng-content select=\"[prefix]\"></ng-content>\n<span class=\"bb-button-content\"><ng-content></ng-content></span>\n<ng-content select=\"[suffix]\"></ng-content>\n", styles: [".bb-button{height:2.5rem;cursor:pointer;font-size:1rem;max-width:100%;overflow:hidden;font-weight:400;padding:0 .5rem;-webkit-user-select:none;user-select:none;position:relative;font-style:normal;text-align:center;align-items:center;display:inline-flex;border-radius:.5rem;text-decoration:none;text-overflow:ellipsis;justify-content:center;transition-duration:.2s;border:1px solid transparent;background-color:transparent;transition-property:background-color,box-shadow;transition-timing-function:cubic-bezier(0,0,.2,1)}.bb-button,.bb-button:visited{color:var(--bb-button-color)}.bb-button:hover{background-color:var(--bb-button-hover-background-color)}.bb-button:focus{border-color:var(--bb-button-focus-border-color);box-shadow:var(--bb-button-focus-box-shadow)}.bb-button:active{background-color:var(--bb-button-active-background-color)}.bb-button.small{height:2rem;font-size:.875rem}.bb-button.large{height:3rem;font-size:1.125rem}.bb-button.full{width:100%}.bb-button.square{padding:0;width:2.5rem;min-width:2.5rem}.bb-button.square.small{width:2rem;min-width:2rem}.bb-button.square.large{width:3rem;min-width:3rem}.bb-button>[prefix]{margin-right:.25rem}.bb-button>[suffix]{margin-left:.25rem}.bb-button.secondary{border-color:var(--bb-button-secondary-border-color)}.bb-button.secondary,.bb-button.secondary:visited{color:var(--bb-button-secondary-color)}.bb-button.secondary:hover{background-color:var(--bb-button-secondary-hover-background-color)}.bb-button.secondary:focus{box-shadow:var(--bb-button-secondary-focus-box-shadow)}.bb-button.secondary:active{background-color:var(--bb-button-secondary-active-background-color)}.bb-button.primary{border-color:var(--bb-button-primary-border-color);background-color:var(--bb-button-primary-background-color)}.bb-button.primary,.bb-button.primary:visited{color:var(--bb-button-primary-color)}.bb-button.primary:hover{background-color:var(--bb-button-primary-hover-background-color)}.bb-button.primary:focus{box-shadow:var(--bb-button-primary-focus-box-shadow)}.bb-button.primary:active{background-color:var(--bb-button-primary-active-background-color)}.bb-button.destructive{border-color:var(--bb-button-destructive-border-color);background-color:var(--bb-button-destructive-background-color)}.bb-button.destructive,.bb-button.destructive:visited{color:var(--bb-button-destructive-color)}.bb-button.destructive:hover{background-color:var(--bb-button-destructive-hover-background-color)}.bb-button.destructive:focus{box-shadow:var(--bb-button-destructive-focus-box-shadow)}.bb-button.destructive:active{background-color:var(--bb-button-destructive-active-background-color)}.bb-button:disabled,.bb-button:disabled:focus,.bb-button:disabled:hover,.bb-button:disabled:active,.bb-button[disabled],.bb-button[disabled]:focus,.bb-button[disabled]:hover,.bb-button[disabled]:active,.bb-button.loading,.bb-button.loading:focus,.bb-button.loading:hover,.bb-button.loading:active{cursor:default;box-shadow:none;opacity:var(--bb-button-disabled-opacity)}.bb-button.loading>*:not(.bb-button-spinner){opacity:0}.bb-button>.bb-button-spinner{left:50%;padding:0;overflow:hidden;position:absolute;transform:translate(-50%)}.bb-button-content{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"] }]
760
+ }, preserveWhitespaces: false, standalone: true, imports: [BbSpinner], template: "@if (loading) {\n <bb-spinner class=\"bb-button-spinner small\"></bb-spinner>\n}\n\n<ng-content select=\"[prefix]\"></ng-content>\n<span class=\"bb-button-content\"><ng-content></ng-content></span>\n<ng-content select=\"[suffix]\"></ng-content>\n", styles: [".bb-button{height:2.5rem;cursor:pointer;font-size:1rem;max-width:100%;overflow:hidden;font-weight:400;padding:0 .5rem;-webkit-user-select:none;user-select:none;position:relative;font-style:normal;text-align:center;align-items:center;display:inline-flex;text-decoration:none;text-overflow:ellipsis;justify-content:center;transition-duration:.2s;border:1px solid transparent;background-color:transparent;transition-property:background-color,box-shadow;border-radius:var(--bb-button-border-radius, .5rem);transition-timing-function:cubic-bezier(0,0,.2,1)}.bb-button,.bb-button:visited{color:var(--bb-button-color)}.bb-button:hover{background-color:var(--bb-button-hover-background-color)}.bb-button:focus{border-color:var(--bb-button-focus-border-color);box-shadow:var(--bb-button-focus-box-shadow)}.bb-button:active{background-color:var(--bb-button-active-background-color)}.bb-button.small{height:2rem;font-size:.875rem}.bb-button.large{height:3rem;font-size:1.125rem}.bb-button.full{width:100%}.bb-button.square{padding:0;width:2.5rem;min-width:2.5rem}.bb-button.square.small{width:2rem;min-width:2rem}.bb-button.square.large{width:3rem;min-width:3rem}.bb-button>[prefix]{margin-right:.25rem}.bb-button>[suffix]{margin-left:.25rem}.bb-button.secondary{border-color:var(--bb-button-secondary-border-color)}.bb-button.secondary,.bb-button.secondary:visited{color:var(--bb-button-secondary-color)}.bb-button.secondary:hover{background-color:var(--bb-button-secondary-hover-background-color)}.bb-button.secondary:focus{box-shadow:var(--bb-button-secondary-focus-box-shadow)}.bb-button.secondary:active{background-color:var(--bb-button-secondary-active-background-color)}.bb-button.primary{border-color:var(--bb-button-primary-border-color);background-color:var(--bb-button-primary-background-color)}.bb-button.primary,.bb-button.primary:visited{color:var(--bb-button-primary-color)}.bb-button.primary:hover{background-color:var(--bb-button-primary-hover-background-color)}.bb-button.primary:focus{box-shadow:var(--bb-button-primary-focus-box-shadow)}.bb-button.primary:active{background-color:var(--bb-button-primary-active-background-color)}.bb-button.destructive{border-color:var(--bb-button-destructive-border-color);background-color:var(--bb-button-destructive-background-color)}.bb-button.destructive,.bb-button.destructive:visited{color:var(--bb-button-destructive-color)}.bb-button.destructive:hover{background-color:var(--bb-button-destructive-hover-background-color)}.bb-button.destructive:focus{box-shadow:var(--bb-button-destructive-focus-box-shadow)}.bb-button.destructive:active{background-color:var(--bb-button-destructive-active-background-color)}.bb-button:disabled,.bb-button:disabled:focus,.bb-button:disabled:hover,.bb-button:disabled:active,.bb-button[disabled],.bb-button[disabled]:focus,.bb-button[disabled]:hover,.bb-button[disabled]:active,.bb-button.loading,.bb-button.loading:focus,.bb-button.loading:hover,.bb-button.loading:active{cursor:default;box-shadow:none;opacity:var(--bb-button-disabled-opacity)}.bb-button.loading>*:not(.bb-button-spinner){opacity:0}.bb-button>.bb-button-spinner{left:50%;padding:0;overflow:hidden;position:absolute;transform:translate(-50%)}.bb-button-content{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"] }]
701
761
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { disabled: [{
702
762
  type: Input,
703
763
  args: [{ transform: booleanAttribute }]
@@ -723,17 +783,17 @@ class BbAnchor extends BbButton {
723
783
  event.preventDefault();
724
784
  event.stopImmediatePropagation();
725
785
  }
726
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbAnchor, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
727
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbAnchor, isStandalone: true, selector: "a[bb-button]", inputs: { tabIndex: "tabIndex" }, host: { listeners: { "click": "stopDisabledEvents($event)" }, properties: { "attr.tabindex": "(disabled || loading) ? -1 : (tabIndex || 0)", "attr.disabled": "disabled || loading || null", "attr.aria-disabled": "(disabled || loading).toString()" }, classAttribute: "bb-button" }, exportAs: ["bbButton", "bbAnchor"], usesInheritance: true, ngImport: i0, template: "@if (loading) {\n <bb-spinner class=\"bb-button-spinner small\"></bb-spinner>\n}\n\n<ng-content select=\"[prefix]\"></ng-content>\n<span class=\"bb-button-content\"><ng-content></ng-content></span>\n<ng-content select=\"[suffix]\"></ng-content>\n", styles: [".bb-button{height:2.5rem;cursor:pointer;font-size:1rem;max-width:100%;overflow:hidden;font-weight:400;padding:0 .5rem;-webkit-user-select:none;user-select:none;position:relative;font-style:normal;text-align:center;align-items:center;display:inline-flex;border-radius:.5rem;text-decoration:none;text-overflow:ellipsis;justify-content:center;transition-duration:.2s;border:1px solid transparent;background-color:transparent;transition-property:background-color,box-shadow;transition-timing-function:cubic-bezier(0,0,.2,1)}.bb-button,.bb-button:visited{color:var(--bb-button-color)}.bb-button:hover{background-color:var(--bb-button-hover-background-color)}.bb-button:focus{border-color:var(--bb-button-focus-border-color);box-shadow:var(--bb-button-focus-box-shadow)}.bb-button:active{background-color:var(--bb-button-active-background-color)}.bb-button.small{height:2rem;font-size:.875rem}.bb-button.large{height:3rem;font-size:1.125rem}.bb-button.full{width:100%}.bb-button.square{padding:0;width:2.5rem;min-width:2.5rem}.bb-button.square.small{width:2rem;min-width:2rem}.bb-button.square.large{width:3rem;min-width:3rem}.bb-button>[prefix]{margin-right:.25rem}.bb-button>[suffix]{margin-left:.25rem}.bb-button.secondary{border-color:var(--bb-button-secondary-border-color)}.bb-button.secondary,.bb-button.secondary:visited{color:var(--bb-button-secondary-color)}.bb-button.secondary:hover{background-color:var(--bb-button-secondary-hover-background-color)}.bb-button.secondary:focus{box-shadow:var(--bb-button-secondary-focus-box-shadow)}.bb-button.secondary:active{background-color:var(--bb-button-secondary-active-background-color)}.bb-button.primary{border-color:var(--bb-button-primary-border-color);background-color:var(--bb-button-primary-background-color)}.bb-button.primary,.bb-button.primary:visited{color:var(--bb-button-primary-color)}.bb-button.primary:hover{background-color:var(--bb-button-primary-hover-background-color)}.bb-button.primary:focus{box-shadow:var(--bb-button-primary-focus-box-shadow)}.bb-button.primary:active{background-color:var(--bb-button-primary-active-background-color)}.bb-button.destructive{border-color:var(--bb-button-destructive-border-color);background-color:var(--bb-button-destructive-background-color)}.bb-button.destructive,.bb-button.destructive:visited{color:var(--bb-button-destructive-color)}.bb-button.destructive:hover{background-color:var(--bb-button-destructive-hover-background-color)}.bb-button.destructive:focus{box-shadow:var(--bb-button-destructive-focus-box-shadow)}.bb-button.destructive:active{background-color:var(--bb-button-destructive-active-background-color)}.bb-button:disabled,.bb-button:disabled:focus,.bb-button:disabled:hover,.bb-button:disabled:active,.bb-button[disabled],.bb-button[disabled]:focus,.bb-button[disabled]:hover,.bb-button[disabled]:active,.bb-button.loading,.bb-button.loading:focus,.bb-button.loading:hover,.bb-button.loading:active{cursor:default;box-shadow:none;opacity:var(--bb-button-disabled-opacity)}.bb-button.loading>*:not(.bb-button-spinner){opacity:0}.bb-button>.bb-button-spinner{left:50%;padding:0;overflow:hidden;position:absolute;transform:translate(-50%)}.bb-button-content{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: BbSpinner, selector: "bb-spinner", inputs: ["color", "alt", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
786
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbAnchor, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
787
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbAnchor, isStandalone: true, selector: "a[bb-button]", inputs: { tabIndex: "tabIndex" }, host: { listeners: { "click": "stopDisabledEvents($event)" }, properties: { "attr.tabindex": "(disabled || loading) ? -1 : (tabIndex || 0)", "attr.disabled": "disabled || loading || null", "attr.aria-disabled": "(disabled || loading).toString()" }, classAttribute: "bb-button" }, exportAs: ["bbButton", "bbAnchor"], usesInheritance: true, ngImport: i0, template: "@if (loading) {\n <bb-spinner class=\"bb-button-spinner small\"></bb-spinner>\n}\n\n<ng-content select=\"[prefix]\"></ng-content>\n<span class=\"bb-button-content\"><ng-content></ng-content></span>\n<ng-content select=\"[suffix]\"></ng-content>\n", styles: [".bb-button{height:2.5rem;cursor:pointer;font-size:1rem;max-width:100%;overflow:hidden;font-weight:400;padding:0 .5rem;-webkit-user-select:none;user-select:none;position:relative;font-style:normal;text-align:center;align-items:center;display:inline-flex;text-decoration:none;text-overflow:ellipsis;justify-content:center;transition-duration:.2s;border:1px solid transparent;background-color:transparent;transition-property:background-color,box-shadow;border-radius:var(--bb-button-border-radius, .5rem);transition-timing-function:cubic-bezier(0,0,.2,1)}.bb-button,.bb-button:visited{color:var(--bb-button-color)}.bb-button:hover{background-color:var(--bb-button-hover-background-color)}.bb-button:focus{border-color:var(--bb-button-focus-border-color);box-shadow:var(--bb-button-focus-box-shadow)}.bb-button:active{background-color:var(--bb-button-active-background-color)}.bb-button.small{height:2rem;font-size:.875rem}.bb-button.large{height:3rem;font-size:1.125rem}.bb-button.full{width:100%}.bb-button.square{padding:0;width:2.5rem;min-width:2.5rem}.bb-button.square.small{width:2rem;min-width:2rem}.bb-button.square.large{width:3rem;min-width:3rem}.bb-button>[prefix]{margin-right:.25rem}.bb-button>[suffix]{margin-left:.25rem}.bb-button.secondary{border-color:var(--bb-button-secondary-border-color)}.bb-button.secondary,.bb-button.secondary:visited{color:var(--bb-button-secondary-color)}.bb-button.secondary:hover{background-color:var(--bb-button-secondary-hover-background-color)}.bb-button.secondary:focus{box-shadow:var(--bb-button-secondary-focus-box-shadow)}.bb-button.secondary:active{background-color:var(--bb-button-secondary-active-background-color)}.bb-button.primary{border-color:var(--bb-button-primary-border-color);background-color:var(--bb-button-primary-background-color)}.bb-button.primary,.bb-button.primary:visited{color:var(--bb-button-primary-color)}.bb-button.primary:hover{background-color:var(--bb-button-primary-hover-background-color)}.bb-button.primary:focus{box-shadow:var(--bb-button-primary-focus-box-shadow)}.bb-button.primary:active{background-color:var(--bb-button-primary-active-background-color)}.bb-button.destructive{border-color:var(--bb-button-destructive-border-color);background-color:var(--bb-button-destructive-background-color)}.bb-button.destructive,.bb-button.destructive:visited{color:var(--bb-button-destructive-color)}.bb-button.destructive:hover{background-color:var(--bb-button-destructive-hover-background-color)}.bb-button.destructive:focus{box-shadow:var(--bb-button-destructive-focus-box-shadow)}.bb-button.destructive:active{background-color:var(--bb-button-destructive-active-background-color)}.bb-button:disabled,.bb-button:disabled:focus,.bb-button:disabled:hover,.bb-button:disabled:active,.bb-button[disabled],.bb-button[disabled]:focus,.bb-button[disabled]:hover,.bb-button[disabled]:active,.bb-button.loading,.bb-button.loading:focus,.bb-button.loading:hover,.bb-button.loading:active{cursor:default;box-shadow:none;opacity:var(--bb-button-disabled-opacity)}.bb-button.loading>*:not(.bb-button-spinner){opacity:0}.bb-button>.bb-button-spinner{left:50%;padding:0;overflow:hidden;position:absolute;transform:translate(-50%)}.bb-button-content{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: BbSpinner, selector: "bb-spinner", inputs: ["color", "alt", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
728
788
  }
729
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbAnchor, decorators: [{
789
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbAnchor, decorators: [{
730
790
  type: Component,
731
791
  args: [{ selector: 'a[bb-button]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'bbButton, bbAnchor', host: {
732
792
  'class': 'bb-button',
733
793
  '[attr.tabindex]': '(disabled || loading) ? -1 : (tabIndex || 0)',
734
794
  '[attr.disabled]': 'disabled || loading || null',
735
795
  '[attr.aria-disabled]': '(disabled || loading).toString()'
736
- }, preserveWhitespaces: false, standalone: true, imports: [BbSpinner], template: "@if (loading) {\n <bb-spinner class=\"bb-button-spinner small\"></bb-spinner>\n}\n\n<ng-content select=\"[prefix]\"></ng-content>\n<span class=\"bb-button-content\"><ng-content></ng-content></span>\n<ng-content select=\"[suffix]\"></ng-content>\n", styles: [".bb-button{height:2.5rem;cursor:pointer;font-size:1rem;max-width:100%;overflow:hidden;font-weight:400;padding:0 .5rem;-webkit-user-select:none;user-select:none;position:relative;font-style:normal;text-align:center;align-items:center;display:inline-flex;border-radius:.5rem;text-decoration:none;text-overflow:ellipsis;justify-content:center;transition-duration:.2s;border:1px solid transparent;background-color:transparent;transition-property:background-color,box-shadow;transition-timing-function:cubic-bezier(0,0,.2,1)}.bb-button,.bb-button:visited{color:var(--bb-button-color)}.bb-button:hover{background-color:var(--bb-button-hover-background-color)}.bb-button:focus{border-color:var(--bb-button-focus-border-color);box-shadow:var(--bb-button-focus-box-shadow)}.bb-button:active{background-color:var(--bb-button-active-background-color)}.bb-button.small{height:2rem;font-size:.875rem}.bb-button.large{height:3rem;font-size:1.125rem}.bb-button.full{width:100%}.bb-button.square{padding:0;width:2.5rem;min-width:2.5rem}.bb-button.square.small{width:2rem;min-width:2rem}.bb-button.square.large{width:3rem;min-width:3rem}.bb-button>[prefix]{margin-right:.25rem}.bb-button>[suffix]{margin-left:.25rem}.bb-button.secondary{border-color:var(--bb-button-secondary-border-color)}.bb-button.secondary,.bb-button.secondary:visited{color:var(--bb-button-secondary-color)}.bb-button.secondary:hover{background-color:var(--bb-button-secondary-hover-background-color)}.bb-button.secondary:focus{box-shadow:var(--bb-button-secondary-focus-box-shadow)}.bb-button.secondary:active{background-color:var(--bb-button-secondary-active-background-color)}.bb-button.primary{border-color:var(--bb-button-primary-border-color);background-color:var(--bb-button-primary-background-color)}.bb-button.primary,.bb-button.primary:visited{color:var(--bb-button-primary-color)}.bb-button.primary:hover{background-color:var(--bb-button-primary-hover-background-color)}.bb-button.primary:focus{box-shadow:var(--bb-button-primary-focus-box-shadow)}.bb-button.primary:active{background-color:var(--bb-button-primary-active-background-color)}.bb-button.destructive{border-color:var(--bb-button-destructive-border-color);background-color:var(--bb-button-destructive-background-color)}.bb-button.destructive,.bb-button.destructive:visited{color:var(--bb-button-destructive-color)}.bb-button.destructive:hover{background-color:var(--bb-button-destructive-hover-background-color)}.bb-button.destructive:focus{box-shadow:var(--bb-button-destructive-focus-box-shadow)}.bb-button.destructive:active{background-color:var(--bb-button-destructive-active-background-color)}.bb-button:disabled,.bb-button:disabled:focus,.bb-button:disabled:hover,.bb-button:disabled:active,.bb-button[disabled],.bb-button[disabled]:focus,.bb-button[disabled]:hover,.bb-button[disabled]:active,.bb-button.loading,.bb-button.loading:focus,.bb-button.loading:hover,.bb-button.loading:active{cursor:default;box-shadow:none;opacity:var(--bb-button-disabled-opacity)}.bb-button.loading>*:not(.bb-button-spinner){opacity:0}.bb-button>.bb-button-spinner{left:50%;padding:0;overflow:hidden;position:absolute;transform:translate(-50%)}.bb-button-content{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"] }]
796
+ }, preserveWhitespaces: false, standalone: true, imports: [BbSpinner], template: "@if (loading) {\n <bb-spinner class=\"bb-button-spinner small\"></bb-spinner>\n}\n\n<ng-content select=\"[prefix]\"></ng-content>\n<span class=\"bb-button-content\"><ng-content></ng-content></span>\n<ng-content select=\"[suffix]\"></ng-content>\n", styles: [".bb-button{height:2.5rem;cursor:pointer;font-size:1rem;max-width:100%;overflow:hidden;font-weight:400;padding:0 .5rem;-webkit-user-select:none;user-select:none;position:relative;font-style:normal;text-align:center;align-items:center;display:inline-flex;text-decoration:none;text-overflow:ellipsis;justify-content:center;transition-duration:.2s;border:1px solid transparent;background-color:transparent;transition-property:background-color,box-shadow;border-radius:var(--bb-button-border-radius, .5rem);transition-timing-function:cubic-bezier(0,0,.2,1)}.bb-button,.bb-button:visited{color:var(--bb-button-color)}.bb-button:hover{background-color:var(--bb-button-hover-background-color)}.bb-button:focus{border-color:var(--bb-button-focus-border-color);box-shadow:var(--bb-button-focus-box-shadow)}.bb-button:active{background-color:var(--bb-button-active-background-color)}.bb-button.small{height:2rem;font-size:.875rem}.bb-button.large{height:3rem;font-size:1.125rem}.bb-button.full{width:100%}.bb-button.square{padding:0;width:2.5rem;min-width:2.5rem}.bb-button.square.small{width:2rem;min-width:2rem}.bb-button.square.large{width:3rem;min-width:3rem}.bb-button>[prefix]{margin-right:.25rem}.bb-button>[suffix]{margin-left:.25rem}.bb-button.secondary{border-color:var(--bb-button-secondary-border-color)}.bb-button.secondary,.bb-button.secondary:visited{color:var(--bb-button-secondary-color)}.bb-button.secondary:hover{background-color:var(--bb-button-secondary-hover-background-color)}.bb-button.secondary:focus{box-shadow:var(--bb-button-secondary-focus-box-shadow)}.bb-button.secondary:active{background-color:var(--bb-button-secondary-active-background-color)}.bb-button.primary{border-color:var(--bb-button-primary-border-color);background-color:var(--bb-button-primary-background-color)}.bb-button.primary,.bb-button.primary:visited{color:var(--bb-button-primary-color)}.bb-button.primary:hover{background-color:var(--bb-button-primary-hover-background-color)}.bb-button.primary:focus{box-shadow:var(--bb-button-primary-focus-box-shadow)}.bb-button.primary:active{background-color:var(--bb-button-primary-active-background-color)}.bb-button.destructive{border-color:var(--bb-button-destructive-border-color);background-color:var(--bb-button-destructive-background-color)}.bb-button.destructive,.bb-button.destructive:visited{color:var(--bb-button-destructive-color)}.bb-button.destructive:hover{background-color:var(--bb-button-destructive-hover-background-color)}.bb-button.destructive:focus{box-shadow:var(--bb-button-destructive-focus-box-shadow)}.bb-button.destructive:active{background-color:var(--bb-button-destructive-active-background-color)}.bb-button:disabled,.bb-button:disabled:focus,.bb-button:disabled:hover,.bb-button:disabled:active,.bb-button[disabled],.bb-button[disabled]:focus,.bb-button[disabled]:hover,.bb-button[disabled]:active,.bb-button.loading,.bb-button.loading:focus,.bb-button.loading:hover,.bb-button.loading:active{cursor:default;box-shadow:none;opacity:var(--bb-button-disabled-opacity)}.bb-button.loading>*:not(.bb-button-spinner){opacity:0}.bb-button>.bb-button-spinner{left:50%;padding:0;overflow:hidden;position:absolute;transform:translate(-50%)}.bb-button-content{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"] }]
737
797
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { tabIndex: [{
738
798
  type: Input
739
799
  }], stopDisabledEvents: [{
@@ -803,10 +863,10 @@ class BbIcon {
803
863
  warn = (content) => {
804
864
  return console && console.warn && console.warn(content);
805
865
  };
806
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbIcon, deps: [{ token: ELEMENTS_ICONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
807
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbIcon, isStandalone: true, selector: "bb-icon", inputs: { alt: "alt", size: ["size", "size", numberAttribute], ariaHidden: ["ariaHidden", "ariaHidden", booleanAttribute], src: "src" }, host: { properties: { "attr.aria-hidden": "ariaHidden", "style.width.rem": "size", "style.height.rem": "size", "style.min-width.rem": "size", "style.min-height.rem": "size", "style.font-size.rem": "size" }, classAttribute: "bb-icon" }, ngImport: i0, template: "@if (state$ | async; as data) {\n @switch (data?.type) {\n @case ('font') {\n <i [attr.data-icon]=\"data?.attribute\"\n [class]=\"data?.className\">\n {{ data?.content }}\n </i>\n }\n @case ('image') {\n <img [src]=\"data?.src\"\n [alt]=\"alt\">\n }\n @default {\n <svg viewBox=\"0 0 1 1\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" fill=\"#c5c5c5\"></rect>\n </svg>\n }\n }\n}\n", styles: [".bb-icon{display:flex;-webkit-user-select:none;user-select:none;align-items:center;justify-content:center}.bb-icon>i{font-size:inherit}.bb-icon>img,.bb-icon>svg{width:100%;height:100%;display:flex}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
866
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbIcon, deps: [{ token: ELEMENTS_ICONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
867
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbIcon, isStandalone: true, selector: "bb-icon", inputs: { alt: "alt", size: ["size", "size", numberAttribute], ariaHidden: ["ariaHidden", "ariaHidden", booleanAttribute], src: "src" }, host: { properties: { "attr.aria-hidden": "ariaHidden", "style.width.rem": "size", "style.height.rem": "size", "style.min-width.rem": "size", "style.min-height.rem": "size", "style.font-size.rem": "size" }, classAttribute: "bb-icon" }, ngImport: i0, template: "@if (state$ | async; as data) {\n @switch (data?.type) {\n @case ('font') {\n <i [attr.data-icon]=\"data?.attribute\"\n [class]=\"data?.className\">\n {{ data?.content }}\n </i>\n }\n @case ('image') {\n <img [src]=\"data?.src\"\n [alt]=\"alt\">\n }\n @default {\n <svg viewBox=\"0 0 1 1\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" fill=\"#c5c5c5\"></rect>\n </svg>\n }\n }\n}\n", styles: [".bb-icon{display:flex;-webkit-user-select:none;user-select:none;align-items:center;justify-content:center}.bb-icon>i{font-size:inherit}.bb-icon>img,.bb-icon>svg{width:100%;height:100%;display:flex}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
808
868
  }
809
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbIcon, decorators: [{
869
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbIcon, decorators: [{
810
870
  type: Component,
811
871
  args: [{ selector: 'bb-icon', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
812
872
  'class': 'bb-icon',
@@ -837,10 +897,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
837
897
  class BbFormGroup {
838
898
  // Inputs.
839
899
  grouped = false;
840
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
841
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.0", type: BbFormGroup, isStandalone: true, selector: "bb-form-group", inputs: { grouped: ["grouped", "grouped", booleanAttribute] }, host: { properties: { "class.grouped": "grouped" }, classAttribute: "bb-form-group" }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [".bb-form-group{width:100%;display:flex;flex-wrap:wrap;margin-top:-.75rem}.bb-form-group>*{margin-top:.75rem}.bb-form-group>*:not(:first-child){margin-left:.75rem}.bb-form-group.start{justify-content:flex-start}.bb-form-group.end{justify-content:flex-end}.bb-form-group.vertical{flex-direction:column;justify-content:normal}.bb-form-group.vertical>*{margin-left:0}.bb-form-group.vertical.start{align-items:flex-start}.bb-form-group.vertical.end{align-items:flex-end}.bb-form-group.grouped{margin-bottom:1.5rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
900
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
901
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: BbFormGroup, isStandalone: true, selector: "bb-form-group", inputs: { grouped: ["grouped", "grouped", booleanAttribute] }, host: { properties: { "class.grouped": "grouped" }, classAttribute: "bb-form-group" }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [".bb-form-group{width:100%;display:flex;flex-wrap:wrap;margin-top:-.75rem}.bb-form-group>*{margin-top:.75rem}.bb-form-group>*:not(:first-child){margin-left:.75rem}.bb-form-group.start{justify-content:flex-start}.bb-form-group.end{justify-content:flex-end}.bb-form-group.vertical{flex-direction:column;justify-content:normal}.bb-form-group.vertical>*{margin-left:0}.bb-form-group.vertical.start{align-items:flex-start}.bb-form-group.vertical.end{align-items:flex-end}.bb-form-group.grouped{margin-bottom:1.5rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
842
902
  }
843
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFormGroup, decorators: [{
903
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFormGroup, decorators: [{
844
904
  type: Component,
845
905
  args: [{ selector: 'bb-form-group', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
846
906
  'class': 'bb-form-group',
@@ -928,12 +988,12 @@ class BbCheckbox {
928
988
  }
929
989
  this._renderer.setProperty(element, field, value);
930
990
  }
931
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbCheckbox, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
932
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.0", type: BbCheckbox, isStandalone: true, selector: "bb-checkbox", inputs: { checked: ["checked", "checked", booleanAttribute], indeterminate: ["indeterminate", "indeterminate", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute] }, outputs: { checkedChange: "checkedChange", indeterminateChange: "indeterminateChange" }, host: { properties: { "class.indeterminate": "indeterminate", "class.disabled": "disabled", "class.grouped": "grouped" }, classAttribute: "bb-checkbox" }, providers: [
991
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbCheckbox, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
992
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: BbCheckbox, isStandalone: true, selector: "bb-checkbox", inputs: { checked: ["checked", "checked", booleanAttribute], indeterminate: ["indeterminate", "indeterminate", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute] }, outputs: { checkedChange: "checkedChange", indeterminateChange: "indeterminateChange" }, host: { properties: { "class.indeterminate": "indeterminate", "class.disabled": "disabled", "class.grouped": "grouped" }, classAttribute: "bb-checkbox" }, providers: [
933
993
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbCheckbox), multi: true }
934
994
  ], viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: "<input #input\n [id]=\"labelId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onChangeEvent($event)\"\n (click)=\"onClickEvent($event)\"\n (blur)=\"onTouchedCallback()\"\n class=\"bb-checkbox-input\"\n tabindex=\"-1\"\n type=\"checkbox\">\n\n<label [for]=\"labelId\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n (keyup.space)=\"onClickEvent($event)\"\n class=\"bb-checkbox-label\">\n <span class=\"bb-checkbox-area\">\n <svg width=\"68%\"\n height=\"68%\"\n viewBox=\"0 0 12 12\">\n <polyline [attr.points]=\"indeterminate ? '1 6 11 6' : '1.5 7 4.5 10 10.5 2'\"></polyline>\n </svg>\n </span>\n <span class=\"bb-checkbox-content\">\n <ng-content></ng-content>\n </span>\n</label>\n", styles: [".bb-checkbox{display:block}.bb-checkbox.grouped{margin-bottom:1.5rem}.bb-checkbox-input{display:none}.bb-checkbox-label{margin:0;display:flex;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center}.bb-checkbox-label>span{display:inline-block;vertical-align:middle;transform:translateZ(0)}.bb-checkbox-area{width:1.25rem;height:1.25rem;position:relative;min-width:1.25rem;min-height:1.25rem;border-radius:.25rem;vertical-align:middle;transition-duration:.2s;border:1px solid hsl(213,8%,74%);transition-timing-function:cubic-bezier(0,0,.2,1);box-shadow:0 .375rem .375rem -.375rem #0000001a;transition-property:stroke-dashoffset,box-shadow,border-color,background-color}.bb-checkbox-area>svg{top:16%;left:16%;fill:none;stroke:#fff;stroke-width:2;position:absolute;stroke-linecap:round;transition-delay:.1s;stroke-linejoin:round;stroke-dasharray:1rem;stroke-dashoffset:1rem;transition:all .3s ease;transform:translateZ(0)}.bb-checkbox-content{font-size:1rem;font-weight:400;padding-left:.5rem;color:#121212}.bb-checkbox-content>small{display:block;line-height:1.5;font-size:.8125rem;margin-top:.125rem;color:#758795}.bb-checkbox-input:not(:disabled)+.bb-checkbox-label:focus>.bb-checkbox-area{box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem var(--bb-checkbox-outline-color)}.bb-checkbox-input:checked+.bb-checkbox-label>.bb-checkbox-area,.bb-checkbox.indeterminate>.bb-checkbox-label>.bb-checkbox-area{border-color:var(--bb-checkbox-border-color);background-color:var(--bb-checkbox-background-color)}.bb-checkbox-input:checked+.bb-checkbox-label>.bb-checkbox-area>svg,.bb-checkbox.indeterminate>.bb-checkbox-label>.bb-checkbox-area>svg{stroke-dashoffset:0}.bb-checkbox.disabled>.bb-checkbox-label{cursor:default;pointer-events:none}.bb-checkbox.disabled>.bb-checkbox-input:checked+.bb-checkbox-label>.bb-checkbox-area,.bb-checkbox.indeterminate.disabled>.bb-checkbox-input+.bb-checkbox-label>.bb-checkbox-area{border-color:#b7bcc2;background-color:#e6e6e6}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
935
995
  }
936
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbCheckbox, decorators: [{
996
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbCheckbox, decorators: [{
937
997
  type: Component,
938
998
  args: [{ selector: 'bb-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
939
999
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbCheckbox), multi: true }
@@ -970,10 +1030,10 @@ class BbCheckboxGroup {
970
1030
  required = false;
971
1031
  grouped = false;
972
1032
  inline = false;
973
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbCheckboxGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
974
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbCheckboxGroup, isStandalone: true, selector: "bb-checkbox-group", inputs: { label: "label", required: ["required", "required", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], inline: ["inline", "inline", booleanAttribute] }, host: { properties: { "class.grouped": "grouped", "class.required": "required", "class.inline": "inline" }, classAttribute: "bb-checkbox-group" }, ngImport: i0, template: "@if (label; as labelContent) {\n <label class=\"bb-checkbox-group-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<div class=\"bb-checkbox-group-items\">\n <ng-content select=\"bb-checkbox\"></ng-content>\n</div>\n", styles: [".bb-checkbox-group{display:block}.bb-checkbox-group.grouped{margin-bottom:1.5rem}.bb-checkbox-group.required>.bb-checkbox-group-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-checkbox-group-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color, #525252);font-weight:var(--bb-form-label-font-weight, 400);font-size:var(--bb-form-label-font-size, .875rem)}.bb-checkbox-group-items{display:flex;flex-direction:column}.bb-checkbox-group-items:not(:empty){margin-bottom:.25rem}.bb-checkbox-group-items>*{margin-bottom:.25rem}@media only screen and (min-width: 768px){.bb-checkbox-group.inline>.bb-checkbox-group-items{flex-wrap:wrap;flex-direction:row}.bb-checkbox-group.inline>.bb-checkbox-group-items>*:not(:last-child){margin-right:.75rem}}\n"], dependencies: [{ kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1033
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbCheckboxGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
1034
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbCheckboxGroup, isStandalone: true, selector: "bb-checkbox-group", inputs: { label: "label", required: ["required", "required", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], inline: ["inline", "inline", booleanAttribute] }, host: { properties: { "class.grouped": "grouped", "class.required": "required", "class.inline": "inline" }, classAttribute: "bb-checkbox-group" }, ngImport: i0, template: "@if (label; as labelContent) {\n <label class=\"bb-checkbox-group-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<div class=\"bb-checkbox-group-items\">\n <ng-content select=\"bb-checkbox\"></ng-content>\n</div>\n", styles: [".bb-checkbox-group{display:block}.bb-checkbox-group.grouped{margin-bottom:1.5rem}.bb-checkbox-group.required>.bb-checkbox-group-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-checkbox-group-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color, #525252);font-weight:var(--bb-form-label-font-weight, 400);font-size:var(--bb-form-label-font-size, .875rem)}.bb-checkbox-group-items{display:flex;flex-direction:column}.bb-checkbox-group-items:not(:empty){margin-bottom:.25rem}.bb-checkbox-group-items>*{margin-bottom:.25rem}@media only screen and (min-width: 768px){.bb-checkbox-group.inline>.bb-checkbox-group-items{flex-wrap:wrap;flex-direction:row}.bb-checkbox-group.inline>.bb-checkbox-group-items>*:not(:last-child){margin-right:.75rem}}\n"], dependencies: [{ kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
975
1035
  }
976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbCheckboxGroup, decorators: [{
1036
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbCheckboxGroup, decorators: [{
977
1037
  type: Component,
978
1038
  args: [{ selector: 'bb-checkbox-group', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
979
1039
  'class': 'bb-checkbox-group',
@@ -1047,12 +1107,12 @@ class BbRadioGroup {
1047
1107
  onErrorChange(error) {
1048
1108
  this.error = !!error;
1049
1109
  }
1050
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbRadioGroup, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1051
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbRadioGroup, isStandalone: true, selector: "bb-radio-group", inputs: { label: "label", disabled: ["disabled", "disabled", booleanAttribute], readonly: ["readonly", "readonly", booleanAttribute], required: ["required", "required", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], inline: ["inline", "inline", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute], value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.disabled": "disabled", "class.readonly": "readonly", "class.grouped": "grouped", "class.required": "required", "class.inline": "inline", "class.error": "error" }, classAttribute: "bb-radio-group" }, providers: [
1110
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbRadioGroup, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1111
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbRadioGroup, isStandalone: true, selector: "bb-radio-group", inputs: { label: "label", disabled: ["disabled", "disabled", booleanAttribute], readonly: ["readonly", "readonly", booleanAttribute], required: ["required", "required", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], inline: ["inline", "inline", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute], value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.disabled": "disabled", "class.readonly": "readonly", "class.grouped": "grouped", "class.required": "required", "class.inline": "inline", "class.error": "error" }, classAttribute: "bb-radio-group" }, providers: [
1052
1112
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbRadioGroup), multi: true }
1053
1113
  ], ngImport: i0, template: "@if (label; as labelContent) {\n <label class=\"bb-radio-group-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<div class=\"bb-radio-group-items\">\n <ng-content select=\"bb-radio-button\"></ng-content>\n</div>\n\n<!-- The error component. -->\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n", styles: [".bb-radio-group{display:block}.bb-radio-group.grouped{margin-bottom:1.5rem}.bb-radio-group.readonly{pointer-events:none}.bb-radio-group.error>.bb-radio-group-label{color:#c23934}.bb-radio-group.required>.bb-radio-group-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-radio-group-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color, #525252);font-weight:var(--bb-form-label-font-weight, 400);font-size:var(--bb-form-label-font-size, .875rem)}.bb-radio-group-items{display:flex;flex-direction:column}.bb-radio-group-items:not(:empty){margin-bottom:.25rem}.bb-radio-group-items>*{margin-bottom:.25rem}@media only screen and (min-width: 768px){.bb-radio-group.inline>.bb-radio-group-items{flex-wrap:wrap;flex-direction:row}.bb-radio-group.inline>.bb-radio-group-items>*:not(:last-child){margin-right:.75rem}}\n"], dependencies: [{ kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "component", type: BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1054
1114
  }
1055
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbRadioGroup, decorators: [{
1115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbRadioGroup, decorators: [{
1056
1116
  type: Component,
1057
1117
  args: [{ selector: 'bb-radio-group', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
1058
1118
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbRadioGroup), multi: true }
@@ -1119,10 +1179,10 @@ class BbRadioButton {
1119
1179
  constructor(_radioGroup) {
1120
1180
  this._radioGroup = _radioGroup;
1121
1181
  }
1122
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbRadioButton, deps: [{ token: BbRadioGroup }], target: i0.ɵɵFactoryTarget.Component });
1123
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbRadioButton, isStandalone: true, selector: "bb-radio-button", inputs: { value: "value", hideText: ["hideText", "hideText", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, host: { listeners: { "click": "onClick()", "keydown.space": "onSpacePressed()" }, properties: { "class.disabled": "disabled", "tabindex": "disabled ? -1 : 0", "class.selected": "this.selected" }, classAttribute: "bb-radio-button" }, ngImport: i0, template: "<div class=\"bb-radio-button-indicator\"></div>\n@if (!hideText) {\n <span class=\"bb-radio-button-text\"><ng-content></ng-content></span>\n}\n\n", styles: [".bb-radio-button{display:flex;cursor:pointer;align-items:center}.bb-radio-button:not(.disabled):focus>.bb-radio-button-indicator{box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem var(--bb-radio-outline-color)}.bb-radio-button.selected>.bb-radio-button-indicator{border-color:var(--bb-radio-border-color)}.bb-radio-button.selected>.bb-radio-button-indicator:after{opacity:1;transform:none}.bb-radio-button.disabled{-webkit-user-select:none;user-select:none}.bb-radio-button.disabled>.bb-radio-button-indicator{border-color:gray}.bb-radio-button.disabled>.bb-radio-button-indicator:after{background-color:gray}.bb-radio-button.disabled>.bb-radio-button-text{color:gray}.bb-radio-button-indicator{display:flex;width:1.25rem;height:1.25rem;min-width:1.25rem;border-radius:50%;min-height:1.25rem;align-items:center;justify-content:center;border:1px solid hsl(213,8%,74%);transition:box-shadow .25s cubic-bezier(0,0,.2,1),border-color .25s cubic-bezier(0,0,.2,1);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-radio-button-indicator:after{opacity:0;content:\"\";display:block;border-radius:50%;transform:scale(0);width:.625rem;height:.625rem;background-color:var(--bb-radio-indicator-color);transition:transform .12s cubic-bezier(0,0,.2,1),opacity .12s cubic-bezier(0,0,.2,1)}.bb-radio-button-text{color:#111;font-size:1rem;font-weight:400;padding-left:.5rem}.bb-radio-button-text>small{display:block;line-height:1.5;font-size:.8125rem;margin-top:.125rem;color:#758795}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1182
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbRadioButton, deps: [{ token: BbRadioGroup }], target: i0.ɵɵFactoryTarget.Component });
1183
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbRadioButton, isStandalone: true, selector: "bb-radio-button", inputs: { value: "value", hideText: ["hideText", "hideText", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, host: { listeners: { "click": "onClick()", "keydown.space": "onSpacePressed()" }, properties: { "class.disabled": "disabled", "tabindex": "disabled ? -1 : 0", "class.selected": "this.selected" }, classAttribute: "bb-radio-button" }, ngImport: i0, template: "<div class=\"bb-radio-button-indicator\"></div>\n@if (!hideText) {\n <span class=\"bb-radio-button-text\"><ng-content></ng-content></span>\n}\n\n", styles: [".bb-radio-button{display:flex;cursor:pointer;align-items:center}.bb-radio-button:not(.disabled):focus>.bb-radio-button-indicator{box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem var(--bb-radio-outline-color)}.bb-radio-button.selected>.bb-radio-button-indicator{border-color:var(--bb-radio-border-color)}.bb-radio-button.selected>.bb-radio-button-indicator:after{opacity:1;transform:none}.bb-radio-button.disabled{-webkit-user-select:none;user-select:none}.bb-radio-button.disabled>.bb-radio-button-indicator{border-color:gray}.bb-radio-button.disabled>.bb-radio-button-indicator:after{background-color:gray}.bb-radio-button.disabled>.bb-radio-button-text{color:gray}.bb-radio-button-indicator{display:flex;width:1.25rem;height:1.25rem;min-width:1.25rem;border-radius:50%;min-height:1.25rem;align-items:center;justify-content:center;border:1px solid hsl(213,8%,74%);transition:box-shadow .25s cubic-bezier(0,0,.2,1),border-color .25s cubic-bezier(0,0,.2,1);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-radio-button-indicator:after{opacity:0;content:\"\";display:block;border-radius:50%;transform:scale(0);width:.625rem;height:.625rem;background-color:var(--bb-radio-indicator-color);transition:transform .12s cubic-bezier(0,0,.2,1),opacity .12s cubic-bezier(0,0,.2,1)}.bb-radio-button-text{color:#111;font-size:1rem;font-weight:400;padding-left:.5rem}.bb-radio-button-text>small{display:block;line-height:1.5;font-size:.8125rem;margin-top:.125rem;color:#758795}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1124
1184
  }
1125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbRadioButton, decorators: [{
1185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbRadioButton, decorators: [{
1126
1186
  type: Component,
1127
1187
  args: [{ selector: 'bb-radio-button', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
1128
1188
  'class': 'bb-radio-button',
@@ -1262,10 +1322,10 @@ class BbAvatar {
1262
1322
  console?.warn?.(`BbAvatar: Unsupported tintColor "${value}" was used.`);
1263
1323
  return null;
1264
1324
  };
1265
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
1266
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbAvatar, isStandalone: true, selector: "bb-avatar", inputs: { size: ["size", "size", numberAttribute], src: "src", title: "title", tintColor: "tintColor" }, host: { attributes: { "role": "img" }, properties: { "style.width.rem": "size", "style.min-width.rem": "size", "style.height.rem": "size", "style.min-height.rem": "size", "style.font-size.rem": "size * 0.42", "style.color": "color", "style.background-color": "backgroundColor", "attr.title": "this.title" }, classAttribute: "bb-avatar" }, ngImport: i0, template: "@switch (state$ | async) {\n @case ('image') {\n <img [src]=\"src\"\n [alt]=\"initials\"\n (error)=\"state$?.next('initials')\"\n class=\"bb-avatar-image\">\n }\n @default {\n {{ initials }}\n }\n}\n", styles: [".bb-avatar{line-height:1;overflow:hidden;font-weight:500;-webkit-user-select:none;user-select:none;position:relative;border-radius:50%;align-items:center;display:inline-flex;justify-content:center}.bb-avatar.rounded{border-radius:4px}.bb-avatar.square{border-radius:0}.bb-avatar-image{width:100%;height:100%;object-fit:cover;position:absolute}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1325
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbAvatar, deps: [], target: i0.ɵɵFactoryTarget.Component });
1326
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbAvatar, isStandalone: true, selector: "bb-avatar", inputs: { size: ["size", "size", numberAttribute], src: "src", title: "title", tintColor: "tintColor" }, host: { attributes: { "role": "img" }, properties: { "style.width.rem": "size", "style.min-width.rem": "size", "style.height.rem": "size", "style.min-height.rem": "size", "style.font-size.rem": "size * 0.42", "style.color": "color", "style.background-color": "backgroundColor", "attr.title": "this.title" }, classAttribute: "bb-avatar" }, ngImport: i0, template: "@switch (state$ | async) {\n @case ('image') {\n <img [src]=\"src\"\n [alt]=\"initials\"\n (error)=\"state$?.next('initials')\"\n class=\"bb-avatar-image\">\n }\n @default {\n {{ initials }}\n }\n}\n", styles: [".bb-avatar{line-height:1;overflow:hidden;font-weight:500;-webkit-user-select:none;user-select:none;position:relative;border-radius:50%;align-items:center;display:inline-flex;justify-content:center}.bb-avatar.rounded{border-radius:4px}.bb-avatar.square{border-radius:0}.bb-avatar-image{width:100%;height:100%;object-fit:cover;position:absolute}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1267
1327
  }
1268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbAvatar, decorators: [{
1328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbAvatar, decorators: [{
1269
1329
  type: Component,
1270
1330
  args: [{ selector: 'bb-avatar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, host: {
1271
1331
  'class': 'bb-avatar',
@@ -1313,7 +1373,6 @@ class BbMultiFileControl {
1313
1373
  delete = new EventEmitter();
1314
1374
  // State.
1315
1375
  value = [];
1316
- dragging = false;
1317
1376
  error = false;
1318
1377
  // Callbacks.
1319
1378
  onTouchedCallback = () => ({});
@@ -1325,24 +1384,6 @@ class BbMultiFileControl {
1325
1384
  get showList() {
1326
1385
  return this.value?.length > 0 || this.items?.length > 0;
1327
1386
  }
1328
- onDrag(event, isHovered) {
1329
- event.preventDefault();
1330
- event.stopPropagation();
1331
- if (this.disabled) {
1332
- return;
1333
- }
1334
- this.dragging = isHovered;
1335
- }
1336
- onDrop(event) {
1337
- event.preventDefault();
1338
- event.stopPropagation();
1339
- if (this.disabled) {
1340
- return;
1341
- }
1342
- this.dragging = false;
1343
- const files = event?.['dataTransfer'].files;
1344
- return this.addFiles(files);
1345
- }
1346
1387
  downloadFile(file) {
1347
1388
  return this._files.download(file, file?.name);
1348
1389
  }
@@ -1351,13 +1392,9 @@ class BbMultiFileControl {
1351
1392
  element?.click();
1352
1393
  }
1353
1394
  onFileChange(event) {
1354
- if (this.disabled) {
1355
- return;
1356
- }
1357
- const files = event.target?.['files'];
1395
+ const files = Array.from(event.target?.['files']);
1358
1396
  this.addFiles(files);
1359
1397
  this.fileInput.nativeElement.value = null;
1360
- this.onChangeCallback?.(this.value);
1361
1398
  }
1362
1399
  deleteFile(index) {
1363
1400
  this.value = this.value?.filter((_, i) => i !== index) ?? [];
@@ -1380,31 +1417,43 @@ class BbMultiFileControl {
1380
1417
  this.error = !!error;
1381
1418
  }
1382
1419
  validate({ value }) {
1383
- // TODO(@Stan): file size validation + file type validation
1384
- return null;
1420
+ const regexString = (this.accept || '*')
1421
+ .replace(/\*/g, '.\*')
1422
+ .replace(/,/g, '|');
1423
+ const mimeTypeRegex = new RegExp(regexString);
1424
+ const errors = (value ?? []).reduce((previous, current, index) => {
1425
+ const isValid = this.isFileLike(current) && mimeTypeRegex.test(current?.type);
1426
+ if (isValid) {
1427
+ return previous;
1428
+ }
1429
+ return { ...previous, [index]: true };
1430
+ }, {});
1431
+ return Object.keys(errors)?.length > 0 ? { invalidFiles: errors } : null;
1385
1432
  }
1386
1433
  addFiles(files) {
1434
+ if (this.disabled) {
1435
+ return;
1436
+ }
1387
1437
  for (let index = 0; index < files?.length; index++) {
1388
1438
  const file = files?.[index] ?? null;
1389
- if (!(this.isFile(file) || this.isBlob(file))) {
1439
+ if (!this.isFileLike(file)) {
1390
1440
  continue;
1391
1441
  }
1392
1442
  this.value.push(file);
1393
1443
  }
1444
+ this.onChangeCallback?.(this.value);
1394
1445
  }
1395
- isFile(input) {
1396
- return 'File' in window && input instanceof File;
1397
- }
1398
- isBlob(input) {
1399
- return 'Blob' in window && input instanceof Blob;
1446
+ isFileLike(input) {
1447
+ return 'File' in window && input instanceof File
1448
+ || 'Blob' in window && input instanceof Blob;
1400
1449
  }
1401
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbMultiFileControl, deps: [{ token: i1$1.Files }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1402
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbMultiFileControl, isStandalone: true, selector: "bb-multi-file-control", inputs: { label: "label", hint: "hint", accept: "accept", grouped: ["grouped", "grouped", booleanAttribute], required: ["required", "required", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute], items: "items" }, outputs: { delete: "delete" }, host: { listeners: { "dragover": "onDrag($event,true)", "dragleave": "onDrag($event,false)", "drop": "onDrop($event)" }, properties: { "class.required": "required", "class.disabled": "disabled", "class.grouped": "grouped", "class.dragging": "dragging", "class.error": "error" }, classAttribute: "bb-multi-file-control" }, providers: [
1450
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbMultiFileControl, deps: [{ token: i1$1.Files }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1451
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbMultiFileControl, isStandalone: true, selector: "bb-multi-file-control", inputs: { label: "label", hint: "hint", accept: "accept", grouped: ["grouped", "grouped", booleanAttribute], required: ["required", "required", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute], items: "items" }, outputs: { delete: "delete" }, host: { properties: { "class.required": "required", "class.disabled": "disabled", "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-multi-file-control" }, providers: [
1403
1452
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbMultiFileControl), multi: true },
1404
1453
  { provide: NG_VALIDATORS, useExisting: BbMultiFileControl, multi: true }
1405
- ], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<!-- The label of the input. -->\n@if (label; as labelContent) {\n <label [for]=\"labelId\"\n class=\"bb-multi-file-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<input #fileInput\n [id]=\"labelId\"\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-multi-file-control-input\"\n type=\"file\"\n tabindex=\"-1\"\n multiple>\n\n<div class=\"bb-multi-file-control-container\">\n @if (showList) {\n <ul class=\"bb-multi-file-control-list\">\n @for (item of items; track item?.id) {\n <li class=\"bb-multi-file-control-item\">\n <i class=\"bb-multi-file-control-icon attach-horizontal\"></i>\n <a [href]=\"item?.url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"bb-multi-file-control-item-content\">{{ item?.label }}</a>\n @if (!disabled && delete?.observed) {\n <button (click)=\"delete?.emit(item)\"\n type=\"button\"\n class=\"bb-multi-file-control-item-button\">\n <i class=\"bb-multi-file-control-icon clear\"></i>\n </button>\n }\n </li>\n }\n @for (file of value; track $index) {\n <li class=\"bb-multi-file-control-item\">\n <i class=\"bb-multi-file-control-icon attach-horizontal\"></i>\n <button (click)=\"downloadFile(file)\"\n class=\"bb-multi-file-control-item-content\"\n type=\"button\">\n {{ file?.name }}\n </button>\n @if (!disabled) {\n <button (click)=\"deleteFile($index)\"\n type=\"button\"\n class=\"bb-multi-file-control-item-button\">\n <i class=\"bb-multi-file-control-icon clear\"></i>\n </button>\n }\n </li>\n }\n </ul>\n } @else if (!disabled) {\n <i class=\"bb-multi-file-control-icon attach-vertical\"></i>\n <p [bb-localize-string]=\"'multi-file-control.choose_file_text' | bbLocalize\"\n class=\"bb-multi-file-control-empty\">\n <label *bbLocalizeTemplate=\"'label'\"\n [for]=\"labelId\">{{ 'multi-file-control.choose_file' | bbLocalize }}</label>\n </p>\n }\n @if (!disabled) {\n <button (click)=\"openFileDialog()\"\n type=\"button\"\n class=\"primary small bb-multi-file-control-button\"\n bb-button>\n <i class=\"bb-multi-file-control-icon add\" suffix></i>\n {{ 'multi-file-control.choose_file' | bbLocalize }}\n </button>\n }\n</div>\n\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n\n<!-- The file picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-multi-file-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-multi-file-control{display:block}.bb-multi-file-control.grouped{margin-bottom:1.5rem}.bb-multi-file-control.required>.bb-multi-file-control-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-multi-file-control.dragging>.bb-multi-file-control-container{border-color:#757e8a;box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-multi-file-control-box-shadow)}.bb-multi-file-control.disabled>.bb-multi-file-control-container{cursor:default;color:gray;background-color:#e6e6e6}.bb-multi-file-control-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-multi-file-control-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-multi-file-control-container{width:100%;display:flex;color:#111;padding:.5rem;overflow:hidden;min-height:7.5rem;align-items:center;border-radius:.5rem;flex-direction:column;justify-content:center;background-color:#fff;border:1px solid hsl(213,8%,74%);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-multi-file-control-button{margin-top:.5rem}.bb-multi-file-control-list{flex:1;width:100%;overflow:hidden}.bb-multi-file-control-empty{flex:1;width:100%;color:#758795;display:block;font-weight:400;line-height:1.5;text-align:center;font-size:.875rem}.bb-multi-file-control-empty>label{cursor:pointer;display:inline;font-size:inherit;font-weight:inherit;text-decoration:underline;color:var(--bb-multi-file-control-color)}.bb-multi-file-control-item{height:2rem;display:flex;max-width:100%;overflow:hidden;align-items:center;white-space:nowrap;border-radius:.5rem;text-overflow:ellipsis;padding:0 .25rem 0 .5rem;border:1px solid hsl(213,8%,74%);background-color:#edf4fd}.bb-multi-file-control-item:not(:last-child){margin-bottom:.25rem}.bb-multi-file-control-item-content{flex:1;padding:0;border:none;max-width:100%;margin:0 .5rem;overflow:hidden;appearance:none;text-align:left;font-weight:400;font-size:.875rem;white-space:nowrap;text-decoration:none;text-overflow:ellipsis;background-color:transparent}.bb-multi-file-control-item-content,.bb-multi-file-control-item-content:visited{color:#0a305c}.bb-multi-file-control-item-content:hover,.bb-multi-file-control-item-content:focus{text-decoration:underline}.bb-multi-file-control-item-button{padding:0;width:1.5rem;display:flex;height:1.5rem;align-items:center;border-radius:.25rem;justify-content:center;border:1px solid hsl(0,73%,25%);background-color:#b51c1c}.bb-multi-file-control-item-button:hover,.bb-multi-file-control-item-button:focus{background-color:#a81a1a}.bb-multi-file-control-item-button:active{background-color:#9a1818}.bb-multi-file-control-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}.bb-multi-file-control-icon{width:1.25rem;height:1.25rem;display:inline-flex;background-size:contain;background-repeat:no-repeat;background-position:center center}.bb-multi-file-control-icon.add{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23fff\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.attach-vertical{width:1.5rem;height:1.5rem;margin-bottom:.5rem;background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23758795\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.attach-horizontal{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.clear{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23fff\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/%3E%3C/svg%3E')}\n"], dependencies: [{ kind: "component", type: BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }, { kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "component", type: BbButton, selector: "button[bb-button]", inputs: ["disabled", "loading"], exportAs: ["bbButton"] }, { kind: "pipe", type: BbLocalize, name: "bbLocalize" }, { kind: "directive", type: BbLocalizeTemplate, selector: "[bbLocalizeTemplate]", inputs: ["bbLocalizeTemplate"] }, { kind: "component", type: BbLocalizeString, selector: "[bb-localize-string]", inputs: ["substitutions", "bb-localize-string"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1454
+ ], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<!-- The label of the input. -->\n@if (label; as labelContent) {\n <label [for]=\"labelId\"\n class=\"bb-multi-file-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<input #fileInput\n [id]=\"labelId\"\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-multi-file-control-input\"\n type=\"file\"\n tabindex=\"-1\"\n multiple>\n\n<div [bbFileDropDisabled]=\"disabled\"\n (bbFileDrop)=\"addFiles($event)\"\n class=\"bb-multi-file-control-container\">\n @if (showList) {\n <ul class=\"bb-multi-file-control-list\">\n @for (item of items; track item?.id) {\n <li class=\"bb-multi-file-control-item\">\n <i class=\"bb-multi-file-control-icon attach-horizontal\"></i>\n <a [href]=\"item?.url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"bb-multi-file-control-item-content\">{{ item?.label }}</a>\n @if (!disabled && delete?.observed) {\n <button (click)=\"delete?.emit(item)\"\n type=\"button\"\n class=\"bb-multi-file-control-item-button\">\n <i class=\"bb-multi-file-control-icon clear\"></i>\n </button>\n }\n </li>\n }\n @for (file of value; track $index) {\n <li class=\"bb-multi-file-control-item\">\n <i class=\"bb-multi-file-control-icon attach-horizontal\"></i>\n <button (click)=\"downloadFile(file)\"\n class=\"bb-multi-file-control-item-content\"\n type=\"button\">\n {{ file?.name }}\n </button>\n @if (!disabled) {\n <button (click)=\"deleteFile($index)\"\n type=\"button\"\n class=\"bb-multi-file-control-item-button\">\n <i class=\"bb-multi-file-control-icon clear\"></i>\n </button>\n }\n </li>\n }\n </ul>\n } @else if (!disabled) {\n <i class=\"bb-multi-file-control-icon attach-vertical\"></i>\n <p [bb-localize-string]=\"'multi-file-control.choose_file_text' | bbLocalize\"\n class=\"bb-multi-file-control-empty\">\n <label *bbLocalizeTemplate=\"'label'\"\n [for]=\"labelId\">{{ 'multi-file-control.choose_file' | bbLocalize }}</label>\n </p>\n }\n @if (!disabled) {\n <button (click)=\"openFileDialog()\"\n type=\"button\"\n class=\"primary small bb-multi-file-control-button\"\n bb-button>\n <i class=\"bb-multi-file-control-icon add\" suffix></i>\n {{ 'multi-file-control.choose_file' | bbLocalize }}\n </button>\n }\n</div>\n\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n\n<!-- The file picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-multi-file-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-multi-file-control{display:block}.bb-multi-file-control.grouped{margin-bottom:1.5rem}.bb-multi-file-control.required>.bb-multi-file-control-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-multi-file-control-container.is-hovered{border-color:#757e8a;box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-multi-file-control-box-shadow)}.bb-multi-file-control.disabled>.bb-multi-file-control-container{cursor:default;color:gray;background-color:#e6e6e6}.bb-multi-file-control-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-multi-file-control-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-multi-file-control-container{width:100%;display:flex;color:#111;padding:.5rem;overflow:hidden;min-height:7.5rem;align-items:center;border-radius:.5rem;flex-direction:column;justify-content:center;background-color:#fff;border:1px solid hsl(213,8%,74%);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-multi-file-control-button{margin-top:.5rem}.bb-multi-file-control-list{flex:1;width:100%;overflow:hidden}.bb-multi-file-control-empty{flex:1;width:100%;color:#758795;display:block;font-weight:400;line-height:1.5;text-align:center;font-size:.875rem}.bb-multi-file-control-empty>label{cursor:pointer;display:inline;font-size:inherit;font-weight:inherit;text-decoration:underline;color:var(--bb-multi-file-control-color)}.bb-multi-file-control-item{height:2rem;display:flex;max-width:100%;overflow:hidden;align-items:center;white-space:nowrap;border-radius:.5rem;text-overflow:ellipsis;padding:0 .25rem 0 .5rem;border:1px solid hsl(213,8%,74%);background-color:#edf4fd}.bb-multi-file-control-item:not(:last-child){margin-bottom:.25rem}.bb-multi-file-control-item-content{flex:1;padding:0;border:none;max-width:100%;margin:0 .5rem;overflow:hidden;appearance:none;text-align:left;font-weight:400;font-size:.875rem;white-space:nowrap;text-decoration:none;text-overflow:ellipsis;background-color:transparent}.bb-multi-file-control-item-content,.bb-multi-file-control-item-content:visited{color:#0a305c}.bb-multi-file-control-item-content:hover,.bb-multi-file-control-item-content:focus{text-decoration:underline}.bb-multi-file-control-item-button{padding:0;width:1.5rem;display:flex;height:1.5rem;align-items:center;border-radius:.25rem;justify-content:center;border:1px solid hsl(0,73%,25%);background-color:#b51c1c}.bb-multi-file-control-item-button:hover,.bb-multi-file-control-item-button:focus{background-color:#a81a1a}.bb-multi-file-control-item-button:active{background-color:#9a1818}.bb-multi-file-control-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}.bb-multi-file-control-icon{width:1.25rem;height:1.25rem;display:inline-flex;background-size:contain;background-repeat:no-repeat;background-position:center center}.bb-multi-file-control-icon.add{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23fff\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.attach-vertical{width:1.5rem;height:1.5rem;margin-bottom:.5rem;background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23758795\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.attach-horizontal{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.clear{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23fff\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/%3E%3C/svg%3E')}\n"], dependencies: [{ kind: "component", type: BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }, { kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "component", type: BbButton, selector: "button[bb-button]", inputs: ["disabled", "loading"], exportAs: ["bbButton"] }, { kind: "pipe", type: BbLocalize, name: "bbLocalize" }, { kind: "directive", type: BbLocalizeTemplate, selector: "[bbLocalizeTemplate]", inputs: ["bbLocalizeTemplate"] }, { kind: "component", type: BbLocalizeString, selector: "[bb-localize-string]", inputs: ["substitutions", "bb-localize-string"] }, { kind: "directive", type: BbFileDrop, selector: "[bbFileDrop]", inputs: ["bbFileDropDisabled"], outputs: ["bbFileDrop"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1406
1455
  }
1407
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbMultiFileControl, decorators: [{
1456
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbMultiFileControl, decorators: [{
1408
1457
  type: Component,
1409
1458
  args: [{ selector: 'bb-multi-file-control', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
1410
1459
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbMultiFileControl), multi: true },
@@ -1414,9 +1463,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
1414
1463
  '[class.required]': 'required',
1415
1464
  '[class.disabled]': 'disabled',
1416
1465
  '[class.grouped]': 'grouped',
1417
- '[class.dragging]': 'dragging',
1418
1466
  '[class.error]': 'error'
1419
- }, preserveWhitespaces: false, standalone: true, imports: [BbFormError, BbTemplate, BbButton, BbLocalize, BbLocalizeTemplate, BbLocalizeString], template: "<!-- The label of the input. -->\n@if (label; as labelContent) {\n <label [for]=\"labelId\"\n class=\"bb-multi-file-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<input #fileInput\n [id]=\"labelId\"\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-multi-file-control-input\"\n type=\"file\"\n tabindex=\"-1\"\n multiple>\n\n<div class=\"bb-multi-file-control-container\">\n @if (showList) {\n <ul class=\"bb-multi-file-control-list\">\n @for (item of items; track item?.id) {\n <li class=\"bb-multi-file-control-item\">\n <i class=\"bb-multi-file-control-icon attach-horizontal\"></i>\n <a [href]=\"item?.url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"bb-multi-file-control-item-content\">{{ item?.label }}</a>\n @if (!disabled && delete?.observed) {\n <button (click)=\"delete?.emit(item)\"\n type=\"button\"\n class=\"bb-multi-file-control-item-button\">\n <i class=\"bb-multi-file-control-icon clear\"></i>\n </button>\n }\n </li>\n }\n @for (file of value; track $index) {\n <li class=\"bb-multi-file-control-item\">\n <i class=\"bb-multi-file-control-icon attach-horizontal\"></i>\n <button (click)=\"downloadFile(file)\"\n class=\"bb-multi-file-control-item-content\"\n type=\"button\">\n {{ file?.name }}\n </button>\n @if (!disabled) {\n <button (click)=\"deleteFile($index)\"\n type=\"button\"\n class=\"bb-multi-file-control-item-button\">\n <i class=\"bb-multi-file-control-icon clear\"></i>\n </button>\n }\n </li>\n }\n </ul>\n } @else if (!disabled) {\n <i class=\"bb-multi-file-control-icon attach-vertical\"></i>\n <p [bb-localize-string]=\"'multi-file-control.choose_file_text' | bbLocalize\"\n class=\"bb-multi-file-control-empty\">\n <label *bbLocalizeTemplate=\"'label'\"\n [for]=\"labelId\">{{ 'multi-file-control.choose_file' | bbLocalize }}</label>\n </p>\n }\n @if (!disabled) {\n <button (click)=\"openFileDialog()\"\n type=\"button\"\n class=\"primary small bb-multi-file-control-button\"\n bb-button>\n <i class=\"bb-multi-file-control-icon add\" suffix></i>\n {{ 'multi-file-control.choose_file' | bbLocalize }}\n </button>\n }\n</div>\n\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n\n<!-- The file picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-multi-file-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-multi-file-control{display:block}.bb-multi-file-control.grouped{margin-bottom:1.5rem}.bb-multi-file-control.required>.bb-multi-file-control-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-multi-file-control.dragging>.bb-multi-file-control-container{border-color:#757e8a;box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-multi-file-control-box-shadow)}.bb-multi-file-control.disabled>.bb-multi-file-control-container{cursor:default;color:gray;background-color:#e6e6e6}.bb-multi-file-control-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-multi-file-control-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-multi-file-control-container{width:100%;display:flex;color:#111;padding:.5rem;overflow:hidden;min-height:7.5rem;align-items:center;border-radius:.5rem;flex-direction:column;justify-content:center;background-color:#fff;border:1px solid hsl(213,8%,74%);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-multi-file-control-button{margin-top:.5rem}.bb-multi-file-control-list{flex:1;width:100%;overflow:hidden}.bb-multi-file-control-empty{flex:1;width:100%;color:#758795;display:block;font-weight:400;line-height:1.5;text-align:center;font-size:.875rem}.bb-multi-file-control-empty>label{cursor:pointer;display:inline;font-size:inherit;font-weight:inherit;text-decoration:underline;color:var(--bb-multi-file-control-color)}.bb-multi-file-control-item{height:2rem;display:flex;max-width:100%;overflow:hidden;align-items:center;white-space:nowrap;border-radius:.5rem;text-overflow:ellipsis;padding:0 .25rem 0 .5rem;border:1px solid hsl(213,8%,74%);background-color:#edf4fd}.bb-multi-file-control-item:not(:last-child){margin-bottom:.25rem}.bb-multi-file-control-item-content{flex:1;padding:0;border:none;max-width:100%;margin:0 .5rem;overflow:hidden;appearance:none;text-align:left;font-weight:400;font-size:.875rem;white-space:nowrap;text-decoration:none;text-overflow:ellipsis;background-color:transparent}.bb-multi-file-control-item-content,.bb-multi-file-control-item-content:visited{color:#0a305c}.bb-multi-file-control-item-content:hover,.bb-multi-file-control-item-content:focus{text-decoration:underline}.bb-multi-file-control-item-button{padding:0;width:1.5rem;display:flex;height:1.5rem;align-items:center;border-radius:.25rem;justify-content:center;border:1px solid hsl(0,73%,25%);background-color:#b51c1c}.bb-multi-file-control-item-button:hover,.bb-multi-file-control-item-button:focus{background-color:#a81a1a}.bb-multi-file-control-item-button:active{background-color:#9a1818}.bb-multi-file-control-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}.bb-multi-file-control-icon{width:1.25rem;height:1.25rem;display:inline-flex;background-size:contain;background-repeat:no-repeat;background-position:center center}.bb-multi-file-control-icon.add{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23fff\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.attach-vertical{width:1.5rem;height:1.5rem;margin-bottom:.5rem;background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23758795\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.attach-horizontal{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.clear{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23fff\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/%3E%3C/svg%3E')}\n"] }]
1467
+ }, preserveWhitespaces: false, standalone: true, imports: [BbFormError, BbTemplate, BbButton, BbLocalize, BbLocalizeTemplate, BbLocalizeString, BbFileDrop], template: "<!-- The label of the input. -->\n@if (label; as labelContent) {\n <label [for]=\"labelId\"\n class=\"bb-multi-file-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<input #fileInput\n [id]=\"labelId\"\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-multi-file-control-input\"\n type=\"file\"\n tabindex=\"-1\"\n multiple>\n\n<div [bbFileDropDisabled]=\"disabled\"\n (bbFileDrop)=\"addFiles($event)\"\n class=\"bb-multi-file-control-container\">\n @if (showList) {\n <ul class=\"bb-multi-file-control-list\">\n @for (item of items; track item?.id) {\n <li class=\"bb-multi-file-control-item\">\n <i class=\"bb-multi-file-control-icon attach-horizontal\"></i>\n <a [href]=\"item?.url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"bb-multi-file-control-item-content\">{{ item?.label }}</a>\n @if (!disabled && delete?.observed) {\n <button (click)=\"delete?.emit(item)\"\n type=\"button\"\n class=\"bb-multi-file-control-item-button\">\n <i class=\"bb-multi-file-control-icon clear\"></i>\n </button>\n }\n </li>\n }\n @for (file of value; track $index) {\n <li class=\"bb-multi-file-control-item\">\n <i class=\"bb-multi-file-control-icon attach-horizontal\"></i>\n <button (click)=\"downloadFile(file)\"\n class=\"bb-multi-file-control-item-content\"\n type=\"button\">\n {{ file?.name }}\n </button>\n @if (!disabled) {\n <button (click)=\"deleteFile($index)\"\n type=\"button\"\n class=\"bb-multi-file-control-item-button\">\n <i class=\"bb-multi-file-control-icon clear\"></i>\n </button>\n }\n </li>\n }\n </ul>\n } @else if (!disabled) {\n <i class=\"bb-multi-file-control-icon attach-vertical\"></i>\n <p [bb-localize-string]=\"'multi-file-control.choose_file_text' | bbLocalize\"\n class=\"bb-multi-file-control-empty\">\n <label *bbLocalizeTemplate=\"'label'\"\n [for]=\"labelId\">{{ 'multi-file-control.choose_file' | bbLocalize }}</label>\n </p>\n }\n @if (!disabled) {\n <button (click)=\"openFileDialog()\"\n type=\"button\"\n class=\"primary small bb-multi-file-control-button\"\n bb-button>\n <i class=\"bb-multi-file-control-icon add\" suffix></i>\n {{ 'multi-file-control.choose_file' | bbLocalize }}\n </button>\n }\n</div>\n\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n\n<!-- The file picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-multi-file-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-multi-file-control{display:block}.bb-multi-file-control.grouped{margin-bottom:1.5rem}.bb-multi-file-control.required>.bb-multi-file-control-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-multi-file-control-container.is-hovered{border-color:#757e8a;box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-multi-file-control-box-shadow)}.bb-multi-file-control.disabled>.bb-multi-file-control-container{cursor:default;color:gray;background-color:#e6e6e6}.bb-multi-file-control-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-multi-file-control-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-multi-file-control-container{width:100%;display:flex;color:#111;padding:.5rem;overflow:hidden;min-height:7.5rem;align-items:center;border-radius:.5rem;flex-direction:column;justify-content:center;background-color:#fff;border:1px solid hsl(213,8%,74%);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-multi-file-control-button{margin-top:.5rem}.bb-multi-file-control-list{flex:1;width:100%;overflow:hidden}.bb-multi-file-control-empty{flex:1;width:100%;color:#758795;display:block;font-weight:400;line-height:1.5;text-align:center;font-size:.875rem}.bb-multi-file-control-empty>label{cursor:pointer;display:inline;font-size:inherit;font-weight:inherit;text-decoration:underline;color:var(--bb-multi-file-control-color)}.bb-multi-file-control-item{height:2rem;display:flex;max-width:100%;overflow:hidden;align-items:center;white-space:nowrap;border-radius:.5rem;text-overflow:ellipsis;padding:0 .25rem 0 .5rem;border:1px solid hsl(213,8%,74%);background-color:#edf4fd}.bb-multi-file-control-item:not(:last-child){margin-bottom:.25rem}.bb-multi-file-control-item-content{flex:1;padding:0;border:none;max-width:100%;margin:0 .5rem;overflow:hidden;appearance:none;text-align:left;font-weight:400;font-size:.875rem;white-space:nowrap;text-decoration:none;text-overflow:ellipsis;background-color:transparent}.bb-multi-file-control-item-content,.bb-multi-file-control-item-content:visited{color:#0a305c}.bb-multi-file-control-item-content:hover,.bb-multi-file-control-item-content:focus{text-decoration:underline}.bb-multi-file-control-item-button{padding:0;width:1.5rem;display:flex;height:1.5rem;align-items:center;border-radius:.25rem;justify-content:center;border:1px solid hsl(0,73%,25%);background-color:#b51c1c}.bb-multi-file-control-item-button:hover,.bb-multi-file-control-item-button:focus{background-color:#a81a1a}.bb-multi-file-control-item-button:active{background-color:#9a1818}.bb-multi-file-control-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}.bb-multi-file-control-icon{width:1.25rem;height:1.25rem;display:inline-flex;background-size:contain;background-repeat:no-repeat;background-position:center center}.bb-multi-file-control-icon.add{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23fff\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.attach-vertical{width:1.5rem;height:1.5rem;margin-bottom:.5rem;background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23758795\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.attach-horizontal{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"/%3E%3C/svg%3E')}.bb-multi-file-control-icon.clear{background-image:url('data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" fill=\"%23fff\" viewBox=\"0 0 24 24\"%3E%3Cpath d=\"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/%3E%3C/svg%3E')}\n"] }]
1420
1468
  }], ctorParameters: () => [{ type: i1$1.Files }, { type: i0.ChangeDetectorRef }], propDecorators: { fileInput: [{
1421
1469
  type: ViewChild,
1422
1470
  args: ['fileInput', { static: true }]
@@ -1442,15 +1490,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
1442
1490
  type: Input
1443
1491
  }], delete: [{
1444
1492
  type: Output
1445
- }], onDrag: [{
1446
- type: HostListener,
1447
- args: ['dragover', ['$event', 'true']]
1448
- }, {
1449
- type: HostListener,
1450
- args: ['dragleave', ['$event', 'false']]
1451
- }], onDrop: [{
1452
- type: HostListener,
1453
- args: ['drop', ['$event']]
1454
1493
  }] } });
1455
1494
 
1456
1495
  let nextUniqueId = 0;
@@ -1465,13 +1504,11 @@ class BbFilePicker {
1465
1504
  hint = null;
1466
1505
  accept = null;
1467
1506
  showImages = true;
1468
- allowDragging = true;
1469
1507
  grouped = false;
1470
1508
  required = false;
1471
1509
  disabled = false;
1472
1510
  hideErrors = false;
1473
1511
  // State.
1474
- hovered = false;
1475
1512
  error = false;
1476
1513
  value$ = new BehaviorSubject({});
1477
1514
  // Callbacks.
@@ -1486,30 +1523,6 @@ class BbFilePicker {
1486
1523
  this.value$.next({ file: value });
1487
1524
  this.valueChange.emit(value);
1488
1525
  }
1489
- onDrag(event, isHovered) {
1490
- // Validate the input can support drag.
1491
- if (!this.allowDragging || this.disabled) {
1492
- return;
1493
- }
1494
- // Prevent the default event action
1495
- // and start the hovering.
1496
- this.preventDefault(event);
1497
- this.hovered = isHovered;
1498
- }
1499
- onDrop(event) {
1500
- // Validate the input can support drag.
1501
- if (!this.allowDragging || this.disabled) {
1502
- return;
1503
- }
1504
- // Prevent the default event action
1505
- // and stop the hovering.
1506
- this.preventDefault(event);
1507
- this.hovered = false;
1508
- // Save the file.
1509
- this.saveFile(event['dataTransfer'].files);
1510
- // Run the on change callback.
1511
- this.onChangeCallback(this.value);
1512
- }
1513
1526
  onButtonPressed(file) {
1514
1527
  if (file) {
1515
1528
  this.value = null;
@@ -1525,16 +1538,12 @@ class BbFilePicker {
1525
1538
  && this.fileInput.nativeElement.click();
1526
1539
  }
1527
1540
  onFileChange(event) {
1528
- // Validate the input is not disabled.
1529
1541
  if (this.disabled) {
1530
1542
  return;
1531
1543
  }
1532
1544
  // Extract the file from the event.
1533
- const fileList = this.getFileListFromEvent(event);
1534
- // Save the file.
1535
- this.saveFile(fileList);
1536
- // Run the on change callback.
1537
- this.onChangeCallback(this.value);
1545
+ const files = this.getFilesFromEvent(event);
1546
+ this.saveFile(files);
1538
1547
  // Clear the file input.
1539
1548
  if (this.fileInput && this.fileInput.nativeElement) {
1540
1549
  this.fileInput.nativeElement.value = '';
@@ -1564,37 +1573,25 @@ class BbFilePicker {
1564
1573
  .replace(/,/g, '|');
1565
1574
  const mimeTypeRegex = new RegExp(regexString);
1566
1575
  const isNotValid = (typeof File === 'undefined') || !(value instanceof File) || !mimeTypeRegex.test(value?.type);
1567
- return isNotValid && {
1568
- invalidFileType: true
1569
- };
1576
+ return isNotValid && { invalidFileType: true };
1570
1577
  }
1571
- saveFile = (files) => {
1572
- // Validate the files exist.
1573
- if (!files) {
1574
- return;
1575
- }
1576
- // Retrieve the first file.
1577
- const file = files[0];
1578
- // Validate the first file exists.
1579
- if (!file) {
1578
+ saveFile(files) {
1579
+ const file = files?.[0] ?? null;
1580
+ if (!file || this.disabled) {
1580
1581
  return;
1581
1582
  }
1582
- // Save the file.
1583
1583
  this.value = file;
1584
- };
1585
- getFileListFromEvent = (event) => {
1584
+ this.onChangeCallback(this.value);
1585
+ }
1586
+ getFilesFromEvent(event) {
1586
1587
  const element = event.target;
1587
1588
  if (!element) {
1588
1589
  return null;
1589
1590
  }
1590
- return element.files;
1591
- };
1592
- preventDefault = (event) => {
1593
- event.preventDefault();
1594
- event.stopPropagation();
1595
- };
1596
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFilePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
1597
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbFilePicker, isStandalone: true, selector: "bb-file-picker", inputs: { label: "label", hint: "hint", accept: "accept", showImages: "showImages", allowDragging: "allowDragging", grouped: ["grouped", "grouped", booleanAttribute], required: ["required", "required", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute], value: "value" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "dragover": "onDrag($event,true)", "dragleave": "onDrag($event,false)", "drop": "onDrop($event)" }, properties: { "class.required": "required", "class.disabled": "disabled", "class.grouped": "grouped", "class.hovered": "hovered", "class.error": "error" }, classAttribute: "bb-file-picker" }, providers: [
1591
+ return Array.from(element.files);
1592
+ }
1593
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFilePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
1594
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbFilePicker, isStandalone: true, selector: "bb-file-picker", inputs: { label: "label", hint: "hint", accept: "accept", showImages: "showImages", grouped: ["grouped", "grouped", booleanAttribute], required: ["required", "required", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute], value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.required": "required", "class.disabled": "disabled", "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-file-picker" }, providers: [
1598
1595
  {
1599
1596
  provide: NG_VALUE_ACCESSOR,
1600
1597
  useExisting: forwardRef(() => BbFilePicker),
@@ -1605,7 +1602,7 @@ class BbFilePicker {
1605
1602
  useExisting: BbFilePicker,
1606
1603
  multi: true
1607
1604
  }
1608
- ], queries: [{ propertyName: "extraTemplate", first: true, predicate: ["extra"], descendants: true }], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<!-- The label of the input. -->\n@if (label; as labelContent) {\n <label [for]=\"labelId\"\n class=\"bb-file-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<!-- The input that can open the file picker. -->\n<input #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-file-picker-input\"\n type=\"file\"\n tabindex=\"-1\">\n\n@if (value$ | async; as data) {\n <div class=\"bb-file-picker-wrapper\">\n <!-- The button that accepts files. -->\n <div class=\"bb-file-picker-container\">\n <button [class.destructive]=\"!!data?.file\"\n [class.standalone]=\"!allowDragging\"\n [disabled]=\"disabled\"\n [id]=\"labelId\"\n (click)=\"onButtonPressed(data?.file)\"\n type=\"button\"\n class=\"bb-file-picker-button\">\n <ng-container *ngTemplateOutlet=\"data?.file ? closeIcon : uploadIcon\"></ng-container>\n {{ (data?.file ? 'file-picker.remove' : 'file-picker.choose') | bbLocalize }}\n </button>\n @if (allowDragging) {\n <div class=\"bb-file-picker-zone\">\n {{ 'file-picker.drop' | bbLocalize }}\n </div>\n }\n </div>\n\n @if (!!extraTemplate) {\n <ng-container *ngTemplateOutlet=\"extraTemplate; context: {$implicit: data?.file}\"></ng-container>\n }\n\n @if (showImages) {\n @if (data?.file | bbFileImage | async; as image) {\n <div class=\"bb-file-picker-image-container\">\n <div class=\"bb-file-picker-image-wrapper\">\n <div [@bbFilePickerImageAnimation]=\"true\"\n [style.padding-top.%]=\"image?.aspectRatio * 100\"\n [style.background-image]=\"image?.background\"\n class=\"bb-file-picker-image\">\n </div>\n </div>\n </div>\n }\n }\n\n <!-- Extra information of the file. -->\n <div [class.visible]=\"!!data?.file\"\n class=\"bb-file-picker-info\">\n @if (data?.file?.name; as name) {\n <span>{{ name }}</span>\n }\n @if (data?.file?.size; as size) {\n <span>{{ size | bbFileSize }}</span>\n }\n </div>\n </div>\n}\n\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n\n<!-- The file picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-file-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n\n<!-- Upload icon. -->\n<ng-template #uploadIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"1.5rem\"\n height=\"1.5rem\"\n viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5a2.5 2.5 0 010-5H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"></path>\n <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\n </svg>\n</ng-template>\n\n<!-- Close icon. -->\n<ng-template #closeIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"1.5rem\"\n height=\"1.5rem\"\n viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n</ng-template>\n", styles: [".bb-file-picker{display:block}.bb-file-picker.full>.bb-file-picker-wrapper{width:100%}.bb-file-picker:not(.disabled) .bb-file-picker-button{background-color:#fff}.bb-file-picker:not(.disabled):focus>.bb-file-picker-wrapper,.bb-file-picker:not(.disabled).hovered>.bb-file-picker-wrapper{box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-file-picker-box-shadow)}.bb-file-picker.grouped{margin-bottom:1.5rem}.bb-file-picker.disabled>.bb-file-picker-wrapper{cursor:default;pointer-events:none;color:gray;background-color:#e6e6e6}.bb-file-picker.required>.bb-file-picker-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-file-picker.error>.bb-file-picker-label{color:#c23934}.bb-file-picker.error>.bb-file-picker-hint{display:none}.bb-file-picker.error>.bb-file-picker-wrapper{border:1px solid hsl(0,73%,30%);background-color:#f8d3d3;box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-file-picker.error .bb-file-picker-button{background-color:transparent}.bb-file-picker-wrapper{max-width:100%;-webkit-user-select:none;user-select:none;display:inline-flex;border-radius:.5rem;flex-direction:column;background-color:#fff;border:1px solid hsl(213,8%,74%);transition:box-shadow .2s cubic-bezier(0,0,.2,1);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-file-picker-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-file-picker-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-file-picker-container{min-height:2.5rem;display:inline-flex}.bb-file-picker-button{margin:0;z-index:1;border:none;line-height:1;cursor:pointer;font-size:1rem;appearance:none;font-weight:400;padding:0 .75rem;align-items:center;white-space:nowrap;display:inline-flex;background-color:transparent;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;color:var(--bb-file-picker-color);border-right:1px solid hsl(213,8%,74%);transition:box-shadow .2s cubic-bezier(0,0,.2,1)}.bb-file-picker-button:focus{box-shadow:var(--bb-file-picker-box-shadow)}.bb-file-picker-button:disabled{cursor:default}.bb-file-picker-button.destructive{color:#f55656}.bb-file-picker-button.standalone{width:100%;border-right:none;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.bb-file-picker-icon{margin-right:.25rem}.bb-file-picker-zone{flex:1;color:#758795;line-height:1.125;font-size:.875rem;align-items:center;display:inline-flex;padding:.5rem .75rem;justify-content:center}.bb-file-picker-info{height:0;color:#848f99;overflow:hidden;padding:0 .75rem;align-items:center;line-height:2.5rem;display:inline-flex;border-top:0 solid #b6bbc1;background-color:transparent;transition:height .2s cubic-bezier(0,0,.2,1)}.bb-file-picker-info.visible{height:2.5rem;border-top-width:1px}.bb-file-picker-info>span{opacity:.4;max-width:100%;overflow:hidden;font-size:.875rem;white-space:nowrap;text-overflow:ellipsis}.bb-file-picker-info>span:first-child{flex:1}.bb-file-picker-info>span:last-child{margin-left:.75rem}.bb-file-picker-image-container{overflow:hidden;border-top:1px solid hsl(213,8%,74%)}.bb-file-picker-image-wrapper{width:100%;max-width:40%;margin:1.5rem auto}.bb-file-picker-image{width:100%;display:flex;overflow:hidden;position:relative;will-change:opacity;border-radius:.5rem;background-size:cover;background-position:center;background-repeat:no-repeat}.bb-file-picker-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"], dependencies: [{ kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: BbLocalize, name: "bbLocalize" }, { kind: "component", type: BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }, { kind: "pipe", type: BbFileSize, name: "bbFileSize" }, { kind: "pipe", type: BbFileImage, name: "bbFileImage" }], animations: [
1605
+ ], queries: [{ propertyName: "extraTemplate", first: true, predicate: ["extra"], descendants: true }], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<!-- The label of the input. -->\n@if (label; as labelContent) {\n <label [for]=\"labelId\"\n class=\"bb-file-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<!-- The input that can open the file picker. -->\n<input #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-file-picker-input\"\n type=\"file\"\n tabindex=\"-1\">\n\n@if (value$ | async; as data) {\n <div [bbFileDropDisabled]=\"disabled\"\n (bbFileDrop)=\"saveFile($event)\"\n class=\"bb-file-picker-wrapper\">\n <!-- The button that accepts files. -->\n <div class=\"bb-file-picker-container\">\n <button [class.destructive]=\"!!data?.file\"\n [disabled]=\"disabled\"\n [id]=\"labelId\"\n (click)=\"onButtonPressed(data?.file)\"\n type=\"button\"\n class=\"bb-file-picker-button\">\n <ng-container *ngTemplateOutlet=\"data?.file ? closeIcon : uploadIcon\"></ng-container>\n {{ (data?.file ? 'file-picker.remove' : 'file-picker.choose') | bbLocalize }}\n </button>\n <div class=\"bb-file-picker-zone\">\n {{ 'file-picker.drop' | bbLocalize }}\n </div>\n </div>\n\n @if (!!extraTemplate) {\n <ng-container *ngTemplateOutlet=\"extraTemplate; context: {$implicit: data?.file}\"></ng-container>\n }\n\n @if (showImages) {\n @if (data?.file | bbFileImage | async; as image) {\n <div class=\"bb-file-picker-image-container\">\n <div class=\"bb-file-picker-image-wrapper\">\n <div [@bbFilePickerImageAnimation]=\"true\"\n [style.padding-top.%]=\"image?.aspectRatio * 100\"\n [style.background-image]=\"image?.background\"\n class=\"bb-file-picker-image\">\n </div>\n </div>\n </div>\n }\n }\n\n <!-- Extra information of the file. -->\n <div [class.visible]=\"!!data?.file\"\n class=\"bb-file-picker-info\">\n @if (data?.file?.name; as name) {\n <span>{{ name }}</span>\n }\n @if (data?.file?.size; as size) {\n <span>{{ size | bbFileSize }}</span>\n }\n </div>\n </div>\n}\n\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n\n<!-- The file picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-file-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n\n<!-- Upload icon. -->\n<ng-template #uploadIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"1.5rem\"\n height=\"1.5rem\"\n viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5a2.5 2.5 0 010-5H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"></path>\n <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\n </svg>\n</ng-template>\n\n<!-- Close icon. -->\n<ng-template #closeIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"1.5rem\"\n height=\"1.5rem\"\n viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n</ng-template>\n", styles: [".bb-file-picker{display:block}.bb-file-picker.full>.bb-file-picker-wrapper{width:100%}.bb-file-picker:not(.disabled) .bb-file-picker-button{background-color:#fff}.bb-file-picker:focus,.bb-file-picker-wrapper.is-hovered{box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-file-picker-box-shadow)}.bb-file-picker.grouped{margin-bottom:1.5rem}.bb-file-picker.disabled>.bb-file-picker-wrapper{cursor:default;pointer-events:none;color:gray;background-color:#e6e6e6}.bb-file-picker.required>.bb-file-picker-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-file-picker.error>.bb-file-picker-label{color:#c23934}.bb-file-picker.error>.bb-file-picker-hint{display:none}.bb-file-picker.error>.bb-file-picker-wrapper{border:1px solid hsl(0,73%,30%);background-color:#f8d3d3;box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-file-picker.error .bb-file-picker-button{background-color:transparent}.bb-file-picker-wrapper{max-width:100%;-webkit-user-select:none;user-select:none;display:inline-flex;flex-direction:column;border-radius:var(--bb-file-picker-border-radius);border:1px solid var(--bb-file-picker-border-color);transition:box-shadow .2s cubic-bezier(0,0,.2,1);background-color:var(--bb-file-picker-background-color);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-file-picker-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-file-picker-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-file-picker-container{min-height:2.5rem;display:inline-flex}.bb-file-picker-button{margin:0;z-index:1;border:none;line-height:1;cursor:pointer;font-size:1rem;appearance:none;font-weight:400;padding:0 .75rem;align-items:center;white-space:nowrap;display:inline-flex;background-color:transparent;color:var(--bb-file-picker-color);border-right:1px solid hsl(213,8%,74%);transition:box-shadow .2s cubic-bezier(0,0,.2,1);border-top-left-radius:var(--bb-file-picker-border-radius);border-bottom-left-radius:var(--bb-file-picker-border-radius)}.bb-file-picker-button:focus{box-shadow:var(--bb-file-picker-box-shadow)}.bb-file-picker-button:disabled{cursor:default}.bb-file-picker-button.destructive{color:#f55656}.bb-file-picker-icon{margin-right:.25rem}.bb-file-picker-zone{flex:1;color:#758795;line-height:1.125;font-size:.875rem;align-items:center;display:inline-flex;padding:.5rem .75rem;justify-content:center}.bb-file-picker-info{height:0;color:#848f99;overflow:hidden;padding:0 .75rem;align-items:center;line-height:2.5rem;display:inline-flex;border-top:0 solid #b6bbc1;background-color:transparent;transition:height .2s cubic-bezier(0,0,.2,1)}.bb-file-picker-info.visible{height:2.5rem;border-top-width:1px}.bb-file-picker-info>span{opacity:.4;max-width:100%;overflow:hidden;font-size:.875rem;white-space:nowrap;text-overflow:ellipsis}.bb-file-picker-info>span:first-child{flex:1}.bb-file-picker-info>span:last-child{margin-left:.75rem}.bb-file-picker-image-container{overflow:hidden;border-top:1px solid hsl(213,8%,74%)}.bb-file-picker-image-wrapper{width:100%;max-width:40%;margin:1.5rem auto}.bb-file-picker-image{width:100%;display:flex;overflow:hidden;position:relative;will-change:opacity;background-size:cover;background-position:center;background-repeat:no-repeat;border-radius:var(--bb-file-picker-border-radius)}.bb-file-picker-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"], dependencies: [{ kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: BbLocalize, name: "bbLocalize" }, { kind: "component", type: BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }, { kind: "pipe", type: BbFileSize, name: "bbFileSize" }, { kind: "pipe", type: BbFileImage, name: "bbFileImage" }, { kind: "directive", type: BbFileDrop, selector: "[bbFileDrop]", inputs: ["bbFileDropDisabled"], outputs: ["bbFileDrop"] }], animations: [
1609
1606
  trigger('bbFilePickerImageAnimation', [
1610
1607
  transition(':enter', [
1611
1608
  style({ opacity: 0 }),
@@ -1617,7 +1614,7 @@ class BbFilePicker {
1617
1614
  ])
1618
1615
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1619
1616
  }
1620
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbFilePicker, decorators: [{
1617
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbFilePicker, decorators: [{
1621
1618
  type: Component,
1622
1619
  args: [{ selector: 'bb-file-picker', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
1623
1620
  {
@@ -1635,7 +1632,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
1635
1632
  '[class.required]': 'required',
1636
1633
  '[class.disabled]': 'disabled',
1637
1634
  '[class.grouped]': 'grouped',
1638
- '[class.hovered]': 'hovered',
1639
1635
  '[class.error]': 'error'
1640
1636
  }, animations: [
1641
1637
  trigger('bbFilePickerImageAnimation', [
@@ -1647,7 +1643,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
1647
1643
  animate('200ms', style({ opacity: 0 }))
1648
1644
  ])
1649
1645
  ])
1650
- ], preserveWhitespaces: false, imports: [BbTemplate, AsyncPipe, NgTemplateOutlet, BbLocalize, BbFormError, BbFileSize, BbFileImage], standalone: true, template: "<!-- The label of the input. -->\n@if (label; as labelContent) {\n <label [for]=\"labelId\"\n class=\"bb-file-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<!-- The input that can open the file picker. -->\n<input #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-file-picker-input\"\n type=\"file\"\n tabindex=\"-1\">\n\n@if (value$ | async; as data) {\n <div class=\"bb-file-picker-wrapper\">\n <!-- The button that accepts files. -->\n <div class=\"bb-file-picker-container\">\n <button [class.destructive]=\"!!data?.file\"\n [class.standalone]=\"!allowDragging\"\n [disabled]=\"disabled\"\n [id]=\"labelId\"\n (click)=\"onButtonPressed(data?.file)\"\n type=\"button\"\n class=\"bb-file-picker-button\">\n <ng-container *ngTemplateOutlet=\"data?.file ? closeIcon : uploadIcon\"></ng-container>\n {{ (data?.file ? 'file-picker.remove' : 'file-picker.choose') | bbLocalize }}\n </button>\n @if (allowDragging) {\n <div class=\"bb-file-picker-zone\">\n {{ 'file-picker.drop' | bbLocalize }}\n </div>\n }\n </div>\n\n @if (!!extraTemplate) {\n <ng-container *ngTemplateOutlet=\"extraTemplate; context: {$implicit: data?.file}\"></ng-container>\n }\n\n @if (showImages) {\n @if (data?.file | bbFileImage | async; as image) {\n <div class=\"bb-file-picker-image-container\">\n <div class=\"bb-file-picker-image-wrapper\">\n <div [@bbFilePickerImageAnimation]=\"true\"\n [style.padding-top.%]=\"image?.aspectRatio * 100\"\n [style.background-image]=\"image?.background\"\n class=\"bb-file-picker-image\">\n </div>\n </div>\n </div>\n }\n }\n\n <!-- Extra information of the file. -->\n <div [class.visible]=\"!!data?.file\"\n class=\"bb-file-picker-info\">\n @if (data?.file?.name; as name) {\n <span>{{ name }}</span>\n }\n @if (data?.file?.size; as size) {\n <span>{{ size | bbFileSize }}</span>\n }\n </div>\n </div>\n}\n\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n\n<!-- The file picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-file-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n\n<!-- Upload icon. -->\n<ng-template #uploadIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"1.5rem\"\n height=\"1.5rem\"\n viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5a2.5 2.5 0 010-5H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"></path>\n <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\n </svg>\n</ng-template>\n\n<!-- Close icon. -->\n<ng-template #closeIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"1.5rem\"\n height=\"1.5rem\"\n viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n</ng-template>\n", styles: [".bb-file-picker{display:block}.bb-file-picker.full>.bb-file-picker-wrapper{width:100%}.bb-file-picker:not(.disabled) .bb-file-picker-button{background-color:#fff}.bb-file-picker:not(.disabled):focus>.bb-file-picker-wrapper,.bb-file-picker:not(.disabled).hovered>.bb-file-picker-wrapper{box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-file-picker-box-shadow)}.bb-file-picker.grouped{margin-bottom:1.5rem}.bb-file-picker.disabled>.bb-file-picker-wrapper{cursor:default;pointer-events:none;color:gray;background-color:#e6e6e6}.bb-file-picker.required>.bb-file-picker-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-file-picker.error>.bb-file-picker-label{color:#c23934}.bb-file-picker.error>.bb-file-picker-hint{display:none}.bb-file-picker.error>.bb-file-picker-wrapper{border:1px solid hsl(0,73%,30%);background-color:#f8d3d3;box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-file-picker.error .bb-file-picker-button{background-color:transparent}.bb-file-picker-wrapper{max-width:100%;-webkit-user-select:none;user-select:none;display:inline-flex;border-radius:.5rem;flex-direction:column;background-color:#fff;border:1px solid hsl(213,8%,74%);transition:box-shadow .2s cubic-bezier(0,0,.2,1);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-file-picker-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-file-picker-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-file-picker-container{min-height:2.5rem;display:inline-flex}.bb-file-picker-button{margin:0;z-index:1;border:none;line-height:1;cursor:pointer;font-size:1rem;appearance:none;font-weight:400;padding:0 .75rem;align-items:center;white-space:nowrap;display:inline-flex;background-color:transparent;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;color:var(--bb-file-picker-color);border-right:1px solid hsl(213,8%,74%);transition:box-shadow .2s cubic-bezier(0,0,.2,1)}.bb-file-picker-button:focus{box-shadow:var(--bb-file-picker-box-shadow)}.bb-file-picker-button:disabled{cursor:default}.bb-file-picker-button.destructive{color:#f55656}.bb-file-picker-button.standalone{width:100%;border-right:none;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.bb-file-picker-icon{margin-right:.25rem}.bb-file-picker-zone{flex:1;color:#758795;line-height:1.125;font-size:.875rem;align-items:center;display:inline-flex;padding:.5rem .75rem;justify-content:center}.bb-file-picker-info{height:0;color:#848f99;overflow:hidden;padding:0 .75rem;align-items:center;line-height:2.5rem;display:inline-flex;border-top:0 solid #b6bbc1;background-color:transparent;transition:height .2s cubic-bezier(0,0,.2,1)}.bb-file-picker-info.visible{height:2.5rem;border-top-width:1px}.bb-file-picker-info>span{opacity:.4;max-width:100%;overflow:hidden;font-size:.875rem;white-space:nowrap;text-overflow:ellipsis}.bb-file-picker-info>span:first-child{flex:1}.bb-file-picker-info>span:last-child{margin-left:.75rem}.bb-file-picker-image-container{overflow:hidden;border-top:1px solid hsl(213,8%,74%)}.bb-file-picker-image-wrapper{width:100%;max-width:40%;margin:1.5rem auto}.bb-file-picker-image{width:100%;display:flex;overflow:hidden;position:relative;will-change:opacity;border-radius:.5rem;background-size:cover;background-position:center;background-repeat:no-repeat}.bb-file-picker-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"] }]
1646
+ ], preserveWhitespaces: false, imports: [BbTemplate, AsyncPipe, NgTemplateOutlet, BbLocalize, BbFormError, BbFileSize, BbFileImage, BbFileDrop], standalone: true, template: "<!-- The label of the input. -->\n@if (label; as labelContent) {\n <label [for]=\"labelId\"\n class=\"bb-file-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n<!-- The input that can open the file picker. -->\n<input #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-file-picker-input\"\n type=\"file\"\n tabindex=\"-1\">\n\n@if (value$ | async; as data) {\n <div [bbFileDropDisabled]=\"disabled\"\n (bbFileDrop)=\"saveFile($event)\"\n class=\"bb-file-picker-wrapper\">\n <!-- The button that accepts files. -->\n <div class=\"bb-file-picker-container\">\n <button [class.destructive]=\"!!data?.file\"\n [disabled]=\"disabled\"\n [id]=\"labelId\"\n (click)=\"onButtonPressed(data?.file)\"\n type=\"button\"\n class=\"bb-file-picker-button\">\n <ng-container *ngTemplateOutlet=\"data?.file ? closeIcon : uploadIcon\"></ng-container>\n {{ (data?.file ? 'file-picker.remove' : 'file-picker.choose') | bbLocalize }}\n </button>\n <div class=\"bb-file-picker-zone\">\n {{ 'file-picker.drop' | bbLocalize }}\n </div>\n </div>\n\n @if (!!extraTemplate) {\n <ng-container *ngTemplateOutlet=\"extraTemplate; context: {$implicit: data?.file}\"></ng-container>\n }\n\n @if (showImages) {\n @if (data?.file | bbFileImage | async; as image) {\n <div class=\"bb-file-picker-image-container\">\n <div class=\"bb-file-picker-image-wrapper\">\n <div [@bbFilePickerImageAnimation]=\"true\"\n [style.padding-top.%]=\"image?.aspectRatio * 100\"\n [style.background-image]=\"image?.background\"\n class=\"bb-file-picker-image\">\n </div>\n </div>\n </div>\n }\n }\n\n <!-- Extra information of the file. -->\n <div [class.visible]=\"!!data?.file\"\n class=\"bb-file-picker-info\">\n @if (data?.file?.name; as name) {\n <span>{{ name }}</span>\n }\n @if (data?.file?.size; as size) {\n <span>{{ size | bbFileSize }}</span>\n }\n </div>\n </div>\n}\n\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n\n<!-- The file picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-file-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n\n<!-- Upload icon. -->\n<ng-template #uploadIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"1.5rem\"\n height=\"1.5rem\"\n viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5a2.5 2.5 0 010-5H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"></path>\n <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\n </svg>\n</ng-template>\n\n<!-- Close icon. -->\n<ng-template #closeIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"1.5rem\"\n height=\"1.5rem\"\n viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\"\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n</ng-template>\n", styles: [".bb-file-picker{display:block}.bb-file-picker.full>.bb-file-picker-wrapper{width:100%}.bb-file-picker:not(.disabled) .bb-file-picker-button{background-color:#fff}.bb-file-picker:focus,.bb-file-picker-wrapper.is-hovered{box-shadow:0 .375rem .375rem -.375rem #0000001a,var(--bb-file-picker-box-shadow)}.bb-file-picker.grouped{margin-bottom:1.5rem}.bb-file-picker.disabled>.bb-file-picker-wrapper{cursor:default;pointer-events:none;color:gray;background-color:#e6e6e6}.bb-file-picker.required>.bb-file-picker-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-file-picker.error>.bb-file-picker-label{color:#c23934}.bb-file-picker.error>.bb-file-picker-hint{display:none}.bb-file-picker.error>.bb-file-picker-wrapper{border:1px solid hsl(0,73%,30%);background-color:#f8d3d3;box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-file-picker.error .bb-file-picker-button{background-color:transparent}.bb-file-picker-wrapper{max-width:100%;-webkit-user-select:none;user-select:none;display:inline-flex;flex-direction:column;border-radius:var(--bb-file-picker-border-radius);border:1px solid var(--bb-file-picker-border-color);transition:box-shadow .2s cubic-bezier(0,0,.2,1);background-color:var(--bb-file-picker-background-color);box-shadow:0 .375rem .375rem -.375rem #0000001a}.bb-file-picker-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color);font-size:var(--bb-form-label-font-size);font-weight:var(--bb-form-label-font-weight)}.bb-file-picker-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-file-picker-container{min-height:2.5rem;display:inline-flex}.bb-file-picker-button{margin:0;z-index:1;border:none;line-height:1;cursor:pointer;font-size:1rem;appearance:none;font-weight:400;padding:0 .75rem;align-items:center;white-space:nowrap;display:inline-flex;background-color:transparent;color:var(--bb-file-picker-color);border-right:1px solid hsl(213,8%,74%);transition:box-shadow .2s cubic-bezier(0,0,.2,1);border-top-left-radius:var(--bb-file-picker-border-radius);border-bottom-left-radius:var(--bb-file-picker-border-radius)}.bb-file-picker-button:focus{box-shadow:var(--bb-file-picker-box-shadow)}.bb-file-picker-button:disabled{cursor:default}.bb-file-picker-button.destructive{color:#f55656}.bb-file-picker-icon{margin-right:.25rem}.bb-file-picker-zone{flex:1;color:#758795;line-height:1.125;font-size:.875rem;align-items:center;display:inline-flex;padding:.5rem .75rem;justify-content:center}.bb-file-picker-info{height:0;color:#848f99;overflow:hidden;padding:0 .75rem;align-items:center;line-height:2.5rem;display:inline-flex;border-top:0 solid #b6bbc1;background-color:transparent;transition:height .2s cubic-bezier(0,0,.2,1)}.bb-file-picker-info.visible{height:2.5rem;border-top-width:1px}.bb-file-picker-info>span{opacity:.4;max-width:100%;overflow:hidden;font-size:.875rem;white-space:nowrap;text-overflow:ellipsis}.bb-file-picker-info>span:first-child{flex:1}.bb-file-picker-info>span:last-child{margin-left:.75rem}.bb-file-picker-image-container{overflow:hidden;border-top:1px solid hsl(213,8%,74%)}.bb-file-picker-image-wrapper{width:100%;max-width:40%;margin:1.5rem auto}.bb-file-picker-image{width:100%;display:flex;overflow:hidden;position:relative;will-change:opacity;background-size:cover;background-position:center;background-repeat:no-repeat;border-radius:var(--bb-file-picker-border-radius)}.bb-file-picker-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"] }]
1651
1647
  }], propDecorators: { fileInput: [{
1652
1648
  type: ViewChild,
1653
1649
  args: ['fileInput', { static: true }]
@@ -1662,8 +1658,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
1662
1658
  type: Input
1663
1659
  }], showImages: [{
1664
1660
  type: Input
1665
- }], allowDragging: [{
1666
- type: Input
1667
1661
  }], grouped: [{
1668
1662
  type: Input,
1669
1663
  args: [{ transform: booleanAttribute }]
@@ -1680,15 +1674,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
1680
1674
  type: Input
1681
1675
  }], valueChange: [{
1682
1676
  type: Output
1683
- }], onDrag: [{
1684
- type: HostListener,
1685
- args: ['dragover', ['$event', 'true']]
1686
- }, {
1687
- type: HostListener,
1688
- args: ['dragleave', ['$event', 'false']]
1689
- }], onDrop: [{
1690
- type: HostListener,
1691
- args: ['drop', ['$event']]
1692
1677
  }] } });
1693
1678
 
1694
1679
  class BbImagePicker {
@@ -1761,8 +1746,8 @@ class BbImagePicker {
1761
1746
  setDisabledState(isDisabled) {
1762
1747
  this.disabled = isDisabled;
1763
1748
  }
1764
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbImagePicker, deps: [{ token: i1$1.ImageConverter }], target: i0.ɵɵFactoryTarget.Component });
1765
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbImagePicker, isStandalone: true, selector: "bb-image-picker", inputs: { label: "label", placeholder: "placeholder", styleDimensions: "styleDimensions", cropDimensions: "cropDimensions", disabled: ["disabled", "disabled", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.disabled": "disabled", "class.grouped": "grouped" }, classAttribute: "bb-image-picker" }, providers: [
1749
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbImagePicker, deps: [{ token: i1$1.ImageConverter }], target: i0.ɵɵFactoryTarget.Component });
1750
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbImagePicker, isStandalone: true, selector: "bb-image-picker", inputs: { label: "label", placeholder: "placeholder", styleDimensions: "styleDimensions", cropDimensions: "cropDimensions", disabled: ["disabled", "disabled", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.disabled": "disabled", "class.grouped": "grouped" }, classAttribute: "bb-image-picker" }, providers: [
1766
1751
  {
1767
1752
  provide: NG_VALUE_ACCESSOR,
1768
1753
  useExisting: forwardRef(() => BbImagePicker),
@@ -1770,7 +1755,7 @@ class BbImagePicker {
1770
1755
  }
1771
1756
  ], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<!-- The input that can open the file picker. -->\n<input #fileInput\n (change)=\"onFileChange($event)\"\n class=\"bb-image-picker-input\"\n type=\"file\"\n tabindex=\"-1\"\n accept=\"image/*\">\n\n<span [style.width]=\"styleDimensions?.width || '100%'\"\n [style.height]=\"styleDimensions?.height || '215px'\"\n [style.background-image]=\"image | async\"\n class=\"bb-image-input-image\">\n </span>\n\n@if (label; as labelText) {\n <button (click)=\"openFilePicker()\"\n bb-button\n class=\"bb-image-input-button\"\n type=\"button\">\n {{ labelText }}\n </button>\n}\n", styles: [".bb-image-picker{display:flex;align-items:center;flex-direction:column}.bb-image-picker.circle>.bb-image-input-image{border-radius:50%}.bb-image-picker.grouped{margin-bottom:1.5rem}.bb-image-picker.disabled{opacity:.5;cursor:default;-webkit-user-select:none;user-select:none;pointer-events:none}.bb-image-picker-input{opacity:0;z-index:-1;width:.1px;height:.1px;overflow:hidden;position:absolute}.bb-image-input-image{display:flex;cursor:default;position:relative;align-items:center;border-radius:.25rem;justify-content:center;background:#0003 url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) center center/cover no-repeat}.bb-image-input-button{margin-top:.75rem}\n"], dependencies: [{ kind: "component", type: BbButton, selector: "button[bb-button]", inputs: ["disabled", "loading"], exportAs: ["bbButton"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1772
1757
  }
1773
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbImagePicker, decorators: [{
1758
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbImagePicker, decorators: [{
1774
1759
  type: Component,
1775
1760
  args: [{ selector: 'bb-image-picker', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
1776
1761
  'class': 'bb-image-picker',
@@ -2054,13 +2039,13 @@ class BbDatePicker {
2054
2039
  }
2055
2040
  return value;
2056
2041
  };
2057
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbDatePicker, deps: [{ token: i0.ChangeDetectorRef }, { token: LOCALIZE_ID }], target: i0.ɵɵFactoryTarget.Component });
2058
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BbDatePicker, isStandalone: true, selector: "bb-date-picker", inputs: { label: "label", hint: "hint", dayPlaceholder: "dayPlaceholder", monthPlaceholder: "monthPlaceholder", yearPlaceholder: "yearPlaceholder", required: ["required", "required", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], readonly: ["readonly", "readonly", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], years: "years", value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.required": "required", "class.readonly": "readonly", "class.disabled": "disabled", "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-date-picker" }, providers: [
2042
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbDatePicker, deps: [{ token: i0.ChangeDetectorRef }, { token: LOCALIZE_ID }], target: i0.ɵɵFactoryTarget.Component });
2043
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BbDatePicker, isStandalone: true, selector: "bb-date-picker", inputs: { label: "label", hint: "hint", dayPlaceholder: "dayPlaceholder", monthPlaceholder: "monthPlaceholder", yearPlaceholder: "yearPlaceholder", required: ["required", "required", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], readonly: ["readonly", "readonly", booleanAttribute], hideErrors: ["hideErrors", "hideErrors", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], years: "years", value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.required": "required", "class.readonly": "readonly", "class.disabled": "disabled", "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-date-picker" }, providers: [
2059
2044
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbDatePicker), multi: true },
2060
2045
  { provide: NG_VALIDATORS, useExisting: BbDatePicker, multi: true }
2061
2046
  ], ngImport: i0, template: "<!-- Label of the date picker. -->\n@if (label; as labelContent) {\n <label class=\"bb-date-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">{{ labelContent }}</ng-template>\n </label>\n}\n\n@if (data$ | async; as data) {\n <!-- The form containing the year/month/day fields. -->\n <div [formGroup]=\"form\"\n class=\"bb-date-picker-container\">\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('day')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"day\">\n <option [ngValue]=\"null\">{{ dayPlaceholder }}</option>\n @for (day of data?.days; track day?.value) {\n <option [ngValue]=\"day?.value\">{{ day?.label }}</option>\n }\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('month')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"month\">\n <option [ngValue]=\"null\">{{ monthPlaceholder }}</option>\n @for (month of data?.months; track month?.value) {\n <option [ngValue]=\"month?.value\">{{ month?.label }}</option>\n }\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n @if (data?.years?.length > 0) {\n <select [class.has-value]=\"!!form?.get('year')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"year\">\n <option [ngValue]=\"null\">{{ yearPlaceholder }}</option>\n @for (year of data?.years; track year) {\n <option [ngValue]=\"year\">{{ year }}</option>\n }\n </select>\n } @else {\n <input [placeholder]=\"yearPlaceholder\"\n bbInput\n type=\"text\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n pattern=\"^[0-9]{4}$\"\n formControlName=\"year\"\n autocomplete=\"off\">\n }\n </bb-form-control>\n </div>\n </div>\n}\n\n<!-- The date picker error. -->\n@if (!hideErrors) {\n <bb-form-error (errorChange)=\"onErrorChange($event)\"></bb-form-error>\n}\n<!-- The date picker hint. -->\n@if (hint; as hintContent) {\n <p class=\"bb-date-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">{{ hintContent }}</ng-template>\n </p>\n}\n", styles: [".bb-date-picker{display:block}.bb-date-picker.required>.bb-date-picker-label:after{content:\"*\";font-size:.75rem;vertical-align:top;color:var(--bb-form-label-required-color)}.bb-date-picker.readonly{pointer-events:none}.bb-date-picker.readonly>.bb-date-picker-container>.bb-date-picker-item>.bb-form-control>.bb-form-control-container{cursor:default;border-style:dotted;border-color:#bdc4c9}.bb-date-picker.readonly>.bb-date-picker-container>.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:disabled{opacity:1}.bb-date-picker.grouped{margin-bottom:1.5rem}.bb-date-picker.error>.bb-date-picker-label{color:#c23934}.bb-date-picker.error>.bb-date-picker-container>.bb-date-picker-item>.bb-form-control>.bb-form-control-container{border-color:#841515;background-color:#f8d3d3}.bb-date-picker.error>.bb-date-picker-container>.bb-date-picker-item>.bb-form-control>.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){box-shadow:0 .375rem .375rem -.375rem #0000001a,0 0 0 .1875rem #f8d3d3}.bb-date-picker-label{display:block;margin-bottom:.25rem;color:var(--bb-form-label-color, #525252);font-weight:var(--bb-form-label-font-weight, 400);font-size:var(--bb-form-label-font-size, .875rem)}.bb-date-picker-container{display:flex}.bb-date-picker-item{flex:1}.bb-date-picker-item>.bb-form-control>.bb-form-control-container:has(input:not(:disabled):not(:read-only):focus,select:not(:disabled):focus){z-index:1;position:relative}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select>option:first-child{color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value){color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value)>option:not(:first-child){color:#111}.bb-date-picker-item:not(:first-child):not(:last-child){margin:0 -1px}.bb-date-picker-item:not(:first-child):not(:last-child)>.bb-form-control>.bb-form-control-container{border-radius:0}.bb-date-picker-item:first-child>.bb-form-control>.bb-form-control-container{border-top-right-radius:0;border-bottom-right-radius:0}.bb-date-picker-item:last-child>.bb-form-control>.bb-form-control-container{border-top-left-radius:0;border-bottom-left-radius:0}.bb-date-picker-hint{display:block;line-height:1.5;margin-top:.25rem;font-size:.8125rem;color:#758795}\n"], dependencies: [{ kind: "directive", type: BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: BbFormControl, selector: "bb-form-control", inputs: ["label", "hint", "grouped", "hideErrors"] }, { kind: "directive", type: BbInput, selector: "input[bbInput],textarea[bbInput],select[bbInput]", inputs: ["required"] }, { kind: "component", type: BbFormError, selector: "bb-form-error", inputs: ["control"], outputs: ["errorChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2062
2047
  }
2063
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BbDatePicker, decorators: [{
2048
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BbDatePicker, decorators: [{
2064
2049
  type: Component,
2065
2050
  args: [{ selector: 'bb-date-picker', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
2066
2051
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbDatePicker), multi: true },
@@ -2137,6 +2122,7 @@ function provideElementsConfig(config) {
2137
2122
  maxDate: ({ date }) => ({ token: 'form-control-errors.maxDate', data: { date } }),
2138
2123
  invalidDate: () => 'form-control-errors.invalidDate',
2139
2124
  invalidFileType: () => 'form-control-errors.invalidFileType',
2125
+ invalidFiles: () => 'form-control-errors.invalidFiles',
2140
2126
  minlength: ({ requiredLength, actualLength }) => ({
2141
2127
  token: 'form-control-errors.minlength',
2142
2128
  data: { requiredLength, actualLength }
@@ -2176,6 +2162,7 @@ const IMPORTS_EXPORTS = [
2176
2162
  BbSuffix,
2177
2163
  BbImageUpload,
2178
2164
  BbExtraErrorControls,
2165
+ BbFileDrop,
2179
2166
  // Pipes.
2180
2167
  BbFileSize,
2181
2168
  BbFileImage,
@@ -2207,8 +2194,8 @@ class ElementsModule {
2207
2194
  ]
2208
2195
  };
2209
2196
  }
2210
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2211
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: ElementsModule, imports: [
2197
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2198
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: ElementsModule, imports: [
2212
2199
  // Directives.
2213
2200
  BbFormError,
2214
2201
  BbFormSubmit,
@@ -2218,6 +2205,7 @@ class ElementsModule {
2218
2205
  BbSuffix,
2219
2206
  BbImageUpload,
2220
2207
  BbExtraErrorControls,
2208
+ BbFileDrop,
2221
2209
  // Pipes.
2222
2210
  BbFileSize,
2223
2211
  BbFileImage,
@@ -2248,6 +2236,7 @@ class ElementsModule {
2248
2236
  BbSuffix,
2249
2237
  BbImageUpload,
2250
2238
  BbExtraErrorControls,
2239
+ BbFileDrop,
2251
2240
  // Pipes.
2252
2241
  BbFileSize,
2253
2242
  BbFileImage,
@@ -2269,10 +2258,10 @@ class ElementsModule {
2269
2258
  BbFilePicker,
2270
2259
  BbImagePicker,
2271
2260
  BbDatePicker] });
2272
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ElementsModule, imports: [BbMultiFileControl,
2261
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElementsModule, imports: [BbMultiFileControl,
2273
2262
  BbDatePicker] });
2274
2263
  }
2275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ElementsModule, decorators: [{
2264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElementsModule, decorators: [{
2276
2265
  type: NgModule,
2277
2266
  args: [{
2278
2267
  imports: [...IMPORTS_EXPORTS],
@@ -2284,5 +2273,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
2284
2273
  * Generated bundle index. Do not edit.
2285
2274
  */
2286
2275
 
2287
- export { BbAnchor, BbAvatar, BbButton, BbCheckbox, BbCheckboxGroup, BbDate, BbDatePicker, BbExtraErrorControls, BbFileImage, BbFilePicker, BbFileSize, BbFormControl, BbFormError, BbFormGroup, BbFormSubmit, BbFormSubmitter, BbIcon, BbImagePicker, BbImageUpload, BbInput, BbMultiFileControl, BbPrefix, BbRadioButton, BbRadioGroup, BbRelativeTime, BbSpinner, BbSuffix, ELEMENTS_ERRORS, ELEMENTS_ICONS, ElementsModule, provideElementsConfig };
2276
+ export { BbAnchor, BbAvatar, BbButton, BbCheckbox, BbCheckboxGroup, BbDate, BbDatePicker, BbExtraErrorControls, BbFileDrop, BbFileImage, BbFilePicker, BbFileSize, BbFormControl, BbFormError, BbFormGroup, BbFormSubmit, BbFormSubmitter, BbIcon, BbImagePicker, BbImageUpload, BbInput, BbMultiFileControl, BbPrefix, BbRadioButton, BbRadioGroup, BbRelativeTime, BbSpinner, BbSuffix, ELEMENTS_ERRORS, ELEMENTS_ICONS, ElementsModule, provideElementsConfig };
2288
2277
  //# sourceMappingURL=bravobit-bb-foundation-elements.mjs.map