{"version":3,"file":"bloomreach-brie.mjs","sources":["../../../../projects/brie/button-group/components/button-group.component.ts","../../../../projects/brie/button-group/components/button-group.component.html","../../../../projects/brie/button-group/button-group.module.ts","../../../../projects/brie/button-group/models/button-group.ts","../../../../projects/brie/button-group/public-api.ts","../../../../projects/brie/button-group/index.ts","../../../../projects/brie/dialog/components/dialog.component.ts","../../../../projects/brie/dialog/components/dialog-title.component.html","../../../../projects/brie/dialog/components/dialog-content.component.html","../../../../projects/brie/dialog/components/dialog-actions.component.html","../../../../projects/brie/dialog/components/dialog.component.html","../../../../projects/brie/dialog/models/dialog.ts","../../../../projects/brie/dialog/components/confirm-dialog.component.ts","../../../../projects/brie/dialog/components/confirm-dialog.component.html","../../../../projects/brie/dialog/dialog.module.ts","../../../../projects/brie/dialog/services/dialog.service.ts","../../../../projects/brie/dialog/public-api.ts","../../../../projects/brie/dialog/index.ts","../../../../projects/brie/expansion-panel/components/expansion-panel.component.ts","../../../../projects/brie/expansion-panel/components/expansion-panel.component.html","../../../../projects/brie/expansion-panel/expansion-panel.module.ts","../../../../projects/brie/expansion-panel/models/expansion-panel.ts","../../../../projects/brie/expansion-panel/public-api.ts","../../../../projects/brie/expansion-panel/index.ts","../../../../projects/brie/form/components/form-checkbox/form-checkbox.component.ts","../../../../projects/brie/form/components/form-checkbox/form-checkbox.component.html","../../../../projects/brie/form/components/form-toggle/form-toggle.component.ts","../../../../projects/brie/form/components/form-toggle/form-toggle.component.html","../../../../projects/brie/form/models/form.ts","../../../../projects/brie/form/components/form-text/form-text.component.ts","../../../../projects/brie/form/components/form-text/form-text.component.html","../../../../projects/brie/form/components/form-radio/form-radio.component.ts","../../../../projects/brie/form/components/form-radio/form-radio.component.html","../../../../projects/brie/form/components/form-datetime/datetime-field/date-format.ts","../../../../projects/brie/form/components/form-datetime/datetime-field/datetime-field.component.ts","../../../../projects/brie/form/components/form-datetime/datetime-field/datetime-field.component.html","../../../../projects/brie/form/components/form-datetime/form-datetime.component.ts","../../../../projects/brie/form/components/form-datetime/form-datetime.component.html","../../../../projects/brie/form/components/form-linkpicker/form-linkpicker.component.ts","../../../../projects/brie/form/components/form-linkpicker/form-linkpicker.component.html","../../../../projects/brie/form/components/form-select/form-select.component.ts","../../../../projects/brie/form/components/form-select/form-select.component.html","../../../../projects/brie/form/components/form-input/form-input.component.ts","../../../../projects/brie/form/components/form-input/form-input.component.html","../../../../projects/brie/form/components/form-hidden/form-hidden.component.ts","../../../../projects/brie/form/components/form-hidden/form-hidden.component.html","../../../../projects/brie/form/components/form-control/form-control.component.ts","../../../../projects/brie/form/components/form-control/form-control.component.html","../../../../projects/brie/form/services/form.service.ts","../../../../projects/brie/form/components/form-group-repeater/form-group-repeater.component.ts","../../../../projects/brie/form/components/form-group-repeater/form-group-repeater.component.html","../../../../projects/brie/form/components/form-fields-group/form-fields-group.component.ts","../../../../projects/brie/form/components/form-fields-group/form-fields-group.component.html","../../../../projects/brie/form/components/form.component.ts","../../../../projects/brie/form/components/form.component.html","../../../../projects/brie/form/utils/focus-first-invalid-control.ts","../../../../projects/brie/form/services/form-validation.service.ts","../../../../projects/brie/form/directives/show-errors-on-submit.directive.ts","../../../../projects/brie/form/form.module.ts","../../../../projects/brie/form/models/form-validation.ts","../../../../projects/brie/form/public-api.ts","../../../../projects/brie/form/index.ts","../../../../projects/brie/heading/models/heading.ts","../../../../projects/brie/heading/components/heading.component.ts","../../../../projects/brie/heading/components/heading.component.html","../../../../projects/brie/heading/heading.module.ts","../../../../projects/brie/heading/public-api.ts","../../../../projects/brie/heading/index.ts","../../../../projects/brie/icon/models/icon.ts","../../../../projects/brie/icon/components/icon.component.ts","../../../../projects/brie/icon/components/icon.component.html","../../../../projects/brie/icon/icon.module.ts","../../../../projects/brie/icon/public-api.ts","../../../../projects/brie/icon/index.ts","../../../../projects/brie/list/components/list.component.ts","../../../../projects/brie/list/components/list.component.html","../../../../projects/brie/list/list.module.ts","../../../../projects/brie/list/models/list.ts","../../../../projects/brie/list/public-api.ts","../../../../projects/brie/list/index.ts","../../../../projects/brie/snackbar/components/snack-bar.component.ts","../../../../projects/brie/snackbar/components/snack-bar.component.html","../../../../projects/brie/snackbar/snackbar.module.ts","../../../../projects/brie/snackbar/models/snackbar.ts","../../../../projects/brie/snackbar/services/snack-bar.service.ts","../../../../projects/brie/snackbar/public-api.ts","../../../../projects/brie/snackbar/index.ts","../../../../projects/brie/tree/models/tree.ts","../../../../projects/brie/tree/components/tree.component.ts","../../../../projects/brie/tree/components/tree.component.html","../../../../projects/brie/tree/tree.module.ts","../../../../projects/brie/tree/public-api.ts","../../../../projects/brie/tree/index.ts","../../../../projects/brie/card/models/card.ts","../../../../projects/brie/card/directives/card-header.directive.ts","../../../../projects/brie/card/components/card.component.ts","../../../../projects/brie/card/components/card.component.html","../../../../projects/brie/card/card.module.ts","../../../../projects/brie/card/public-api.ts","../../../../projects/brie/card/index.ts","../../../../projects/brie/public-api.ts","../../../../projects/brie/bloomreach-brie.ts"],"sourcesContent":["/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { BrieFormValidationService } from '@bloomreach/brie/form';\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl } from '@angular/forms';\nimport { BrieButton, BrieButtonGroupActions } from '../models/button-group';\n\n@Component({\n  selector: 'brie-button-group',\n  templateUrl: './button-group.component.html',\n  styleUrls: ['./button-group.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    CommonModule,\n    MatButtonModule,\n    MatDividerModule,\n    MatMenuModule,\n    MatTooltipModule,\n    BrieIconModule,\n  ],\n\n})\nexport class BrieButtonGroupComponent {\n  @Input() actions: BrieButtonGroupActions;\n\n  constructor(private readonly validationService: BrieFormValidationService) {}\n\n  get BrieIconSize(): typeof BrieIconSize {\n    return BrieIconSize;\n  }\n\n  onButtonClick(button: BrieButton, event: MouseEvent, menuTrigger?: MatMenuTrigger): void {\n    if (button.menu) {\n      menuTrigger?.openMenu();\n      return;\n    }\n\n    if (button.validateBeforeAction && button.validateForm) {\n      const form = this.resolveValidateForm(button.validateForm);\n      if (!form) {\n        return;\n      }\n\n      const result = this.validationService.showValidationErrors(\n        form,\n        button.validateFormOptions ?? {},\n      );\n\n      if (result.valid) {\n        button.action?.(event);\n      }\n\n      return;\n    }\n\n    button.action?.(event);\n  }\n\n  private resolveValidateForm(\n    validateForm: AbstractControl | (() => AbstractControl | undefined),\n  ): AbstractControl | undefined {\n    return typeof validateForm === 'function' ? validateForm() : validateForm;\n  }\n}\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<ng-container *ngFor=\"let group of actions; last as isLast\">\n  <div class=\"brie-button-group\">\n    <ng-container *ngFor=\"let button of group\" [ngSwitch]=\"button.type\">\n      <div class=\"brie-button-container\">\n        <button *ngSwitchCase=\"'stroked'\"\n                mat-stroked-button\n                disableRipple\n                [attr.id]=\"button.id\"\n                [attr.data-qid]=\"button.id\"\n                class=\"brie-button-stroked\"\n                (click)=\"onButtonClick(button, $event, menuTrigger)\"\n                [color]=\"button.color\"\n                [disabled]=\"button.isDisabled && button.isDisabled()\"\n                matTooltip=\"{{ button.tooltip }}\">\n          <ng-container *ngTemplateOutlet=\"buttonCaptionTemplate;context:{$implicit: button}\"></ng-container>\n        </button>\n\n        <button *ngSwitchCase=\"'flat'\"\n                mat-flat-button\n                disableRipple\n                [attr.id]=\"button.id\"\n                [attr.data-qid]=\"button.id\"\n                class=\"brie-button-flat\"\n                (click)=\"onButtonClick(button, $event, menuTrigger)\"\n                [color]=\"button.color\"\n                [disabled]=\"button.isDisabled && button.isDisabled()\"\n                matTooltip=\"{{ button.tooltip }}\">\n          <ng-container *ngTemplateOutlet=\"buttonCaptionTemplate;context:{$implicit: button}\"></ng-container>\n        </button>\n\n        <button *ngSwitchCase=\"'icon'\"\n                mat-icon-button\n                [attr.id]=\"button.id\"\n                class=\"brie-button-icon\"\n                [attr.data-qid]=\"button.id\"\n                (click)=\"onButtonClick(button, $event, menuTrigger)\"\n                [color]=\"button.color\"\n                [disabled]=\"button.isDisabled && button.isDisabled()\"\n                matTooltip=\"{{ button.tooltip }}\"\n                disableRipple>\n          <ng-container *ngTemplateOutlet=\"buttonCaptionTemplate;context:{$implicit: button}\"></ng-container>\n        </button>\n\n        <button *ngSwitchDefault\n                mat-button\n                disableRipple\n                [attr.id]=\"button.id\"\n                [attr.data-qid]=\"button.id\"\n                class=\"brie-button-default\"\n                (click)=\"onButtonClick(button, $event, menuTrigger)\"\n                [color]=\"button.color\"\n                [disabled]=\"button.isDisabled && button.isDisabled()\"\n                matTooltip=\"{{ button.tooltip }}\">\n          <ng-container *ngTemplateOutlet=\"buttonCaptionTemplate;context:{$implicit: button}\"></ng-container>\n        </button>\n\n        <div #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"buttonMenu\">\n          <mat-menu #buttonMenu=\"matMenu\" class=\"brie-button-menu\">\n            <button *ngFor=\"let menuItem of button.menu\"\n                    mat-menu-item\n                    [attr.id]=\"menuItem.id\"\n                    [attr.data-qid]=\"menuItem.id\"\n                    class=\"brie-button-menu-item\"\n                    (click)=\"menuItem.action()\">\n              {{ menuItem.text }}\n            </button>\n          </mat-menu>\n        </div>\n      </div>\n    </ng-container>\n  </div>\n\n  <mat-divider *ngIf=\"!isLast\" [vertical]=\"true\"></mat-divider>\n</ng-container>\n\n<ng-template #buttonCaptionTemplate let-button>\n  <brie-icon *ngIf=\"button.icon\"\n             [name]=\"button.icon.name\"\n             [fontSet]=\"button.icon.fontSet\"\n             [size]=\"BrieIconSize.SM\"></brie-icon>\n  <span *ngIf=\"button.text\">{{ button.text }}</span>\n</ng-template>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrieIconModule } from '@bloomreach/brie/icon';\n\nimport { BrieButtonGroupComponent } from './components/button-group.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    BrieIconModule,\n    MatButtonModule,\n    MatDividerModule,\n    MatMenuModule,\n    MatTooltipModule,\n    BrieButtonGroupComponent,\n  ],\n  exports: [\n    BrieButtonGroupComponent,\n  ],\n})\nexport class BrieButtonGroupModule { }\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractControl } from '@angular/forms';\nimport { BrieFormValidationOptions } from '@bloomreach/brie/form';\n\nexport type BrieButtonGroupActions = BrieButton[][];\n\nexport interface BrieButton {\n  id: string;\n  type: BrieButtonType;\n  text?: string;\n  action?: (event: MouseEvent) => void;\n  icon?: {\n    name: string;\n    fontSet?: string;\n  };\n  color?: BrieThemeColor;\n  isDisabled?: () => boolean;\n  tooltip?: string;\n  menu?: {\n    id: string;\n    text: string;\n    action: () => void;\n  }[];\n  /** Form to validate. Static control or getter for lazy resolution. */\n  validateForm?: AbstractControl | (() => AbstractControl | undefined);\n  /** Options passed to BrieFormValidationService.showValidationErrors. */\n  validateFormOptions?: BrieFormValidationOptions;\n  /**\n   * When true, run showValidationErrors before action.\n   * action is called only if form.valid after validation.\n   * Default: false (no validation — current behavior).\n   */\n  validateBeforeAction?: boolean;\n}\n\nexport enum BrieButtonType {\n  Basic = 'basic',\n  Stroked = 'stroked',\n  Flat = 'flat',\n  Icon = 'icon',\n}\n\nexport enum BrieThemeColor {\n  Primary = 'primary',\n  Accent = 'accent',\n  Warn = 'warn',\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './button-group.module';\nexport * from './components/button-group.component';\nexport * from './models/button-group';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n  selector: 'brie-dialog-title',\n  templateUrl: './dialog-title.component.html',\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatDialogModule,\n    MatIconModule,\n    MatButtonModule,\n  ],\n})\nexport class BrieDialogTitleComponent { }\n\n@Component({\n  selector: 'brie-dialog-content',\n  templateUrl: './dialog-content.component.html',\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatDialogModule,\n  ],\n})\nexport class BrieDialogContentComponent { }\n\n@Component({\n  selector: 'brie-dialog-actions',\n  templateUrl: './dialog-actions.component.html',\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatDialogModule,\n  ],\n})\nexport class BrieDialogActionsComponent { }\n\n@Component({\n  selector: 'brie-dialog',\n  templateUrl: './dialog.component.html',\n  styleUrls: ['./dialog.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  encapsulation: ViewEncapsulation.None,\n\n})\nexport class BrieDialogComponent { }\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<div mat-dialog-title>\n  <ng-content></ng-content>\n</div>\n<button mat-icon-button class=\"brie-title-close\" [mat-dialog-close]=\"false\">\n  <mat-icon>close</mat-icon>\n</button>\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<mat-dialog-content>\n  <ng-content></ng-content>\n</mat-dialog-content>\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<mat-dialog-actions>\n  <ng-content></ng-content>\n</mat-dialog-actions>\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<ng-content></ng-content>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ComponentType } from '@angular/cdk/portal';\nimport { TemplateRef } from '@angular/core';\nimport { MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\n\nexport enum BrieConfirmDialogAction {\n  EXTRA = 'EXTRA',\n  PRIMARY = 'PRIMARY',\n  SECONDARY = 'SECONDARY',\n}\n\nexport interface BrieConfirmDialogButtons {\n  id: string;\n  caption: string;\n}\n\nexport interface BrieConfirmDialogData {\n  title: string;\n  message: string;\n  buttons: {\n    primary: BrieConfirmDialogButtons;\n    secondary?: BrieConfirmDialogButtons;\n    extra?: BrieConfirmDialogButtons;\n  }\n}\n\nexport type BrieDialogTemplate<T> = ComponentType<T> | TemplateRef<T>;\nexport type BrieDialogConfig<D> = MatDialogConfig<D>;\nexport type BrieDialogRef<T, R> = MatDialogRef<T, R>;\n\nexport type BrieConfirmDialogConfig = BrieDialogConfig<BrieConfirmDialogData>;\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Inject, ChangeDetectionStrategy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { BrieConfirmDialogAction, BrieConfirmDialogData, BrieDialogRef } from '../models/dialog';\nimport {\n  BrieDialogActionsComponent,\n  BrieDialogComponent,\n  BrieDialogContentComponent,\n  BrieDialogTitleComponent,\n} from './dialog.component';\n\n@Component({\n  selector: 'brie-confirm-dialog',\n  templateUrl: './confirm-dialog.component.html',\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatButtonModule,\n    BrieDialogTitleComponent,\n    BrieDialogContentComponent,\n    BrieDialogActionsComponent,\n    BrieDialogComponent,\n  ],\n\n})\nexport class BrieConfirmDialogComponent {\n  constructor(\n    @Inject(MAT_DIALOG_DATA) public data: BrieConfirmDialogData,\n    public dialogRef: MatDialogRef<BrieConfirmDialogComponent>,\n  ) { }\n\n  clickOnPrimary(): void {\n    this.dialogRef.close(BrieConfirmDialogAction.PRIMARY);\n  }\n\n  clickOnSecondary(): void {\n    this.dialogRef.close(BrieConfirmDialogAction.SECONDARY);\n  }\n\n  clickOnExtra(): void {\n    this.dialogRef.close(BrieConfirmDialogAction.EXTRA);\n  }\n}\n\nexport type BrieConfirmDialogRef = BrieDialogRef<BrieConfirmDialogComponent, BrieConfirmDialogAction>;\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<brie-dialog class=\"brie-dialog-confirm\">\n<brie-dialog-title>\n{{ data.title }}\n</brie-dialog-title>\n<brie-dialog-content>\n{{ data.message }}\n</brie-dialog-content>\n<brie-dialog-actions>\n@if (data.buttons.extra) {\n  <button mat-stroked-button\n    [attr.id]=\"data.buttons.extra?.id\"\n    (click)=\"clickOnExtra()\">\n    {{ data.buttons.extra?.caption }}\n  </button>\n}\n@if (data.buttons.secondary) {\n  <button mat-stroked-button\n    [attr.id]=\"data.buttons.secondary?.id\"\n    (click)=\"clickOnSecondary()\">\n    {{ data.buttons.secondary?.caption }}\n  </button>\n}\n@if (data.buttons.primary) {\n  <button mat-flat-button\n    [attr.id]=\"data.buttons.primary.id\"\n    color=\"primary\"\n    (click)=\"clickOnPrimary()\">\n    {{ data.buttons.primary.caption }}\n  </button>\n}\n</brie-dialog-actions>\n</brie-dialog>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n  BrieDialogActionsComponent,\n  BrieDialogComponent,\n  BrieDialogContentComponent,\n  BrieDialogTitleComponent,\n} from './components/dialog.component';\nimport { BrieConfirmDialogComponent } from './components/confirm-dialog.component';\n\n@NgModule({\n  exports: [\n    BrieDialogComponent,\n    BrieDialogTitleComponent,\n    BrieDialogContentComponent,\n    BrieDialogActionsComponent,\n    BrieConfirmDialogComponent,\n  ],\n  imports: [\n    BrieDialogComponent,\n    BrieDialogTitleComponent,\n    BrieDialogContentComponent,\n    BrieDialogActionsComponent,\n    BrieConfirmDialogComponent,\n    CommonModule,\n    MatIconModule,\n    MatDialogModule,\n    MatButtonModule,\n  ],\n})\nexport class BrieDialogModule { }\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport {\n  BrieConfirmDialogConfig,\n  BrieConfirmDialogData,\n  BrieDialogConfig,\n  BrieDialogRef,\n  BrieDialogTemplate,\n} from '../models/dialog';\nimport { BrieConfirmDialogComponent, BrieConfirmDialogRef } from '../components/confirm-dialog.component';\n\nconst DEFAULT_CONFIRM_WIDTH = '500px';\n\nexport const defaultDialogConfig: MatDialogConfig = {\n  autoFocus: false,\n  disableClose: false,\n  restoreFocus: false,\n};\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BrieDialogService {\n  constructor(\n    private readonly dialog: MatDialog,\n  ) { }\n\n  open<T, D = any, R = any>(template: BrieDialogTemplate<T>, config: BrieDialogConfig<D> = {}): BrieDialogRef<T, R> {\n    return this.dialog.open(template, { ...defaultDialogConfig, ...config });\n  }\n\n  confirm(data: BrieConfirmDialogData, config: BrieConfirmDialogConfig = {}): BrieConfirmDialogRef {\n    const width = DEFAULT_CONFIRM_WIDTH;\n    const dialogConfig: BrieConfirmDialogConfig = { width, data, ...config };\n\n    return this.open(BrieConfirmDialogComponent, dialogConfig);\n  }\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './dialog.module';\nexport * from './components/dialog.component';\nexport * from './components/confirm-dialog.component';\nexport * from './models/dialog';\nexport * from './services/dialog.service';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\nimport { MatExpansionModule } from '@angular/material/expansion';\n\nimport { BrieExpansionPanelIcon } from '../models/expansion-panel';\n\n@Component({\n  selector: 'brie-expansion-panel',\n  templateUrl: './expansion-panel.component.html',\n  styleUrls: ['./expansion-panel.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatExpansionModule,\n    BrieIconModule,\n  ],\n})\nexport class BrieExpansionPanelComponent {\n  @Input() icon?: BrieExpansionPanelIcon;\n  @Input() title: string;\n\n  iconSize = BrieIconSize.MD;\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<mat-expansion-panel>\n  <mat-expansion-panel-header class=\"brie-expansion-panel-header\">\n    <mat-panel-title class=\"brie-expansion-panel-title\">\n      @if (!!icon) {\n        <brie-icon\n          class=\"brie-expansion-panel-title-icon\"\n          [type]=\"icon.type\"\n          [name]=\"icon.name\"\n          [size]=\"iconSize\"\n        [fontSet]=\"icon?.fontSet\"></brie-icon>\n      }\n      <span class=\"brie-expansion-panel-title-text\">{{ title }}</span>\n    </mat-panel-title>\n  </mat-expansion-panel-header>\n  <div class=\"brie-expansion-panel-content\">\n    <ng-content></ng-content>\n  </div>\n</mat-expansion-panel>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { BrieIconModule } from '@bloomreach/brie/icon';\n\nimport { BrieExpansionPanelComponent } from './components/expansion-panel.component';\n\n@NgModule({\n  imports: [\n    BrieIconModule,\n    CommonModule,\n    MatExpansionModule,\n    BrieExpansionPanelComponent,\n  ],\n  exports: [\n    BrieExpansionPanelComponent,\n  ],\n})\nexport class BrieExpansionPanelModule { }\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrieIconType } from '@bloomreach/brie/icon';\n\nexport interface BrieExpansionPanelIcon {\n  fontSet?: string;\n  name: string;\n  type: BrieIconType;\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './expansion-panel.module';\nexport * from './components/expansion-panel.component';\nexport * from './models/expansion-panel';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ContentChild, TemplateRef, ChangeDetectionStrategy } from '@angular/core';\nimport { UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\n\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrieFormCheckboxField } from '../../models/form';\n\n@Component({\n  selector: 'brie-form-checkbox',\n  templateUrl: './form-checkbox.component.html',\n  styleUrls: ['./form-checkbox.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatCheckboxModule,\n    MatFormFieldModule,\n    BrieIconModule,\n    MatTooltipModule,\n  ],\n})\nexport class BrieFormCheckboxComponent {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormCheckboxField;\n  iconSizes = BrieIconSize;\n\n  @ContentChild('labelTemplate', { static: false }) labelTemplate: TemplateRef<any>;\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  get checkboxId(): string {\n    return `${this.fieldId}-checkbox`;\n  }\n\n  get effectiveLabelTemplate(): TemplateRef<any> | null {\n    return this.field.labelTemplate || this.labelTemplate || null;\n  }\n}\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<ng-container [formGroup]=\"group\">\n\n  <mat-checkbox [attr.data-qid]=\"field.name\" [formControlName]=\"field.name\" [id]=\"checkboxId\" [attr.name]=\"field.name\" color=\"primary\">\n\n    <!-- Custom label template support using new control flow -->\n    @if (effectiveLabelTemplate) {\n      <ng-container *ngTemplateOutlet=\"effectiveLabelTemplate; context: { $implicit: field, group: group }\"></ng-container>\n    } @else {\n      <!-- Default label -->\n      <div class=\"checkbox-label-container\">\n        <mat-label>{{ field.label }}</mat-label>\n        @if (field.tooltip) {\n          <brie-icon class=\"tooltip-icon qa-tooltip\" [matTooltip]=\"field.tooltip\"\n            [size]=\"iconSizes.SM\" name=\"info_outline\">\n          </brie-icon>\n        }\n      </div>\n    }\n\n  </mat-checkbox>\n\n  @if (field.errors) {\n    @for (error of field.errors; track error.message) {\n      @if (error.validate(group.get([field.name]))) {\n        <mat-error class=\"brie-error-message\">{{ error.message }}</mat-error>\n      }\n    }\n  }\n\n</ng-container>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { BrieIconModule } from '@bloomreach/brie/icon';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { BrieFormToggleField } from '../../models/form';\n\n@Component({\n  selector: 'brie-form-toggle',\n  templateUrl: './form-toggle.component.html',\n  styleUrls: ['./form-toggle.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    BrieIconModule,\n    MatSlideToggleModule,\n    MatFormFieldModule,\n  ],\n})\nexport class BrieFormToggleComponent {\n  @Input() group: FormGroup;\n  @Input() field: BrieFormToggleField;\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  get toggleId(): string {\n    return `${this.fieldId}-toggle`;\n  }\n}\n","<!--\nCopyright 2022-2025 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<ng-container [formGroup]=\"group\">\n\n  <mat-slide-toggle [attr.data-qid]=\"field.name\" [formControlName]=\"field.name\" [id]=\"toggleId\" [attr.name]=\"field.name\" color=\"primary\">\n    <span>{{ field.label }}</span>\n  </mat-slide-toggle>\n\n  @for (error of field.errors; track error) {\n    <ng-container ngProjectAs=\"mat-error\">\n      @if (error.validate(group.get([field.name]))) {\n        <mat-error class=\"brie-error-message\">{{ error.message }}</mat-error>\n      }\n    </ng-container>\n  }\n\n</ng-container>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { TemplateRef } from '@angular/core';\nimport { BrieIcon } from '@bloomreach/brie/icon';\n\nexport type BrieFormField =\n  BrieFormInputField\n  | BrieFormCheckboxField\n  | BrieFormToggleField\n  | BrieFormSelectField\n  | BrieFormTextField\n  | BrieFormDateField\n  | BrieFormDateTimeField\n  | BrieFormLinkpickerField\n  | BrieFormRadioField\n  | BrieFormHiddenField;\nexport type BrieFormDataSource = Array<BrieFormField | BrieFormGroupRepeaterField | BrieFormFieldsGroup>;\n\nexport interface BrieFormFieldsGroup {\n  id: string;\n  name?: string;\n  type: BrieFormFieldType.FIELDS_GROUP;\n  label: string;\n  collapsable?: boolean;\n  hidden?: boolean;\n  fields: Array<BrieFormField | BrieFormGroupRepeaterField>;\n  panel?: {\n    title: string;\n    content: string;\n  }\n}\n\nexport interface BrieFormGroupRepeaterField {\n  id: string;\n  name: string;\n  type: BrieFormFieldType.GROUP_REPEATER;\n  hidden?: boolean;\n  fields: BrieFormField[];\n  values?: BrieFormGroupRepeaterValues;\n  draggable?: boolean;\n  readOnly?: boolean;\n}\n\nexport type BrieFormGroupRepeaterValues = Record<string, string | number | boolean | BrieFormSelectOption>[];\n\nexport interface BrieFormFieldBase {\n  id: string;\n  name: string;\n  label?: string;\n  tooltip?: string;\n  validators?: ValidatorFn[];\n  errors?: BrieFormFieldError[];\n  disabled?: boolean;\n  width?: string;\n  hint?: string;\n}\n\nexport enum BrieFormInputIconPosition {\n  SUFFIX = 'suffix',\n  PREFIX = 'prefix',\n  TRAILING_OUTSIDE = 'trailing-outside',\n  LEADING_OUTSIDE = 'leading-outside',\n}\n\nexport interface BrieFormInputIcon {\n  icon: BrieIcon;\n  position: BrieFormInputIconPosition;\n  onClick?: (control: AbstractControl, field: BrieFormInputField) => void;\n  visible?: (control: AbstractControl | null) => boolean;\n}\n\nexport interface BrieFormInputField extends BrieFormFieldBase {\n  type: BrieFormFieldType.INPUT;\n  inputType?: string;\n  placeholder?: string;\n  value?: string | number;\n  readOnly?: boolean;\n  options?: string[];\n  icons?: BrieFormInputIcon[];\n}\n\nexport interface BrieFormHiddenField extends BrieFormFieldBase {\n  type: BrieFormFieldType.HIDDEN;\n  value?: string | number;\n}\n\nexport interface BrieFormLinkpickerField extends BrieFormFieldBase {\n  type: BrieFormFieldType.LINK_PICKER;\n  placeholder?: string;\n  value?: string;\n  openPicker: (value: string, field: BrieFormLinkpickerField) => void;\n  icons?: BrieFormInputIcon[];\n}\n\nexport interface BrieFormDateField extends BrieFormFieldBase {\n  type: BrieFormFieldType.DATE;\n  inputType?: string;\n  placeholder?: string;\n  value?: string | Date;\n  readOnly?: boolean;\n  options?: string[];\n  icons?: BrieFormInputIcon[];\n}\n\nexport interface BrieFormDateTimeField extends BrieFormFieldBase {\n  type: BrieFormFieldType.DATE_TIME;\n  inputType?: string;\n  placeholder?: string;\n  value?: string | Date;\n  readOnly?: boolean;\n  options?: string[];\n  icons?: BrieFormInputIcon[];\n}\n\nexport interface BrieFormCheckboxField extends BrieFormFieldBase {\n  type: BrieFormFieldType.CHECKBOX;\n  value?: boolean;\n  labelTemplate?: TemplateRef<any>;\n}\n\nexport interface BrieFormToggleField extends BrieFormFieldBase {\n  type: BrieFormFieldType.TOGGLE;\n  value?: boolean;\n}\n\nexport interface BrieFormSelectField extends BrieFormFieldBase {\n  type: BrieFormFieldType.SELECT;\n  placeholder?: string;\n  value?: BrieFormSelectOption['value'] | BrieFormSelectOption['value'][];\n  readOnly?: boolean;\n  multiple?: boolean;\n  options?: BrieFormSelectOption[];\n}\n\nexport interface BrieFormSelectOption {\n  disabled?: boolean;\n  value: string | number;\n  label: string;\n}\n\nexport interface BrieFormTextField extends BrieFormFieldBase {\n  maxLength?: number;\n  maxRows?: number;\n  minLength?: number;\n  minRows?: number;\n  placeholder?: string;\n  readOnly?: boolean;\n  resizable?: boolean;\n  type: BrieFormFieldType.TEXT;\n  value?: string | number;\n}\n\nexport interface BrieFormFieldError {\n  message: string;\n\n  validate(control: AbstractControl | null): boolean;\n}\n\nexport enum BrieFormFieldType {\n  INPUT = 'input',\n  CHECKBOX = 'checkbox',\n  TOGGLE = 'toggle',\n  RADIO = 'radio',\n  SELECT = 'select',\n  GROUP_REPEATER = 'group-repeater',\n  TEXT = 'text',\n  FIELDS_GROUP = 'fields-group',\n  DATE = 'date',\n  DATE_TIME = 'date-time',\n  LINK_PICKER = 'link-picker',\n  HIDDEN = 'hidden',\n}\n\nexport interface BrieFormControls {\n  [controlId: string]: AbstractControl;\n}\n\nexport interface BrieFormRadioField extends BrieFormFieldBase {\n  buttons: BrieFormRadioButton[];\n  required?: boolean;\n  type: BrieFormFieldType.RADIO;\n  value?: string | number;\n}\n\nexport interface BrieFormRadioButton {\n  id?: string;\n  disabled?: boolean;\n  value: string | number;\n  label: string;\n  icon?: BrieIcon;\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\n\nimport { MatInputModule } from '@angular/material/input';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrieFormTextField } from '../../models/form';\n\n@Component({\n  selector: 'brie-form-text',\n  templateUrl: './form-text.component.html',\n  styleUrls: ['./form-text.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatInputModule,\n    MatIconModule,\n    MatTooltipModule,\n    BrieIconModule,\n  ],\n\n})\nexport class BrieFormTextComponent {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormTextField;\n  @Input() hasLabel?: boolean;\n\n  iconSizes = BrieIconSize;\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  get textId(): string {\n    return `${this.fieldId}-textarea`;\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<mat-form-field appearance=\"outline\" [formGroup]=\"group\" [attr.data-qid]=\"field.name\">\n\n  @if (hasLabel) {\n    <ng-container ngProjectAs=\"mat-label\">\n      <mat-label>{{ field.label }}</mat-label>\n      @if (field.tooltip) {\n        <brie-icon class=\"info-tooltip\" [size]=\"iconSizes.SM\" [tooltip]=\"field.tooltip\" [name]=\"'info_outline'\"></brie-icon>\n      }\n    </ng-container>\n  }\n\n  @if (!field.resizable) {\n    <textarea\n      matInput\n      [formControlName]=\"field.name\"\n      [id]=\"textId\"\n      [attr.data-qid]=\"textId\"\n      [name]=\"field.name\"\n      [placeholder]=\"field.placeholder ?? ''\"\n      [readonly]=\"field.readOnly ?? false\"\n      [attr.maxLength]=\"field.maxLength ?? null\"\n      [attr.minLength]=\"field.minLength ?? null\"\n      cdkTextareaAutosize\n      [cdkAutosizeMinRows]=\"field.minRows ?? 1\"\n      [cdkAutosizeMaxRows]=\"field.maxRows ?? 5\">\n    </textarea>\n  }\n  @if (field.resizable) {\n    <textarea\n      matInput\n      [formControlName]=\"field.name\"\n      [id]=\"textId\"\n      [name]=\"field.name\"\n      [placeholder]=\"field.placeholder ?? ''\"\n      [readonly]=\"field.readOnly ?? false\"\n      [attr.maxLength]=\"field.maxLength ?? null\"\n      [attr.minLength]=\"field.minLength ?? null\"\n      [rows]=\"field.minRows ?? 5\"\n      >\n    </textarea>\n  }\n\n  @if (field.hint) {\n    <mat-hint>{{ field.hint }}</mat-hint>\n  }\n\n  @for (error of field.errors; track error) {\n    <ng-container ngProjectAs=\"mat-error\">\n      @if (error.validate(group.get([field.name]))) {\n        <mat-error class=\"brie-error-message\">{{ error.message }}</mat-error>\n      }\n    </ng-container>\n  }\n\n</mat-form-field>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatIconModule } from '@angular/material/icon';\nimport { BrieIconModule } from '@bloomreach/brie/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { BrieFormRadioButton, BrieFormRadioField } from '../../models/form';\n\n@Component({\n  selector: 'brie-form-radio',\n  templateUrl: './form-radio.component.html',\n  styleUrls: ['./form-radio.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatRadioModule,\n    MatIconModule,\n    BrieIconModule,\n    MatTooltipModule,\n    MatFormFieldModule,\n  ],\n\n})\nexport class BrieFormRadioComponent {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormRadioField;\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  getFieldId(): string {\n    return `${this.field.id}-radio-group`;\n  }\n\n  getButtonId(button: BrieFormRadioButton, index: number): string {\n    return `${this.field.id}-radio-button-${button.id || index}`;\n  }\n}\n","<!--\nCopyright 2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<ng-container [formGroup]=\"group\">\n  <mat-radio-group [formControlName]=\"field.name\" [id]=\"getFieldId()\" [name]=\"field.name\" [value]=\"field.value\"\n    [attr.data-qid]=\"field.name\" color=\"primary\">\n    @for (button of field.buttons; track button; let i = $index) {\n      <mat-radio-button [id]=\"getButtonId(button, i)\"\n        [value]=\"button.value\" [disabled]=\"button.disabled\" [attr.data-qid]=\"getButtonId(button, i)\">\n        <span>{{ button.label }}</span>\n        @if (button.icon) {\n          <brie-icon [name]=\"button.icon.name\" [type]=\"button.icon.type\" [fontSet]=\"button.icon.fontSet\"\n            [size]=\"button.icon.size\" [tooltip]=\"button.icon.tooltip || ''\">\n        </brie-icon>\n      }\n    </mat-radio-button>\n  }\n</mat-radio-group>\n\n@for (error of field.errors; track error) {\n  <ng-container ngProjectAs=\"mat-error\">\n    @if (error.validate(group.get([field.name]))) {\n      <mat-error class=\"brie-error-message\">{{ error.message }}</mat-error>\n    }\n  </ng-container>\n}\n</ng-container>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MAT_NATIVE_DATE_FORMATS, MatDateFormats } from '@angular/material/core';\n\nexport const DATE_FORMATS: MatDateFormats = {\n  ...MAT_NATIVE_DATE_FORMATS,\n  display: {\n    ...MAT_NATIVE_DATE_FORMATS.display,\n    dateInput: {\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n    } as Intl.DateTimeFormatOptions,\n  },\n};\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ElementRef, Input, OnInit, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormControl,\n  FormGroup,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  UntypedFormGroup,\n  Validators,\n  ReactiveFormsModule,\n} from '@angular/forms';\nimport { MAT_DATE_FORMATS, MatNativeDateModule, ErrorStateMatcher } from '@angular/material/core';\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { MatInputModule } from '@angular/material/input';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { DATE_FORMATS } from './date-format';\nimport { BrieFormDateField, BrieFormDateTimeField } from '../../../models/form';\n\n@Component({\n  selector: 'brie-datetime-field',\n  templateUrl: './datetime-field.component.html',\n  styleUrl: './datetime-field.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: DatetimeFieldComponent,\n      multi: true,\n    },\n    { provide: MAT_DATE_FORMATS, useValue: DATE_FORMATS },\n  ],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatIconModule,\n    MatButtonModule,\n    MatTooltipModule,\n    BrieIconModule,\n    MatInputModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatDatepickerModule,\n    MatNativeDateModule,\n  ],\n\n})\nexport class DatetimeFieldComponent implements ControlValueAccessor, OnInit {\n  @Input() field: BrieFormDateField | BrieFormDateTimeField;\n  @Input() isDateAndTime: boolean = false;\n  @Input() hasLabel?: boolean;\n  @Input() group: UntypedFormGroup;\n\n  @ViewChild('dateField', { static: false }) dateField!: ElementRef;\n\n  iconSizes = BrieIconSize;\n\n  date: Date | null = null;\n  formGroup: FormGroup;\n  isDisabled = false;\n\n  // We added this custom ErrorStateMatcher to ensure that the field displays an error\n  // only when its control is both touched and invalid since it's a custom form field.\n  errorStateMatcher: ErrorStateMatcher = {\n    isErrorState: () => {\n      const parent = this.group?.get(this.field?.name);\n      return !!parent && parent.touched && parent.invalid;\n    },\n  };\n\n  private _onChange: (value: Date | null) => void;\n  private _onTouched: () => void;\n\n  setDisabledState(isDisabled: boolean): void {\n    this.isDisabled = isDisabled;\n  }\n\n  ngOnInit(): void {\n    this.formGroup = new FormGroup({\n      date: new FormControl('', this.isFieldRequired() ? Validators.required : []),\n      hours: new FormControl('', this.isFieldRequired() && this.isDateAndTime ? Validators.required : []),\n      minutes: new FormControl('', this.isFieldRequired() && this.isDateAndTime ? Validators.required : []),\n    });\n  }\n\n  writeValue(value: Date | null): void {\n    this.date = value;\n    this.updateFormFields();\n  }\n\n  registerOnChange(fn: (value: Date | null) => void): void {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  onDateEvent(value: Date): void {\n    if (value) {\n      if (!this.date) {\n        this.date = new Date();\n      }\n      this.date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n    } else {\n      this.date = null;\n    }\n    this._onChange(this.date);\n  }\n\n  onTimeChange(): void {\n    if (!this.date) {\n      this.date = new Date();\n    }\n    const h = parseInt(this.formGroup.get('hours')?.value as string, 10);\n    const m = parseInt(this.formGroup.get('minutes')?.value as string, 10);\n    if (!Number.isNaN(h) && h >= 0 && h <= 23) {\n      this.date.setHours(h);\n    } else if (h > 23) {\n      this.date.setHours(23);\n    } else {\n      this.date.setHours(1);\n    }\n\n    if (!Number.isNaN(m) && m >= 0 && m <= 59) {\n      this.date.setMinutes(m);\n    } else if (m <= 59) {\n      this.date.setMinutes(59);\n    } else {\n      this.date.setMinutes(0);\n    }\n    this._onChange(this.date);\n  }\n\n  setDateToNow(): void {\n    this.date = new Date();\n    this._onChange(this.date);\n    this.updateFormFields();\n  }\n\n  updateFormFields(): void {\n    if (this.date) {\n      this.formGroup.get('date')?.setValue(this.date.toISOString().split('T')[0]);\n      const hours = this.date.getHours().toString().padStart(2, '0');\n      const minutes = this.date.getMinutes().toString().padStart(2, '0');\n\n      this.formGroup.get('hours')?.setValue(hours);\n      this.formGroup.get('minutes')?.setValue(minutes);\n    }\n  }\n\n  isFieldRequired(): boolean {\n    const { disabled, validator } = this.group.get([this.field.name]) || {};\n    const { required } = validator?.({} as AbstractControl) || {};\n    return !(disabled || this.field.readOnly) && !!required;\n  }\n}\n","<!--\nCopyright 2011-2023 Bloomreach\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<div [formGroup]=\"formGroup\">\n  <mat-form-field appearance=\"outline\" hideRequiredMarker class=\"date-field qa-date-field\"\n    [attr.data-qid]=\"field.name\">\n    @if (hasLabel) {\n      <ng-container ngProjectAs=\"mat-label\">\n        <mat-label>{{ field.label }}</mat-label>\n        @if (isFieldRequired()) {\n          <span> *</span>\n        }\n        @if (field.tooltip) {\n          <brie-icon class=\"info-tooltip\" [size]=\"iconSizes.SM\" [tooltip]=\"field.tooltip\"\n          [name]=\"'info_outline'\"></brie-icon>\n        }\n      </ng-container>\n    }\n    <input [readonly]=\"field.readOnly || isDisabled\" formControlName=\"date\" matInput #dateField\n      [matDatepicker]=\"picker\" [placeholder]=\"hasLabel ? (field.placeholder ?? '') : ''\"\n      [errorStateMatcher]=\"errorStateMatcher\"\n      (dateChange)=\"onDateEvent($event.value)\">\n\n    <mat-datepicker-toggle [disabled]=\"field.readOnly || isDisabled\" matSuffix\n    [for]=\"picker\"></mat-datepicker-toggle>\n    <mat-datepicker #picker></mat-datepicker>\n    @for (error of field.errors; track error) {\n      <ng-container ngProjectAs=\"mat-error\">\n        @if (error.validate(group.get([field.name]))) {\n          <mat-error class=\"brie-error-message\">{{ error.message }}</mat-error>\n        }\n      </ng-container>\n    }\n  </mat-form-field>\n\n  @if (isDateAndTime) {\n    <mat-form-field appearance=\"outline\" class=\"date-field-hours qa-date-field-hours\">\n      <input (blur)=\"updateFormFields()\" matInput formControlName=\"hours\" [readonly]=\"field.readOnly || isDisabled\"\n        [attr.maxlength]=\"2\" (change)=\"onTimeChange()\" pattern=\"^(0\\d|1\\d|2[0-3])$\">\n    </mat-form-field>\n  }\n\n  @if (isDateAndTime) {\n    <span class=\"time-separator\">:</span>\n  }\n\n  @if (isDateAndTime) {\n    <mat-form-field appearance=\"outline\" class=\"date-field-minutes qa-date-field-minutes\">\n      <input matInput (blur)=\"updateFormFields()\" formControlName=\"minutes\" [readonly]=\"field.readOnly || isDisabled\"\n        [attr.maxlength]=\"2\" (change)=\"onTimeChange()\" pattern=\"^[0-5]?[0-9]$\">\n    </mat-form-field>\n  }\n\n  <button [disabled]=\"field.readOnly  || isDisabled\" type=\"button\" mat-icon-button\n    class=\"qa-date-field-button\" (click)=\"setDateToNow()\">\n    <mat-icon>sync</mat-icon>\n  </button>\n</div>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { BrieFormDateField, BrieFormDateTimeField, BrieFormFieldType } from '../../models/form';\nimport { DatetimeFieldComponent } from './datetime-field/datetime-field.component';\n\n@Component({\n  selector: 'brie-form-datetime',\n  templateUrl: './form-datetime.component.html',\n  styleUrls: ['./form-datetime.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    DatetimeFieldComponent,\n  ],\n\n})\nexport class BrieFormDateTimeComponent {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormDateField | BrieFormDateTimeField;\n  @Input() hasLabel?: boolean;\n  @Input() type?: BrieFormFieldType.DATE_TIME | BrieFormFieldType.DATE;\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  get textId(): string {\n    return `${this.fieldId}-textarea`;\n  }\n\n  get isDateAndTime(): boolean {\n    return this.type === BrieFormFieldType.DATE_TIME;\n  }\n\n  isFieldRequired(): boolean {\n    const { disabled, validator } = this.group.get([this.field.name]) || {};\n    const { required } = validator?.({} as AbstractControl) || {};\n    return !(disabled || this.field.readOnly) && !!required;\n  }\n}\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<div [formGroup]=\"group\">\n  <brie-datetime-field [id]=\"textId\" [field]=\"field\" [group]=\"group\" [isDateAndTime]=\"isDateAndTime\" [formControlName]=\"field.name\" [hasLabel]=\"hasLabel\"></brie-datetime-field>\n</div>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { MatInputModule } from '@angular/material/input';\nimport { BrieFormInputIcon, BrieFormInputIconPosition, BrieFormLinkpickerField } from '../../models/form';\n\n@Component({\n  selector: 'brie-form-linkpicker',\n  templateUrl: './form-linkpicker.component.html',\n  styleUrls: ['./form-linkpicker.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatIconModule,\n    MatButtonModule,\n    MatTooltipModule,\n    BrieIconModule,\n    CommonModule,\n    MatInputModule,\n    FormsModule,\n    ReactiveFormsModule,\n  ],\n\n})\nexport class BrieFormLinkpickerComponent {\n  @Input() group: FormGroup;\n  @Input() field: BrieFormLinkpickerField;\n  @Input() hasLabel?: boolean;\n\n  iconPositions = BrieFormInputIconPosition;\n  iconSizes = BrieIconSize;\n\n  icons: BrieFormInputIcon[] = [\n    {\n      icon: {\n        name: 'close',\n      },\n      position: BrieFormInputIconPosition.SUFFIX,\n      visible: (control) => !!control?.value,\n      onClick: () => {\n        this.control.setValue('');\n        this.control.markAsDirty();\n      },\n    },\n    {\n      icon: {\n        name: 'search',\n      },\n      position: BrieFormInputIconPosition.SUFFIX,\n      onClick: () => {\n        this.field.openPicker(this.control.value, this.field);\n      },\n    },\n  ];\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  get inputId(): string {\n    return `${this.fieldId}-input`;\n  }\n\n  get control(): AbstractControl {\n    return this.group.get([this.field.name]) as AbstractControl;\n  }\n\n  getIcons(): BrieFormInputIcon[] {\n    return [...(this.field.icons || []), ...this.icons];\n  }\n\n  isFieldRequired(): boolean {\n    const { disabled, validator } = this.group.get([this.field.name]) || {};\n    const { required } = validator?.({} as AbstractControl) || {};\n    return !disabled && !!required;\n  }\n\n  isFieldDisabled(): boolean {\n    const { disabled } = this.group.get([this.field.name]) || {};\n    return !!disabled;\n  }\n}\n","<!--\nCopyright 2024-2025 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<div class=\"input-container\">\n  @for (inputIcon of getIcons(); track inputIcon) {\n    @if (inputIcon.position === iconPositions.LEADING_OUTSIDE && (!inputIcon.visible || inputIcon.visible(group.get([field.name])) !== false)) {\n      <ng-container *ngTemplateOutlet=\"iconTemplate; context: { inputIcon }\"></ng-container>\n    }\n  }\n\n  <mat-form-field [formGroup]=\"group\" [attr.data-qid]=\"field.name\" appearance=\"outline\">\n\n    @if (hasLabel) {\n      <ng-container ngProjectAs=\"mat-label\">\n        <mat-label>{{ field.label }}</mat-label>\n        @if (field.tooltip) {\n          <brie-icon class=\"tooltip-icon qa-tooltip\" [matTooltip]=\"field.tooltip\"\n            [size]=\"iconSizes.SM\" name=\"info_outline\">\n        </brie-icon>\n      }\n    </ng-container>\n  }\n\n  @for (inputIcon of getIcons(); track inputIcon) {\n    <ng-container matPrefix>\n      @if (inputIcon.position === iconPositions.PREFIX && (!inputIcon.visible || inputIcon.visible(group.get([field.name])) !== false)) {\n        <ng-container *ngTemplateOutlet=\"iconTemplate; context: { inputIcon }\"></ng-container>\n      }\n    </ng-container>\n  }\n\n  <input (click)=\"field.openPicker(control.value,this.field)\" matInput [formControlName]=\"field.name\" [id]=\"inputId\"\n    [name]=\"field.name\" [placeholder]=\"field.placeholder ?? ''\" [readonly]=\"true\" type=\"text\" [attr.data-qid]=\"inputId\" />\n\n  @for (inputIcon of getIcons(); track inputIcon) {\n    <ng-container matSuffix>\n      @if (inputIcon.position === iconPositions.SUFFIX && (!inputIcon.visible || inputIcon.visible(group.get([field.name])) !== false)) {\n        <ng-container *ngTemplateOutlet=\"iconTemplate; context: { inputIcon }\"></ng-container>\n      }\n    </ng-container>\n  }\n\n  @if (field.hint) {\n    <mat-hint>{{ field.hint }}</mat-hint>\n  }\n\n  @for (error of field.errors; track error) {\n    <ng-container ngProjectAs=\"mat-error\">\n      @if (error.validate(group.get([field.name]))) {\n        <mat-error class=\"brie-error-message\">{{ error.message }}</mat-error>\n      }\n    </ng-container>\n  }\n</mat-form-field>\n\n@for (inputIcon of getIcons(); track inputIcon) {\n  @if (inputIcon.position === iconPositions.TRAILING_OUTSIDE && (!inputIcon.visible || inputIcon.visible(group.get([field.name])) !== false)) {\n    <ng-container *ngTemplateOutlet=\"iconTemplate; context: { inputIcon }\"></ng-container>\n  }\n}\n</div>\n\n<ng-template #iconTemplate let-inputIcon=\"inputIcon\">\n  <button type=\"button\" mat-icon-button [disabled]=\"isFieldDisabled()\"\n    (click)=\"inputIcon.onClick && inputIcon.onClick(control, field)\">\n    <brie-icon [style]=\"inputIcon.icon.style\" [attr.data-qid]=\"inputIcon.icon.name\" [name]=\"inputIcon.icon.name\" [fontSet]=\"inputIcon.icon.fontSet\"\n      [tooltip]=\"inputIcon.icon.tooltip\" [size]=\"inputIcon.icon.size || iconSizes.SM\" [type]=\"inputIcon.icon.type\">\n  </brie-icon>\n</button>\n</ng-template>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrieFormSelectField } from '../../models/form';\n\n@Component({\n  selector: 'brie-form-select',\n  templateUrl: './form-select.component.html',\n  styleUrls: ['./form-select.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatSelectModule,\n    MatIconModule,\n    MatButtonModule,\n    MatTooltipModule,\n    BrieIconModule,\n  ],\n\n})\nexport class BrieFormSelectComponent {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormSelectField;\n  @Input() hasLabel?: boolean;\n\n  iconSizes = BrieIconSize;\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  get selectId(): string {\n    return `${this.fieldId}-select`;\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<mat-form-field [attr.data-qid]=\"field.name\" appearance=\"outline\" [formGroup]=\"group\">\n\n  @if (hasLabel) {\n    <ng-container ngProjectAs=\"mat-label\">\n      <mat-label>{{ field.label }}</mat-label>\n      @if (field.tooltip) {\n        <brie-icon class=\"tooltip-icon qa-tooltip\"\n        [size]=\"iconSizes.SM\" [matTooltip]=\"field.tooltip\" [name]=\"'info_outline'\"></brie-icon>\n      }\n    </ng-container>\n  }\n\n  <mat-select [attr.data-qid]=\"selectId\" [multiple]=\"field.multiple ?? false\" [formControlName]=\"field.name\" [id]=\"selectId\"\n    [placeholder]=\"field.placeholder ?? ''\" panelClass=\"brie-select-panel\" disableOptionCentering>\n  @for (option of field.options; track option) {\n    <mat-option [disabled]=\"option.disabled ?? false\" [value]=\"option.value\">\n      {{ option.label }}\n    </mat-option>\n  }\n</mat-select>\n\n@if (field.hint) {\n  <mat-hint>{{ field.hint }}</mat-hint>\n}\n\n\n@for (error of field.errors; track error) {\n  <ng-container ngProjectAs=\"mat-error\">\n    @if (error.validate(group.get([field.name]))) {\n      <mat-error class=\"brie-error-message\">{{ error.message }}</mat-error>\n    }\n  </ng-container>\n}\n\n</mat-form-field>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { filter, map, startWith } from 'rxjs/operators';\n\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\nimport { CommonModule } from '@angular/common';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { BrieFormInputField, BrieFormInputIcon, BrieFormInputIconPosition } from '../../models/form';\n\n@Component({\n  selector: 'brie-form-input',\n  templateUrl: './form-input.component.html',\n  styleUrls: ['./form-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatInputModule,\n    MatIconModule,\n    MatButtonModule,\n    MatTooltipModule,\n    BrieIconModule,\n    MatAutocompleteModule,\n  ],\n\n})\nexport class BrieFormInputComponent implements OnInit {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormInputField;\n  @Input() hasLabel?: boolean;\n\n  filteredOptions?: Observable<string[]>;\n\n  iconPositions = BrieFormInputIconPosition;\n  iconSizes = BrieIconSize;\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  get inputId(): string {\n    return `${this.fieldId}-input`;\n  }\n\n  get control(): AbstractControl {\n    return this.group.get([this.field.name]) as AbstractControl;\n  }\n\n  ngOnInit(): void {\n    this.filteredOptions = this.group.get([this.field.id])?.valueChanges.pipe(\n      startWith(''),\n      filter((value) => typeof value === 'string' || typeof value === 'number'),\n      map((value) => String(value)),\n      map((value) => this.filterOptions(value)),\n    );\n  }\n\n  isFieldDisabled(): boolean {\n    const { disabled } = this.control || {};\n    return !!disabled;\n  }\n\n  isIconEnabled(inputIcon: BrieFormInputIcon): boolean {\n    return !this.isFieldDisabled() || inputIcon.position === this.iconPositions.TRAILING_OUTSIDE;\n  }\n\n  private filterOptions(value: string): string[] {\n    if (value === '') {\n      return [];\n    }\n\n    const search = value.toLowerCase();\n\n    return this.field.options?.filter((option) => option.toLowerCase().includes(search)) || [];\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<div class=\"input-container\">\n  @for (inputIcon of field.icons; track inputIcon) {\n    @if (inputIcon.position === iconPositions.LEADING_OUTSIDE && (!inputIcon.visible || inputIcon.visible(group.get([field.name])) !== false)) {\n      <ng-container *ngTemplateOutlet=\"iconTemplate; context: { inputIcon }\"></ng-container>\n    }\n  }\n\n  <mat-form-field [formGroup]=\"group\" [attr.data-qid]=\"field.name\" appearance=\"outline\">\n\n    @if (hasLabel) {\n      <ng-container ngProjectAs=\"mat-label\">\n        <mat-label>{{ field.label }}</mat-label>\n        @if (field.tooltip) {\n          <brie-icon class=\"tooltip-icon qa-tooltip\"\n          [size]=\"iconSizes.SM\" [matTooltip]=\"field.tooltip\" [name]=\"'info_outline'\"></brie-icon>\n        }\n      </ng-container>\n    }\n\n    @for (inputIcon of field.icons; track inputIcon) {\n      <ng-container matPrefix>\n        @if (inputIcon.position === iconPositions.PREFIX && (!inputIcon.visible || inputIcon.visible(group.get([field.name])) !== false)) {\n          <ng-container *ngTemplateOutlet=\"iconTemplate; context: { inputIcon }\"></ng-container>\n        }\n      </ng-container>\n    }\n\n    <input matInput [formControlName]=\"field.name\" [attr.data-qid]=\"inputId\" [id]=\"inputId\" [name]=\"field.name\"\n      [placeholder]=\"field.placeholder ?? ''\" [readonly]=\"field.readOnly ?? false\"\n      [type]=\"field.inputType ?? 'text'\" [matAutocomplete]=\"auto\" (keydown.enter)=\"$event.preventDefault()\" />\n\n    @for (inputIcon of field.icons; track inputIcon) {\n      <ng-container matSuffix>\n        @if (inputIcon.position === iconPositions.SUFFIX && (!inputIcon.visible || inputIcon.visible(group.get([field.name])) !== false)) {\n          <ng-container *ngTemplateOutlet=\"iconTemplate; context: { inputIcon }\"></ng-container>\n        }\n      </ng-container>\n    }\n\n    @if (field.hint) {\n      <mat-hint>{{ field.hint }}</mat-hint>\n    }\n\n    @for (error of field.errors; track error) {\n      <ng-container ngProjectAs=\"mat-error\">\n        @if (error.validate(group.get([field.name]))) {\n          <mat-error class=\"brie-error-message\">{{ error.message }}</mat-error>\n        }\n      </ng-container>\n    }\n\n    <mat-autocomplete #auto=\"matAutocomplete\">\n      @for (option of filteredOptions | async; track option) {\n        <mat-option [value]=\"option\">\n          {{option}}\n        </mat-option>\n      }\n    </mat-autocomplete>\n\n  </mat-form-field>\n\n  @for (inputIcon of field.icons; track inputIcon) {\n    @if (inputIcon.position === iconPositions.TRAILING_OUTSIDE && (!inputIcon.visible || inputIcon.visible(group.get([field.name])) !== false)) {\n      <ng-container *ngTemplateOutlet=\"iconTemplate; context: { inputIcon }\"></ng-container>\n    }\n  }\n</div>\n\n<ng-template #iconTemplate let-inputIcon=\"inputIcon\">\n  <button type=\"button\" mat-icon-button\n    (click)=\"isIconEnabled(inputIcon) && inputIcon.onClick && inputIcon.onClick(control, field)\">\n    <brie-icon [style]=\"inputIcon.icon.style\" [attr.data-qid]=\"inputIcon.icon.name\" [name]=\"inputIcon.icon.name\" [fontSet]=\"inputIcon.icon.fontSet\"\n      [tooltip]=\"inputIcon.icon.tooltip\" [size]=\"inputIcon.icon.size || iconSizes.SM\" [type]=\"inputIcon.icon.type\">\n  </brie-icon>\n</button>\n</ng-template>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatInputModule } from '@angular/material/input';\nimport { BrieFormHiddenField } from '../../models/form';\n\n@Component({\n  selector: 'brie-form-hidden',\n  standalone: true,\n  templateUrl: './form-hidden.component.html',\n  styleUrls: ['./form-hidden.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    MatInputModule,\n  ],\n})\nexport class BrieFormHiddenComponent {\n  @Input() group: FormGroup;\n  @Input() field: BrieFormHiddenField;\n\n  @HostBinding('attr.id') get fieldId(): string {\n    return this.field.id;\n  }\n\n  get inputId(): string {\n    return `${this.fieldId}-input`;\n  }\n\n  get control(): AbstractControl {\n    return this.group.get([this.field.name]) as AbstractControl;\n  }\n}\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<div [formGroup]=\"group\" [attr.data-qid]=\"field.name\">\n  <input [formControlName]=\"field.name\" [id]=\"inputId\" [name]=\"field.name\" type=\"hidden\" />\n</div>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { BrieFormFieldType, BrieFormField } from '../../models/form';\nimport { BrieFormCheckboxComponent } from '../form-checkbox/form-checkbox.component';\nimport { BrieFormTextComponent } from '../form-text/form-text.component';\nimport { BrieFormRadioComponent } from '../form-radio/form-radio.component';\nimport { BrieFormDateTimeComponent } from '../form-datetime/form-datetime.component';\nimport { BrieFormLinkpickerComponent } from '../form-linkpicker/form-linkpicker.component';\nimport { BrieFormSelectComponent } from '../form-select/form-select.component';\nimport { BrieFormInputComponent } from '../form-input/form-input.component';\nimport { BrieFormToggleComponent } from '../form-toggle/form-toggle.component';\nimport { BrieFormHiddenComponent } from '../form-hidden/form-hidden.component';\n\n@Component({\n  selector: 'brie-form-control',\n  templateUrl: './form-control.component.html',\n  styleUrls: ['./form-control.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    BrieFormCheckboxComponent,\n    BrieFormTextComponent,\n    BrieFormRadioComponent,\n    BrieFormDateTimeComponent,\n    BrieFormLinkpickerComponent,\n    BrieFormSelectComponent,\n    BrieFormInputComponent,\n    BrieFormToggleComponent,\n    BrieFormHiddenComponent,\n  ],\n\n})\nexport class BrieFormControlComponent {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormField;\n  @Input() index: number;\n\n  get FieldTypes(): typeof BrieFormFieldType {\n    return BrieFormFieldType;\n  }\n\n  get hasLabel(): boolean {\n    return !!this.field.label && (this.index ?? 0) === 0;\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<div [formGroup]=\"group\">\n  @if (field.type === FieldTypes.INPUT) {\n    <brie-form-input\n      [hasLabel]=\"hasLabel\"\n      [group]=\"group\"\n    [field]=\"field\"></brie-form-input>\n  }\n\n  @if (field.type === FieldTypes.HIDDEN) {\n    <brie-form-hidden\n      [group]=\"group\"\n    [field]=\"field\"></brie-form-hidden>\n  }\n\n  @if (field.type === FieldTypes.SELECT) {\n    <brie-form-select\n      [hasLabel]=\"hasLabel\"\n      [group]=\"group\"\n    [field]=\"field\"></brie-form-select>\n  }\n\n  @if (field.type === FieldTypes.CHECKBOX) {\n    <brie-form-checkbox\n      [group]=\"group\"\n    [field]=\"field\"></brie-form-checkbox>\n  }\n\n  @if (field.type === FieldTypes.TOGGLE) {\n    <brie-form-toggle\n      [group]=\"group\"\n    [field]=\"field\"></brie-form-toggle>\n  }\n\n  @if (field.type === FieldTypes.TEXT) {\n    <brie-form-text\n      [hasLabel]=\"hasLabel\"\n      [group]=\"group\"\n    [field]=\"field\"></brie-form-text>\n  }\n\n  @if (field.type === FieldTypes.RADIO) {\n    <brie-form-radio\n      [group]=\"group\"\n    [field]=\"field\"></brie-form-radio>\n  }\n\n  @if (field.type === FieldTypes.DATE) {\n    <brie-form-datetime\n      [group]=\"group\"\n      [hasLabel]=\"hasLabel\"\n      [type]=\"FieldTypes.DATE\"\n    [field]=\"field\"></brie-form-datetime>\n  }\n\n  @if (field.type === FieldTypes.DATE_TIME) {\n    <brie-form-datetime\n      [group]=\"group\"\n      [hasLabel]=\"hasLabel\"\n      [type]=\"FieldTypes.DATE_TIME\"\n    [field]=\"field\"></brie-form-datetime>\n  }\n\n  @if (field.type === FieldTypes.LINK_PICKER) {\n    <brie-form-linkpicker\n      [hasLabel]=\"hasLabel\"\n      [group]=\"group\"\n    [field]=\"field\"></brie-form-linkpicker>\n  }\n</div>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { AbstractControlOptions, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\nimport {\n  BrieFormControls,\n  BrieFormField,\n  BrieFormFieldType,\n  BrieFormDataSource,\n  BrieFormGroupRepeaterField,\n  BrieFormGroupRepeaterValues,\n} from '../models/form';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BrieFormService {\n  createFormGroup(fields: BrieFormDataSource, options: AbstractControlOptions | null = null): UntypedFormGroup {\n    const controls = this.buildBrieFormControls(fields);\n\n    return new UntypedFormGroup(controls, options);\n  }\n\n  createGroupRepeaterFormArray(\n    field: BrieFormGroupRepeaterField,\n    values?: BrieFormGroupRepeaterValues,\n  ): UntypedFormArray {\n    const fieldValue = field?.values?.length ? field.values : [{}];\n    const groupRepeaterValues = values || fieldValue;\n\n    const groupRepeaterFieldsArray = groupRepeaterValues.map((groupRepeaterFieldItem) => {\n      const groupRepeaterFields: BrieFormField[] = field.fields.map((groupRepeaterField) => ({\n        ...groupRepeaterField,\n        value: groupRepeaterFieldItem[groupRepeaterField.name] as any,\n      }));\n      return this.createFormGroup(groupRepeaterFields);\n    });\n\n    return new UntypedFormArray(groupRepeaterFieldsArray);\n  }\n\n  private buildBrieFormControls(fields: BrieFormDataSource): BrieFormControls {\n    return fields.reduce((controls: BrieFormControls, field) => {\n      switch (field.type) {\n      case BrieFormFieldType.GROUP_REPEATER:\n        controls[field.name] = this.createGroupRepeaterFormArray(field);\n\n        return controls;\n      case BrieFormFieldType.FIELDS_GROUP:\n        return { ...controls, ...this.buildBrieFormControls(field.fields) };\n      default: {\n        const controlState = { value: field.value, disabled: field.disabled };\n\n        controls[field.name] = new UntypedFormControl(controlState, { validators: field.validators });\n\n        return controls;\n      }\n      }\n    }, {});\n  }\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ElementRef, Input, QueryList, ViewChildren, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrieIconModule } from '@bloomreach/brie/icon';\nimport { BrieFormField, BrieFormGroupRepeaterField } from '../../models/form';\nimport { BrieFormService } from '../../services/form.service';\nimport { BrieFormControlComponent } from '../form-control/form-control.component';\n\n@Component({\n  selector: 'brie-form-group-repeater',\n  templateUrl: './form-group-repeater.component.html',\n  styleUrls: ['./form-group-repeater.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatIconModule,\n    MatButtonModule,\n    MatTooltipModule,\n    BrieIconModule,\n    BrieFormControlComponent,\n    DragDropModule,\n  ],\n\n})\nexport class BrieFormGroupRepeaterComponent {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormGroupRepeaterField;\n\n  @ViewChildren('formGroupControl', { read: ElementRef })\n  formGroupControl: QueryList<ElementRef<HTMLInputElement | HTMLSelectElement>>;\n\n  constructor(\n    private readonly formService: BrieFormService,\n  ) { }\n\n  get fieldsFormArray(): UntypedFormArray {\n    return this.group.get([this.field.name]) as UntypedFormArray;\n  }\n\n  get fields(): BrieFormField[] {\n    return this.field?.fields || [];\n  }\n\n  getFormGroup(id: number): UntypedFormGroup {\n    return this.fieldsFormArray.controls[id] as UntypedFormGroup;\n  }\n\n  add(event: Event): void {\n    event.preventDefault();\n\n    if (this.group.pristine) {\n      this.group.markAsDirty();\n    }\n\n    const formGroup = this.formService.createFormGroup(this.fields);\n    this.fieldsFormArray.push(formGroup);\n\n    setTimeout(() => {\n      const nodeList = this.formGroupControl.last.nativeElement.querySelectorAll('brie-form-control');\n\n      if (nodeList) {\n        this.focusFormControl(nodeList, 0);\n      }\n    });\n  }\n\n  remove(event: Event, i: number): void {\n    event.preventDefault();\n\n    const arr = this.fieldsFormArray;\n\n    if (arr.length === 1) {\n      arr.reset();\n    } else {\n      arr.removeAt(i);\n    }\n\n    if (this.group.pristine) {\n      this.group.markAsDirty();\n    }\n\n    setTimeout(() => {\n      const elementRef = this.formGroupControl.get(Math.max(0, i - 1));\n      const nodeList = elementRef?.nativeElement.querySelectorAll('brie-form-control');\n\n      if (nodeList) {\n        this.focusFormControl(nodeList, 0);\n      }\n    });\n  }\n\n  drop(event: CdkDragDrop<string[]>): void {\n    const arr = this.fieldsFormArray;\n    const fromIndex = event.previousIndex;\n    const toIndex = event.currentIndex;\n    const dir = toIndex > fromIndex ? 1 : -1;\n    const item = arr.at(fromIndex);\n\n    for (let i = fromIndex; i * dir < toIndex * dir; i += dir) {\n      const current = arr.at(i + dir);\n      arr.setControl(i, current);\n    }\n\n    arr.setControl(toIndex, item);\n  }\n\n  isDragDisabled(): boolean {\n    return !this.field.draggable || this.fieldsFormArray.length < 2;\n  }\n\n  isReadOnly(): boolean {\n    return !!this.field.readOnly;\n  }\n\n  private focusFormControl(nodeList: NodeListOf<Element>, index: number): void {\n    const control = nodeList[index];\n    const input = control?.querySelector<HTMLInputElement>('input, mat-select');\n\n    if (input && document.activeElement !== input) {\n      if (this.isFieldDisabled(input)) {\n        this.focusFormControl(nodeList, index + 1);\n        return;\n      }\n\n      input.focus();\n    }\n  }\n\n  private isFieldDisabled(input: HTMLInputElement): boolean {\n    switch (input.tagName) {\n    case 'INPUT':\n      return input.disabled;\n    case 'MAT-SELECT':\n      return input.getAttribute('aria-disabled') === 'true';\n    default:\n      return false;\n    }\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<div [formGroup]=\"group\"\n  class=\"brie-group-repeater\"\n  [id]=\"field.id\">\n  <div [formArrayName]=\"field.name\"\n    class=\"brie-group-repeater-items\"\n    cdkDropList\n    (cdkDropListDropped)=\"drop($event)\">\n    @for (_ of fieldsFormArray.controls; track _; let i = $index) {\n      <div\n        class=\"brie-group-repeater-fields\">\n        <div #formGroupControl\n          [formGroupName]=\"i\"\n          class=\"brie-group-repeater-item\"\n          cdkDrag\n          [cdkDragDisabled]=\"isDragDisabled()\"\n          cdkDragBoundary=\".brie-group-repeater-items\"\n          cdkDragLockAxis=\"y\">\n          @for (field of fields; track field) {\n            <div\n              class=\"brie-group-repeater-field\"\n              [ngStyle]=\"{'width': field.width}\">\n              <brie-form-control [group]=\"getFormGroup(i)\"\n                [index]=\"i\"\n              [field]=\"field\"></brie-form-control>\n            </div>\n          }\n          @if (!isDragDisabled()) {\n            <button\n              mat-icon-button\n              class=\"brie-group-repeater-drag-button\"\n              cdkDragHandle>\n            <mat-icon>menu_outlined</mat-icon>\n          </button>\n        }\n        @if (!isReadOnly()) {\n          <button\n            mat-icon-button\n            class=\"brie-group-repeater-remove-button\"\n            (click)=\"remove($event, i)\">\n            <mat-icon>highlight_off</mat-icon>\n          </button>\n        }\n      </div>\n    </div>\n  }\n</div>\n@if (!isReadOnly()) {\n  <button\n    mat-icon-button\n    class=\"brie-group-repeater-add-button\"\n    (click)=\"add($event)\">\n    <mat-icon>add_circle_outline</mat-icon>\n  </button>\n}\n</div>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { BrieExpansionPanelIcon, BrieExpansionPanelComponent } from '@bloomreach/brie/expansion-panel';\nimport { BrieIconType } from '@bloomreach/brie/icon';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { BrieFormFieldType, BrieFormFieldsGroup } from '../../models/form';\nimport { BrieFormControlComponent } from '../form-control/form-control.component';\nimport { BrieFormGroupRepeaterComponent } from '../form-group-repeater/form-group-repeater.component';\n\n@Component({\n  selector: 'brie-form-fields-group',\n  templateUrl: './form-fields-group.component.html',\n  styleUrls: ['./form-fields-group.component.scss'],\n  animations: [\n    trigger('collapseAnimation', [\n      state('expanded', style({\n        height: '*',\n      })),\n      state('collapsed', style({\n        height: '0',\n        overflow: 'hidden',\n      })),\n      transition('expanded <=> collapsed', [\n        animate('0.2s ease-out'),\n      ]),\n    ]),\n  ],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatIconModule,\n    MatButtonModule,\n    BrieExpansionPanelComponent,\n    BrieFormControlComponent,\n    BrieFormGroupRepeaterComponent,\n  ],\n\n})\nexport class BrieFormFieldsGroupComponent {\n  @Input() group: UntypedFormGroup;\n  @Input() field: BrieFormFieldsGroup;\n\n  isCollapsed = false;\n\n  @HostBinding('attr.id') get groupId(): string {\n    return this.field.id;\n  }\n\n  get FieldTypes(): typeof BrieFormFieldType {\n    return BrieFormFieldType;\n  }\n\n  get fields(): BrieFormFieldsGroup['fields'] {\n    return this.field.fields;\n  }\n\n  get panelIcon(): BrieExpansionPanelIcon {\n    return {\n      name: 'info',\n      type: BrieIconType.MATERIAL,\n      fontSet: 'material-icons-outlined',\n    };\n  }\n\n  toggleCollapse(): void {\n    if (this.field.collapsable) {\n      this.isCollapsed = !this.isCollapsed;\n    }\n  }\n\n  trackByFn(_index: number, field: BrieFormFieldsGroup['fields'][0]): string {\n    return field.id;\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<div [ngClass]=\"{collapsable:this.field.collapsable}\" (click)=\"toggleCollapse()\" class=\"brie-form-fields-group-label\">\n  @if (this.field.collapsable) {\n    <mat-icon class=\"collapse-toggle-icon\" [ngClass]=\"{ 'icon-collapsed': isCollapsed }\">\n      expand_more\n    </mat-icon>\n  }\n  {{field.label }}\n</div>\n\n<div [@collapseAnimation]=\"isCollapsed ? 'collapsed' : 'expanded'\">\n  @if (!!field.panel) {\n    <brie-expansion-panel class='brie-form-fields-group-panel' [title]=\"field.panel.title\"\n      [icon]=\"panelIcon\">\n    <div [innerHTML]=\"field.panel.content\"></div>\n  </brie-expansion-panel>\n}\n@for (field of fields; track trackByFn($index, field)) {\n  @if (field.type !== FieldTypes.GROUP_REPEATER) {\n    <div class=\"brie-form-controls\">\n      <brie-form-control #formControl [group]=\"group\" [field]=\"field\"></brie-form-control>\n    </div>\n  }\n  @if (field.type === FieldTypes.GROUP_REPEATER) {\n    <div class=\"brie-form-controls\">\n      <brie-form-group-repeater #repeaterControl [group]=\"group\" [field]=\"field\"></brie-form-group-repeater>\n    </div>\n  }\n}\n</div>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  QueryList,\n  ViewChildren,\n  ChangeDetectionStrategy,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport {\n  BrieFormField,\n  BrieFormFieldType,\n  BrieFormDataSource,\n  BrieFormGroupRepeaterField,\n  BrieFormFieldsGroup,\n} from '../models/form';\nimport { BrieFormControlComponent } from './form-control/form-control.component';\nimport { BrieFormGroupRepeaterComponent } from './form-group-repeater/form-group-repeater.component';\nimport { BrieFormFieldsGroupComponent } from './form-fields-group/form-fields-group.component';\n\n@Component({\n  selector: 'brie-form',\n  templateUrl: './form.component.html',\n  styleUrls: ['./form.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    BrieFormControlComponent,\n    BrieFormGroupRepeaterComponent,\n    BrieFormFieldsGroupComponent,\n  ],\n\n})\nexport class BrieFormComponent implements AfterViewInit, OnDestroy {\n  @Input() group: UntypedFormGroup;\n  @Input() dataSource: BrieFormDataSource = [];\n  @Input() autofocus = true;\n  @Input() focusChanged = new EventEmitter<void>();\n\n  @ViewChildren('formControl', { read: ElementRef })\n  formControl: QueryList<ElementRef<HTMLInputElement | HTMLSelectElement>>;\n\n  @ViewChildren('repeaterControl', { read: ElementRef })\n  repeaterControl: QueryList<ElementRef<HTMLInputElement | HTMLSelectElement>>;\n\n  private subscriptions = new Subscription();\n\n  constructor(\n    private readonly detectorRef: ChangeDetectorRef,\n  ) { }\n\n  ngAfterViewInit(): void {\n    if (this.autofocus) {\n      this.focusForm();\n    }\n\n    const focusChanged$ = this.focusChanged.subscribe(() => {\n      this.focusForm();\n    });\n\n    this.subscriptions.add(focusChanged$);\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  get FieldTypes(): typeof BrieFormFieldType {\n    return BrieFormFieldType;\n  }\n\n  trackByFn(_index: number, field: BrieFormField | BrieFormGroupRepeaterField | BrieFormFieldsGroup): string {\n    return field.id;\n  }\n\n  private focusForm(): void {\n    if (this.formControl?.first) {\n      const control = this.formControl.first.nativeElement;\n\n      if (control) {\n        this.focusFormControl(control, 1);\n      }\n    } else if (this.repeaterControl?.first) {\n      const nodeList = this.repeaterControl.first.nativeElement.querySelectorAll('brie-form-control');\n\n      if (nodeList) {\n        this.focusRepeaterControl(nodeList, 0);\n      }\n    }\n  }\n\n  private focusFormControl(control: HTMLInputElement | HTMLSelectElement, index: number): void {\n    const input = control.querySelector<HTMLInputElement>('input, mat-select');\n\n    if (input && document.activeElement !== input) {\n      if (this.isFieldDisabled(input)) {\n        const next = this.formControl.get(index)?.nativeElement;\n\n        if (next) {\n          this.focusFormControl(next, index + 1);\n          return;\n        }\n\n        if (this.repeaterControl?.first) {\n          const nodeList = this.repeaterControl.first.nativeElement.querySelectorAll('brie-form-control');\n\n          if (nodeList) {\n            this.focusRepeaterControl(nodeList, 0);\n          }\n\n          return;\n        }\n      }\n\n      input.focus();\n      this.detectorRef.detectChanges();\n    }\n  }\n\n  private focusRepeaterControl(nodeList: NodeListOf<Element>, index: number): void {\n    const control = nodeList[index];\n    const input = control?.querySelector<HTMLInputElement>('input, mat-select');\n\n    if (input && document.activeElement !== input) {\n      if (this.isFieldDisabled(input)) {\n        this.focusRepeaterControl(nodeList, index + 1);\n        return;\n      }\n\n      input.focus();\n      this.detectorRef.detectChanges();\n    }\n  }\n\n  private isFieldDisabled(input: HTMLInputElement): boolean {\n    switch (input.tagName) {\n    case 'INPUT':\n      return input.disabled;\n    case 'MAT-SELECT':\n      return input.getAttribute('aria-disabled') === 'true';\n    default:\n      return false;\n    }\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n@for (field of dataSource; track trackByFn($index, field)) {\n  @if (field.type !== FieldTypes.GROUP_REPEATER && field.type !== FieldTypes.FIELDS_GROUP) {\n    <div class=\"brie-form-controls\">\n      <brie-form-control #formControl [group]=\"group\" [field]=\"field\"></brie-form-control>\n    </div>\n  }\n  @if (field.type === FieldTypes.GROUP_REPEATER) {\n    <div [hidden]=\"field.hidden\" class=\"brie-form-controls\">\n      <brie-form-group-repeater #repeaterControl [group]=\"group\" [field]=\"field\"></brie-form-group-repeater>\n    </div>\n  }\n  @if (field.type === FieldTypes.FIELDS_GROUP) {\n    <div [hidden]=\"field.hidden\" class=\"brie-form-controls\">\n      <brie-form-fields-group [group]=\"group\" [field]=\"field\"></brie-form-fields-group>\n    </div>\n  }\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function focusFirstInvalidControl(container: HTMLElement): void {\n  const invalidSelector = [\n    '[aria-invalid=\"true\"]',\n    '.ng-invalid input',\n    '.ng-invalid textarea',\n    '.ng-invalid select',\n    'input.ng-invalid',\n    'textarea.ng-invalid',\n    'select.ng-invalid',\n  ].join(',');\n\n  const el = container.querySelector<HTMLElement>(invalidSelector);\n  if (el && typeof el.focus === 'function') {\n    el.focus();\n  }\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\n\nimport { BrieFormValidationOptions, BrieFormValidationResult } from '../models/form-validation';\nimport { focusFirstInvalidControl } from '../utils/focus-first-invalid-control';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BrieFormValidationService {\n  showValidationErrors(\n    form: AbstractControl,\n    options: BrieFormValidationOptions = {},\n  ): BrieFormValidationResult {\n    form.markAllAsTouched();\n\n    if (options.updateValueAndValidity !== false) {\n      form.updateValueAndValidity({ onlySelf: false, emitEvent: true });\n    }\n\n    const firstInvalidControl = this.findFirstInvalidControl(form);\n    const { valid } = form;\n\n    if (options.focusFirstError && !valid && options.focusRoot) {\n      focusFirstInvalidControl(options.focusRoot);\n    }\n\n    return { valid, firstInvalidControl };\n  }\n\n  private findFirstInvalidControl(control: AbstractControl): AbstractControl | undefined {\n    if (!control.invalid) {\n      return undefined;\n    }\n\n    if (control instanceof FormGroup) {\n      const invalidChild = Object.keys(control.controls)\n        .map((key) => this.findFirstInvalidControl(control.controls[key]))\n        .find((result) => result !== undefined);\n\n      if (invalidChild) {\n        return invalidChild;\n      }\n    } else if (control instanceof FormArray) {\n      const invalidChild = control.controls\n        .map((child) => this.findFirstInvalidControl(child))\n        .find((result) => result !== undefined);\n\n      if (invalidChild) {\n        return invalidChild;\n      }\n    }\n\n    return control;\n  }\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive, ElementRef, HostListener, Input, Optional } from '@angular/core';\nimport { FormGroupDirective } from '@angular/forms';\n\nimport { BrieFormValidationService } from '../services/form-validation.service';\n\n@Directive({\n  selector: 'form[brieShowErrorsOnSubmit]',\n  standalone: true,\n})\nexport class BrieShowErrorsOnSubmitDirective {\n  @Input() brieShowErrorsOnSubmit: boolean | '' = true;\n  @Input() brieFocusFirstError: boolean | '' = false;\n\n  constructor(\n    private readonly host: ElementRef<HTMLElement>,\n    private readonly validationService: BrieFormValidationService,\n    @Optional() private readonly formGroupDirective?: FormGroupDirective,\n  ) {}\n\n  @HostListener('submit')\n  onSubmit(): void {\n    if (!this.isEnabled()) {\n      return;\n    }\n\n    const form = this.formGroupDirective?.form;\n    if (!form) {\n      return;\n    }\n\n    this.validationService.showValidationErrors(form, {\n      focusFirstError: this.shouldFocusFirstError(),\n      focusRoot: this.host.nativeElement,\n    });\n  }\n\n  private isEnabled(): boolean {\n    return this.brieShowErrorsOnSubmit === '' || this.brieShowErrorsOnSubmit === true;\n  }\n\n  private shouldFocusFirstError(): boolean {\n    return this.brieFocusFirstError === '' || this.brieFocusFirstError === true;\n  }\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BrieExpansionPanelModule } from '@bloomreach/brie/expansion-panel';\nimport { BrieIconModule } from '@bloomreach/brie/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { BrieFormCheckboxComponent } from './components/form-checkbox/form-checkbox.component';\nimport { BrieFormToggleComponent } from './components/form-toggle/form-toggle.component';\nimport { BrieFormControlComponent } from './components/form-control/form-control.component';\nimport { BrieFormFieldsGroupComponent } from './components/form-fields-group/form-fields-group.component';\nimport { BrieFormGroupRepeaterComponent } from './components/form-group-repeater/form-group-repeater.component';\nimport { BrieFormInputComponent } from './components/form-input/form-input.component';\nimport { BrieFormRadioComponent } from './components/form-radio/form-radio.component';\nimport { BrieFormSelectComponent } from './components/form-select/form-select.component';\nimport { BrieFormTextComponent } from './components/form-text/form-text.component';\nimport { BrieFormComponent } from './components/form.component';\nimport { BrieFormDateTimeComponent } from './components/form-datetime/form-datetime.component';\nimport { DatetimeFieldComponent } from './components/form-datetime/datetime-field/datetime-field.component';\nimport { BrieFormLinkpickerComponent } from './components/form-linkpicker/form-linkpicker.component';\nimport { BrieShowErrorsOnSubmitDirective } from './directives/show-errors-on-submit.directive';\nimport { BrieFormHiddenComponent } from './components/form-hidden/form-hidden.component';\n\n@NgModule({\n  imports: [\n    BrieExpansionPanelModule,\n    CommonModule,\n    DragDropModule,\n    FormsModule,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatSlideToggleModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatInputModule,\n    MatSelectModule,\n    MatDatepickerModule,\n    ReactiveFormsModule,\n    MatRadioModule,\n    MatTooltipModule,\n    BrieIconModule,\n    BrieFormComponent,\n    BrieFormInputComponent,\n    BrieFormLinkpickerComponent,\n    BrieFormControlComponent,\n    BrieFormSelectComponent,\n    BrieFormCheckboxComponent,\n    BrieFormToggleComponent,\n    BrieFormGroupRepeaterComponent,\n    BrieFormTextComponent,\n    BrieFormFieldsGroupComponent,\n    BrieFormRadioComponent,\n    DatetimeFieldComponent,\n    BrieFormDateTimeComponent,\n    BrieShowErrorsOnSubmitDirective,\n    BrieFormHiddenComponent,\n  ],\n  exports: [\n    BrieFormComponent,\n    BrieShowErrorsOnSubmitDirective,\n  ],\n})\nexport class BrieFormModule {\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractControl } from '@angular/forms';\n\nexport interface BrieFormValidationOptions {\n  /** Re-run updateValueAndValidity on the form tree. Default: true */\n  updateValueAndValidity?: boolean;\n  /** Focus the first invalid control after marking touched. Default: false */\n  focusFirstError?: boolean;\n  /** DOM scope for focus; directive passes the form element */\n  focusRoot?: HTMLElement;\n}\n\nexport interface BrieFormValidationResult {\n  valid: boolean;\n  firstInvalidControl?: AbstractControl;\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './form.module';\nexport * from './components/form.component';\nexport * from './components/form-checkbox/form-checkbox.component';\nexport * from './components/form-toggle/form-toggle.component';\nexport * from './components/form-control/form-control.component';\nexport * from './components/form-group-repeater/form-group-repeater.component';\nexport * from './components/form-input/form-input.component';\nexport * from './components/form-hidden/form-hidden.component';\nexport * from './components/form-select/form-select.component';\nexport * from './components/form-radio/form-radio.component';\nexport * from './models/form';\nexport * from './models/form-validation';\nexport * from './services/form.service';\nexport * from './services/form-validation.service';\nexport * from './directives/show-errors-on-submit.directive';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrieButtonGroupActions } from '@bloomreach/brie/button-group';\n\nexport type BrieHeadingActions = BrieButtonGroupActions;\n\n// These values reflects with heading size styles\nexport enum BrieHeadingSize {\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BrieButtonGroupModule } from '@bloomreach/brie/button-group';\nimport { BrieHeadingActions, BrieHeadingSize } from '../models/heading';\n\n@Component({\n  selector: 'brie-heading',\n  templateUrl: './heading.component.html',\n  styleUrls: ['./heading.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    CommonModule,\n    BrieButtonGroupModule,\n  ],\n\n})\nexport class BrieHeadingComponent {\n  @Input() actions: BrieHeadingActions;\n  @Input() title: string;\n  @Input() description?: string;\n  @Input() size?: string = BrieHeadingSize.H2;\n\n  get headingSize(): string {\n    return `brie-${this.size}`;\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<div class=\"brie-heading-left\">\n  <div class=\"brie-heading-title\" [ngClass]=\"headingSize\">{{ title || '' }}</div>\n  @if (description) {\n    <div class=\"brie-heading-description\">{{ description }}</div>\n  }\n</div>\n\n@if (actions) {\n  <div class=\"brie-heading-actions\">\n    <brie-button-group [actions]=\"actions\"></brie-button-group>\n  </div>\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BrieButtonGroupModule } from '@bloomreach/brie/button-group';\n\nimport { BrieHeadingComponent } from './components/heading.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    BrieButtonGroupModule,\n    BrieHeadingComponent,\n  ],\n  exports: [\n    BrieHeadingComponent,\n  ],\n})\nexport class BrieHeadingModule { }\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './heading.module';\nexport * from './components/heading.component';\nexport * from './models/heading';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum BrieIconType {\n  MATERIAL = 'material',\n  BASE64 = 'base64',\n}\n\n// Those values reflects with icon size styles\nexport enum BrieIconSize {\n  XS = 'xs',\n  SM = 'sm',\n  MD = 'md',\n  LG = 'lg',\n  XL = 'xl',\n  XXL = 'xxl',\n}\n\nexport interface BrieIcon {\n  name: string;\n  fontSet?: string;\n  size?: BrieIconSize;\n  type?: BrieIconType;\n  tooltip?: string;\n  style?: string;\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ElementRef, HostBinding, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrieIconType, BrieIconSize } from '../models/icon';\n\n@Component({\n  selector: 'brie-icon',\n  templateUrl: './icon.component.html',\n  styleUrls: ['./icon.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatIconModule,\n    MatTooltipModule,\n  ],\n\n})\nexport class BrieIconComponent {\n  @Input() fontSet?: string | undefined;\n  @Input() name: string;\n  @Input() size?: BrieIconSize | undefined = BrieIconSize.MD;\n  @Input() type?: BrieIconType | undefined = BrieIconType.MATERIAL;\n  @Input() tooltip?: string | undefined;\n  @Input() style?: string | undefined;\n\n  private hostClasses = (this.elementRef.nativeElement as HTMLElement).classList.value;\n\n  @HostBinding('class') get hostCssClasses(): string {\n    const sizeCssClass = this.size ? `brie-icon__size-${this.size}` : 'brie-icon__size-md';\n\n    return [this.hostClasses, 'brie-icon', sizeCssClass].filter(Boolean).join(' ');\n  }\n\n  get BrieIconType(): typeof BrieIconType {\n    return BrieIconType;\n  }\n\n  constructor(\n    private domSanitizer: DomSanitizer,\n    private elementRef: ElementRef,\n  ) {}\n\n  getSafeIconValue(imageData: string | undefined): SafeUrl {\n    if (imageData) {\n      return this.domSanitizer.bypassSecurityTrustUrl(imageData);\n    }\n\n    return '';\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n@switch (type) {\n  @case (BrieIconType.BASE64) {\n    <img\n      class=\"brie-icon-base64\"\n      [matTooltip]=\"tooltip || ''\"\n      [src]=\"getSafeIconValue(name)\"/>\n  }\n  @default {\n    <mat-icon\n      class=\"brie-icon-material\"\n      [matTooltip]=\"tooltip || ''\"\n      [style]=\"style\"\n      fontSet=\"{{ fontSet }}\">\n      {{ name }}\n    </mat-icon>\n  }\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { BrieIconComponent } from './components/icon.component';\n\n@NgModule({\n  imports: [\n    BrieIconComponent,\n    CommonModule,\n    MatIconModule,\n    MatTooltipModule,\n  ],\n  exports: [\n    BrieIconComponent,\n  ],\n})\nexport class BrieIconModule {\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './icon.module';\nexport * from './components/icon.component';\nexport * from './models/icon';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { BrieButtonGroupActions, BrieButtonGroupModule, BrieButtonType } from '@bloomreach/brie/button-group';\nimport { BrieIconModule, BrieIconSize } from '@bloomreach/brie/icon';\n\nimport { MatListModule } from '@angular/material/list';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { BrieListClickEvent, BrieListConfig, BrieListElement } from '../models/list';\n\n@Component({\n  selector: 'brie-list',\n  templateUrl: './list.component.html',\n  styleUrls: ['./list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    BrieButtonGroupModule,\n    BrieIconModule,\n    MatDividerModule,\n    MatListModule,\n    DragDropModule,\n  ],\n\n})\nexport class BrieListComponent implements OnChanges {\n  @Input() dataSource: BrieListElement<string | number>[];\n  @Input() config: BrieListConfig = { default: {} };\n  @Input() selectedElement?: BrieListElement<string | number> | null;\n\n  @Output() clickedAction = new EventEmitter<BrieListClickEvent>();\n  @Output() selectedElementChange = new EventEmitter<BrieListElement<any>>();\n  @Output() dropListDropped = new EventEmitter<Array<BrieListElement<any>>>();\n\n  actions: BrieButtonGroupActions[];\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.dataSource && this.dataSource) {\n      this.actions = this.dataSource.reduce<BrieButtonGroupActions[]>((actions, listElement) => {\n        return [...actions, this.getActions(listElement)];\n      }, []);\n    }\n  }\n\n  onElementClick(event: MouseEvent, listElement: BrieListElement<any>): void {\n    this.selectedElementChange.emit(listElement);\n  }\n\n  drop($event: CdkDragDrop<BrieListElement<any>>): void {\n    moveItemInArray(this.dataSource, $event.previousIndex, $event.currentIndex);\n    this.dropListDropped.emit(this.dataSource);\n  }\n\n  isMultiline(listElement: BrieListElement<string | number>): boolean {\n    return listElement.multiline ?? this.config.default.multiline ?? false;\n  }\n\n  isSelected(listElement: BrieListElement<string | number>): boolean {\n    return listElement.id === this.selectedElement?.id;\n  }\n\n  isDragDisabled(listElement: BrieListElement<string | number>): boolean {\n    return listElement.draggable ?? this.config.default.draggable ?? true;\n  }\n\n  getIconSize(listElement: BrieListElement<string | number>): BrieIconSize | undefined {\n    return this.isMultiline(listElement)\n      ? BrieIconSize.XXL\n      : listElement.icon?.size || this.config.default.icon?.size;\n  }\n\n  getActions(listElement: BrieListElement<string | number>): BrieButtonGroupActions {\n    const listActions = listElement.actions || this.config.default.actions || [];\n\n    return [\n      listActions.map((listAction) => ({\n        id: listAction.id,\n        type: listAction.type || BrieButtonType.Icon,\n        text: listAction.text,\n        color: listAction.color,\n        icon: listAction.icon,\n        tooltip: listAction.tooltip,\n        action: (event) => {\n          event.stopPropagation();\n          this.clickedAction.emit({ event, listElement, listAction });\n        },\n      })),\n    ];\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<mat-nav-list cdkDropList (cdkDropListDropped)=\"drop($event)\">\n  @for (listElement of dataSource; track listElement; let i = $index) {\n    <mat-list-item cdkDrag\n      [attr.id]=\"listElement.id\"\n      class=\"brie-list-item\"\n      [class.multiline]=\"isMultiline(listElement)\"\n      [class.selected]=\"isSelected(listElement)\"\n      [cdkDragDisabled]=\"isDragDisabled(listElement)\"\n      (click)=\"onElementClick($event, listElement)\">\n      <div class=\"brie-list-item-content\">\n        @if (listElement.icon || config.default.icon) {\n          <brie-icon\n            [type]=\"listElement.icon?.type || this.config.default.icon?.type\"\n            [name]=\"listElement.icon?.name || config.default.icon?.name || ''\"\n            [size]=\"getIconSize(listElement)\"\n          [fontSet]=\"listElement.icon?.fontSet || config.default?.icon?.fontSet\"></brie-icon>\n        }\n        <div class=\"brie-list-item-main\">\n          <div class=\"brie-list-item-title\">{{ listElement.title }}</div>\n          @if (listElement.subtitle) {\n            <div class=\"brie-list-item-subtitle\">{{ listElement.subtitle }}</div>\n          }\n        </div>\n      </div>\n      @if (listElement.actions || config.default.actions) {\n        <div class=\"brie-list-item-actions\">\n          <brie-button-group [actions]=\"actions[i]\"></brie-button-group>\n        </div>\n      }\n    </mat-list-item>\n    <mat-divider></mat-divider>\n  }\n</mat-nav-list>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatListModule } from '@angular/material/list';\nimport { BrieButtonGroupModule } from '@bloomreach/brie/button-group';\nimport { BrieIconModule } from '@bloomreach/brie/icon';\n\nimport { BrieListComponent } from './components/list.component';\n\n@NgModule({\n  exports: [\n    BrieListComponent,\n  ],\n  imports: [\n    BrieListComponent,\n    BrieButtonGroupModule,\n    BrieIconModule,\n    CommonModule,\n    DragDropModule,\n    MatDividerModule,\n    MatListModule,\n  ],\n})\nexport class BrieListModule { }\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BrieButtonType, BrieThemeColor } from '@bloomreach/brie/button-group';\nimport { BrieIconType, BrieIconSize } from '@bloomreach/brie/icon';\n\nexport interface BrieListElement<T extends string | number = string> extends BrieListDefault {\n  id: T;\n  title: string;\n  subtitle?: string;\n  children?: BrieListElement<T>[];\n}\n\nexport interface BrieListDefault {\n  icon?: {\n    name: string;\n    fontSet?: string;\n    type?: BrieIconType;\n    size?: BrieIconSize\n  };\n  draggable?: boolean;\n  multiline?: boolean;\n  actions?: BrieListAction[];\n}\n\nexport interface BrieListAction {\n  id: string;\n  type?: BrieButtonType,\n  text?: string;\n  color?: BrieThemeColor;\n  tooltip?: string;\n  icon?: {\n    name: string;\n    fontSet?: string;\n  };\n}\n\nexport interface BrieListConfig {\n  default: BrieListDefault;\n}\n\nexport interface BrieListClickEvent {\n  event: MouseEvent;\n  listElement: BrieListElement<any>;\n  listAction?: BrieListAction;\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './list.module';\nexport * from './components/list.component';\nexport * from './models/list';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, HostBinding, Inject, ChangeDetectionStrategy } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarModule, MatSnackBarRef } from '@angular/material/snack-bar';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { BrieSnackBar } from '../models/snackbar';\n\n@Component({\n  selector: 'brie-snackbar',\n  templateUrl: './snack-bar.component.html',\n  styleUrls: ['./snack-bar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatButtonModule,\n    MatIconModule,\n    MatSnackBarModule,\n  ],\n\n})\nexport class BrieSnackBarComponent {\n  @HostBinding('class.warning') warningClass = false;\n\n  constructor(\n    public snackBarRef: MatSnackBarRef<BrieSnackBarComponent>,\n    @Inject(MAT_SNACK_BAR_DATA) public data: BrieSnackBar,\n  ) {\n    this.warningClass = !!this.data.warning;\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<div class=\"brie-snackbar\">\n  <div class=\"brie-snackbar-message\">\n    @if (data.warning) {\n      <mat-icon>warning_amber</mat-icon>\n    }\n    <span>{{ data.message }}</span>\n  </div>\n  @if (data.dismiss) {\n    <button mat-icon-button\n      class=\"brie-snackbar-close\"\n      (click)=\"snackBarRef.dismiss()\">\n      <mat-icon>close</mat-icon>\n    </button>\n  }\n</div>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\n\nimport { BrieSnackBarComponent } from './components/snack-bar.component';\n\n@NgModule({\n  exports: [\n    BrieSnackBarComponent,\n  ],\n  imports: [\n    BrieSnackBarComponent,\n    CommonModule,\n    MatButtonModule,\n    MatIconModule,\n    MatSnackBarModule,\n  ],\n})\nexport class BrieSnackBarModule { }\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition } from '@angular/material/snack-bar';\n\nexport interface BrieSnackBar {\n  dismiss?: boolean;\n  message: string;\n  warning?: boolean;\n}\n\nexport interface BrieSnackBarConfig {\n  duration?: number;\n  warning?: boolean;\n  dismiss?: boolean;\n  horizontalPosition?: MatSnackBarHorizontalPosition;\n  verticalPosition?: MatSnackBarVerticalPosition;\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { BrieSnackBarComponent } from '../components/snack-bar.component';\nimport { BrieSnackBarConfig } from '../models/snackbar';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BrieSnackBarService {\n  constructor(\n    private readonly snackBar: MatSnackBar,\n  ) { }\n\n  open(message: string, config: BrieSnackBarConfig = {}): void {\n    const { dismiss, duration, warning, horizontalPosition, verticalPosition } = config;\n\n    this.snackBar.openFromComponent(BrieSnackBarComponent, {\n      data: {\n        message,\n        dismiss,\n        warning,\n      },\n      duration: 'duration' in config ? duration : 4000,\n      horizontalPosition,\n      verticalPosition,\n    });\n  }\n\n  warning(message: string, config: BrieSnackBarConfig = {}): void {\n    const snackBarConfig: BrieSnackBarConfig = {\n      dismiss: true,\n      duration: undefined,\n      warning: true,\n      ...config,\n    };\n\n    this.open(message, snackBarConfig);\n  }\n\n  dismiss(): void {\n    this.snackBar.dismiss();\n  }\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './snackbar.module';\nexport * from './components/snack-bar.component';\nexport * from './models/snackbar';\nexport * from './services/snack-bar.service';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface BrieTreeSubMenuItem {\n  id: string;\n  title: string;\n}\n\nexport interface BrieTreeDefaultConfig {\n  draggable?: boolean;\n  subMenu?: BrieTreeSubMenuItem[];\n  actions?: BrieTreeAction[];\n  expandAll?: boolean;\n  dragAboveRoot?: boolean\n}\n\nexport interface BrieTreeConfig {\n  defaults: BrieTreeDefaultConfig;\n}\n\nexport interface BrieTreeNode<T = any> extends BrieTreeDefaultConfig {\n  id?: string;\n  title: string;\n  subTitle?: string;\n  children?: BrieTreeNode<T>[];\n  data?: T; // holds extra data to pass along with the node\n}\n\nexport interface BrieTreeAction {\n  id: string;\n  icon: {\n    name: string;\n    fontSet?: string;\n  };\n  tooltip?: string;\n}\n\nexport interface BrieTreeNodeClick {\n  event: MouseEvent;\n  treeNode: BrieTreeNode;\n}\n\nexport interface BrieTreeSubMenuClick extends BrieTreeNodeClick {\n  subMenuItem: BrieTreeSubMenuItem;\n}\n\nexport interface BrieTreeActionClick extends BrieTreeNodeClick {\n  actionItem: BrieTreeAction;\n}\n\nexport interface BrieTreeFlatNode {\n  expandable: boolean;\n  title: string;\n  subTitle: string;\n  level: number;\n  subMenu: BrieTreeSubMenuItem[];\n  id: string;\n  draggable: boolean;\n  actions: BrieTreeAction[];\n}\n\nexport interface BrieTreeUpdated {\n  event: BrieTreeNodeEvent;\n  nodes: BrieTreeNode[];\n}\n\nexport enum BrieTreeNodeEvent {\n  MOVED = 'MOVED',\n  ADDED = 'ADDED',\n  EDITED = 'EDITED',\n  DELETED = 'DELETED',\n  PASTED = 'PASTED'\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n  DOCUMENT,\n  ChangeDetectionStrategy,\n} from '@angular/core';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';\nimport { CdkDragDrop, CdkDragMove, CdkDragStart, DragDropModule } from '@angular/cdk/drag-drop';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CommonModule } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport {\n  BrieTreeSubMenuClick,\n  BrieTreeSubMenuItem,\n  BrieTreeNode,\n  BrieTreeNodeClick,\n  BrieTreeConfig,\n  BrieTreeAction,\n  BrieTreeActionClick,\n  BrieTreeFlatNode,\n  BrieTreeNodeEvent,\n  BrieTreeUpdated,\n} from '../models/tree';\n\n@Component({\n  selector: 'brie-tree',\n  templateUrl: './tree.component.html',\n  styleUrls: ['./tree.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    CommonModule,\n    MatTreeModule,\n    MatIconModule,\n    MatButtonModule,\n    MatTooltipModule,\n    DragDropModule,\n    MatMenuModule,\n  ],\n\n})\nexport class BrieTreeComponent implements OnChanges, OnInit, OnDestroy {\n  @Input() dataSource: BrieTreeNode[];\n  @Input() config: BrieTreeConfig;\n  @Input() selectedNode: BrieTreeNode | null;\n\n  @Output() clickedSubMenu = new EventEmitter<BrieTreeSubMenuClick>();\n  @Output() clickedAction = new EventEmitter<BrieTreeActionClick>();\n  @Output() clickedNode = new EventEmitter<BrieTreeNodeClick>();\n  @Output() treeUpdated = new EventEmitter<BrieTreeUpdated>();\n\n  @ViewChild('treeNode', { static: false, read: ElementRef })\n  treeElRef: ElementRef<HTMLElement>;\n\n  dropActionTodo: { targetId: string | null; action?: string; } | null;\n  dragOverNode: BrieTreeFlatNode;\n  dragOverArea = '';\n  rootId: string | undefined;\n\n  flatNodeMap = new Map<string, BrieTreeNode>();\n  brieTreeNodeMap = new Map<string, BrieTreeFlatNode>();\n\n  draggedNodeExpanded = false;\n  processDragging = true;\n\n  treeControl: FlatTreeControl<BrieTreeFlatNode>;\n  treeFlattener: MatTreeFlattener<BrieTreeNode, BrieTreeFlatNode>;\n  flatDataSource: MatTreeFlatDataSource<BrieTreeNode, BrieTreeFlatNode>;\n\n  expansionModel = new SelectionModel<string>(true);\n\n  private subject: Subject<CdkDragMove> = new Subject();\n  private readonly unsubscribe = new Subject<void>();\n\n  constructor(\n    @Inject(DOCUMENT) private document: Document,\n  ) {\n    this.treeControl = new FlatTreeControl<BrieTreeFlatNode>(\n      (node) => node.level,\n      (node) => node.expandable,\n    );\n\n    this.treeFlattener = new MatTreeFlattener(\n      this._transformer,\n      (node) => node.level,\n      (node) => node.expandable,\n      (node) => node.children,\n    );\n\n    this.flatDataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\n  }\n\n  generateId(node: BrieTreeNode): void {\n    if (!node.id) {\n      node.id = this.getUniqueId();\n    }\n\n    if (this.config.defaults.expandAll !== false && node.children?.length) {\n      this.expansionModel.select(node.id);\n    }\n\n    if (node.children) {\n      node.children.forEach((childNode: BrieTreeNode) => {\n        this.generateId(childNode);\n      });\n    }\n  }\n\n  ngOnInit(): void {\n    this.subject.pipe(\n      takeUntil(this.unsubscribe),\n      debounceTime(50),\n    ).subscribe((event) => {\n      this.dragMoved(event);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n\n  onDragMove(event: CdkDragMove): void {\n    this.subject.next(event);\n  }\n\n  ngOnChanges(): void {\n    this.dataSource.forEach((node: BrieTreeNode) => {\n      this.generateId(node);\n    });\n\n    this.rebuildTreeForData(this.dataSource);\n  }\n\n  isDraggable(overrideValue: boolean | undefined): boolean {\n    if (typeof overrideValue !== 'undefined') {\n      return overrideValue;\n    }\n\n    return !!this.config.defaults.draggable;\n  }\n\n  private _transformer = (node: BrieTreeNode, level: number): BrieTreeFlatNode => {\n    const flatNode = {\n      expandable: !!node.children && node.children.length > 0,\n      title: node.title,\n      subTitle: node.subTitle ? node.subTitle : '',\n      level,\n      subMenu: node.subMenu || this.config.defaults.subMenu || [],\n      id: node.id ? node.id : String(Math.random()),\n      draggable: this.isDraggable(node.draggable),\n      actions: node.actions || this.config.defaults.actions || [],\n    };\n\n    if (flatNode.id && node.id) {\n      this.flatNodeMap.set(flatNode.id, node);\n      this.brieTreeNodeMap.set(node.id, flatNode);\n    }\n\n    return flatNode;\n  };\n\n  onDragIconClick(event: MouseEvent): void {\n    event.stopPropagation();\n  }\n\n  onMenuIconClick(event: MouseEvent): void {\n    event.stopPropagation();\n  }\n\n  addNewNode(parent: BrieTreeNode, node: BrieTreeNode): void {\n    if (!parent.children) {\n      parent.children = [];\n    }\n\n    if (!node.id) {\n      node.id = this.getUniqueId();\n    }\n\n    parent.children.push(node);\n\n    this.rebuildTreeForData(this.flatDataSource.data);\n    this.treeUpdated.emit({ event: BrieTreeNodeEvent.ADDED, nodes: this.flatDataSource.data });\n  }\n\n  editNode(node: BrieTreeNode): void {\n    if (node.id) {\n      const nodeId = node.id;\n      const nodeToEdit = this.flatNodeMap.get(node.id);\n\n      if (nodeToEdit) {\n        Object.assign(nodeToEdit, node);\n        nodeToEdit.id = nodeId;\n        this.rebuildTreeForData(this.flatDataSource.data);\n        this.treeUpdated.emit({ event: BrieTreeNodeEvent.EDITED, nodes: this.flatDataSource.data });\n      }\n    }\n  }\n\n  deleteNode(node: BrieTreeNode): void {\n    if (node.id) {\n      const getParentId = this.getParentNodeId(node.id, this.dataSource, '0');\n      const parentNode = this.flatNodeMap.get(getParentId);\n\n      if (parentNode && parentNode.children) {\n        const nodeIndex = parentNode.children.findIndex((n) => n.id === node.id);\n        parentNode.children.splice(nodeIndex, 1);\n        this.rebuildTreeForData(this.flatDataSource.data);\n        this.treeUpdated.emit({ event: BrieTreeNodeEvent.DELETED, nodes: this.flatDataSource.data });\n      } else {\n        const nodeIndex = this.flatDataSource.data.findIndex((n) => n.id === node.id);\n\n        if (nodeIndex) {\n          this.flatDataSource.data.splice(nodeIndex, 1);\n          this.rebuildTreeForData(this.flatDataSource.data);\n          this.treeUpdated.emit({ event: BrieTreeNodeEvent.DELETED, nodes: this.flatDataSource.data });\n        }\n      }\n    }\n  }\n\n  pasteNode(parent: BrieTreeNode, node: BrieTreeNode): void {\n    if (node.id) {\n      let nodeToPaste = this.flatNodeMap.get(node.id);\n      nodeToPaste = JSON.parse(JSON.stringify(nodeToPaste));\n\n      if (!parent.children) {\n        parent.children = [];\n      }\n\n      if (nodeToPaste && parent.id) {\n        nodeToPaste.id = `${parent.id}/${parent.children.length}`;\n        parent.children.push(nodeToPaste);\n      }\n\n      this.rebuildTreeForData(this.flatDataSource.data);\n      this.treeUpdated.emit({ event: BrieTreeNodeEvent.PASTED, nodes: this.flatDataSource.data });\n    }\n  }\n\n  hasChild(_: number, node: BrieTreeFlatNode): boolean {\n    return node.expandable;\n  }\n\n  onNodeClick(event: MouseEvent, node: BrieTreeFlatNode): void {\n    const treeNode = this.flatNodeMap.get(node.id);\n    this.selectedNode = treeNode || null;\n\n    if (treeNode) {\n      this.clickedNode.emit({ event, treeNode });\n    }\n  }\n\n  onMenuItemClick(event: MouseEvent, node: BrieTreeFlatNode, subMenuItem: BrieTreeSubMenuItem): void {\n    event.stopPropagation();\n\n    const treeNode = this.flatNodeMap.get(node.id);\n\n    if (treeNode !== undefined) {\n      this.clickedSubMenu.emit({ event, treeNode, subMenuItem });\n    }\n  }\n\n  onActionItemClick(event: MouseEvent, node: BrieTreeFlatNode, actionItem: BrieTreeAction): void {\n    event.stopPropagation();\n\n    const treeNode = this.flatNodeMap.get(node.id);\n\n    if (treeNode !== undefined) {\n      this.clickedAction.emit({ event, treeNode, actionItem });\n    }\n  }\n\n  dragMoved(event: CdkDragMove): void {\n    if (!this.processDragging) {\n      return;\n    }\n\n    const elem = this.document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y);\n\n    if (!elem) {\n      return;\n    }\n\n    const matTreeNode = elem.classList.contains('mat-tree-node') ? elem : elem.closest('.mat-tree-node');\n\n    if (!matTreeNode) {\n      this.clearDragInfo(true);\n      return;\n    }\n\n    this.dropActionTodo = {\n      targetId: matTreeNode.getAttribute('data-id'),\n    };\n\n    const nodeContainer = matTreeNode.getElementsByClassName('brie-node-container');\n\n    if (nodeContainer.length === 0) {\n      return;\n    }\n\n    const targetRect = nodeContainer[0].getBoundingClientRect();\n\n    const oneThird = targetRect.height / 3;\n\n    const idTemp = matTreeNode.getAttribute('data-id') ? matTreeNode.getAttribute('data-id') : '';\n    const treeFlatNode = idTemp ? this.brieTreeNodeMap.get(idTemp) : undefined;\n    const isExpanded = treeFlatNode ? this.treeControl.isExpanded(treeFlatNode) : undefined;\n\n    if (event.pointerPosition.y - targetRect.top < oneThird) {\n      if (this.dropActionTodo?.targetId\n        && this.dropActionTodo?.targetId === this.rootId\n        && this.config.defaults.dragAboveRoot === false) {\n        this.dropActionTodo.targetId = null;\n      } else {\n        this.dropActionTodo.action = 'before';\n      }\n    } else if (event.pointerPosition.y - targetRect.top > 2 * oneThird && !isExpanded) {\n      this.dropActionTodo.action = 'after';\n    } else {\n      this.dropActionTodo.action = 'inside';\n    }\n\n    if (treeFlatNode) {\n      this.showDragInfo(event, treeFlatNode);\n    }\n  }\n\n  dragStarted(event: CdkDragStart): void {\n    this.processDragging = true;\n\n    const treeFlatNode = this.brieTreeNodeMap.get(event.source.data.id);\n\n    if (treeFlatNode && this.treeControl.isExpanded(treeFlatNode)) {\n      this.draggedNodeExpanded = true;\n      this.treeControl.collapse(treeFlatNode);\n    } else {\n      this.draggedNodeExpanded = false;\n    }\n  }\n\n  processDrop(draggedNodeId: string): void {\n    this.processDragging = false;\n\n    if (!draggedNodeId || !this.dropActionTodo || !this.dropActionTodo.targetId) {\n      return;\n    }\n\n    const draggedNode = this.flatNodeMap.get(draggedNodeId);\n    const getParentId = this.getParentNodeId(draggedNodeId, this.dataSource, '0');\n    const parentNode = this.flatNodeMap.get(getParentId);\n\n    if (draggedNode && parentNode) {\n      if (parentNode.children) {\n        const draggedNodeIndex = parentNode.children.findIndex((c) => c.id === draggedNodeId);\n        parentNode.children.splice(draggedNodeIndex, 1);\n      }\n\n      if (this.dropActionTodo.action === 'inside') {\n        const currentParentNode = this.flatNodeMap.get(this.dropActionTodo.targetId);\n        const flatNode = this.brieTreeNodeMap.get(this.dropActionTodo.targetId);\n\n        if (currentParentNode && flatNode) {\n          if (currentParentNode.children) {\n            currentParentNode.children.push(draggedNode);\n          } else {\n            currentParentNode.children = [draggedNode];\n          }\n          if (currentParentNode.id && !this.treeControl.isExpanded(flatNode)) {\n            this.expansionModel.toggle(currentParentNode.id);\n          }\n        }\n      } else {\n        const targetParentId = this.getParentNodeId(this.dropActionTodo.targetId, this.dataSource, '0');\n        const newParentNode = this.flatNodeMap.get(targetParentId || '');\n\n        if (newParentNode?.children) {\n          const { targetId } = this.dropActionTodo;\n          const targetIndex = newParentNode.children.findIndex((c) => c.id === targetId) || 0;\n\n          if (this.dropActionTodo.action === 'before') {\n            newParentNode.children.splice(targetIndex, 0, draggedNode);\n          } else {\n            newParentNode.children.splice(targetIndex + 1, 0, draggedNode);\n          }\n        }\n      }\n    }\n\n    this.clearDragInfo(true);\n    this.rebuildTreeForData(this.flatDataSource.data);\n    this.treeUpdated.emit({ event: BrieTreeNodeEvent.MOVED, nodes: this.flatDataSource.data });\n  }\n\n  getParentNodeId(id: string, nodes: BrieTreeNode[], parentId: string): string {\n    if (nodes) {\n      for (let i = 0; i < nodes.length; i++) {\n        if (nodes[i].id === id) {\n          return parentId;\n        }\n\n        const ret = this.getParentNodeId(id, nodes[i].children || [], nodes[i].id || '');\n\n        if (ret) {\n          return ret;\n        }\n      }\n    }\n\n    return '';\n  }\n\n  clearDragInfo(dropped = false): void {\n    if (dropped) {\n      this.dropActionTodo = null;\n    }\n\n    this.dragOverArea = '';\n  }\n\n  showDragInfo(event: CdkDragMove, draggedNode: BrieTreeFlatNode): void {\n    this.clearDragInfo();\n\n    if (this.dropActionTodo?.targetId) {\n      if (this.dropActionTodo?.action === 'before') {\n        this.dragOverNode = draggedNode;\n        this.dragOverArea = 'before';\n      } else if (this.dropActionTodo?.action === 'after') {\n        this.dragOverNode = draggedNode;\n        this.dragOverArea = 'after';\n      } else {\n        this.dragOverNode = draggedNode;\n        this.dragOverArea = 'inside';\n      }\n    }\n  }\n\n  drop(event: CdkDragDrop<BrieTreeNode[]>): void {\n    // TODO: restrict draggable area to tree container\n    if (!event.isPointerOverContainer) {\n      return;\n    }\n\n    this.processDrop(event.item.data.id);\n  }\n\n  rebuildTreeForData(data: BrieTreeNode[]): void {\n    if (data.length) {\n      this.rootId = data[0].id;\n      this.flatDataSource.data = data;\n\n      this.expansionModel.selected.forEach((id) => {\n        const node = this.treeControl.dataNodes.find((n) => n.id === id);\n\n        if (node) {\n          this.treeControl.expand(node);\n        }\n      });\n    }\n  }\n\n  getUniqueId(): string {\n    return Math.random().toString(36).substr(2, 9);\n  }\n}\n","<!--\nCopyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttps://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<div class=\"brie-tree-container\">\n  <mat-tree cdkDropList\n    [dataSource]=\"flatDataSource\"\n    [treeControl]=\"treeControl\"\n    (cdkDropListDropped)=\"drop($event)\"\n    [cdkDropListSortingDisabled]=\"true\">\n\n    <mat-tree-node cdkDrag\n      [cdkDragDisabled]=\"!node.draggable\"\n      (cdkDragStarted)=\"dragStarted($event)\"\n      [cdkDragData]=\"node\"\n      (click)=\"onNodeClick($event, node)\"\n      *matTreeNodeDef=\"let node\"\n      matTreeNodePadding\n      matTreeNodeToggle\n      [attr.data-id]=\"node.id\"\n      (cdkDragMoved)=\"onDragMove($event)\">\n\n      <div class=\"top-slot\" [ngClass]=\"{'drop-slot-active': dragOverNode === node && dragOverArea === 'before'}\"></div>\n      <div [attr.id]=\"'node-'+node.id\"\n        [ngClass]=\"{'selected': this.selectedNode?.id === node.id,'highlight-drop-border': dragOverNode === node && dragOverArea === 'inside'}\"\n        class=\"brie-node-container single\">\n        <ng-container *ngTemplateOutlet=\"nodeDetailsTemplate;context:{$implicit: node}\"></ng-container>\n      </div>\n      <div class=\"bottom-slot\" [ngClass]=\"{'drop-slot-active': dragOverNode === node && dragOverArea === 'after'}\"></div>\n\n    </mat-tree-node>\n\n    <mat-tree-node cdkDrag\n      [cdkDragData]=\"node\"\n      [cdkDragDisabled]=\"!node.draggable\"\n      (cdkDragStarted)=\"dragStarted($event)\"\n      *matTreeNodeDef=\"let node;when: hasChild\"\n      matTreeNodePadding\n      [attr.data-id]=\"node.id\"\n      (cdkDragMoved)=\"onDragMove($event)\">\n\n      <div class=\"top-slot\" [ngClass]=\"{'drop-slot-active': dragOverNode === node && dragOverArea === 'before'}\"></div>\n      <div class=\"brie-node-container\"\n        [ngClass]=\"{'selected': this.selectedNode?.id === node.id,'highlight-drop-border': dragOverNode === node && dragOverArea === 'inside'}\"\n        (click)=\"onNodeClick($event, node)\"\n        [attr.id]=\"'node-'+node.id\">\n\n        <button mat-icon-button\n          matTreeNodeToggle\n          [attr.aria-label]=\"'Toggle ' + node.title\"\n          class=\"brie-node-toggle\">\n          <mat-icon class=\"mat-icon-rtl-mirror\" matTreeNodeToggle (click)=\"expansionModel.toggle(node.id)\">\n            {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n          </mat-icon>\n        </button>\n\n        <ng-container *ngTemplateOutlet=\"nodeDetailsTemplate;context:{$implicit: node}\"></ng-container>\n      </div>\n      <div class=\"bottom-slot\"\n      [ngClass]=\"{'drop-slot-active': dragOverNode === node && dragOverArea === 'after'}\"></div>\n\n    </mat-tree-node>\n\n  </mat-tree>\n</div>\n\n<ng-template #nodeDetailsTemplate let-node>\n  <div class=\"brie-node-text\">\n    <div class=\"brie-node-title\">{{ node.title }}</div>\n    @if (node.subTitle) {\n      <div class=\"brie-node-subtitle\">{{ node.subTitle }}</div>\n    }\n  </div>\n\n  <ng-container *ngTemplateOutlet=\"actionsTemplate;context:{$implicit: node}\"></ng-container>\n</ng-template>\n\n<ng-template #actionsTemplate let-node>\n  <div class=\"brie-node-actions\">\n    @if (node.draggable) {\n      <button mat-icon-button\n        (click)=\"onDragIconClick($event)\"\n        class=\"brie-node-draggable\">\n        <mat-icon>reorder</mat-icon>\n      </button>\n    }\n\n    @for (action of node.actions; track action) {\n      <button mat-icon-button\n        (click)=\"onActionItemClick($event, node, action)\"\n        class=\"brie-node-action\">\n        <mat-icon matTooltip=\"{{ action.tooltip }}\" fontSet=\"{{ action.icon.fontSet }}\">{{ action.icon.name }}</mat-icon>\n      </button>\n    }\n\n    <button mat-icon-button\n      [disabled]=\"!node.subMenu.length\"\n      [matMenuTriggerFor]=\"menu\"\n      (click)=\"onMenuIconClick($event)\"\n      class=\"brie-node-menu\">\n      <mat-icon>more_vert</mat-icon>\n    </button>\n\n    <ng-template>\n      <button mat-icon-button>\n        <mat-icon></mat-icon>\n      </button>\n    </ng-template>\n\n    <mat-menu #menu=\"matMenu\"\n      xPosition=\"before\"\n      class=\"brie-node-menu-dropdown\">\n      @for (menuitem of node.subMenu; track menuitem) {\n        <button mat-menu-item\n          (click)=\"onMenuItemClick($event, node, menuitem)\"\n          [attr.id]=\"menuitem.id\"\n          class=\"brie-node-menu-item\">\n          {{ menuitem.title }}\n        </button>\n      }\n    </mat-menu>\n  </div>\n</ng-template>\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\n\nimport { BrieTreeComponent } from './components/tree.component';\n\n@NgModule({\n  imports: [\n    BrieTreeComponent,\n    CommonModule,\n    DragDropModule,\n    MatButtonModule,\n    MatIconModule,\n    MatMenuModule,\n    MatTooltipModule,\n    MatTreeModule,\n  ],\n  exports: [\n    BrieTreeComponent,\n  ],\n})\nexport class BrieTreeModule { }\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './tree.module';\nexport * from './components/tree.component';\nexport * from './models/tree';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum BrieCardType {\n  DEFAULT = 'default',\n  INFO = 'info',\n  WARNING = 'warning',\n  ERROR = 'error',\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive } from '@angular/core';\n\n@Directive({\n  selector: '[brieCardHeader]',\n})\nexport class BrieCardHeaderDirective { }\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, input, output, contentChild, ChangeDetectionStrategy } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { BrieButtonGroupModule, BrieButtonGroupActions } from '@bloomreach/brie/button-group';\nimport { BrieCardType } from '../models/card';\nimport { BrieCardHeaderDirective } from '../directives/card-header.directive';\n\n@Component({\n  selector: 'brie-card',\n  templateUrl: './card.component.html',\n  styleUrls: ['./card.component.scss'],\n  changeDetection: ChangeDetectionStrategy.Eager,\n  imports: [\n    MatCardModule,\n    MatButtonModule,\n    BrieButtonGroupModule,\n  ],\n})\nexport class BrieCardComponent {\n  // Signal-based inputs with default values\n  title = input<string>();\n  subtitle = input<string>();\n  content = input<string>();\n  actions = input<BrieButtonGroupActions>();\n  image = input<string>();\n  imageAlt = input<string>();\n  disabled = input<boolean>(false);\n  clickable = input<boolean>(false);\n  type = input<BrieCardType>(BrieCardType.DEFAULT);\n\n  // Signal-based output\n  cardClick = output<void>();\n\n  // Content projection for custom header\n  customHeader = contentChild(BrieCardHeaderDirective);\n\n  // Computed property to check if custom header exists\n  get hasCustomHeader(): boolean {\n    return !!this.customHeader();\n  }\n\n  // Computed signals for enum access\n  readonly BrieCardType = BrieCardType;\n\n  onCardClick(): void {\n    if (!this.disabled() && this.clickable()) {\n      this.cardClick.emit();\n    }\n  }\n}\n","<!--\n  Copyright 2022-2023 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n   https://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n  -->\n\n<mat-card [class]=\"'brie-card__type-' + type()\" (click)=\"onCardClick()\">\n\n  @if (hasCustomHeader || title() || subtitle()) {\n  <mat-card-header>\n    @if (hasCustomHeader) {\n    <ng-content select=\"[brieCardHeader]\"></ng-content>\n    } @else {\n    @if (title()) {\n    <mat-card-title>{{ title() }}</mat-card-title>\n    }\n    @if (subtitle()) {\n    <mat-card-subtitle>{{ subtitle() }}</mat-card-subtitle>\n    }\n    }\n  </mat-card-header>\n  }\n\n  @if (image()) {\n  <img mat-card-image [src]=\"image()\" [alt]=\"imageAlt() || ''\">\n  }\n\n  <mat-card-content>\n    @if (content()) {\n    <p>{{ content() }}</p>\n    }\n    <ng-content></ng-content>\n  </mat-card-content>\n\n  @if (actions()) {\n  <mat-card-actions>\n    <brie-button-group [actions]=\"actions()!\"></brie-button-group>\n  </mat-card-actions>\n  }\n\n</mat-card>","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { BrieCardComponent } from './components/card.component';\nimport { BrieCardHeaderDirective } from './directives/card-header.directive';\n\n@NgModule({\n  imports: [\n    BrieCardComponent,\n    BrieCardHeaderDirective,\n    CommonModule,\n    MatCardModule,\n    MatButtonModule,\n  ],\n  exports: [\n    BrieCardComponent,\n    BrieCardHeaderDirective,\n  ],\n})\nexport class BrieCardModule {\n}\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './card.module';\nexport * from './components/card.component';\nexport * from './models/card';\nexport * from './directives/card-header.directive';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*\n * Copyright 2025-2026 Bloomreach. All rights reserved. (https://www.bloomreach.com/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *  https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './button-group';\nexport * from './dialog';\nexport * from './expansion-panel';\nexport * from './form';\nexport * from './heading';\nexport * from './icon';\nexport * from './list';\nexport * from './snackbar';\nexport * from './tree';\nexport * from './card';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BrieIconSize","BrieIconModule","i7","i1","i2","i3","i4","i5","i6","i9","i1.BrieFormService","BrieIconType","BrieExpansionPanelComponent","i1.BrieFormValidationService","BrieExpansionPanelModule","BrieButtonGroupModule","BrieButtonType"],"mappings":"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"}