@fundamental-ngx/core 0.34.2 → 0.34.3-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/package.json +1 -1
  8. package/busy-indicator/package.json +1 -1
  9. package/button/package.json +1 -1
  10. package/calendar/package.json +1 -1
  11. package/card/package.json +1 -1
  12. package/carousel/package.json +1 -1
  13. package/checkbox/package.json +1 -1
  14. package/combobox/package.json +1 -1
  15. package/date-picker/package.json +1 -1
  16. package/datetime/package.json +1 -1
  17. package/datetime-picker/package.json +1 -1
  18. package/dialog/package.json +1 -1
  19. package/dynamic-page/dynamic-page-content/dynamic-page-content.component.d.ts +5 -3
  20. package/dynamic-page/dynamic-page.component.d.ts +10 -3
  21. package/dynamic-page/esm2020/dynamic-page-content/dynamic-page-content.component.mjs +16 -8
  22. package/dynamic-page/esm2020/dynamic-page.component.mjs +21 -4
  23. package/dynamic-page/fesm2015/fundamental-ngx-core-dynamic-page.mjs +50 -26
  24. package/dynamic-page/fesm2015/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  25. package/dynamic-page/fesm2020/fundamental-ngx-core-dynamic-page.mjs +48 -26
  26. package/dynamic-page/fesm2020/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  27. package/dynamic-page/package.json +1 -1
  28. package/dynamic-side-content/package.json +1 -1
  29. package/esm2020/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +16 -8
  30. package/esm2020/dynamic-page/dynamic-page.component.mjs +21 -4
  31. package/esm2020/facets/facet/facet.component.mjs +1 -1
  32. package/esm2020/form/form-label/form-label.component.mjs +10 -3
  33. package/esm2020/message-toast/constants.mjs +3 -0
  34. package/esm2020/message-toast/message-toast-service/message-toast.service.mjs +15 -7
  35. package/esm2020/message-toast/message-toast.module.mjs +43 -3
  36. package/esm2020/message-toast/public_api.mjs +2 -1
  37. package/esm2020/pagination/pagination.component.mjs +1 -1
  38. package/esm2020/popover/popover-container/popover-container.directive.mjs +36 -0
  39. package/esm2020/popover/popover-service/popover.service.mjs +12 -3
  40. package/esm2020/popover/popover.module.mjs +10 -5
  41. package/esm2020/popover/public_api.mjs +2 -1
  42. package/esm2020/quick-view/quick-view-group-item-label/quick-view-group-item-label.component.mjs +1 -1
  43. package/facets/esm2020/facet/facet.component.mjs +1 -1
  44. package/facets/fesm2015/fundamental-ngx-core-facets.mjs +1 -1
  45. package/facets/fesm2020/fundamental-ngx-core-facets.mjs +1 -1
  46. package/facets/package.json +1 -1
  47. package/feed-input/package.json +1 -1
  48. package/feed-list-item/package.json +1 -1
  49. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs +50 -26
  50. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  51. package/fesm2015/fundamental-ngx-core-facets.mjs +1 -1
  52. package/fesm2015/fundamental-ngx-core-form.mjs +9 -2
  53. package/fesm2015/fundamental-ngx-core-form.mjs.map +1 -1
  54. package/fesm2015/fundamental-ngx-core-message-toast.mjs +57 -9
  55. package/fesm2015/fundamental-ngx-core-message-toast.mjs.map +1 -1
  56. package/fesm2015/fundamental-ngx-core-pagination.mjs +1 -1
  57. package/fesm2015/fundamental-ngx-core-popover.mjs +51 -8
  58. package/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
  59. package/fesm2015/fundamental-ngx-core-quick-view.mjs +1 -1
  60. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs +48 -26
  61. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  62. package/fesm2020/fundamental-ngx-core-facets.mjs +1 -1
  63. package/fesm2020/fundamental-ngx-core-form.mjs +9 -2
  64. package/fesm2020/fundamental-ngx-core-form.mjs.map +1 -1
  65. package/fesm2020/fundamental-ngx-core-message-toast.mjs +55 -9
  66. package/fesm2020/fundamental-ngx-core-message-toast.mjs.map +1 -1
  67. package/fesm2020/fundamental-ngx-core-pagination.mjs +1 -1
  68. package/fesm2020/fundamental-ngx-core-popover.mjs +50 -8
  69. package/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
  70. package/fesm2020/fundamental-ngx-core-quick-view.mjs +1 -1
  71. package/file-uploader/package.json +1 -1
  72. package/fixed-card-layout/package.json +1 -1
  73. package/flexible-column-layout/package.json +1 -1
  74. package/form/esm2020/form-label/form-label.component.mjs +10 -3
  75. package/form/fesm2015/fundamental-ngx-core-form.mjs +9 -2
  76. package/form/fesm2015/fundamental-ngx-core-form.mjs.map +1 -1
  77. package/form/fesm2020/fundamental-ngx-core-form.mjs +9 -2
  78. package/form/fesm2020/fundamental-ngx-core-form.mjs.map +1 -1
  79. package/form/form-label/form-label.component.d.ts +3 -1
  80. package/form/package.json +1 -1
  81. package/formatted-text/package.json +1 -1
  82. package/grid-list/package.json +1 -1
  83. package/icon/package.json +1 -1
  84. package/illustrated-message/package.json +1 -1
  85. package/infinite-scroll/package.json +1 -1
  86. package/info-label/package.json +1 -1
  87. package/inline-help/package.json +1 -1
  88. package/input-group/package.json +1 -1
  89. package/layout-grid/package.json +1 -1
  90. package/layout-panel/package.json +1 -1
  91. package/link/package.json +1 -1
  92. package/list/package.json +1 -1
  93. package/menu/package.json +1 -1
  94. package/message-box/package.json +1 -1
  95. package/message-strip/package.json +1 -1
  96. package/message-toast/constants.d.ts +3 -0
  97. package/message-toast/esm2020/constants.mjs +3 -0
  98. package/message-toast/esm2020/message-toast-service/message-toast.service.mjs +15 -7
  99. package/message-toast/esm2020/message-toast.module.mjs +43 -3
  100. package/message-toast/esm2020/public_api.mjs +2 -1
  101. package/message-toast/fesm2015/fundamental-ngx-core-message-toast.mjs +57 -9
  102. package/message-toast/fesm2015/fundamental-ngx-core-message-toast.mjs.map +1 -1
  103. package/message-toast/fesm2020/fundamental-ngx-core-message-toast.mjs +55 -9
  104. package/message-toast/fesm2020/fundamental-ngx-core-message-toast.mjs.map +1 -1
  105. package/message-toast/message-toast-service/message-toast.service.d.ts +2 -1
  106. package/message-toast/message-toast.module.d.ts +14 -0
  107. package/message-toast/package.json +1 -1
  108. package/message-toast/public_api.d.ts +1 -0
  109. package/micro-process-flow/package.json +1 -1
  110. package/mobile-mode/package.json +1 -1
  111. package/multi-input/package.json +1 -1
  112. package/nested-list/package.json +1 -1
  113. package/notification/package.json +1 -1
  114. package/object-identifier/package.json +1 -1
  115. package/object-marker/package.json +1 -1
  116. package/object-number/package.json +1 -1
  117. package/object-status/package.json +1 -1
  118. package/package.json +2 -2
  119. package/pagination/esm2020/pagination.component.mjs +1 -1
  120. package/pagination/fesm2015/fundamental-ngx-core-pagination.mjs +1 -1
  121. package/pagination/fesm2020/fundamental-ngx-core-pagination.mjs +1 -1
  122. package/pagination/package.json +1 -1
  123. package/panel/package.json +1 -1
  124. package/popover/esm2020/popover-container/popover-container.directive.mjs +36 -0
  125. package/popover/esm2020/popover-service/popover.service.mjs +12 -3
  126. package/popover/esm2020/popover.module.mjs +10 -5
  127. package/popover/esm2020/public_api.mjs +2 -1
  128. package/popover/fesm2015/fundamental-ngx-core-popover.mjs +51 -8
  129. package/popover/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
  130. package/popover/fesm2020/fundamental-ngx-core-popover.mjs +50 -8
  131. package/popover/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
  132. package/popover/package.json +1 -1
  133. package/popover/popover-container/popover-container.directive.d.ts +17 -0
  134. package/popover/popover-service/popover.service.d.ts +4 -2
  135. package/popover/popover.module.d.ts +5 -4
  136. package/popover/public_api.d.ts +1 -0
  137. package/product-switch/package.json +1 -1
  138. package/progress-indicator/package.json +1 -1
  139. package/quick-view/esm2020/quick-view-group-item-label/quick-view-group-item-label.component.mjs +1 -1
  140. package/quick-view/fesm2015/fundamental-ngx-core-quick-view.mjs +1 -1
  141. package/quick-view/fesm2020/fundamental-ngx-core-quick-view.mjs +1 -1
  142. package/quick-view/package.json +1 -1
  143. package/radio/package.json +1 -1
  144. package/rating-indicator/package.json +1 -1
  145. package/resizable-card-layout/package.json +1 -1
  146. package/schematics/ng-add/index.js +1 -1
  147. package/scroll-spy/package.json +1 -1
  148. package/scrollbar/package.json +1 -1
  149. package/segmented-button/package.json +1 -1
  150. package/select/package.json +1 -1
  151. package/shared/package.json +1 -1
  152. package/shellbar/package.json +1 -1
  153. package/side-navigation/package.json +1 -1
  154. package/slider/package.json +1 -1
  155. package/split-button/package.json +1 -1
  156. package/splitter/package.json +1 -1
  157. package/status-indicator/package.json +1 -1
  158. package/step-input/package.json +1 -1
  159. package/switch/package.json +1 -1
  160. package/table/package.json +1 -1
  161. package/tabs/package.json +1 -1
  162. package/text/package.json +1 -1
  163. package/tile/package.json +1 -1
  164. package/time/package.json +1 -1
  165. package/time-picker/package.json +1 -1
  166. package/timeline/package.json +1 -1
  167. package/title/package.json +1 -1
  168. package/token/package.json +1 -1
  169. package/toolbar/package.json +1 -1
  170. package/tree/package.json +1 -1
  171. package/upload-collection/package.json +1 -1
  172. package/utils/package.json +1 -1
  173. package/vertical-navigation/package.json +1 -1
  174. package/wizard/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-form.mjs","sources":["../../../../libs/core/src/lib/form/fieldset/fieldset.component.ts","../../../../libs/core/src/lib/form/fieldset/fieldset.module.ts","../../../../libs/core/src/lib/form/form-control/form-control.component.ts","../../../../libs/core/src/lib/form/form-control/form-control.module.ts","../../../../libs/core/src/lib/form/form-item/form-item.component.ts","../../../../libs/core/src/lib/form/form-item/form-item.module.ts","../../../../libs/core/src/lib/form/form-label/form-label.component.ts","../../../../libs/core/src/lib/form/form-label/form-label.component.html","../../../../libs/core/src/lib/form/form-label/form-label.module.ts","../../../../libs/core/src/lib/form/form-header/form-header.component.ts","../../../../libs/core/src/lib/form/form-header/form-header.module.ts","../../../../libs/core/src/lib/form/form-legend/form-legend.directive.ts","../../../../libs/core/src/lib/form/form-legend/form-legend.module.ts","../../../../libs/core/src/lib/form/form-message/constants.ts","../../../../libs/core/src/lib/form/form-message/form-message.component.ts","../../../../libs/core/src/lib/form/form-message/form-message.component.html","../../../../libs/core/src/lib/form/form-message/form-message.module.ts","../../../../libs/core/src/lib/form/form-input-message-group/form-input-message-group.component.ts","../../../../libs/core/src/lib/form/form-input-message-group/form-input-message-group.component.html","../../../../libs/core/src/lib/form/form-input-message-group/form-input-message-group.module.ts","../../../../libs/core/src/lib/form/form-group/form-group.component.ts","../../../../libs/core/src/lib/form/form-group/form-group.component.html","../../../../libs/core/src/lib/form/form-group/form-group.module.ts","../../../../libs/core/src/lib/form/form.module.ts","../../../../libs/core/src/lib/form/form-message/popover-form-message.service.ts","../../../../libs/core/src/lib/form/fundamental-ngx-core-form.ts"],"sourcesContent":["import { Component, HostBinding, ViewEncapsulation } from '@angular/core';\n\n/**\n * Used for easily displaying forms with a margin. Not necessary for fundamental forms to be functional.\n *\n * ```html\n * <div fd-fieldset\n * <div fd-form-item>\n * ...\n * </div>\n * </div>\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-fieldset]',\n template: `<ng-content></ng-content>`,\n styleUrls: ['./fieldset.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class FieldsetComponent {\n /** @hidden */\n @HostBinding('class.fd-fieldset')\n fdFieldClass = true;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldsetComponent } from './fieldset.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FieldsetComponent],\n declarations: [FieldsetComponent]\n})\nexport class FieldSetModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/core/shared';\nimport { Subscription } from 'rxjs';\nimport { ContentDensityService } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive intended for use on form controls.\n *\n * ```html\n * <input type=\"text\" fd-form-control />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-form-control]',\n template: `<ng-content></ng-content>`,\n styleUrls: ['./form-control.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormControlComponent implements CssClassBuilder, OnInit, OnChanges, OnDestroy {\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n state?: FormStates;\n\n /**\n * Whether form is in compact mode\n */\n @Input()\n compact?: boolean;\n\n @Input()\n type: string;\n\n /** user's custom classes */\n @Input()\n class: string;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return [\n this.state ? 'is-' + this.state : '',\n this._getFormClass(),\n this.compact ? this._getFormClass() + '--compact' : '',\n this.class\n ];\n }\n\n private _getFormClass(): string {\n switch (this._getElementTag()) {\n case 'input':\n return 'fd-input';\n case 'textarea':\n return 'fd-textarea';\n }\n }\n\n /** @hidden */\n constructor(private _elementRef: ElementRef, @Optional() private _contentDensityService: ContentDensityService) {}\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n if (this.compact === undefined && this._contentDensityService) {\n this._subscriptions.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this.buildComponentCssClass();\n })\n );\n }\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n\n /** @hidden */\n private _getElementTag(): string {\n if (this.elementRef() && this.elementRef().nativeElement) {\n return this.elementRef().nativeElement.tagName.toLocaleLowerCase();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControlComponent } from './form-control.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormControlComponent],\n declarations: [FormControlComponent]\n})\nexport class FormControlModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Directive to be applied to the parent of a form control.\n *\n * ```html\n * <div fd-form-item>\n * <input fd-form-control type=\"text\" />\n * </div>\n * ```\n */\n@Component({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-form-item]',\n template: `<ng-content></ng-content>`,\n styleUrls: ['./form-item.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormItemComponent {\n /** Whether the form item is inline. */\n @Input()\n @HostBinding('class.fd-form-item--inline')\n isInline = false;\n\n /** Whether the form item is horizontal. */\n @Input()\n @HostBinding('class.fd-form-item--horizontal')\n horizontal = false;\n\n /** @hidden */\n @HostBinding('class.fd-form-item')\n fdFormItemClass = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormItemComponent } from './form-item.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormItemComponent],\n declarations: [FormItemComponent]\n})\nexport class FormItemModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, OnChanges, ViewEncapsulation } from '@angular/core';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { InlineHelpFormPlacement } from '../inline-help-placement.type';\n\n/**\n * Label to be linked to a form control.\n *\n * ```html\n * <label fd-form-label for=\"input-id\">Label Text</label>\n * <input fd-form-control type=\"text\" id=\"input-id\" />\n * ```\n */\n@Component({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-form-label]',\n templateUrl: './form-label.component.html',\n styleUrls: ['./form-label.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormLabelComponent implements OnChanges {\n /** Whether form is required */\n @Input()\n required = false;\n\n /** Whether form is required */\n @Input()\n colon = false;\n\n /** @deprecated */\n @Input()\n checkbox = false;\n\n /** @deprecated */\n @Input()\n radio = false;\n\n /** Inline help body text */\n @Input()\n inlineHelpTitle: string = null;\n\n /** Glyph of icon triggering inline help */\n @Input()\n inlineHelpGlyph = 'question-mark';\n\n /** Trigger event names for the inline help */\n @Input()\n inlineHelpTriggers: string[] = ['mouseenter', 'mouseleave', 'focusin', 'focusout'];\n\n /**\n * The placement of the inline help.\n * It can be one of:\n * top, top-start, top-end, bottom, bottom-start, bottom-end,\n * right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n inlineHelpBodyPlacement: Placement;\n\n /** If inline help trigger icon should be placed after, or before text */\n @Input()\n inlineHelpPlacement: InlineHelpFormPlacement = 'after';\n\n /** @hidden */\n @HostBinding('class.fd-form-label__wrapper')\n defaultClass = true;\n\n /** @hidden */\n @HostBinding('class.fd-form-label__wrapper--inline-help')\n inlineHelpClass = true;\n /** @hidden */\n @HostBinding('class.fd-form-label__wrapper--inline-help--after')\n inlineHelpAfter = true;\n\n /** @hidden */\n ngOnChanges(): void {\n this.inlineHelpClass = !!this.inlineHelpTitle;\n this.inlineHelpAfter = this.inlineHelpTitle && this.inlineHelpPlacement === 'after';\n }\n}\n","<ng-template #inlineHelpRef>\n <fd-icon\n *ngIf=\"inlineHelpTitle\"\n [class.fd-form-label__help]=\"true\"\n [class.fd-form-label__help--after]=\"inlineHelpPlacement === 'after'\"\n [glyph]=\"inlineHelpGlyph\"\n [triggers]=\"inlineHelpTriggers\"\n [fd-inline-help]=\"inlineHelpTitle\"\n [ariaLabel]=\"inlineHelpTitle\"\n [placement]=\"inlineHelpBodyPlacement\"\n tabindex=\"0\"\n ></fd-icon>\n</ng-template>\n\n<ng-container *ngIf=\"inlineHelpPlacement === 'before' && inlineHelpTitle\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n\n<span class=\"fd-form-label\" [class.fd-form-label--required]=\"required\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"colon\">:</ng-container>\n</span>\n\n<ng-container *ngIf=\"inlineHelpPlacement === 'after' && inlineHelpTitle\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormLabelComponent } from './form-label.component';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { InlineHelpModule } from '@fundamental-ngx/core/inline-help';\n\n@NgModule({\n imports: [CommonModule, IconModule, InlineHelpModule],\n exports: [FormLabelComponent],\n declarations: [FormLabelComponent]\n})\nexport class FormLabelModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation } from '@angular/core';\n\n/**\n *\n * ```html\n * <h4 fd-form-header>Form Header</h4>\n * ```\n */\n@Component({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-form-header]',\n template: `<span class=\"fd-form-header__text\"><ng-content></ng-content></span>`,\n styleUrls: ['./form-header.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormHeaderComponent {\n /** @hidden */\n @HostBinding('class.fd-form-header')\n fdFormHeaderClass = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormHeaderComponent } from './form-header.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormHeaderComponent],\n declarations: [FormHeaderComponent]\n})\nexport class FormHeaderModule {}\n","import { Directive, HostBinding } from '@angular/core';\n\n/**\n * Applies css to a legend html element.\n *\n * <legend fd-form-legend>Legend</legend>\n */\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-form-legend]'\n})\nexport class FormLegendDirective {\n /** @hidden */\n @HostBinding('class.fd-fieldset__legend')\n fdFormLegendClass = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormLegendDirective } from './form-legend.directive';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormLegendDirective],\n declarations: [FormLegendDirective]\n})\nexport class FormLegendModule {}\n","import { MessageStates } from './form-message.component';\n\nexport const CSS_CLASS_NAME = {\n message: 'fd-form-message',\n messageStatic: 'fd-form-message--static',\n messageEmbedded: 'fd-form-message--embedded',\n messageSuccess: 'fd-form-message--success',\n messageError: 'fd-form-message--error',\n messageWarning: 'fd-form-message--warning',\n messageInformation: 'fd-form-message--information'\n};\n\nexport function getTypeClassName(size: MessageStates): string {\n switch (size) {\n case 'error':\n return CSS_CLASS_NAME.messageError;\n case 'success':\n return CSS_CLASS_NAME.messageSuccess;\n case 'warning':\n return CSS_CLASS_NAME.messageWarning;\n case 'information':\n return CSS_CLASS_NAME.messageInformation;\n default:\n return null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CSS_CLASS_NAME, getTypeClassName } from './constants';\n\nexport type MessageStates = 'success' | 'error' | 'warning' | 'information';\n\n/**\n * Form message. Intended to be displayed with a form control for validation purposes.\n */\n@Component({\n selector: 'fd-form-message',\n templateUrl: './form-message.component.html',\n styleUrls: ['./form-message.component.scss'],\n host: {\n 'aria-live': 'assertive',\n 'aria-atomic': 'true'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormMessageComponent implements CssClassBuilder, OnInit, OnChanges {\n /** Type of the message. Can be 'success' | 'error' | 'warning' | 'information' */\n @Input()\n type: MessageStates;\n\n /** Whether message should be in static mode, without popover. It's mostly used for forms component, that contain dropdown */\n @Input()\n static = false;\n\n /**\n * Whether message is used inside popovers or dialogs.\n * When it is enabled box shadow is removed and message is expanded to whole container width\n */\n @Input()\n embedded = false;\n\n /** @hidden User's custom classes */\n @Input()\n class: string;\n\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n @applyCssClass\n buildComponentCssClass(): string[] {\n return [\n CSS_CLASS_NAME.message,\n this.static ? CSS_CLASS_NAME.messageStatic : '',\n this.embedded ? CSS_CLASS_NAME.messageEmbedded : '',\n getTypeClassName(this.type),\n this.class\n ];\n }\n\n /** @hidden */\n elementRef(): ElementRef {\n return this._elementRef;\n }\n}\n","<ng-content></ng-content>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormMessageComponent } from './form-message.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormMessageComponent],\n declarations: [FormMessageComponent]\n})\nexport class FormMessageModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { Placement, PopoverFillMode } from '@fundamental-ngx/core/shared';\n\n@Component({\n selector: 'fd-form-input-message-group',\n templateUrl: './form-input-message-group.component.html',\n styleUrls: ['./form-input-message-group.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormInputMessageGroupComponent {\n /*\n * To allow user to determine what event he wants to trigger the messages to show\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = ['focusin', 'focusout'];\n\n /*\n * Allows the user to decide if he wants to keep the error message after they click outside\n * Whether the popover should close when a click is made outside its boundaries.\n */\n @Input()\n closeOnOutsideClick = false;\n\n /**\n * Preset options for the message body width.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * Leave blank for no effect.\n */\n @Input()\n fillControlMode: PopoverFillMode;\n\n /** Whether the popover should have an arrow. */\n @Input()\n noArrow = true;\n\n /** Whether the popover should close when the escape key is pressed. */\n @Input()\n closeOnEscapeKey = false;\n\n /** The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end. */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** Whether the message is open. Can be used through two-way binding. */\n @Input()\n isOpen = false;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * Function is called every time message changes isOpen attribute\n */\n public openChanged(isOpen: boolean): void {\n this.isOpenChange.emit(isOpen);\n }\n}\n","<fd-popover\n class=\"fd-form-input-message-group\"\n additionalBodyClass=\"fd-popover__popper--input-message-group\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [noArrow]=\"noArrow\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"openChanged($event)\"\n>\n <fd-popover-control>\n <ng-content></ng-content>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content select=\"fd-form-message\"></ng-content>\n </fd-popover-body>\n</fd-popover>\n","import { CommonModule } from '@angular/common';\nimport { FormInputMessageGroupComponent } from './form-input-message-group.component';\nimport { NgModule } from '@angular/core';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\n\n@NgModule({\n imports: [CommonModule, PopoverModule],\n exports: [FormInputMessageGroupComponent],\n declarations: [FormInputMessageGroupComponent]\n})\nexport class FormInputMessageGroupModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n ElementRef,\n Input,\n OnChanges,\n OnInit\n} from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\n\n/**\n * Represents a form group element.\n *\n * ```html\n * <fd-form-group>\n * <div fd-form-item>\n * <input fd-form-control type=\"radio\" checked>\n * <fd-form-label>Option One</fd-form-label>\n * </div>\n * </fd-form-group>\n * ```\n */\n@Component({\n selector: 'fd-form-group',\n templateUrl: './form-group.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./form-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormGroupComponent implements CssClassBuilder, OnChanges, OnInit {\n @HostBinding('class.fd-form-group')\n fdFormGroupClass = true;\n\n /** Determines if form items should be displayed inline or not\n * Default value is set to false;\n */\n @Input()\n isInline: boolean;\n\n /** @hidden */\n class: string;\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** This method is responsible for building a css class based on current state\n * It is implementation of CssClassBuilder interface and\n * should be used with @applyCssClass decorator\n */\n @applyCssClass\n buildComponentCssClass(): string[] {\n return [this.isInline ? 'fd-form-group--inline' : ''];\n }\n\n /** @hidden */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n}\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroupComponent } from './form-group.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormGroupComponent],\n declarations: [FormGroupComponent]\n})\nexport class FormGroupModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { FieldSetModule } from './fieldset/fieldset.module';\nimport { FormControlModule } from './form-control/form-control.module';\nimport { FormItemModule } from './form-item/form-item.module';\nimport { FormLabelModule } from './form-label/form-label.module';\nimport { FormHeaderModule } from './form-header/form-header.module';\nimport { FormLegendModule } from './form-legend/form-legend.module';\nimport { FormMessageModule } from './form-message/form-message.module';\nimport { FormInputMessageGroupModule } from './form-input-message-group/form-input-message-group.module';\nimport { FormGroupModule } from './form-group/form-group.module';\n\n@NgModule({\n imports: [CommonModule, PopoverModule],\n exports: [\n FieldSetModule,\n FormControlModule,\n FormItemModule,\n FormLabelModule,\n FormHeaderModule,\n FormLegendModule,\n FormMessageModule,\n FormInputMessageGroupModule,\n FormGroupModule\n ]\n})\nexport class FormModule {}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { MessageStates } from './form-message.component';\nimport { PopoverService } from '@fundamental-ngx/core/popover';\nimport { CSS_CLASS_NAME, getTypeClassName } from './constants';\n\n@Injectable()\nexport class PopoverFormMessageService {\n /** @hidden */\n private _type: MessageStates;\n\n /** @hidden */\n private _message: string;\n\n /** @hidden */\n private _hidden = false;\n\n constructor(private _popoverService: PopoverService) {}\n\n /** @hidden */\n set messageType(type: MessageStates) {\n this._type = type;\n this._updatePopover();\n }\n\n /** @hidden */\n set message(message: string) {\n this._message = message;\n this._updatePopover();\n }\n\n /** @hidden */\n set triggers(triggers: string[]) {\n this._popoverService.triggers = triggers;\n this._popoverService._refreshTriggerListeners();\n }\n\n /** Initialise popover service with trigger element */\n init(triggerElement: ElementRef): void {\n this._popoverService.initialise(triggerElement);\n }\n\n /** Forces hidden state onto popover, without any collision with triggering events */\n hide(): void {\n this._hidden = true;\n this._updatePopover();\n }\n\n /** Removes hidden state onto popover, without any collision with triggering events */\n show(): void {\n this._hidden = false;\n this._updatePopover();\n }\n\n /** @hidden */\n private _getAdditionalClass(): string[] {\n return [\n CSS_CLASS_NAME.message,\n getTypeClassName(this._type),\n this._shouldBeHidden() ? 'fd-popover__body--hidden' : ''\n ];\n }\n\n /** @hidden */\n private _updatePopover(): void {\n this._popoverService.additionalBodyClass = this._getAdditionalClass().join(' ');\n this._popoverService.updateContent(this._message, null);\n }\n\n /** @hidden */\n private _shouldBeHidden(): boolean {\n return this._hidden || !this._message;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-form.mjs","sources":["../../../../libs/core/src/lib/form/fieldset/fieldset.component.ts","../../../../libs/core/src/lib/form/fieldset/fieldset.module.ts","../../../../libs/core/src/lib/form/form-control/form-control.component.ts","../../../../libs/core/src/lib/form/form-control/form-control.module.ts","../../../../libs/core/src/lib/form/form-item/form-item.component.ts","../../../../libs/core/src/lib/form/form-item/form-item.module.ts","../../../../libs/core/src/lib/form/form-label/form-label.component.ts","../../../../libs/core/src/lib/form/form-label/form-label.component.html","../../../../libs/core/src/lib/form/form-label/form-label.module.ts","../../../../libs/core/src/lib/form/form-header/form-header.component.ts","../../../../libs/core/src/lib/form/form-header/form-header.module.ts","../../../../libs/core/src/lib/form/form-legend/form-legend.directive.ts","../../../../libs/core/src/lib/form/form-legend/form-legend.module.ts","../../../../libs/core/src/lib/form/form-message/constants.ts","../../../../libs/core/src/lib/form/form-message/form-message.component.ts","../../../../libs/core/src/lib/form/form-message/form-message.component.html","../../../../libs/core/src/lib/form/form-message/form-message.module.ts","../../../../libs/core/src/lib/form/form-input-message-group/form-input-message-group.component.ts","../../../../libs/core/src/lib/form/form-input-message-group/form-input-message-group.component.html","../../../../libs/core/src/lib/form/form-input-message-group/form-input-message-group.module.ts","../../../../libs/core/src/lib/form/form-group/form-group.component.ts","../../../../libs/core/src/lib/form/form-group/form-group.component.html","../../../../libs/core/src/lib/form/form-group/form-group.module.ts","../../../../libs/core/src/lib/form/form.module.ts","../../../../libs/core/src/lib/form/form-message/popover-form-message.service.ts","../../../../libs/core/src/lib/form/fundamental-ngx-core-form.ts"],"sourcesContent":["import { Component, HostBinding, ViewEncapsulation } from '@angular/core';\n\n/**\n * Used for easily displaying forms with a margin. Not necessary for fundamental forms to be functional.\n *\n * ```html\n * <div fd-fieldset\n * <div fd-form-item>\n * ...\n * </div>\n * </div>\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-fieldset]',\n template: `<ng-content></ng-content>`,\n styleUrls: ['./fieldset.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class FieldsetComponent {\n /** @hidden */\n @HostBinding('class.fd-fieldset')\n fdFieldClass = true;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldsetComponent } from './fieldset.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FieldsetComponent],\n declarations: [FieldsetComponent]\n})\nexport class FieldSetModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormStates } from '@fundamental-ngx/core/shared';\nimport { Subscription } from 'rxjs';\nimport { ContentDensityService } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\n\n/**\n * Directive intended for use on form controls.\n *\n * ```html\n * <input type=\"text\" fd-form-control />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-form-control]',\n template: `<ng-content></ng-content>`,\n styleUrls: ['./form-control.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormControlComponent implements CssClassBuilder, OnInit, OnChanges, OnDestroy {\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n state?: FormStates;\n\n /**\n * Whether form is in compact mode\n */\n @Input()\n compact?: boolean;\n\n @Input()\n type: string;\n\n /** user's custom classes */\n @Input()\n class: string;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return [\n this.state ? 'is-' + this.state : '',\n this._getFormClass(),\n this.compact ? this._getFormClass() + '--compact' : '',\n this.class\n ];\n }\n\n private _getFormClass(): string {\n switch (this._getElementTag()) {\n case 'input':\n return 'fd-input';\n case 'textarea':\n return 'fd-textarea';\n }\n }\n\n /** @hidden */\n constructor(private _elementRef: ElementRef, @Optional() private _contentDensityService: ContentDensityService) {}\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n if (this.compact === undefined && this._contentDensityService) {\n this._subscriptions.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this.buildComponentCssClass();\n })\n );\n }\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n\n /** @hidden */\n private _getElementTag(): string {\n if (this.elementRef() && this.elementRef().nativeElement) {\n return this.elementRef().nativeElement.tagName.toLocaleLowerCase();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControlComponent } from './form-control.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormControlComponent],\n declarations: [FormControlComponent]\n})\nexport class FormControlModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Directive to be applied to the parent of a form control.\n *\n * ```html\n * <div fd-form-item>\n * <input fd-form-control type=\"text\" />\n * </div>\n * ```\n */\n@Component({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-form-item]',\n template: `<ng-content></ng-content>`,\n styleUrls: ['./form-item.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormItemComponent {\n /** Whether the form item is inline. */\n @Input()\n @HostBinding('class.fd-form-item--inline')\n isInline = false;\n\n /** Whether the form item is horizontal. */\n @Input()\n @HostBinding('class.fd-form-item--horizontal')\n horizontal = false;\n\n /** @hidden */\n @HostBinding('class.fd-form-item')\n fdFormItemClass = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormItemComponent } from './form-item.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormItemComponent],\n declarations: [FormItemComponent]\n})\nexport class FormItemModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, OnChanges, ViewEncapsulation } from '@angular/core';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { InlineHelpFormPlacement } from '../inline-help-placement.type';\n\n/**\n * Label to be linked to a form control.\n *\n * ```html\n * <label fd-form-label for=\"input-id\">Label Text</label>\n * <input fd-form-control type=\"text\" id=\"input-id\" />\n * ```\n */\n@Component({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-form-label]',\n templateUrl: './form-label.component.html',\n styleUrls: ['./form-label.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormLabelComponent implements OnChanges {\n /** Whether form is required */\n @Input()\n required = false;\n\n /** Whether form is required */\n @Input()\n colon = false;\n\n /** @deprecated */\n @Input()\n checkbox = false;\n\n /** @deprecated */\n @Input()\n radio = false;\n\n /** Align label on end */\n @Input()\n @HostBinding('class.fd-form-label__wrapper--align-end')\n alignLabelEnd = false;\n\n /** Inline help body text */\n @Input()\n inlineHelpTitle: string = null;\n\n /** Glyph of icon triggering inline help */\n @Input()\n inlineHelpGlyph = 'question-mark';\n\n /** Trigger event names for the inline help */\n @Input()\n inlineHelpTriggers: string[] = ['mouseenter', 'mouseleave', 'focusin', 'focusout'];\n\n /**\n * The placement of the inline help.\n * It can be one of:\n * top, top-start, top-end, bottom, bottom-start, bottom-end,\n * right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n inlineHelpBodyPlacement: Placement;\n\n /** If inline help trigger icon should be placed after, or before text */\n @Input()\n inlineHelpPlacement: InlineHelpFormPlacement = 'after';\n\n /** @hidden */\n @HostBinding('class.fd-form-label__wrapper')\n defaultClass = true;\n\n /** @hidden */\n @HostBinding('class.fd-form-label__wrapper--inline-help')\n inlineHelpClass = true;\n /** @hidden */\n @HostBinding('class.fd-form-label__wrapper--inline-help--after')\n inlineHelpAfter = true;\n\n /** @hidden */\n ngOnChanges(): void {\n this.inlineHelpClass = !!this.inlineHelpTitle;\n this.inlineHelpAfter = this.inlineHelpTitle && this.inlineHelpPlacement === 'after';\n }\n}\n","<ng-template #inlineHelpRef>\n <fd-icon\n *ngIf=\"inlineHelpTitle\"\n [class.fd-form-label__help]=\"true\"\n [class.fd-form-label__help--after]=\"inlineHelpPlacement === 'after'\"\n [glyph]=\"inlineHelpGlyph\"\n [triggers]=\"inlineHelpTriggers\"\n [fd-inline-help]=\"inlineHelpTitle\"\n [ariaLabel]=\"inlineHelpTitle\"\n [placement]=\"inlineHelpBodyPlacement\"\n tabindex=\"0\"\n ></fd-icon>\n</ng-template>\n\n<ng-container *ngIf=\"inlineHelpPlacement === 'before' && inlineHelpTitle\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n\n<span class=\"fd-form-label\" [class.fd-form-label--required]=\"required\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"colon\">:</ng-container>\n</span>\n\n<ng-container *ngIf=\"inlineHelpPlacement === 'after' && inlineHelpTitle\">\n <ng-container *ngTemplateOutlet=\"inlineHelpRef\"></ng-container>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormLabelComponent } from './form-label.component';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { InlineHelpModule } from '@fundamental-ngx/core/inline-help';\n\n@NgModule({\n imports: [CommonModule, IconModule, InlineHelpModule],\n exports: [FormLabelComponent],\n declarations: [FormLabelComponent]\n})\nexport class FormLabelModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation } from '@angular/core';\n\n/**\n *\n * ```html\n * <h4 fd-form-header>Form Header</h4>\n * ```\n */\n@Component({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-form-header]',\n template: `<span class=\"fd-form-header__text\"><ng-content></ng-content></span>`,\n styleUrls: ['./form-header.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormHeaderComponent {\n /** @hidden */\n @HostBinding('class.fd-form-header')\n fdFormHeaderClass = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormHeaderComponent } from './form-header.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormHeaderComponent],\n declarations: [FormHeaderComponent]\n})\nexport class FormHeaderModule {}\n","import { Directive, HostBinding } from '@angular/core';\n\n/**\n * Applies css to a legend html element.\n *\n * <legend fd-form-legend>Legend</legend>\n */\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-form-legend]'\n})\nexport class FormLegendDirective {\n /** @hidden */\n @HostBinding('class.fd-fieldset__legend')\n fdFormLegendClass = true;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormLegendDirective } from './form-legend.directive';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormLegendDirective],\n declarations: [FormLegendDirective]\n})\nexport class FormLegendModule {}\n","import { MessageStates } from './form-message.component';\n\nexport const CSS_CLASS_NAME = {\n message: 'fd-form-message',\n messageStatic: 'fd-form-message--static',\n messageEmbedded: 'fd-form-message--embedded',\n messageSuccess: 'fd-form-message--success',\n messageError: 'fd-form-message--error',\n messageWarning: 'fd-form-message--warning',\n messageInformation: 'fd-form-message--information'\n};\n\nexport function getTypeClassName(size: MessageStates): string {\n switch (size) {\n case 'error':\n return CSS_CLASS_NAME.messageError;\n case 'success':\n return CSS_CLASS_NAME.messageSuccess;\n case 'warning':\n return CSS_CLASS_NAME.messageWarning;\n case 'information':\n return CSS_CLASS_NAME.messageInformation;\n default:\n return null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CSS_CLASS_NAME, getTypeClassName } from './constants';\n\nexport type MessageStates = 'success' | 'error' | 'warning' | 'information';\n\n/**\n * Form message. Intended to be displayed with a form control for validation purposes.\n */\n@Component({\n selector: 'fd-form-message',\n templateUrl: './form-message.component.html',\n styleUrls: ['./form-message.component.scss'],\n host: {\n 'aria-live': 'assertive',\n 'aria-atomic': 'true'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormMessageComponent implements CssClassBuilder, OnInit, OnChanges {\n /** Type of the message. Can be 'success' | 'error' | 'warning' | 'information' */\n @Input()\n type: MessageStates;\n\n /** Whether message should be in static mode, without popover. It's mostly used for forms component, that contain dropdown */\n @Input()\n static = false;\n\n /**\n * Whether message is used inside popovers or dialogs.\n * When it is enabled box shadow is removed and message is expanded to whole container width\n */\n @Input()\n embedded = false;\n\n /** @hidden User's custom classes */\n @Input()\n class: string;\n\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n @applyCssClass\n buildComponentCssClass(): string[] {\n return [\n CSS_CLASS_NAME.message,\n this.static ? CSS_CLASS_NAME.messageStatic : '',\n this.embedded ? CSS_CLASS_NAME.messageEmbedded : '',\n getTypeClassName(this.type),\n this.class\n ];\n }\n\n /** @hidden */\n elementRef(): ElementRef {\n return this._elementRef;\n }\n}\n","<ng-content></ng-content>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormMessageComponent } from './form-message.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormMessageComponent],\n declarations: [FormMessageComponent]\n})\nexport class FormMessageModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { Placement, PopoverFillMode } from '@fundamental-ngx/core/shared';\n\n@Component({\n selector: 'fd-form-input-message-group',\n templateUrl: './form-input-message-group.component.html',\n styleUrls: ['./form-input-message-group.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormInputMessageGroupComponent {\n /*\n * To allow user to determine what event he wants to trigger the messages to show\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = ['focusin', 'focusout'];\n\n /*\n * Allows the user to decide if he wants to keep the error message after they click outside\n * Whether the popover should close when a click is made outside its boundaries.\n */\n @Input()\n closeOnOutsideClick = false;\n\n /**\n * Preset options for the message body width.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * Leave blank for no effect.\n */\n @Input()\n fillControlMode: PopoverFillMode;\n\n /** Whether the popover should have an arrow. */\n @Input()\n noArrow = true;\n\n /** Whether the popover should close when the escape key is pressed. */\n @Input()\n closeOnEscapeKey = false;\n\n /** The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end. */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** Whether the message is open. Can be used through two-way binding. */\n @Input()\n isOpen = false;\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * Function is called every time message changes isOpen attribute\n */\n public openChanged(isOpen: boolean): void {\n this.isOpenChange.emit(isOpen);\n }\n}\n","<fd-popover\n class=\"fd-form-input-message-group\"\n additionalBodyClass=\"fd-popover__popper--input-message-group\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [noArrow]=\"noArrow\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"openChanged($event)\"\n>\n <fd-popover-control>\n <ng-content></ng-content>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content select=\"fd-form-message\"></ng-content>\n </fd-popover-body>\n</fd-popover>\n","import { CommonModule } from '@angular/common';\nimport { FormInputMessageGroupComponent } from './form-input-message-group.component';\nimport { NgModule } from '@angular/core';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\n\n@NgModule({\n imports: [CommonModule, PopoverModule],\n exports: [FormInputMessageGroupComponent],\n declarations: [FormInputMessageGroupComponent]\n})\nexport class FormInputMessageGroupModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n ElementRef,\n Input,\n OnChanges,\n OnInit\n} from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\n\n/**\n * Represents a form group element.\n *\n * ```html\n * <fd-form-group>\n * <div fd-form-item>\n * <input fd-form-control type=\"radio\" checked>\n * <fd-form-label>Option One</fd-form-label>\n * </div>\n * </fd-form-group>\n * ```\n */\n@Component({\n selector: 'fd-form-group',\n templateUrl: './form-group.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./form-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormGroupComponent implements CssClassBuilder, OnChanges, OnInit {\n @HostBinding('class.fd-form-group')\n fdFormGroupClass = true;\n\n /** Determines if form items should be displayed inline or not\n * Default value is set to false;\n */\n @Input()\n isInline: boolean;\n\n /** @hidden */\n class: string;\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** This method is responsible for building a css class based on current state\n * It is implementation of CssClassBuilder interface and\n * should be used with @applyCssClass decorator\n */\n @applyCssClass\n buildComponentCssClass(): string[] {\n return [this.isInline ? 'fd-form-group--inline' : ''];\n }\n\n /** @hidden */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n}\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroupComponent } from './form-group.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [FormGroupComponent],\n declarations: [FormGroupComponent]\n})\nexport class FormGroupModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { FieldSetModule } from './fieldset/fieldset.module';\nimport { FormControlModule } from './form-control/form-control.module';\nimport { FormItemModule } from './form-item/form-item.module';\nimport { FormLabelModule } from './form-label/form-label.module';\nimport { FormHeaderModule } from './form-header/form-header.module';\nimport { FormLegendModule } from './form-legend/form-legend.module';\nimport { FormMessageModule } from './form-message/form-message.module';\nimport { FormInputMessageGroupModule } from './form-input-message-group/form-input-message-group.module';\nimport { FormGroupModule } from './form-group/form-group.module';\n\n@NgModule({\n imports: [CommonModule, PopoverModule],\n exports: [\n FieldSetModule,\n FormControlModule,\n FormItemModule,\n FormLabelModule,\n FormHeaderModule,\n FormLegendModule,\n FormMessageModule,\n FormInputMessageGroupModule,\n FormGroupModule\n ]\n})\nexport class FormModule {}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { MessageStates } from './form-message.component';\nimport { PopoverService } from '@fundamental-ngx/core/popover';\nimport { CSS_CLASS_NAME, getTypeClassName } from './constants';\n\n@Injectable()\nexport class PopoverFormMessageService {\n /** @hidden */\n private _type: MessageStates;\n\n /** @hidden */\n private _message: string;\n\n /** @hidden */\n private _hidden = false;\n\n constructor(private _popoverService: PopoverService) {}\n\n /** @hidden */\n set messageType(type: MessageStates) {\n this._type = type;\n this._updatePopover();\n }\n\n /** @hidden */\n set message(message: string) {\n this._message = message;\n this._updatePopover();\n }\n\n /** @hidden */\n set triggers(triggers: string[]) {\n this._popoverService.triggers = triggers;\n this._popoverService._refreshTriggerListeners();\n }\n\n /** Initialise popover service with trigger element */\n init(triggerElement: ElementRef): void {\n this._popoverService.initialise(triggerElement);\n }\n\n /** Forces hidden state onto popover, without any collision with triggering events */\n hide(): void {\n this._hidden = true;\n this._updatePopover();\n }\n\n /** Removes hidden state onto popover, without any collision with triggering events */\n show(): void {\n this._hidden = false;\n this._updatePopover();\n }\n\n /** @hidden */\n private _getAdditionalClass(): string[] {\n return [\n CSS_CLASS_NAME.message,\n getTypeClassName(this._type),\n this._shouldBeHidden() ? 'fd-popover__body--hidden' : ''\n ];\n }\n\n /** @hidden */\n private _updatePopover(): void {\n this._popoverService.additionalBodyClass = this._getAdditionalClass().join(' ');\n this._popoverService.updateContent(this._message, null);\n }\n\n /** @hidden */\n private _shouldBeHidden(): boolean {\n return this._hidden || !this._message;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Type, TemplateRef, ViewContainerRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, ViewChild, Input, Output, HostBinding, HostListener, Injectable, NgModule } from '@angular/core';
2
+ import { InjectionToken, EventEmitter, Type, TemplateRef, ViewContainerRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, ViewChild, Input, Output, HostBinding, HostListener, Injectable, Inject, NgModule } from '@angular/core';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { Subject } from 'rxjs';
5
5
  import * as i2 from '@angular/cdk/a11y';
6
6
  import * as i1 from '@fundamental-ngx/core/utils';
7
7
  import { DynamicComponentService } from '@fundamental-ngx/core/utils';
8
8
 
9
+ const MESSAGE_TOAST_CONFIG = new InjectionToken('MessageToastConfig');
10
+
9
11
  /**
10
12
  * Configuration for opening a message toast with the MessageToastService.
11
13
  */
@@ -274,9 +276,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
274
276
  */
275
277
  class MessageToastService {
276
278
  /** @hidden */
277
- constructor(_dynamicComponentService, _liveAnnouncer) {
279
+ constructor(_dynamicComponentService, _liveAnnouncer, _defaultConfig) {
278
280
  this._dynamicComponentService = _dynamicComponentService;
279
281
  this._liveAnnouncer = _liveAnnouncer;
282
+ this._defaultConfig = _defaultConfig;
280
283
  this._messageToasts = [];
281
284
  }
282
285
  /**
@@ -290,9 +293,11 @@ class MessageToastService {
290
293
  * @param content Content of the message toast component.
291
294
  * @param messageToastConfig Configuration of the message toast component.
292
295
  */
293
- open(content, messageToastConfig = new MessageToastConfig()) {
296
+ open(content, messageToastConfig = {}) {
294
297
  // Get default values from message toast model
295
- messageToastConfig = Object.assign(new MessageToastConfig(), messageToastConfig);
298
+ const mergedConfig = { ...this._defaultConfig, ...messageToastConfig };
299
+ // We need MessageToastConfig instance for correct DI in the component.
300
+ messageToastConfig = Object.assign(new MessageToastConfig(), mergedConfig);
296
301
  // Instantiate message toast ref service
297
302
  const service = new MessageToastRef();
298
303
  service.data = messageToastConfig.data;
@@ -336,17 +341,50 @@ class MessageToastService {
336
341
  this._messageToastContainerRef = undefined;
337
342
  }
338
343
  }
339
- MessageToastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastService, deps: [{ token: i1.DynamicComponentService }, { token: i2.LiveAnnouncer }], target: i0.ɵɵFactoryTarget.Injectable });
344
+ MessageToastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastService, deps: [{ token: i1.DynamicComponentService }, { token: i2.LiveAnnouncer }, { token: MESSAGE_TOAST_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
340
345
  MessageToastService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastService });
341
346
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastService, decorators: [{
342
347
  type: Injectable
343
- }], ctorParameters: function () { return [{ type: i1.DynamicComponentService }, { type: i2.LiveAnnouncer }]; } });
348
+ }], ctorParameters: function () { return [{ type: i1.DynamicComponentService }, { type: i2.LiveAnnouncer }, { type: MessageToastConfig, decorators: [{
349
+ type: Inject,
350
+ args: [MESSAGE_TOAST_CONFIG]
351
+ }] }]; } });
344
352
 
353
+ /**
354
+ * Adds Message Toast functionality to your application.
355
+ *
356
+ * Can be imported in two ways:
357
+ * * Plain MessageToastModule with default configuration
358
+ * * With `withConfig()` method which allows passing custom default configuration.
359
+ */
345
360
  class MessageToastModule {
361
+ /**
362
+ * Allows configuring module on a global level with custom configuration.
363
+ * @param config User's custom configuration.
364
+ */
365
+ static withConfig(config) {
366
+ return {
367
+ ngModule: MessageToastModule,
368
+ providers: [
369
+ {
370
+ provide: MESSAGE_TOAST_CONFIG,
371
+ useValue: config
372
+ }
373
+ ]
374
+ };
375
+ }
346
376
  }
347
377
  MessageToastModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
348
378
  MessageToastModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastModule, declarations: [MessageToastComponent, MessageToastContainerComponent], imports: [CommonModule], exports: [MessageToastComponent, MessageToastContainerComponent] });
349
- MessageToastModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastModule, providers: [MessageToastService, DynamicComponentService], imports: [[CommonModule]] });
379
+ MessageToastModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastModule, providers: [
380
+ MessageToastService,
381
+ DynamicComponentService,
382
+ // Provide default configuration which user can later override.
383
+ {
384
+ provide: MESSAGE_TOAST_CONFIG,
385
+ useValue: new MessageToastConfig()
386
+ }
387
+ ], imports: [[CommonModule]] });
350
388
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: MessageToastModule, decorators: [{
351
389
  type: NgModule,
352
390
  args: [{
@@ -354,7 +392,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
354
392
  imports: [CommonModule],
355
393
  exports: [MessageToastComponent, MessageToastContainerComponent],
356
394
  entryComponents: [MessageToastContainerComponent, MessageToastComponent],
357
- providers: [MessageToastService, DynamicComponentService]
395
+ providers: [
396
+ MessageToastService,
397
+ DynamicComponentService,
398
+ // Provide default configuration which user can later override.
399
+ {
400
+ provide: MESSAGE_TOAST_CONFIG,
401
+ useValue: new MessageToastConfig()
402
+ }
403
+ ]
358
404
  }]
359
405
  }] });
360
406
 
@@ -362,5 +408,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
362
408
  * Generated bundle index. Do not edit.
363
409
  */
364
410
 
365
- export { MessageToastComponent, MessageToastConfig, MessageToastContainerComponent, MessageToastModule, MessageToastRef, MessageToastService };
411
+ export { MESSAGE_TOAST_CONFIG, MessageToastComponent, MessageToastConfig, MessageToastContainerComponent, MessageToastModule, MessageToastRef, MessageToastService };
366
412
  //# sourceMappingURL=fundamental-ngx-core-message-toast.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-message-toast.mjs","sources":["../../../../libs/core/src/lib/message-toast/message-toast-utils/message-toast-config.ts","../../../../libs/core/src/lib/message-toast/message-toast-utils/message-toast-ref.ts","../../../../libs/core/src/lib/message-toast/message-toast.component.ts","../../../../libs/core/src/lib/message-toast/message-toast-utils/message-toast-container.component.ts","../../../../libs/core/src/lib/message-toast/message-toast-service/message-toast.service.ts","../../../../libs/core/src/lib/message-toast/message-toast.module.ts","../../../../libs/core/src/lib/message-toast/fundamental-ngx-core-message-toast.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-inferrable-types */\nimport { DynamicComponentConfig } from '@fundamental-ngx/core/utils';\n\n/**\n * Configuration for opening a message toast with the MessageToastService.\n */\nexport class MessageToastConfig implements DynamicComponentConfig {\n /** Id for the message toast component. If omitted, a unique one is generated. */\n id?: string;\n\n /** Data being injected into the child component or template. */\n data?: any;\n\n /** Duration of time *in milliseconds* that the message toast will be visible. Set to -1 for indefinite. */\n duration?: number = 3000;\n\n /** Whether the message toast should stay visible if the cursor is over it. */\n mousePersist?: boolean = false;\n\n /** Aria label for the message toast component element. */\n ariaLabel?: string = null;\n\n /** Width of the message toast. */\n width?: string;\n\n /** Minimum width of the message toast. */\n minWidth?: string;\n\n /** Maximum width of the message toast. */\n maxWidth?: string;\n\n /** The container that the message toast is appended to. By default, it is appended to the body. */\n container?: HTMLElement | 'body' = 'body';\n}\n","import { Subject } from 'rxjs';\n/**\n * Reference to a message toast component generated via the MessageToastService.\n * It can be injected into the content component in the same way a service would be injected.\n * For a template, add let-messageToast to your ng-template tag. Now using *messageToast* in the template refers to this class.\n */\nexport class MessageToastRef {\n private readonly _afterTimeout = new Subject<void>();\n\n /** Observable that is triggered when the message toast has timed out. */\n afterTimeout = this._afterTimeout.asObservable();\n\n /** Data passed from the service open method. */\n data: any;\n\n /**\n * Hides the message toast.\n */\n timeout(): void {\n this._afterTimeout.next();\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n Type,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { MessageToastConfig } from './message-toast-utils/message-toast-config';\nimport { MessageToastRef } from './message-toast-utils/message-toast-ref';\n\nlet messageToastUniqueId = 0;\n\n/**\n * The component that represents a message toast.\n */\n@Component({\n selector: 'fd-message-toast',\n template: `<ng-container #container>{{ message }}</ng-container>`,\n styleUrls: ['./message-toast.component.scss'],\n host: {\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-live]': '\"polite\"',\n '[attr.id]': 'id',\n '[style.width]': 'width',\n '[style.min-width]': 'minWidth',\n '[style.max-width]': 'maxWidth'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MessageToastComponent implements OnInit, AfterViewInit {\n /** @hidden */\n constructor(\n private _elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private ngZone: NgZone,\n @Optional() private messageToastConfig: MessageToastConfig,\n @Optional() private messageToastRef: MessageToastRef\n ) {\n this._setMessageToastConfig(messageToastConfig);\n }\n\n /** @hidden */\n @ViewChild('container', { read: ViewContainerRef })\n containerRef: ViewContainerRef;\n\n /** Id of the message toast. If omitted, a unique one is generated. */\n @Input()\n id: string = 'fd-message-toast-' + messageToastUniqueId++;\n\n /**\n * Duration of time *in milliseconds* that the message toast will be visible.\n * The standard value is 3000 ms.\n * The duration can be set to more than 3000 ms,\n * but it's not recommended to set it to less than 3000 ms.\n * Set to -1 for indefinite.\n */\n @Input()\n duration = 3000;\n\n /** Whether the message toast should stay open if the cursor is over it. */\n @Input()\n mousePersist = false;\n\n /** Aria label for the message toast component element. */\n @Input()\n ariaLabel: string = null;\n\n /** Alternative way of passing in a message to the message toast. */\n @Input()\n message: string;\n\n /** Width of the message toast. */\n @Input()\n width: string;\n\n /** Minimum width of the message toast. */\n @Input()\n minWidth: string;\n\n /**\n * Maximum width of the message toast.\n * The standard maximum width is 15rem.\n * It's not recommended to extend the width to more than 35rem.\n */\n @Input()\n maxWidth: string;\n\n /** Event fired when the message toast is timeout. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onHide: EventEmitter<undefined> = new EventEmitter<undefined>();\n\n /** @hidden */\n mouseOverMessageToast = false;\n\n /** @hidden */\n componentRef: ComponentRef<any> | EmbeddedViewRef<any>;\n\n /** @hidden */\n childContent: Type<any> | TemplateRef<any> | string = undefined;\n\n /** @hidden */\n @HostBinding('class.fd-message-toast')\n messageToastClass = true;\n\n /** @hidden */\n ngOnInit(): void {\n if (this.messageToastRef) {\n this.open();\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.childContent) {\n if (this.childContent instanceof Type) {\n this._loadFromComponent(this.childContent);\n } else if (this.childContent instanceof TemplateRef) {\n this._loadFromTemplate(this.childContent);\n } else {\n this._loadFromString(this.childContent);\n }\n this.cdRef.detectChanges();\n }\n }\n\n /**\n * Closes the message toast\n */\n close(): void {\n if (this.messageToastRef) {\n this.messageToastRef.timeout();\n } else {\n this._elRef.nativeElement.classList.add('fd-has-display-none');\n this._elRef.nativeElement.classList.remove('fd-has-display-block');\n }\n this.onHide.emit();\n }\n\n /**\n * Opens the message toast.\n */\n open(): void {\n if (!this.messageToastRef) {\n if (this._elRef.nativeElement.style.display === 'block') {\n return;\n }\n this._elRef.nativeElement.classList.remove('fd-has-display-none');\n this._elRef.nativeElement.classList.add('fd-has-display-block');\n }\n if (this.duration >= 0) {\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n if (!this.mousePersist) {\n this.ngZone.run(() => this.close());\n return;\n }\n const wait = (): void => {\n if (this.mouseOverMessageToast === true) {\n setTimeout(wait, 500);\n } else {\n this.ngZone.run(() => this.close());\n }\n };\n wait();\n }, this.duration);\n });\n }\n }\n\n /** @hidden */\n @HostListener('mouseenter')\n handleMessageToastMouseEnterEvent(): void {\n this.mouseOverMessageToast = true;\n }\n\n /** @hidden */\n @HostListener('mouseleave')\n handleMessageToastMouseLeaveEvent(): void {\n this.mouseOverMessageToast = false;\n }\n\n /** @hidden */\n private _loadFromTemplate(template: TemplateRef<any>): void {\n const context = {\n $implicit: this.messageToastRef\n };\n this.componentRef = this.containerRef.createEmbeddedView(template, context);\n }\n\n /** @hidden */\n private _loadFromComponent(componentType: Type<any>): void {\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);\n this.containerRef.clear();\n this.componentRef = this.containerRef.createComponent(componentFactory);\n }\n\n /** @hidden */\n private _loadFromString(contentString: string): void {\n this.containerRef.clear();\n this.message = contentString;\n }\n\n /** @hidden */\n private _setMessageToastConfig(messageToastConfig: MessageToastConfig): void {\n Object.keys(messageToastConfig || {})\n .filter((key) => key !== 'data' && key !== 'container')\n .forEach((key) => (this[key] = messageToastConfig[key]));\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fd-message-toast-container',\n template: ``,\n styles: [\n `\n .fd-message-toast-container {\n position: fixed;\n display: flex;\n flex-direction: column;\n z-index: 5000;\n align-items: center;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n `\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MessageToastContainerComponent {\n /** @hidden */\n @HostBinding('class.fd-message-toast-container')\n fdMessageToastContainerClass = true;\n\n /** Role attribute */\n @Input()\n @HostBinding('attr.role')\n role = 'alert';\n}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { Injectable, ComponentRef, TemplateRef, Type } from '@angular/core';\nimport { MessageToastComponent } from '../message-toast.component';\nimport { MessageToastContainerComponent } from '../message-toast-utils/message-toast-container.component';\nimport { MessageToastRef } from '../message-toast-utils/message-toast-ref';\nimport { MessageToastConfig } from '../message-toast-utils/message-toast-config';\nimport { DynamicComponentService } from '@fundamental-ngx/core/utils';\n\n/**\n * Service for generating message toasts dynamically.\n */\n@Injectable()\nexport class MessageToastService {\n private _messageToasts: ComponentRef<MessageToastComponent>[] = [];\n private _messageToastContainerRef: ComponentRef<MessageToastContainerComponent>;\n\n /** @hidden */\n constructor(private _dynamicComponentService: DynamicComponentService, private _liveAnnouncer: LiveAnnouncer) {}\n\n /**\n * Returns true if there are some message toasts currently open. False otherwise.\n */\n hasOpenMessageToasts(): boolean {\n return this._messageToasts && this._messageToasts.length > 0;\n }\n\n /**\n * Opens a message toast component with a content of type TemplateRef, Component Type or String.\n * @param content Content of the message toast component.\n * @param messageToastConfig Configuration of the message toast component.\n */\n open(\n content: TemplateRef<any> | Type<any> | string,\n messageToastConfig: MessageToastConfig = new MessageToastConfig()\n ): MessageToastRef {\n // Get default values from message toast model\n messageToastConfig = Object.assign(new MessageToastConfig(), messageToastConfig);\n\n // Instantiate message toast ref service\n const service: MessageToastRef = new MessageToastRef();\n service.data = messageToastConfig.data;\n\n // If empty or undefined message toast array, create container\n if (!this._messageToasts || this._messageToasts.length === 0 || !this._messageToastContainerRef) {\n this._messageToastContainerRef =\n this._dynamicComponentService.createDynamicComponent<MessageToastContainerComponent>(\n content,\n MessageToastContainerComponent,\n messageToastConfig\n );\n }\n\n // Define Container to put backdrop and component to container\n messageToastConfig.container = this._messageToastContainerRef.location.nativeElement;\n\n const component = this._dynamicComponentService.createDynamicComponent<MessageToastComponent>(\n content,\n MessageToastComponent,\n messageToastConfig,\n { services: [service, messageToastConfig] }\n );\n\n component.location.nativeElement.style.marginBottom = '10px';\n\n // Subscription to close message toast from ref\n const refSub = service.afterTimeout.subscribe(() => {\n this._destroyMessageToastComponent(component);\n refSub.unsubscribe();\n });\n\n this._messageToasts.push(component);\n\n return service;\n }\n\n /**\n * Hides all message toasts opened by the service.\n */\n hideAll(): void {\n this._messageToasts.forEach((ref) => {\n this._destroyMessageToastComponent(ref);\n });\n }\n\n /** @hidden */\n private _destroyMessageToastComponent(messageToast: ComponentRef<MessageToastComponent>): void {\n this._messageToasts[this._messageToasts.indexOf(messageToast)] = null;\n this._messageToasts = this._messageToasts.filter((item) => item !== null && item !== undefined);\n this._dynamicComponentService.destroyComponent(messageToast);\n\n if (this._messageToastContainerRef && (!this._messageToasts || this._messageToasts.length === 0)) {\n this._destroyMessageToastContainer();\n }\n }\n\n /** @hidden */\n private _destroyMessageToastContainer(): void {\n this._dynamicComponentService.destroyComponent(this._messageToastContainerRef);\n this._messageToastContainerRef = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MessageToastComponent } from './message-toast.component';\nimport { MessageToastService } from './message-toast-service/message-toast.service';\nimport { MessageToastContainerComponent } from './message-toast-utils/message-toast-container.component';\nimport { DynamicComponentService } from '@fundamental-ngx/core/utils';\n\n@NgModule({\n declarations: [MessageToastComponent, MessageToastContainerComponent],\n imports: [CommonModule],\n exports: [MessageToastComponent, MessageToastContainerComponent],\n entryComponents: [MessageToastContainerComponent, MessageToastComponent],\n providers: [MessageToastService, DynamicComponentService]\n})\nexport class MessageToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-message-toast.mjs","sources":["../../../../libs/core/src/lib/message-toast/constants.ts","../../../../libs/core/src/lib/message-toast/message-toast-utils/message-toast-config.ts","../../../../libs/core/src/lib/message-toast/message-toast-utils/message-toast-ref.ts","../../../../libs/core/src/lib/message-toast/message-toast.component.ts","../../../../libs/core/src/lib/message-toast/message-toast-utils/message-toast-container.component.ts","../../../../libs/core/src/lib/message-toast/message-toast-service/message-toast.service.ts","../../../../libs/core/src/lib/message-toast/message-toast.module.ts","../../../../libs/core/src/lib/message-toast/fundamental-ngx-core-message-toast.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { MessageToastConfig } from './message-toast-utils/message-toast-config';\n\nexport const MESSAGE_TOAST_CONFIG = new InjectionToken<MessageToastConfig>('MessageToastConfig');\n","/* eslint-disable @typescript-eslint/no-inferrable-types */\nimport { DynamicComponentConfig } from '@fundamental-ngx/core/utils';\n\n/**\n * Configuration for opening a message toast with the MessageToastService.\n */\nexport class MessageToastConfig implements DynamicComponentConfig {\n /** Id for the message toast component. If omitted, a unique one is generated. */\n id?: string;\n\n /** Data being injected into the child component or template. */\n data?: any;\n\n /** Duration of time *in milliseconds* that the message toast will be visible. Set to -1 for indefinite. */\n duration?: number = 3000;\n\n /** Whether the message toast should stay visible if the cursor is over it. */\n mousePersist?: boolean = false;\n\n /** Aria label for the message toast component element. */\n ariaLabel?: string = null;\n\n /** Width of the message toast. */\n width?: string;\n\n /** Minimum width of the message toast. */\n minWidth?: string;\n\n /** Maximum width of the message toast. */\n maxWidth?: string;\n\n /** The container that the message toast is appended to. By default, it is appended to the body. */\n container?: HTMLElement | 'body' = 'body';\n}\n","import { Subject } from 'rxjs';\n/**\n * Reference to a message toast component generated via the MessageToastService.\n * It can be injected into the content component in the same way a service would be injected.\n * For a template, add let-messageToast to your ng-template tag. Now using *messageToast* in the template refers to this class.\n */\nexport class MessageToastRef {\n private readonly _afterTimeout = new Subject<void>();\n\n /** Observable that is triggered when the message toast has timed out. */\n afterTimeout = this._afterTimeout.asObservable();\n\n /** Data passed from the service open method. */\n data: any;\n\n /**\n * Hides the message toast.\n */\n timeout(): void {\n this._afterTimeout.next();\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n Type,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { MessageToastConfig } from './message-toast-utils/message-toast-config';\nimport { MessageToastRef } from './message-toast-utils/message-toast-ref';\n\nlet messageToastUniqueId = 0;\n\n/**\n * The component that represents a message toast.\n */\n@Component({\n selector: 'fd-message-toast',\n template: `<ng-container #container>{{ message }}</ng-container>`,\n styleUrls: ['./message-toast.component.scss'],\n host: {\n '[attr.aria-label]': 'ariaLabel',\n '[attr.aria-live]': '\"polite\"',\n '[attr.id]': 'id',\n '[style.width]': 'width',\n '[style.min-width]': 'minWidth',\n '[style.max-width]': 'maxWidth'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MessageToastComponent implements OnInit, AfterViewInit {\n /** @hidden */\n constructor(\n private _elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private ngZone: NgZone,\n @Optional() private messageToastConfig: MessageToastConfig,\n @Optional() private messageToastRef: MessageToastRef\n ) {\n this._setMessageToastConfig(messageToastConfig);\n }\n\n /** @hidden */\n @ViewChild('container', { read: ViewContainerRef })\n containerRef: ViewContainerRef;\n\n /** Id of the message toast. If omitted, a unique one is generated. */\n @Input()\n id: string = 'fd-message-toast-' + messageToastUniqueId++;\n\n /**\n * Duration of time *in milliseconds* that the message toast will be visible.\n * The standard value is 3000 ms.\n * The duration can be set to more than 3000 ms,\n * but it's not recommended to set it to less than 3000 ms.\n * Set to -1 for indefinite.\n */\n @Input()\n duration = 3000;\n\n /** Whether the message toast should stay open if the cursor is over it. */\n @Input()\n mousePersist = false;\n\n /** Aria label for the message toast component element. */\n @Input()\n ariaLabel: string = null;\n\n /** Alternative way of passing in a message to the message toast. */\n @Input()\n message: string;\n\n /** Width of the message toast. */\n @Input()\n width: string;\n\n /** Minimum width of the message toast. */\n @Input()\n minWidth: string;\n\n /**\n * Maximum width of the message toast.\n * The standard maximum width is 15rem.\n * It's not recommended to extend the width to more than 35rem.\n */\n @Input()\n maxWidth: string;\n\n /** Event fired when the message toast is timeout. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onHide: EventEmitter<undefined> = new EventEmitter<undefined>();\n\n /** @hidden */\n mouseOverMessageToast = false;\n\n /** @hidden */\n componentRef: ComponentRef<any> | EmbeddedViewRef<any>;\n\n /** @hidden */\n childContent: Type<any> | TemplateRef<any> | string = undefined;\n\n /** @hidden */\n @HostBinding('class.fd-message-toast')\n messageToastClass = true;\n\n /** @hidden */\n ngOnInit(): void {\n if (this.messageToastRef) {\n this.open();\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.childContent) {\n if (this.childContent instanceof Type) {\n this._loadFromComponent(this.childContent);\n } else if (this.childContent instanceof TemplateRef) {\n this._loadFromTemplate(this.childContent);\n } else {\n this._loadFromString(this.childContent);\n }\n this.cdRef.detectChanges();\n }\n }\n\n /**\n * Closes the message toast\n */\n close(): void {\n if (this.messageToastRef) {\n this.messageToastRef.timeout();\n } else {\n this._elRef.nativeElement.classList.add('fd-has-display-none');\n this._elRef.nativeElement.classList.remove('fd-has-display-block');\n }\n this.onHide.emit();\n }\n\n /**\n * Opens the message toast.\n */\n open(): void {\n if (!this.messageToastRef) {\n if (this._elRef.nativeElement.style.display === 'block') {\n return;\n }\n this._elRef.nativeElement.classList.remove('fd-has-display-none');\n this._elRef.nativeElement.classList.add('fd-has-display-block');\n }\n if (this.duration >= 0) {\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n if (!this.mousePersist) {\n this.ngZone.run(() => this.close());\n return;\n }\n const wait = (): void => {\n if (this.mouseOverMessageToast === true) {\n setTimeout(wait, 500);\n } else {\n this.ngZone.run(() => this.close());\n }\n };\n wait();\n }, this.duration);\n });\n }\n }\n\n /** @hidden */\n @HostListener('mouseenter')\n handleMessageToastMouseEnterEvent(): void {\n this.mouseOverMessageToast = true;\n }\n\n /** @hidden */\n @HostListener('mouseleave')\n handleMessageToastMouseLeaveEvent(): void {\n this.mouseOverMessageToast = false;\n }\n\n /** @hidden */\n private _loadFromTemplate(template: TemplateRef<any>): void {\n const context = {\n $implicit: this.messageToastRef\n };\n this.componentRef = this.containerRef.createEmbeddedView(template, context);\n }\n\n /** @hidden */\n private _loadFromComponent(componentType: Type<any>): void {\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);\n this.containerRef.clear();\n this.componentRef = this.containerRef.createComponent(componentFactory);\n }\n\n /** @hidden */\n private _loadFromString(contentString: string): void {\n this.containerRef.clear();\n this.message = contentString;\n }\n\n /** @hidden */\n private _setMessageToastConfig(messageToastConfig: MessageToastConfig): void {\n Object.keys(messageToastConfig || {})\n .filter((key) => key !== 'data' && key !== 'container')\n .forEach((key) => (this[key] = messageToastConfig[key]));\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fd-message-toast-container',\n template: ``,\n styles: [\n `\n .fd-message-toast-container {\n position: fixed;\n display: flex;\n flex-direction: column;\n z-index: 5000;\n align-items: center;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n `\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MessageToastContainerComponent {\n /** @hidden */\n @HostBinding('class.fd-message-toast-container')\n fdMessageToastContainerClass = true;\n\n /** Role attribute */\n @Input()\n @HostBinding('attr.role')\n role = 'alert';\n}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { Injectable, ComponentRef, TemplateRef, Type, Inject } from '@angular/core';\nimport { MESSAGE_TOAST_CONFIG } from '../constants';\nimport { MessageToastComponent } from '../message-toast.component';\nimport { MessageToastContainerComponent } from '../message-toast-utils/message-toast-container.component';\nimport { MessageToastRef } from '../message-toast-utils/message-toast-ref';\nimport { MessageToastConfig } from '../message-toast-utils/message-toast-config';\nimport { DynamicComponentService } from '@fundamental-ngx/core/utils';\n\n/**\n * Service for generating message toasts dynamically.\n */\n@Injectable()\nexport class MessageToastService {\n private _messageToasts: ComponentRef<MessageToastComponent>[] = [];\n private _messageToastContainerRef: ComponentRef<MessageToastContainerComponent>;\n\n /** @hidden */\n constructor(\n private _dynamicComponentService: DynamicComponentService,\n private _liveAnnouncer: LiveAnnouncer,\n @Inject(MESSAGE_TOAST_CONFIG) private _defaultConfig: MessageToastConfig\n ) {}\n\n /**\n * Returns true if there are some message toasts currently open. False otherwise.\n */\n hasOpenMessageToasts(): boolean {\n return this._messageToasts && this._messageToasts.length > 0;\n }\n\n /**\n * Opens a message toast component with a content of type TemplateRef, Component Type or String.\n * @param content Content of the message toast component.\n * @param messageToastConfig Configuration of the message toast component.\n */\n open(content: TemplateRef<any> | Type<any> | string, messageToastConfig: MessageToastConfig = {}): MessageToastRef {\n // Get default values from message toast model\n const mergedConfig = { ...this._defaultConfig, ...messageToastConfig };\n\n // We need MessageToastConfig instance for correct DI in the component.\n messageToastConfig = Object.assign(new MessageToastConfig(), mergedConfig);\n\n // Instantiate message toast ref service\n const service: MessageToastRef = new MessageToastRef();\n service.data = messageToastConfig.data;\n\n // If empty or undefined message toast array, create container\n if (!this._messageToasts || this._messageToasts.length === 0 || !this._messageToastContainerRef) {\n this._messageToastContainerRef =\n this._dynamicComponentService.createDynamicComponent<MessageToastContainerComponent>(\n content,\n MessageToastContainerComponent,\n messageToastConfig\n );\n }\n\n // Define Container to put backdrop and component to container\n messageToastConfig.container = this._messageToastContainerRef.location.nativeElement;\n\n const component = this._dynamicComponentService.createDynamicComponent<MessageToastComponent>(\n content,\n MessageToastComponent,\n messageToastConfig,\n { services: [service, messageToastConfig] }\n );\n\n component.location.nativeElement.style.marginBottom = '10px';\n\n // Subscription to close message toast from ref\n const refSub = service.afterTimeout.subscribe(() => {\n this._destroyMessageToastComponent(component);\n refSub.unsubscribe();\n });\n\n this._messageToasts.push(component);\n\n return service;\n }\n\n /**\n * Hides all message toasts opened by the service.\n */\n hideAll(): void {\n this._messageToasts.forEach((ref) => {\n this._destroyMessageToastComponent(ref);\n });\n }\n\n /** @hidden */\n private _destroyMessageToastComponent(messageToast: ComponentRef<MessageToastComponent>): void {\n this._messageToasts[this._messageToasts.indexOf(messageToast)] = null;\n this._messageToasts = this._messageToasts.filter((item) => item !== null && item !== undefined);\n this._dynamicComponentService.destroyComponent(messageToast);\n\n if (this._messageToastContainerRef && (!this._messageToasts || this._messageToasts.length === 0)) {\n this._destroyMessageToastContainer();\n }\n }\n\n /** @hidden */\n private _destroyMessageToastContainer(): void {\n this._dynamicComponentService.destroyComponent(this._messageToastContainerRef);\n this._messageToastContainerRef = undefined;\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MESSAGE_TOAST_CONFIG } from './constants';\nimport { MessageToastConfig } from './message-toast-utils/message-toast-config';\n\nimport { MessageToastComponent } from './message-toast.component';\nimport { MessageToastService } from './message-toast-service/message-toast.service';\nimport { MessageToastContainerComponent } from './message-toast-utils/message-toast-container.component';\nimport { DynamicComponentService } from '@fundamental-ngx/core/utils';\n\n/**\n * Adds Message Toast functionality to your application.\n *\n * Can be imported in two ways:\n * * Plain MessageToastModule with default configuration\n * * With `withConfig()` method which allows passing custom default configuration.\n */\n@NgModule({\n declarations: [MessageToastComponent, MessageToastContainerComponent],\n imports: [CommonModule],\n exports: [MessageToastComponent, MessageToastContainerComponent],\n entryComponents: [MessageToastContainerComponent, MessageToastComponent],\n providers: [\n MessageToastService,\n DynamicComponentService,\n // Provide default configuration which user can later override.\n {\n provide: MESSAGE_TOAST_CONFIG,\n useValue: new MessageToastConfig()\n }\n ]\n})\nexport class MessageToastModule {\n /**\n * Allows configuring module on a global level with custom configuration.\n * @param config User's custom configuration.\n */\n static withConfig(config: MessageToastConfig): ModuleWithProviders<MessageToastModule> {\n return {\n ngModule: MessageToastModule,\n providers: [\n {\n provide: MESSAGE_TOAST_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -414,7 +414,7 @@ class PaginationComponent {
414
414
  }
415
415
  }
416
416
  PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: PaginationComponent, deps: [{ token: PaginationService }, { token: i0.ChangeDetectorRef }, { token: i2.LiveAnnouncer }, { token: i3.RtlService, optional: true }, { token: i3.ContentDensityService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
417
- PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: PaginationComponent, selector: "fd-pagination", inputs: { id: "id", compact: "compact", mobile: "mobile", totalItems: "totalItems", currentPage: "currentPage", itemsPerPage: "itemsPerPage", itemsPerPageTemplate: "itemsPerPageTemplate", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", displayTotalItems: "displayTotalItems", displayTextTemplate: "displayTextTemplate", firstLabel: "firstLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", lastLabel: "lastLabel", ariaLabel: "ariaLabel", pageLabel: "pageLabel", currentPageAriaLabel: "currentPageAriaLabel", labelBeforeInputMobile: "labelBeforeInputMobile", labelAfterInputMobile: "labelAfterInputMobile", inputAriaLabel: "inputAriaLabel" }, outputs: { pageChangeStart: "pageChangeStart", itemsPerPageChange: "itemsPerPageChange" }, host: { properties: { "class.fd-pagination--mobile": "mobile", "class.fd-pagination--short": "_lastPage <= 9" }, classAttribute: "fd-pagination" }, providers: [PaginationService], viewQueries: [{ propertyName: "_focusKeyManagerList", first: true, predicate: FocusKeyManagerListDirective, descendants: true }, { propertyName: "_pageInputElement", first: true, predicate: ["pageInputElement"], descendants: true, read: ElementRef }, { propertyName: "_currentPageElement", first: true, predicate: ["currentPageElement"], descendants: true, read: ElementRef }, { propertyName: "_focusKeyManagerItems", predicate: FocusKeyManagerItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalItems\">\n <div class=\"fd-pagination__per-page\" *ngIf=\"itemsPerPageTemplate || itemsPerPageOptions?.length\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-container\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-container>\n </div>\n\n <nav\n fd-focus-key-manager-list\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n *ngIf=\"totalItems >= itemsPerPage\"\n >\n <button\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [compact]=\"compact\"\n [ariaLabel]=\"firstLabel\"\n [title]=\"firstLabel\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage($event)\"\n ></button>\n\n <button\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [compact]=\"compact\"\n [ariaLabel]=\"previousLabel\"\n [title]=\"previousLabel\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage($event)\"\n ></button>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesBeforeCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n [compact]=\"compact\"\n [ariaLabel]=\"pageLabel(page)\"\n [title]=\"nextLabel\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n #currentPageElement\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n [compact]=\"compact\"\n [ariaLabel]=\"pageLabel(currentPage)\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n\n <label fd-form-label class=\"fd-pagination__label\"> {{ labelBeforeInputMobile }}: </label>\n\n <input\n #pageInputElement\n fd-focus-key-manager-item\n fd-form-control\n fd-only-digits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n [compact]=\"compact\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [attr.aria-label]=\"inputAriaLabel(currentPage, _lastPage)\"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{ labelAfterInputMobile(_lastPage) }}\n </label>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesAfterCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n [compact]=\"compact\"\n [ariaLabel]=\"pageLabel(page)\"\n [title]=\"nextLabel\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [compact]=\"compact\"\n [ariaLabel]=\"nextLabel\"\n [title]=\"nextLabel\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n\n <button\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [compact]=\"compact\"\n [ariaLabel]=\"lastLabel\"\n [title]=\"lastLabel\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n\n <span *ngIf=\"displayTotalItems\" class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-container\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-container>\n </span>\n</ng-container>\n\n<ng-template #more>\n <span\n class=\"fd-pagination__more\"\n [class.fd-pagination__more--compact]=\"compact\"\n aria-hidden=\"true\"\n aria-label=\"...\"\n role=\"presentation\"\n ></span>\n</ng-template>\n\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\"> {{ showing.of }} Results </span>\n</ng-template>\n\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">{{ itemsPerPageLabel }}:</label>\n\n <fd-select\n [compact]=\"compact\"\n class=\"fd-pagination__per-page-select\"\n [value]=\"itemsPerPage\"\n (valueChange)=\"_onChangePerPage($event)\"\n >\n <fd-option *ngFor=\"let option of pageOptions\" [value]=\"option\">{{ option }}</fd-option>\n </fd-select>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.0-rc.8\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *//*!\n.fd-pagination\n*/.fd-pagination{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;justify-content:space-between;padding:0 1rem;height:2.75rem;width:100%}.fd-pagination:after,.fd-pagination:before{box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;justify-content:center;align-items:center}.fd-pagination__per-page:after,.fd-pagination__per-page:before{box-sizing:inherit;font-size:inherit}.fd-pagination__nav{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;border:0;display:flex;justify-content:center;align-items:center;margin:0 auto}.fd-pagination__nav:after,.fd-pagination__nav:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0}.fd-pagination__more:after,.fd-pagination__more:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;width:2.25rem;text-align:center}.fd-pagination__more--compact:before{width:2rem}.fd-pagination .fd-pagination__button,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__link,.fd-pagination__more{margin-left:.125rem;margin-right:.125rem}.fd-pagination .fd-pagination__input{width:auto;min-width:2.5rem;text-align:center;-moz-appearance:textfield}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{flex-shrink:0;align-self:center}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin:0}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-right:auto;margin-left:0}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media (max-width: 599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-right:auto;margin-left:0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media (min-width: 600px) and (max-width: 1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-right:auto;margin-left:0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n"], components: [{ type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i5.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "checkbox", "radio", "inlineHelpTitle", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement"] }, { type: i5.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "compact", "type", "class"] }, { type: i6.SelectComponent, selector: "fd-select", inputs: ["controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "compact", "extendedBodyTemplate", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline"], outputs: ["isOpenChange", "valueChange"] }, { type: i6.OptionComponent, selector: "fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.FocusKeyManagerListDirective, selector: "[fd-focus-key-manager-list], [fdFocusKeyManagerList]", inputs: ["orientation", "skipPredicate"] }, { type: i3.FocusKeyManagerItemDirective, selector: "[fd-focus-key-manager-item], [fdFocusKeyManagerItem]", inputs: ["initialFocus", "_tabindex"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i8.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.OnlyDigitsDirective, selector: "[fdOnlyDigits], [fd-only-digits]", inputs: ["decimal", "decimalSeparator"] }, { type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true });
417
+ PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: PaginationComponent, selector: "fd-pagination", inputs: { id: "id", compact: "compact", mobile: "mobile", totalItems: "totalItems", currentPage: "currentPage", itemsPerPage: "itemsPerPage", itemsPerPageTemplate: "itemsPerPageTemplate", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", displayTotalItems: "displayTotalItems", displayTextTemplate: "displayTextTemplate", firstLabel: "firstLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", lastLabel: "lastLabel", ariaLabel: "ariaLabel", pageLabel: "pageLabel", currentPageAriaLabel: "currentPageAriaLabel", labelBeforeInputMobile: "labelBeforeInputMobile", labelAfterInputMobile: "labelAfterInputMobile", inputAriaLabel: "inputAriaLabel" }, outputs: { pageChangeStart: "pageChangeStart", itemsPerPageChange: "itemsPerPageChange" }, host: { properties: { "class.fd-pagination--mobile": "mobile", "class.fd-pagination--short": "_lastPage <= 9" }, classAttribute: "fd-pagination" }, providers: [PaginationService], viewQueries: [{ propertyName: "_focusKeyManagerList", first: true, predicate: FocusKeyManagerListDirective, descendants: true }, { propertyName: "_pageInputElement", first: true, predicate: ["pageInputElement"], descendants: true, read: ElementRef }, { propertyName: "_currentPageElement", first: true, predicate: ["currentPageElement"], descendants: true, read: ElementRef }, { propertyName: "_focusKeyManagerItems", predicate: FocusKeyManagerItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalItems\">\n <div class=\"fd-pagination__per-page\" *ngIf=\"itemsPerPageTemplate || itemsPerPageOptions?.length\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-container\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-container>\n </div>\n\n <nav\n fd-focus-key-manager-list\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n *ngIf=\"totalItems >= itemsPerPage\"\n >\n <button\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [compact]=\"compact\"\n [ariaLabel]=\"firstLabel\"\n [title]=\"firstLabel\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage($event)\"\n ></button>\n\n <button\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [compact]=\"compact\"\n [ariaLabel]=\"previousLabel\"\n [title]=\"previousLabel\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage($event)\"\n ></button>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesBeforeCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n [compact]=\"compact\"\n [ariaLabel]=\"pageLabel(page)\"\n [title]=\"nextLabel\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n #currentPageElement\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n [compact]=\"compact\"\n [ariaLabel]=\"pageLabel(currentPage)\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n\n <label fd-form-label class=\"fd-pagination__label\"> {{ labelBeforeInputMobile }}: </label>\n\n <input\n #pageInputElement\n fd-focus-key-manager-item\n fd-form-control\n fd-only-digits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n [compact]=\"compact\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [attr.aria-label]=\"inputAriaLabel(currentPage, _lastPage)\"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{ labelAfterInputMobile(_lastPage) }}\n </label>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesAfterCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n [compact]=\"compact\"\n [ariaLabel]=\"pageLabel(page)\"\n [title]=\"nextLabel\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [compact]=\"compact\"\n [ariaLabel]=\"nextLabel\"\n [title]=\"nextLabel\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n\n <button\n fd-focus-key-manager-item\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [compact]=\"compact\"\n [ariaLabel]=\"lastLabel\"\n [title]=\"lastLabel\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n\n <span *ngIf=\"displayTotalItems\" class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-container\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-container>\n </span>\n</ng-container>\n\n<ng-template #more>\n <span\n class=\"fd-pagination__more\"\n [class.fd-pagination__more--compact]=\"compact\"\n aria-hidden=\"true\"\n aria-label=\"...\"\n role=\"presentation\"\n ></span>\n</ng-template>\n\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\"> {{ showing.of }} Results </span>\n</ng-template>\n\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">{{ itemsPerPageLabel }}:</label>\n\n <fd-select\n [compact]=\"compact\"\n class=\"fd-pagination__per-page-select\"\n [value]=\"itemsPerPage\"\n (valueChange)=\"_onChangePerPage($event)\"\n >\n <fd-option *ngFor=\"let option of pageOptions\" [value]=\"option\">{{ option }}</fd-option>\n </fd-select>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.24.0-rc.8\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *//*!\n.fd-pagination\n*/.fd-pagination{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;justify-content:space-between;padding:0 1rem;height:2.75rem;width:100%}.fd-pagination:after,.fd-pagination:before{box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;justify-content:center;align-items:center}.fd-pagination__per-page:after,.fd-pagination__per-page:before{box-sizing:inherit;font-size:inherit}.fd-pagination__nav{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;border:0;display:flex;justify-content:center;align-items:center;margin:0 auto}.fd-pagination__nav:after,.fd-pagination__nav:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0}.fd-pagination__more:after,.fd-pagination__more:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;width:2.25rem;text-align:center}.fd-pagination__more--compact:before{width:2rem}.fd-pagination .fd-pagination__button,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__link,.fd-pagination__more{margin-left:.125rem;margin-right:.125rem}.fd-pagination .fd-pagination__input{width:auto;min-width:2.5rem;text-align:center;-moz-appearance:textfield}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{flex-shrink:0;align-self:center}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin:0}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-right:auto;margin-left:0}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media (max-width: 599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-right:auto;margin-left:0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media (min-width: 600px) and (max-width: 1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-right:auto;margin-left:0}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n"], components: [{ type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i5.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "checkbox", "radio", "alignLabelEnd", "inlineHelpTitle", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement"] }, { type: i5.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "compact", "type", "class"] }, { type: i6.SelectComponent, selector: "fd-select", inputs: ["controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "compact", "extendedBodyTemplate", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline"], outputs: ["isOpenChange", "valueChange"] }, { type: i6.OptionComponent, selector: "fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.FocusKeyManagerListDirective, selector: "[fd-focus-key-manager-list], [fdFocusKeyManagerList]", inputs: ["orientation", "skipPredicate"] }, { type: i3.FocusKeyManagerItemDirective, selector: "[fd-focus-key-manager-item], [fdFocusKeyManagerItem]", inputs: ["initialFocus", "_tabindex"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i8.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.OnlyDigitsDirective, selector: "[fdOnlyDigits], [fd-only-digits]", inputs: ["decimal", "decimalSeparator"] }, { type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true });
418
418
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: PaginationComponent, decorators: [{
419
419
  type: Component,
420
420
  args: [{ selector: 'fd-pagination', providers: [PaginationService], host: {