@odx/angular 12.21.3 → 12.21.5

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 (147) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +1 -3
  3. package/fesm2022/odx-angular-animations.mjs.map +1 -1
  4. package/fesm2022/odx-angular-breakpoints.mjs +1 -1
  5. package/fesm2022/odx-angular-breakpoints.mjs.map +1 -1
  6. package/fesm2022/odx-angular-cdk-a11y.mjs +1 -1
  7. package/fesm2022/odx-angular-cdk-a11y.mjs.map +1 -1
  8. package/fesm2022/odx-angular-cdk-active-indicator.mjs +1 -1
  9. package/fesm2022/odx-angular-cdk-active-indicator.mjs.map +1 -1
  10. package/fesm2022/odx-angular-cdk-autocomplete-control.mjs +1 -1
  11. package/fesm2022/odx-angular-cdk-autocomplete-control.mjs.map +1 -1
  12. package/fesm2022/odx-angular-cdk-checkbox-control.mjs +1 -1
  13. package/fesm2022/odx-angular-cdk-checkbox-control.mjs.map +1 -1
  14. package/fesm2022/odx-angular-cdk-connected-overlay.mjs +1 -1
  15. package/fesm2022/odx-angular-cdk-connected-overlay.mjs.map +1 -1
  16. package/fesm2022/odx-angular-cdk-custom-form-control.mjs +1 -1
  17. package/fesm2022/odx-angular-cdk-custom-form-control.mjs.map +1 -1
  18. package/fesm2022/odx-angular-cdk-date-input.mjs.map +1 -1
  19. package/fesm2022/odx-angular-cdk-dynamic-view.mjs +1 -1
  20. package/fesm2022/odx-angular-cdk-dynamic-view.mjs.map +1 -1
  21. package/fesm2022/odx-angular-cdk-event-plugins.mjs.map +1 -1
  22. package/fesm2022/odx-angular-cdk-expandable.mjs +1 -1
  23. package/fesm2022/odx-angular-cdk-expandable.mjs.map +1 -1
  24. package/fesm2022/odx-angular-cdk-option-control.mjs +1 -1
  25. package/fesm2022/odx-angular-cdk-option-control.mjs.map +1 -1
  26. package/fesm2022/odx-angular-cdk-radio-group-control.mjs +1 -1
  27. package/fesm2022/odx-angular-cdk-radio-group-control.mjs.map +1 -1
  28. package/fesm2022/odx-angular-cdk-scrollable.mjs.map +1 -1
  29. package/fesm2022/odx-angular-components-accordion.mjs +1 -1
  30. package/fesm2022/odx-angular-components-accordion.mjs.map +1 -1
  31. package/fesm2022/odx-angular-components-action-group.mjs +1 -1
  32. package/fesm2022/odx-angular-components-action-group.mjs.map +1 -1
  33. package/fesm2022/odx-angular-components-anchor-navigation.mjs +1 -1
  34. package/fesm2022/odx-angular-components-anchor-navigation.mjs.map +1 -1
  35. package/fesm2022/odx-angular-components-area-header.mjs +1 -1
  36. package/fesm2022/odx-angular-components-area-header.mjs.map +1 -1
  37. package/fesm2022/odx-angular-components-autocomplete.mjs +1 -1
  38. package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
  39. package/fesm2022/odx-angular-components-avatar.mjs +1 -1
  40. package/fesm2022/odx-angular-components-avatar.mjs.map +1 -1
  41. package/fesm2022/odx-angular-components-badge.mjs +1 -1
  42. package/fesm2022/odx-angular-components-badge.mjs.map +1 -1
  43. package/fesm2022/odx-angular-components-bar.mjs +1 -1
  44. package/fesm2022/odx-angular-components-bar.mjs.map +1 -1
  45. package/fesm2022/odx-angular-components-breadcrumbs.mjs +1 -1
  46. package/fesm2022/odx-angular-components-breadcrumbs.mjs.map +1 -1
  47. package/fesm2022/odx-angular-components-button-group.mjs +1 -1
  48. package/fesm2022/odx-angular-components-button-group.mjs.map +1 -1
  49. package/fesm2022/odx-angular-components-button.mjs +1 -1
  50. package/fesm2022/odx-angular-components-button.mjs.map +1 -1
  51. package/fesm2022/odx-angular-components-calendar.mjs +2 -2
  52. package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
  53. package/fesm2022/odx-angular-components-card.mjs +2 -2
  54. package/fesm2022/odx-angular-components-card.mjs.map +1 -1
  55. package/fesm2022/odx-angular-components-checkbox.mjs +1 -1
  56. package/fesm2022/odx-angular-components-checkbox.mjs.map +1 -1
  57. package/fesm2022/odx-angular-components-chip.mjs +1 -1
  58. package/fesm2022/odx-angular-components-chip.mjs.map +1 -1
  59. package/fesm2022/odx-angular-components-circular-progress.mjs +1 -1
  60. package/fesm2022/odx-angular-components-circular-progress.mjs.map +1 -1
  61. package/fesm2022/odx-angular-components-content-box.mjs +1 -1
  62. package/fesm2022/odx-angular-components-content-box.mjs.map +1 -1
  63. package/fesm2022/odx-angular-components-data-table.mjs +1 -1
  64. package/fesm2022/odx-angular-components-data-table.mjs.map +1 -1
  65. package/fesm2022/odx-angular-components-datepicker.mjs +2 -2
  66. package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
  67. package/fesm2022/odx-angular-components-daterangepicker.mjs +3 -5
  68. package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
  69. package/fesm2022/odx-angular-components-dropdown.mjs +1 -1
  70. package/fesm2022/odx-angular-components-dropdown.mjs.map +1 -1
  71. package/fesm2022/odx-angular-components-error-page.mjs +1 -1
  72. package/fesm2022/odx-angular-components-error-page.mjs.map +1 -1
  73. package/fesm2022/odx-angular-components-footer.mjs +2 -2
  74. package/fesm2022/odx-angular-components-footer.mjs.map +1 -1
  75. package/fesm2022/odx-angular-components-form-field.mjs +1 -1
  76. package/fesm2022/odx-angular-components-form-field.mjs.map +1 -1
  77. package/fesm2022/odx-angular-components-header-navigation.mjs +1 -1
  78. package/fesm2022/odx-angular-components-header-navigation.mjs.map +1 -1
  79. package/fesm2022/odx-angular-components-header.mjs +1 -1
  80. package/fesm2022/odx-angular-components-header.mjs.map +1 -1
  81. package/fesm2022/odx-angular-components-icon.mjs +1 -1
  82. package/fesm2022/odx-angular-components-icon.mjs.map +1 -1
  83. package/fesm2022/odx-angular-components-inline-message.mjs +1 -1
  84. package/fesm2022/odx-angular-components-inline-message.mjs.map +1 -1
  85. package/fesm2022/odx-angular-components-link.mjs.map +1 -1
  86. package/fesm2022/odx-angular-components-list.mjs +2 -2
  87. package/fesm2022/odx-angular-components-list.mjs.map +1 -1
  88. package/fesm2022/odx-angular-components-loading-spinner.mjs +1 -1
  89. package/fesm2022/odx-angular-components-loading-spinner.mjs.map +1 -1
  90. package/fesm2022/odx-angular-components-logo.mjs +1 -1
  91. package/fesm2022/odx-angular-components-logo.mjs.map +1 -1
  92. package/fesm2022/odx-angular-components-main-menu.mjs +2 -2
  93. package/fesm2022/odx-angular-components-main-menu.mjs.map +1 -1
  94. package/fesm2022/odx-angular-components-mainfilter-group.mjs +1 -1
  95. package/fesm2022/odx-angular-components-mainfilter-group.mjs.map +1 -1
  96. package/fesm2022/odx-angular-components-menu.mjs +1 -1
  97. package/fesm2022/odx-angular-components-menu.mjs.map +1 -1
  98. package/fesm2022/odx-angular-components-modal.mjs +1 -1
  99. package/fesm2022/odx-angular-components-modal.mjs.map +1 -1
  100. package/fesm2022/odx-angular-components-navigation-back.mjs +1 -1
  101. package/fesm2022/odx-angular-components-navigation-back.mjs.map +1 -1
  102. package/fesm2022/odx-angular-components-notification-testing.mjs.map +1 -1
  103. package/fesm2022/odx-angular-components-notification.mjs +3 -3
  104. package/fesm2022/odx-angular-components-notification.mjs.map +1 -1
  105. package/fesm2022/odx-angular-components-paginator.mjs +1 -1
  106. package/fesm2022/odx-angular-components-paginator.mjs.map +1 -1
  107. package/fesm2022/odx-angular-components-progress.mjs +1 -1
  108. package/fesm2022/odx-angular-components-progress.mjs.map +1 -1
  109. package/fesm2022/odx-angular-components-radio-group.mjs +1 -1
  110. package/fesm2022/odx-angular-components-radio-group.mjs.map +1 -1
  111. package/fesm2022/odx-angular-components-rail-navigation.mjs +1 -1
  112. package/fesm2022/odx-angular-components-rail-navigation.mjs.map +1 -1
  113. package/fesm2022/odx-angular-components-rich-list.mjs +1 -1
  114. package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
  115. package/fesm2022/odx-angular-components-search-bar.mjs.map +1 -1
  116. package/fesm2022/odx-angular-components-select.mjs +1 -1
  117. package/fesm2022/odx-angular-components-select.mjs.map +1 -1
  118. package/fesm2022/odx-angular-components-slider.mjs +1 -1
  119. package/fesm2022/odx-angular-components-slider.mjs.map +1 -1
  120. package/fesm2022/odx-angular-components-spinbox.mjs +1 -1
  121. package/fesm2022/odx-angular-components-spinbox.mjs.map +1 -1
  122. package/fesm2022/odx-angular-components-switch.mjs +1 -1
  123. package/fesm2022/odx-angular-components-switch.mjs.map +1 -1
  124. package/fesm2022/odx-angular-components-tab-bar.mjs +1 -1
  125. package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
  126. package/fesm2022/odx-angular-components-table.mjs +1 -1
  127. package/fesm2022/odx-angular-components-table.mjs.map +1 -1
  128. package/fesm2022/odx-angular-components-timepicker.mjs +2 -2
  129. package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
  130. package/fesm2022/odx-angular-components-toast.mjs +1 -1
  131. package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
  132. package/fesm2022/odx-angular-components-toggle-button-group.mjs +1 -1
  133. package/fesm2022/odx-angular-components-toggle-button-group.mjs.map +1 -1
  134. package/fesm2022/odx-angular-components-tooltip.mjs +1 -1
  135. package/fesm2022/odx-angular-components-tooltip.mjs.map +1 -1
  136. package/fesm2022/odx-angular-components-wizard.mjs +1 -1
  137. package/fesm2022/odx-angular-components-wizard.mjs.map +1 -1
  138. package/fesm2022/odx-angular-internal-translate.mjs.map +1 -1
  139. package/fesm2022/odx-angular-internal.mjs.map +1 -1
  140. package/fesm2022/odx-angular-localization.mjs.map +1 -1
  141. package/fesm2022/odx-angular-rxjs.mjs.map +1 -1
  142. package/fesm2022/odx-angular-sdk.mjs.map +1 -1
  143. package/fesm2022/odx-angular-theming.mjs.map +1 -1
  144. package/fesm2022/odx-angular-utils.mjs.map +1 -1
  145. package/fesm2022/odx-angular.mjs +2 -2
  146. package/fesm2022/odx-angular.mjs.map +1 -1
  147. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-components-toast.mjs","sources":["../../../../libs/angular/components/toast/src/lib/toast.config.ts","../../../../libs/angular/components/toast/src/lib/toast.service.ts","../../../../libs/angular/components/toast/src/lib/models/toast-variant.ts","../../../../libs/angular/components/toast/src/lib/components/toast-item/toast-item.component.ts","../../../../libs/angular/components/toast/src/lib/components/toast-item/toast-item.component.html","../../../../libs/angular/components/toast/src/lib/components/toast-container/toast-container.component.ts","../../../../libs/angular/components/toast/src/lib/components/toast-container/toast-container.component.html","../../../../libs/angular/components/toast/src/lib/toast.module.ts","../../../../libs/angular/components/toast/src/odx-angular-components-toast.ts"],"sourcesContent":["import { createConfigTokens } from '@odx/angular/utils';\nimport { ToastOptions } from './models/toast.options';\n\nexport type ToastConfig = ToastOptions;\n\n/**\n * Utility functions generated by `createConfigTokens` to handle injection and provision of `ToastConfig`.\n * These include tokens and functions to access and provide the default configuration for toasts.\n *\n * `ToastDefaultConfig` provides the default settings for toasts.\n * `ToastConfig` is a token that can be used to inject toast configuration settings.\n * `injectToastConfig` is a function that retrieves the current toast configuration.\n * `provideToastConfig` is a function used to specify a custom configuration for toasts.\n *\n * @example\n * ```ts\n * // In module providers:\n * providers: [\n * provideToastConfig({ // ... global module configuration }),\n * ]\n *\n * // In a component or service:\n * constructor(@Inject(ToastConfig) private readonly config: ToastConfig) {}\n *\n * // Or using the `injectToastConfig` function:\n * @Component({ ... })\n * export class MyComponent {\n * private readonly config = injectToastConfig();\n * }\n * ```\n */\nexport const { ToastDefaultConfig, ToastConfig, injectToastConfig, provideToastConfig } = createConfigTokens('Toast', '@odx/angular/components/toast', {\n dismissable: true,\n duration: 0,\n} as ToastConfig);\n","import { Injectable } from '@angular/core';\nimport { deepmerge } from '@odx/angular/internal';\nimport { getUniqueId, Queue } from '@odx/angular/utils';\nimport { Toast, ToastOptions, ToastRef } from './models';\nimport { injectToastConfig } from './toast.config';\n\n/**\n * ToastService provides a centralized management system for toasts within an application.\n * It handles the creation, updates, and dismissal of toasts based on a FIFO (first-in, first-out) queue.\n * This service integrates custom toast options with default configurations and supports reactive updates through observables.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n private readonly queue = new Queue<ToastRef>();\n private readonly defaultOptions = injectToastConfig();\n\n /**\n * Observable stream of active toasts.\n *\n * @emits {ToastRef[]} The current list of active toasts.\n */\n public readonly toasts$ = this.queue.value$;\n\n /**\n * Observable that emits when any update occurs in the toast queue.\n *\n * @emits {ToastRef[]} The updated list of active toasts.\n */\n public readonly onUpdate$ = this.queue.onUpdate$;\n\n /**\n * Observable that emits when a toast is added.\n *\n * @emits {ToastRef} The newly added toast.\n */\n public readonly onToastAdd$ = this.queue.onAdd$;\n\n /**\n * Observable that emits when a toast is updated.\n *\n * @emits {ToastRef} The updated toast.\n */\n public readonly onToastUpdate$ = this.queue.onUpdate$;\n\n /**\n * Observable that emits when a toast is removed.\n *\n * @emits {ToastRef} The removed toast.\n */\n public readonly onToastRemove$ = this.queue.onRemove$;\n\n /**\n * @deprecated Use `toasts$` instead\n */\n public readonly queue$ = this.toasts$;\n /**\n * @deprecated Use `onToastAdd$` instead\n */\n public readonly onAdd$ = this.onToastAdd$;\n /**\n * @deprecated Use `onToastRemove$` instead\n */\n public readonly onRemove$ = this.onToastRemove$;\n\n /**\n * @deprecated Use `create` instead\n */\n public add(item: Toast, options: Partial<ToastOptions> = {}): ToastRef {\n return this.create(item, options);\n }\n\n /**\n * Creates and queues a new toast based on the provided item and options.\n * Merges given options with default configurations.\n *\n * @param {Toast} item The toast item to create.\n * @param {Partial<ToastOptions>} options Optional additional options for the toast.\n * @returns {ToastRef} The reference to the newly created toast.\n */\n public create(item: Toast, options: Partial<ToastOptions> = {}): ToastRef {\n return this.queue.add({\n id: item.id ?? getUniqueId('odx-toast'),\n item,\n options: deepmerge(this.defaultOptions, options) as ToastOptions,\n });\n }\n\n /**\n * @deprecated Use `dismiss` instead\n */\n public remove(refOrId: ToastRef | ToastRef['id']): ToastRef | null {\n return this.dismiss(refOrId);\n }\n\n /**\n * Dismisses a specific toast identified by a reference or ID.\n *\n * @param {ToastRef | ToastRef['id']} refOrId The reference or ID of the toast to dismiss.\n * @returns {ToastRef | null} The reference to the dismissed toast, or null if not found.\n */\n public dismiss(refOrId: ToastRef | ToastRef['id']): ToastRef | null {\n return this.queue.remove(refOrId);\n }\n\n /**\n * @deprecated Use `dismissAll` instead\n */\n public clear(): void {\n return this.dismissAll();\n }\n\n /**\n * Dismisses all toasts currently being displayed.\n */\n public dismissAll(): void {\n this.queue.clear();\n }\n}\n","export type ToastVariant = (typeof ToastVariant)[keyof typeof ToastVariant];\n\nexport const ToastVariant = {\n DEFAULT: 'default',\n WARNING: 'warning',\n DANGER: 'danger',\n SUCCESS: 'success',\n WARNING_STRONG: 'warning-strong',\n DANGER_STRONG: 'danger-strong',\n} as const;\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, Type, ViewEncapsulation } from '@angular/core';\nimport { DynamicContent, DynamicTextContent, DynamicViewDirective, GetDynamicViewContext } from '@odx/angular/cdk/dynamic-view';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { tap, timer } from 'rxjs';\nimport { ToastAction, ToastOptions, ToastVariant } from '../../models';\n\n/**\n * A component that represents a single toast notification. This component is responsible for displaying\n * message content, handling toast actions, and managing the automatic dismissal of the toast based on a duration.\n * It supports dynamic content for descriptions and can show an optional set of actions.\n */\n@CSSComponent('toast-item')\n@Component({\n selector: 'odx-toast',\n templateUrl: './toast-item.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, IconComponent, ButtonComponent, DynamicViewDirective, ActionGroupComponent],\n host: {\n '[attr.id]': 'id',\n },\n})\nexport class ToastItemComponent implements OnInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n\n public readonly element = injectElement();\n\n /**\n * Determines the icon to display based on the toast's variant.\n * Returns a string representing the icon class.\n *\n * @returns {string} - The icon class name.\n * @default 'info'\n */\n public get icon(): string {\n switch (this.variant) {\n case ToastVariant.WARNING:\n return 'warning';\n case ToastVariant.DANGER:\n return 'error';\n case ToastVariant.SUCCESS:\n return 'check';\n default:\n return 'info';\n }\n }\n\n /**\n * Unique identifier for the toast item, typically provided for accessibility purposes.\n *\n * @required\n * @type {string}\n */\n @Input()\n public id!: string;\n\n /**\n * The main title of the toast, displayed prominently.\n *\n * @required\n * @type {DynamicTextContent}\n */\n @Input()\n public title!: DynamicTextContent;\n\n /**\n * Optional detailed description for the toast. This can be plain text or a dynamic template.\n *\n * @type {DynamicContent | null}\n */\n @Input()\n public description?: DynamicContent | null;\n\n /**\n * Context for rendering the dynamic component of the description.\n *\n * @type {GetDynamicViewContext<Type<unknown>> | undefined}\n */\n @Input()\n public descriptionContext?: GetDynamicViewContext<Type<unknown>>;\n\n /**\n * The variant of the toast which influences the icon and styling.\n *\n * @type {ToastVariant | null}\n * @default ToastVariant.DEFAULT\n */\n @CSSModifier()\n @Input()\n public variant?: ToastVariant | null = ToastVariant.DEFAULT;\n\n /**\n * Optional actions related to the toast, such as 'retry' or 'dismiss'.\n *\n * @type {ToastAction[] | undefined}\n */\n @Input()\n public actions?: ToastAction[];\n\n /**\n * Configuration options for the toast, including its duration and dismissal behavior.\n *\n * @required\n * @type {ToastOptions}\n */\n @Input()\n public options!: ToastOptions;\n\n /**\n * Emits an event when the toast is dismissed, either through action or automatically.\n *\n * @emits {void}\n */\n @Output()\n public readonly dismiss = new EventEmitter<void>();\n\n public ngOnInit(): void {\n const { duration } = this.options;\n if (duration > 0) {\n timer(duration)\n .pipe(\n this.takeUntilDestroyed(),\n tap(() => this.onDismiss()),\n )\n .subscribe();\n }\n }\n\n protected onDismiss(): void {\n this.dismiss.next();\n }\n}\n","<div class=\"odx-toast-item__content\">\n <odx-icon [name]=\"icon\" iconSet=\"core\" />\n <div class=\"odx-toast-item__text-content\">\n <p class=\"odx-toast-item__title\">\n <ng-template [odxDynamicView]=\"title\" />\n </p>\n @if (description) {\n <p class=\"odx-toast-item__description\">\n <ng-template [odxDynamicView]=\"description\" [odxDynamicViewContext]=\"descriptionContext\" />\n </p>\n }\n </div>\n @if (options.dismissable) {\n <button odxButton class=\"odx-toast-item__close\" (click)=\"onDismiss()\"><odx-icon name=\"close\" iconSet=\"core\" /></button>\n }\n</div>\n@if (!!actions?.length) {\n <odx-action-group class=\"odx-toast-item__buttons\">\n @for (action of actions; track $index) {\n <button odxButton (click)=\"action.action()\">\n @if (action.leftIcon) {\n <odx-icon [name]=\"action.leftIcon\" iconSet=\"core\" alignLeft />\n }\n <ng-template [odxDynamicView]=\"action.label\" />\n @if (action.rightIcon) {\n <odx-icon [name]=\"action.rightIcon\" iconSet=\"core\" alignRight />\n }\n </button>\n }\n </odx-action-group>\n}\n","import { group, transition, trigger, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewEncapsulation,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { WindowRef } from '@odx/angular';\nimport { collapse, expand, fadeIn, slideInRight } from '@odx/angular/animations';\nimport { ChipComponent } from '@odx/angular/components/chip';\nimport { HeaderComponent } from '@odx/angular/components/header';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, injectElement, px, setAttribute } from '@odx/angular/utils';\nimport { Observable, map } from 'rxjs';\nimport { ToastRef } from '../../models';\nimport { ToastService } from '../../toast.service';\nimport { ToastItemComponent } from '../toast-item/toast-item.component';\n\nconst TOAST_ANIMATION_DELAY = '125ms';\n\n/**\n * Represents a container component for displaying toast notifications. This component manages and arranges toast messages,\n * handling animations for entering and leaving toasts. It ensures that only a limited number of toasts are shown at the same time,\n * based on the `maxItems` input. The container listens for toast events from the `ToastService` to update its list of toasts dynamically.\n *\n * The component uses a group of animations to slide toasts in and out smoothly and also provides an output for when a toast is dismissed.\n * It's designed to integrate with a single instance per application, ensuring no more than one toast container is initialized.\n */\n@CSSComponent('toast-container')\n@Component({\n selector: 'odx-toast-container',\n templateUrl: './toast-container.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, ChipComponent, ToastItemComponent],\n animations: [\n trigger('slide', [\n transition(\n ':enter',\n group([\n useAnimation(expand),\n useAnimation(fadeIn(), { params: { delay: TOAST_ANIMATION_DELAY } }),\n useAnimation(slideInRight, { params: { delay: TOAST_ANIMATION_DELAY } }),\n ]),\n ),\n transition(':leave', group([useAnimation(collapse)])),\n ]),\n ],\n})\nexport class ToastContainerComponent implements AfterViewInit, OnDestroy {\n private static INITIALIZED = false;\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly windowRef = inject(WindowRef);\n private readonly renderer = inject(Renderer2);\n private readonly toastService = inject(ToastService);\n\n public readonly element = injectElement();\n public readonly items$: Observable<ToastRef[]> = this.toastService.toasts$.pipe(map((refs) => refs.slice(0, this.maxItems)));\n public readonly hiddenToasts$: Observable<number> = this.toastService.toasts$.pipe(map((refs) => Math.max(0, refs.length - this.maxItems)));\n\n /**\n * Maximum number of toasts that can be displayed at once.\n *\n * @type {number}\n * @default 3\n */\n @Input({ transform: numberAttribute })\n public maxItems = 3;\n\n /**\n * Emits an event when a toast is dismissed.\n *\n * @emits {ToastRef} - The toast reference that was dismissed.\n */\n @Output()\n public readonly dismiss = this.toastService.onToastRemove$;\n\n public ngAfterViewInit(): void {\n setAttribute(this.element.nativeElement, 'popover', 'manual');\n if (ToastContainerComponent.INITIALIZED) {\n throw new Error('Only one toast container per application allowed');\n }\n ToastContainerComponent.INITIALIZED = true;\n const headerElement = this.windowRef.queryByComponent(HeaderComponent);\n if (headerElement) {\n this.renderer.setStyle(this.element.nativeElement, 'top', px(headerElement.offsetHeight));\n }\n this.items$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.updatePopverPosition());\n }\n\n public ngOnDestroy(): void {\n ToastContainerComponent.INITIALIZED = false;\n }\n\n protected onDismiss(itemRef: ToastRef): void {\n this.toastService.dismiss(itemRef);\n }\n\n private updatePopverPosition(): void {\n const el = this.element?.nativeElement;\n if (!el?.isConnected) return;\n\n el.hidePopover?.();\n deferFn(() => el.showPopover?.());\n }\n}\n","@for (toastRef of items$ | async; track toastRef.id) {\n <odx-toast\n @slide\n [id]=\"toastRef.id\"\n [title]=\"toastRef.item.title\"\n [description]=\"toastRef.item.description\"\n [descriptionContext]=\"toastRef.item.descriptionContext\"\n [actions]=\"toastRef.item.actions ?? []\"\n [variant]=\"toastRef.item.variant\"\n [options]=\"toastRef.options\"\n (dismiss)=\"onDismiss(toastRef)\"\n />\n}\n@if (hiddenToasts$ | async; as more) {\n <odx-chip class=\"odx-toast-container__counter\">{{ more }} more Notifications</odx-chip>\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ToastContainerComponent, ToastItemComponent } from './components';\n\nconst modules = [ToastContainerComponent, ToastItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class ToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACU,MAAA,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,kBAAkB,CAAC,OAAO,EAAE,+BAA+B,EAAE;AACrJ,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,QAAQ,EAAE,CAAC;AACG,CAAA;;AC5BhB;;;;AAIG;MAIU,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,KAAK,EAAY,CAAC;QAC9B,IAAc,CAAA,cAAA,GAAG,iBAAiB,EAAE,CAAC;AAEtD;;;;AAIG;AACa,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAE5C;;;;AAIG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAEjD;;;;AAIG;AACa,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAEhD;;;;AAIG;AACa,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAEtD;;;;AAIG;AACa,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAEtD;;AAEG;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AACtC;;AAEG;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1C;;AAEG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;AAuDjD,KAAA;AArDC;;AAEG;AACI,IAAA,GAAG,CAAC,IAAW,EAAE,OAAA,GAAiC,EAAE,EAAA;QACzD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACnC;AAED;;;;;;;AAOG;AACI,IAAA,MAAM,CAAC,IAAW,EAAE,OAAA,GAAiC,EAAE,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACpB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,WAAW,CAAC,WAAW,CAAC;YACvC,IAAI;YACJ,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAiB;AACjE,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;AACI,IAAA,MAAM,CAAC,OAAkC,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAC9B;AAED;;;;;AAKG;AACI,IAAA,OAAO,CAAC,OAAkC,EAAA;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACnC;AAED;;AAEG;IACI,KAAK,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;KAC1B;AAED;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KACpB;+GAxGU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACXY,MAAA,YAAY,GAAG;AAC1B,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,aAAa,EAAE,eAAe;;;ACGhC;;;;AAIG;AAaU,IAAA,kBAAkB,GAAxB,MAAM,kBAAkB,CAAA;AAAxB,IAAA,WAAA,GAAA;QACY,IAAkB,CAAA,kBAAA,GAAG,cAAc,EAAE,CAAC;QAEvC,IAAO,CAAA,OAAA,GAAG,aAAa,EAAE,CAAC;AAwD1C;;;;;AAKG;AAGI,QAAA,IAAA,CAAA,OAAO,GAAyB,YAAY,CAAC,OAAO,CAAC;AAmB5D;;;;AAIG;AAEa,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AAiBpD,KAAA;AAxGC;;;;;;AAMG;AACH,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,QAAQ,IAAI,CAAC,OAAO;YAClB,KAAK,YAAY,CAAC,OAAO;AACvB,gBAAA,OAAO,SAAS,CAAC;YACnB,KAAK,YAAY,CAAC,MAAM;AACtB,gBAAA,OAAO,OAAO,CAAC;YACjB,KAAK,YAAY,CAAC,OAAO;AACvB,gBAAA,OAAO,OAAO,CAAC;AACjB,YAAA;AACE,gBAAA,OAAO,MAAM,CAAC;SACjB;KACF;IAuEM,QAAQ,GAAA;AACb,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AAClC,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,KAAK,CAAC,QAAQ,CAAC;AACZ,iBAAA,IAAI,CACH,IAAI,CAAC,kBAAkB,EAAE,EACzB,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAC5B;AACA,iBAAA,SAAS,EAAE,CAAC;SAChB;KACF;IAES,SAAS,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;+GA5GU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B/B,6oCA+BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDRY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,wBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;AAwE3F,UAAA,CAAA;AAFN,IAAA,WAAW,EAAE;;AAE8C,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAnEjD,kBAAkB,GAAA,UAAA,CAAA;IAZ9B,YAAY,CAAC,YAAY,CAAC;AAYd,CAAA,EAAA,kBAAkB,CA6G9B,CAAA;4FA7GY,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,SAAS;+BACE,WAAW,EAAA,UAAA,EAET,IAAI,EACC,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,EAC7F,IAAA,EAAA;AACJ,wBAAA,WAAW,EAAE,IAAI;AAClB,qBAAA,EAAA,QAAA,EAAA,6oCAAA,EAAA,CAAA;8BAkCM,EAAE,EAAA,CAAA;sBADR,KAAK;gBAUC,KAAK,EAAA,CAAA;sBADX,KAAK;gBASC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBASC,kBAAkB,EAAA,CAAA;sBADxB,KAAK;gBAWC,OAAO,EAAA,CAAA;sBADb,KAAK;gBASC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAUC,OAAO,EAAA,CAAA;sBADb,KAAK;gBASU,OAAO,EAAA,CAAA;sBADtB,MAAM;;;;AE5FT,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAEtC;;;;;;;AAOG;AAuBU,IAAA,uBAAuB,GAA7B,MAAM,uBAAuB,CAAA;AAA7B,IAAA,WAAA,GAAA;AAGY,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QAErC,IAAO,CAAA,OAAA,GAAG,aAAa,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,MAAM,GAA2B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7G,QAAA,IAAA,CAAA,aAAa,GAAuB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE5I;;;;;AAKG;QAEI,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;AAEpB;;;;AAIG;AAEa,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;AA8B5D,KAAA;;aAxDgB,IAAW,CAAA,WAAA,GAAG,KAAH,CAAS,EAAA;IA4B5B,eAAe,GAAA;QACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,yBAAuB,CAAC,WAAW,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;SACrE;AACD,QAAA,yBAAuB,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACvE,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;SAC3F;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;KACpG;IAEM,WAAW,GAAA;AAChB,QAAA,yBAAuB,CAAC,WAAW,GAAG,KAAK,CAAC;KAC7C;AAES,IAAA,SAAS,CAAC,OAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC;IAEO,oBAAoB,GAAA;AAC1B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QACvC,IAAI,CAAC,EAAE,EAAE,WAAW;YAAE,OAAO;AAE7B,QAAA,EAAE,CAAC,WAAW,IAAI,CAAC;QACnB,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,IAAI,CAAC,CAAC;KACnC;+GAxDU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAkBd,eAAe,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7ErC,ujBAgBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED4BY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EAAE,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAC7C,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,OAAO,EAAE;AACf,gBAAA,UAAU,CACR,QAAQ,EACR,KAAK,CAAC;oBACJ,YAAY,CAAC,MAAM,CAAC;AACpB,oBAAA,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACpE,oBAAA,YAAY,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACzE,iBAAA,CAAC,CACH;AACD,gBAAA,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACtD,CAAC;AACH,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;AAEU,uBAAuB,GAAA,yBAAA,GAAA,UAAA,CAAA;IAtBnC,YAAY,CAAC,iBAAiB,CAAC;AAsBnB,CAAA,EAAA,uBAAuB,CAyDnC,CAAA;4FAzDY,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAEnB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAC9C,UAAA,EAAA;wBACV,OAAO,CAAC,OAAO,EAAE;AACf,4BAAA,UAAU,CACR,QAAQ,EACR,KAAK,CAAC;gCACJ,YAAY,CAAC,MAAM,CAAC;AACpB,gCAAA,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACpE,gCAAA,YAAY,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACzE,6BAAA,CAAC,CACH;AACD,4BAAA,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;yBACtD,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,ujBAAA,EAAA,CAAA;8BAqBM,QAAQ,EAAA,CAAA;sBADd,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBASrB,OAAO,EAAA,CAAA;sBADtB,MAAM;;;AEjFT,MAAM,OAAO,GAAG,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;MAMjD,WAAW,CAAA;+GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;gHAAX,WAAW,EAAA,OAAA,EAAA,CANP,uBAAuB,EAAE,kBAAkB,aAIhD,UAAU,EAJL,uBAAuB,EAAE,kBAAkB,CAAA,EAAA,CAAA,CAAA,EAAA;gHAM/C,WAAW,EAAA,OAAA,EAAA,CAHb,OAAO,EACN,UAAU,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAET,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC;AAClC,iBAAA,CAAA;;;ACTD;;AAEG;;;;"}
1
+ {"version":3,"file":"odx-angular-components-toast.mjs","sources":["../../../../libs/angular/components/toast/src/lib/toast.config.ts","../../../../libs/angular/components/toast/src/lib/toast.service.ts","../../../../libs/angular/components/toast/src/lib/models/toast-variant.ts","../../../../libs/angular/components/toast/src/lib/components/toast-item/toast-item.component.ts","../../../../libs/angular/components/toast/src/lib/components/toast-item/toast-item.component.html","../../../../libs/angular/components/toast/src/lib/components/toast-container/toast-container.component.ts","../../../../libs/angular/components/toast/src/lib/components/toast-container/toast-container.component.html","../../../../libs/angular/components/toast/src/lib/toast.module.ts","../../../../libs/angular/components/toast/src/odx-angular-components-toast.ts"],"sourcesContent":["import { createConfigTokens } from '@odx/angular/utils';\nimport { ToastOptions } from './models/toast.options';\n\nexport type ToastConfig = ToastOptions;\n\n/**\n * Utility functions generated by `createConfigTokens` to handle injection and provision of `ToastConfig`.\n * These include tokens and functions to access and provide the default configuration for toasts.\n *\n * `ToastDefaultConfig` provides the default settings for toasts.\n * `ToastConfig` is a token that can be used to inject toast configuration settings.\n * `injectToastConfig` is a function that retrieves the current toast configuration.\n * `provideToastConfig` is a function used to specify a custom configuration for toasts.\n *\n * @example\n * ```ts\n * // In module providers:\n * providers: [\n * provideToastConfig({ // ... global module configuration }),\n * ]\n *\n * // In a component or service:\n * constructor(@Inject(ToastConfig) private readonly config: ToastConfig) {}\n *\n * // Or using the `injectToastConfig` function:\n * @Component({ ... })\n * export class MyComponent {\n * private readonly config = injectToastConfig();\n * }\n * ```\n */\nexport const { ToastDefaultConfig, ToastConfig, injectToastConfig, provideToastConfig } = createConfigTokens('Toast', '@odx/angular/components/toast', {\n dismissable: true,\n duration: 0,\n} as ToastConfig);\n","import { Injectable } from '@angular/core';\nimport { deepmerge } from '@odx/angular/internal';\nimport { getUniqueId, Queue } from '@odx/angular/utils';\nimport { Toast, ToastOptions, ToastRef } from './models';\nimport { injectToastConfig } from './toast.config';\n\n/**\n * ToastService provides a centralized management system for toasts within an application.\n * It handles the creation, updates, and dismissal of toasts based on a FIFO (first-in, first-out) queue.\n * This service integrates custom toast options with default configurations and supports reactive updates through observables.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n private readonly queue = new Queue<ToastRef>();\n private readonly defaultOptions = injectToastConfig();\n\n /**\n * Observable stream of active toasts.\n *\n * @emits {ToastRef[]} The current list of active toasts.\n */\n public readonly toasts$ = this.queue.value$;\n\n /**\n * Observable that emits when any update occurs in the toast queue.\n *\n * @emits {ToastRef[]} The updated list of active toasts.\n */\n public readonly onUpdate$ = this.queue.onUpdate$;\n\n /**\n * Observable that emits when a toast is added.\n *\n * @emits {ToastRef} The newly added toast.\n */\n public readonly onToastAdd$ = this.queue.onAdd$;\n\n /**\n * Observable that emits when a toast is updated.\n *\n * @emits {ToastRef} The updated toast.\n */\n public readonly onToastUpdate$ = this.queue.onUpdate$;\n\n /**\n * Observable that emits when a toast is removed.\n *\n * @emits {ToastRef} The removed toast.\n */\n public readonly onToastRemove$ = this.queue.onRemove$;\n\n /**\n * @deprecated Use `toasts$` instead\n */\n public readonly queue$ = this.toasts$;\n /**\n * @deprecated Use `onToastAdd$` instead\n */\n public readonly onAdd$ = this.onToastAdd$;\n /**\n * @deprecated Use `onToastRemove$` instead\n */\n public readonly onRemove$ = this.onToastRemove$;\n\n /**\n * @deprecated Use `create` instead\n */\n public add(item: Toast, options: Partial<ToastOptions> = {}): ToastRef {\n return this.create(item, options);\n }\n\n /**\n * Creates and queues a new toast based on the provided item and options.\n * Merges given options with default configurations.\n *\n * @param {Toast} item The toast item to create.\n * @param {Partial<ToastOptions>} options Optional additional options for the toast.\n * @returns {ToastRef} The reference to the newly created toast.\n */\n public create(item: Toast, options: Partial<ToastOptions> = {}): ToastRef {\n return this.queue.add({\n id: item.id ?? getUniqueId('odx-toast'),\n item,\n options: deepmerge(this.defaultOptions, options) as ToastOptions,\n });\n }\n\n /**\n * @deprecated Use `dismiss` instead\n */\n public remove(refOrId: ToastRef | ToastRef['id']): ToastRef | null {\n return this.dismiss(refOrId);\n }\n\n /**\n * Dismisses a specific toast identified by a reference or ID.\n *\n * @param {ToastRef | ToastRef['id']} refOrId The reference or ID of the toast to dismiss.\n * @returns {ToastRef | null} The reference to the dismissed toast, or null if not found.\n */\n public dismiss(refOrId: ToastRef | ToastRef['id']): ToastRef | null {\n return this.queue.remove(refOrId);\n }\n\n /**\n * @deprecated Use `dismissAll` instead\n */\n public clear(): void {\n return this.dismissAll();\n }\n\n /**\n * Dismisses all toasts currently being displayed.\n */\n public dismissAll(): void {\n this.queue.clear();\n }\n}\n","export type ToastVariant = (typeof ToastVariant)[keyof typeof ToastVariant];\n\nexport const ToastVariant = {\n DEFAULT: 'default',\n WARNING: 'warning',\n DANGER: 'danger',\n SUCCESS: 'success',\n WARNING_STRONG: 'warning-strong',\n DANGER_STRONG: 'danger-strong',\n} as const;\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, Type, ViewEncapsulation } from '@angular/core';\nimport { DynamicContent, DynamicTextContent, DynamicViewDirective, GetDynamicViewContext } from '@odx/angular/cdk/dynamic-view';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { tap, timer } from 'rxjs';\nimport { ToastAction, ToastOptions, ToastVariant } from '../../models';\n\n/**\n * A component that represents a single toast notification. This component is responsible for displaying\n * message content, handling toast actions, and managing the automatic dismissal of the toast based on a duration.\n * It supports dynamic content for descriptions and can show an optional set of actions.\n */\n@CSSComponent('toast-item')\n@Component({\n selector: 'odx-toast',\n templateUrl: './toast-item.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, IconComponent, ButtonComponent, DynamicViewDirective, ActionGroupComponent],\n host: {\n '[attr.id]': 'id',\n },\n})\nexport class ToastItemComponent implements OnInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n\n public readonly element = injectElement();\n\n /**\n * Determines the icon to display based on the toast's variant.\n * Returns a string representing the icon class.\n *\n * @returns {string} - The icon class name.\n * @default 'info'\n */\n public get icon(): string {\n switch (this.variant) {\n case ToastVariant.WARNING:\n return 'warning';\n case ToastVariant.DANGER:\n return 'error';\n case ToastVariant.SUCCESS:\n return 'check';\n default:\n return 'info';\n }\n }\n\n /**\n * Unique identifier for the toast item, typically provided for accessibility purposes.\n *\n * @required\n * @type {string}\n */\n @Input()\n public id!: string;\n\n /**\n * The main title of the toast, displayed prominently.\n *\n * @required\n * @type {DynamicTextContent}\n */\n @Input()\n public title!: DynamicTextContent;\n\n /**\n * Optional detailed description for the toast. This can be plain text or a dynamic template.\n *\n * @type {DynamicContent | null}\n */\n @Input()\n public description?: DynamicContent | null;\n\n /**\n * Context for rendering the dynamic component of the description.\n *\n * @type {GetDynamicViewContext<Type<unknown>> | undefined}\n */\n @Input()\n public descriptionContext?: GetDynamicViewContext<Type<unknown>>;\n\n /**\n * The variant of the toast which influences the icon and styling.\n *\n * @type {ToastVariant | null}\n * @default ToastVariant.DEFAULT\n */\n @CSSModifier()\n @Input()\n public variant?: ToastVariant | null = ToastVariant.DEFAULT;\n\n /**\n * Optional actions related to the toast, such as 'retry' or 'dismiss'.\n *\n * @type {ToastAction[] | undefined}\n */\n @Input()\n public actions?: ToastAction[];\n\n /**\n * Configuration options for the toast, including its duration and dismissal behavior.\n *\n * @required\n * @type {ToastOptions}\n */\n @Input()\n public options!: ToastOptions;\n\n /**\n * Emits an event when the toast is dismissed, either through action or automatically.\n *\n * @emits {void}\n */\n @Output()\n public readonly dismiss = new EventEmitter<void>();\n\n public ngOnInit(): void {\n const { duration } = this.options;\n if (duration > 0) {\n timer(duration)\n .pipe(\n this.takeUntilDestroyed(),\n tap(() => this.onDismiss()),\n )\n .subscribe();\n }\n }\n\n protected onDismiss(): void {\n this.dismiss.next();\n }\n}\n","<div class=\"odx-toast-item__content\">\n <odx-icon [name]=\"icon\" iconSet=\"core\" />\n <div class=\"odx-toast-item__text-content\">\n <p class=\"odx-toast-item__title\">\n <ng-template [odxDynamicView]=\"title\" />\n </p>\n @if (description) {\n <p class=\"odx-toast-item__description\">\n <ng-template [odxDynamicView]=\"description\" [odxDynamicViewContext]=\"descriptionContext\" />\n </p>\n }\n </div>\n @if (options.dismissable) {\n <button odxButton class=\"odx-toast-item__close\" (click)=\"onDismiss()\"><odx-icon name=\"close\" iconSet=\"core\" /></button>\n }\n</div>\n@if (!!actions?.length) {\n <odx-action-group class=\"odx-toast-item__buttons\">\n @for (action of actions; track $index) {\n <button odxButton (click)=\"action.action()\">\n @if (action.leftIcon) {\n <odx-icon [name]=\"action.leftIcon\" iconSet=\"core\" alignLeft />\n }\n <ng-template [odxDynamicView]=\"action.label\" />\n @if (action.rightIcon) {\n <odx-icon [name]=\"action.rightIcon\" iconSet=\"core\" alignRight />\n }\n </button>\n }\n </odx-action-group>\n}\n","import { group, transition, trigger, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewEncapsulation,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { WindowRef } from '@odx/angular';\nimport { collapse, expand, fadeIn, slideInRight } from '@odx/angular/animations';\nimport { ChipComponent } from '@odx/angular/components/chip';\nimport { HeaderComponent } from '@odx/angular/components/header';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, injectElement, px, setAttribute } from '@odx/angular/utils';\nimport { Observable, map } from 'rxjs';\nimport { ToastRef } from '../../models';\nimport { ToastService } from '../../toast.service';\nimport { ToastItemComponent } from '../toast-item/toast-item.component';\n\nconst TOAST_ANIMATION_DELAY = '125ms';\n\n/**\n * Represents a container component for displaying toast notifications. This component manages and arranges toast messages,\n * handling animations for entering and leaving toasts. It ensures that only a limited number of toasts are shown at the same time,\n * based on the `maxItems` input. The container listens for toast events from the `ToastService` to update its list of toasts dynamically.\n *\n * The component uses a group of animations to slide toasts in and out smoothly and also provides an output for when a toast is dismissed.\n * It's designed to integrate with a single instance per application, ensuring no more than one toast container is initialized.\n */\n@CSSComponent('toast-container')\n@Component({\n selector: 'odx-toast-container',\n templateUrl: './toast-container.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, ChipComponent, ToastItemComponent],\n animations: [\n trigger('slide', [\n transition(\n ':enter',\n group([\n useAnimation(expand),\n useAnimation(fadeIn(), { params: { delay: TOAST_ANIMATION_DELAY } }),\n useAnimation(slideInRight, { params: { delay: TOAST_ANIMATION_DELAY } }),\n ]),\n ),\n transition(':leave', group([useAnimation(collapse)])),\n ]),\n ],\n})\nexport class ToastContainerComponent implements AfterViewInit, OnDestroy {\n private static INITIALIZED = false;\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly windowRef = inject(WindowRef);\n private readonly renderer = inject(Renderer2);\n private readonly toastService = inject(ToastService);\n\n public readonly element = injectElement();\n public readonly items$: Observable<ToastRef[]> = this.toastService.toasts$.pipe(map((refs) => refs.slice(0, this.maxItems)));\n public readonly hiddenToasts$: Observable<number> = this.toastService.toasts$.pipe(map((refs) => Math.max(0, refs.length - this.maxItems)));\n\n /**\n * Maximum number of toasts that can be displayed at once.\n *\n * @type {number}\n * @default 3\n */\n @Input({ transform: numberAttribute })\n public maxItems = 3;\n\n /**\n * Emits an event when a toast is dismissed.\n *\n * @emits {ToastRef} - The toast reference that was dismissed.\n */\n @Output()\n public readonly dismiss = this.toastService.onToastRemove$;\n\n public ngAfterViewInit(): void {\n setAttribute(this.element.nativeElement, 'popover', 'manual');\n if (ToastContainerComponent.INITIALIZED) {\n throw new Error('Only one toast container per application allowed');\n }\n ToastContainerComponent.INITIALIZED = true;\n const headerElement = this.windowRef.queryByComponent(HeaderComponent);\n if (headerElement) {\n this.renderer.setStyle(this.element.nativeElement, 'top', px(headerElement.offsetHeight));\n }\n this.items$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.updatePopverPosition());\n }\n\n public ngOnDestroy(): void {\n ToastContainerComponent.INITIALIZED = false;\n }\n\n protected onDismiss(itemRef: ToastRef): void {\n this.toastService.dismiss(itemRef);\n }\n\n private updatePopverPosition(): void {\n const el = this.element?.nativeElement;\n if (!el?.isConnected) return;\n\n el.hidePopover?.();\n deferFn(() => el.showPopover?.());\n }\n}\n","@for (toastRef of items$ | async; track toastRef.id) {\n <odx-toast\n @slide\n [id]=\"toastRef.id\"\n [title]=\"toastRef.item.title\"\n [description]=\"toastRef.item.description\"\n [descriptionContext]=\"toastRef.item.descriptionContext\"\n [actions]=\"toastRef.item.actions ?? []\"\n [variant]=\"toastRef.item.variant\"\n [options]=\"toastRef.options\"\n (dismiss)=\"onDismiss(toastRef)\"\n />\n}\n@if (hiddenToasts$ | async; as more) {\n <odx-chip class=\"odx-toast-container__counter\">{{ more }} more Notifications</odx-chip>\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ToastContainerComponent, ToastItemComponent } from './components';\n\nconst modules = [ToastContainerComponent, ToastItemComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class ToastModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { __decorate } from 'tslib';
2
2
  import * as i0 from '@angular/core';
3
- import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, inject, forwardRef, ContentChildren, NgModule } from '@angular/core';
3
+ import { ViewChild, ChangeDetectionStrategy, ViewEncapsulation, Component, inject, forwardRef, ContentChildren, NgModule } from '@angular/core';
4
4
  import * as i1 from '@odx/angular';
5
5
  import { DisabledController, ReadonlyController, DelegateFocusDirective, CoreModule } from '@odx/angular';
6
6
  import { RadioControlDirective, RadioGroupControlDirective, RADIO_GROUP_CONTROL } from '@odx/angular/cdk/radio-group-control';
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-components-toggle-button-group.mjs","sources":["../../../../libs/angular/components/toggle-button-group/src/lib/components/toggle-button/toggle-button.component.ts","../../../../libs/angular/components/toggle-button-group/src/lib/components/toggle-button/toggle-button.component.html","../../../../libs/angular/components/toggle-button-group/src/lib/toggle-button-group.component.ts","../../../../libs/angular/components/toggle-button-group/src/lib/toggle-button-group.component.html","../../../../libs/angular/components/toggle-button-group/src/lib/toggle-button-group.module.ts","../../../../libs/angular/components/toggle-button-group/src/odx-angular-components-toggle-button-group.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { DisabledController, ReadonlyController } from '@odx/angular';\nimport { RadioControlDirective } from '@odx/angular/cdk/radio-group-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * ToggleButtonComponent represents an individual toggle button, akin to a radio button but styled distinctly.\n * It integrates with Angular's forms as part of a radio group control, allowing for keyboard navigation and\n * accessibility features. This component is designed to be used within a `ToggleButtonGroupComponent`.\n *\n * @template T - The type of the value handled by the toggle button.\n *\n * Extends RadioControlDirective to provide additional behavior.\n *\n * @see {RadioControlDirective}\n */\n@CSSComponent('toggle-button')\n@Component({\n standalone: true,\n selector: 'odx-toggle-button',\n templateUrl: './toggle-button.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DisabledController.connect(), ReadonlyController.connect()],\n host: {\n role: 'button',\n },\n})\nexport class ToggleButtonComponent<T = unknown> extends RadioControlDirective<T> {\n @ViewChild('input')\n protected inputElement!: ElementRef<HTMLInputElement>;\n\n public readonly element = injectElement();\n\n /**\n * Sets focus to the input element of the toggle button.\n */\n public focus(): void {\n this.inputElement.nativeElement?.focus();\n }\n}\n","<label class=\"odx-toggle-button__label\">\n <div class=\"odx-toggle-button__indicator\">\n <input\n class=\"odx-radio-button__input\"\n type=\"radio\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"radioGroupControl.hasError || null\"\n [attr.aria-readonly]=\"readonlyController?.readonly || null\"\n [attr.aria-required]=\"radioGroupControl.isRequired || null\"\n [checked]=\"isActive\"\n [disabled]=\"disabledController?.disabled || readonlyController?.readonly\"\n [name]=\"radioGroupControl.name\"\n [readonly]=\"readonlyController?.readonly\"\n [required]=\"radioGroupControl.isRequired\"\n [value]=\"value\"\n (change)=\"radioGroupControl.updateValue(value)\"\n #input\n />\n <ng-content />\n </div>\n</label>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChildren, forwardRef, inject, OnInit, QueryList, ViewEncapsulation } from '@angular/core';\nimport { DelegateFocusDirective, DisabledController, ReadonlyController } from '@odx/angular';\nimport { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';\nimport { RADIO_GROUP_CONTROL, RadioGroupControlDirective } from '@odx/angular/cdk/radio-group-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { defer, map, merge, startWith, tap } from 'rxjs';\nimport { ToggleButtonComponent } from './components';\n\n/**\n * ToggleButtonGroupComponent acts as a container for a group of toggle buttons,\n * managing their state and focus within a group context.\n *\n * @template T - The type of the value handled by the toggle buttons.\n *\n * It extends the RadioGroupControlDirective, allowing it to control the selection and state\n * of contained toggle buttons similar to how radio buttons are managed.\n *\n * Has host directive DelegateFocusDirective.\n *\n * @see {RadioGroupControlDirective}\n * @see {DelegateFocusDirective}\n */\n@CSSComponent('toggle-button-group')\n@Component({\n standalone: true,\n selector: 'odx-toggle-button-group',\n imports: [CommonModule, ActiveIndicatorDirective],\n templateUrl: './toggle-button-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: RADIO_GROUP_CONTROL,\n useExisting: forwardRef(() => ToggleButtonGroupComponent),\n multi: false,\n },\n DisabledController.connect(),\n ReadonlyController.connect(),\n ],\n hostDirectives: [DelegateFocusDirective],\n})\nexport class ToggleButtonGroupComponent<T = unknown> extends RadioGroupControlDirective<T> implements OnInit {\n private readonly delegateFocusDirective = inject(DelegateFocusDirective, { host: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n protected activeElement$ = defer(() => merge(this.toggleButtons.changes, this.change$)).pipe(\n startWith(undefined),\n map(() => this.toggleButtons.find((button) => button.isActive)?.element.nativeElement ?? null),\n tap((activeElement) => this.element.nativeElement.classList.toggle('is-active', !!activeElement)),\n );\n\n @ContentChildren(ToggleButtonComponent)\n protected toggleButtons!: QueryList<ToggleButtonComponent>;\n\n public readonly element = injectElement();\n\n public ngOnInit(): void {\n this.delegateFocusDirective.focused.pipe(this.takeUntilDestroyed()).subscribe(() => {\n this.getFirstToggleButton()?.focus();\n });\n }\n\n private getFirstToggleButton(): ToggleButtonComponent | null {\n return this.toggleButtons?.toArray()[0] ?? null;\n }\n}\n","<ng-content select=\"odx-toggle-button\" />\n<div class=\"odx-toggle-button-group__indicator\" [odxActiveIndicator]=\"activeElement$ | async\"></div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ToggleButtonComponent } from './components';\nimport { ToggleButtonGroupComponent } from './toggle-button-group.component';\n\nconst modules = [ToggleButtonGroupComponent, ToggleButtonComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class ToggleButtonGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-components-toggle-button-group.mjs","sources":["../../../../libs/angular/components/toggle-button-group/src/lib/components/toggle-button/toggle-button.component.ts","../../../../libs/angular/components/toggle-button-group/src/lib/components/toggle-button/toggle-button.component.html","../../../../libs/angular/components/toggle-button-group/src/lib/toggle-button-group.component.ts","../../../../libs/angular/components/toggle-button-group/src/lib/toggle-button-group.component.html","../../../../libs/angular/components/toggle-button-group/src/lib/toggle-button-group.module.ts","../../../../libs/angular/components/toggle-button-group/src/odx-angular-components-toggle-button-group.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { DisabledController, ReadonlyController } from '@odx/angular';\nimport { RadioControlDirective } from '@odx/angular/cdk/radio-group-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * ToggleButtonComponent represents an individual toggle button, akin to a radio button but styled distinctly.\n * It integrates with Angular's forms as part of a radio group control, allowing for keyboard navigation and\n * accessibility features. This component is designed to be used within a `ToggleButtonGroupComponent`.\n *\n * @template T - The type of the value handled by the toggle button.\n *\n * Extends RadioControlDirective to provide additional behavior.\n *\n * @see {RadioControlDirective}\n */\n@CSSComponent('toggle-button')\n@Component({\n standalone: true,\n selector: 'odx-toggle-button',\n templateUrl: './toggle-button.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DisabledController.connect(), ReadonlyController.connect()],\n host: {\n role: 'button',\n },\n})\nexport class ToggleButtonComponent<T = unknown> extends RadioControlDirective<T> {\n @ViewChild('input')\n protected inputElement!: ElementRef<HTMLInputElement>;\n\n public readonly element = injectElement();\n\n /**\n * Sets focus to the input element of the toggle button.\n */\n public focus(): void {\n this.inputElement.nativeElement?.focus();\n }\n}\n","<label class=\"odx-toggle-button__label\">\n <div class=\"odx-toggle-button__indicator\">\n <input\n class=\"odx-radio-button__input\"\n type=\"radio\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-invalid]=\"radioGroupControl.hasError || null\"\n [attr.aria-readonly]=\"readonlyController?.readonly || null\"\n [attr.aria-required]=\"radioGroupControl.isRequired || null\"\n [checked]=\"isActive\"\n [disabled]=\"disabledController?.disabled || readonlyController?.readonly\"\n [name]=\"radioGroupControl.name\"\n [readonly]=\"readonlyController?.readonly\"\n [required]=\"radioGroupControl.isRequired\"\n [value]=\"value\"\n (change)=\"radioGroupControl.updateValue(value)\"\n #input\n />\n <ng-content />\n </div>\n</label>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChildren, forwardRef, inject, OnInit, QueryList, ViewEncapsulation } from '@angular/core';\nimport { DelegateFocusDirective, DisabledController, ReadonlyController } from '@odx/angular';\nimport { ActiveIndicatorDirective } from '@odx/angular/cdk/active-indicator';\nimport { RADIO_GROUP_CONTROL, RadioGroupControlDirective } from '@odx/angular/cdk/radio-group-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { defer, map, merge, startWith, tap } from 'rxjs';\nimport { ToggleButtonComponent } from './components';\n\n/**\n * ToggleButtonGroupComponent acts as a container for a group of toggle buttons,\n * managing their state and focus within a group context.\n *\n * @template T - The type of the value handled by the toggle buttons.\n *\n * It extends the RadioGroupControlDirective, allowing it to control the selection and state\n * of contained toggle buttons similar to how radio buttons are managed.\n *\n * Has host directive DelegateFocusDirective.\n *\n * @see {RadioGroupControlDirective}\n * @see {DelegateFocusDirective}\n */\n@CSSComponent('toggle-button-group')\n@Component({\n standalone: true,\n selector: 'odx-toggle-button-group',\n imports: [CommonModule, ActiveIndicatorDirective],\n templateUrl: './toggle-button-group.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: RADIO_GROUP_CONTROL,\n useExisting: forwardRef(() => ToggleButtonGroupComponent),\n multi: false,\n },\n DisabledController.connect(),\n ReadonlyController.connect(),\n ],\n hostDirectives: [DelegateFocusDirective],\n})\nexport class ToggleButtonGroupComponent<T = unknown> extends RadioGroupControlDirective<T> implements OnInit {\n private readonly delegateFocusDirective = inject(DelegateFocusDirective, { host: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n protected activeElement$ = defer(() => merge(this.toggleButtons.changes, this.change$)).pipe(\n startWith(undefined),\n map(() => this.toggleButtons.find((button) => button.isActive)?.element.nativeElement ?? null),\n tap((activeElement) => this.element.nativeElement.classList.toggle('is-active', !!activeElement)),\n );\n\n @ContentChildren(ToggleButtonComponent)\n protected toggleButtons!: QueryList<ToggleButtonComponent>;\n\n public readonly element = injectElement();\n\n public ngOnInit(): void {\n this.delegateFocusDirective.focused.pipe(this.takeUntilDestroyed()).subscribe(() => {\n this.getFirstToggleButton()?.focus();\n });\n }\n\n private getFirstToggleButton(): ToggleButtonComponent | null {\n return this.toggleButtons?.toArray()[0] ?? null;\n }\n}\n","<ng-content select=\"odx-toggle-button\" />\n<div class=\"odx-toggle-button-group__indicator\" [odxActiveIndicator]=\"activeElement$ | async\"></div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ToggleButtonComponent } from './components';\nimport { ToggleButtonGroupComponent } from './toggle-button-group.component';\n\nconst modules = [ToggleButtonGroupComponent, ToggleButtonComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class ToggleButtonGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { createConfigTokens, injectElement, EventManager, untilDestroyed, hasCha
2
2
  import { __decorate, __metadata } from 'tslib';
3
3
  import { DOCUMENT } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { inject, Injector, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgZone, booleanAttribute, Directive } from '@angular/core';
5
+ import { inject, Injector, Input, ChangeDetectionStrategy, ViewEncapsulation, Component, NgZone, booleanAttribute, Directive } from '@angular/core';
6
6
  import { ConnectedOverlayService } from '@odx/angular/cdk/connected-overlay';
7
7
  import { CSSModifier, CSSComponent, deepmerge } from '@odx/angular/internal';
8
8
  import { delayUntil } from '@odx/angular/rxjs';
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-components-tooltip.mjs","sources":["../../../../libs/angular/components/tooltip/src/lib/helpers/resolve-tooltip-trigger-events.ts","../../../../libs/angular/components/tooltip/src/lib/models/tooltip-size.ts","../../../../libs/angular/components/tooltip/src/lib/models/tooltip-options.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.config.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.component.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.component.html","../../../../libs/angular/components/tooltip/src/lib/tooltip.directive.ts","../../../../libs/angular/components/tooltip/src/odx-angular-components-tooltip.ts"],"sourcesContent":["import { TooltipTrigger } from '../models';\n\n/**\n * @internal\n * Resolves the appropriate event names for the provided tooltip trigger.\n *\n * @param {TooltipTrigger} trigger - The trigger to resolve.\n * @returns {[string, string | null]} - The event names for the trigger.\n */\nexport function resolveTooltipTriggerEvents(trigger: TooltipTrigger): [string, string | null] {\n if (trigger === 'click') {\n return ['click', null];\n } else {\n return ['mouseenter', 'mouseleave'];\n }\n}\n","export type TooltipSize = typeof TooltipSize[keyof typeof TooltipSize];\n\nexport const TooltipSize = {\n AUTO: 'auto',\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large',\n} as const;\n","import { ConnectedOverlayOptions } from '@odx/angular/cdk/connected-overlay';\nimport { TooltipSize } from './tooltip-size';\nimport { TooltipTrigger } from './tooltip-trigger';\n\nexport interface TooltipOptions extends Pick<ConnectedOverlayOptions, 'position' | 'matchReferenceWidth'> {\n trigger: TooltipTrigger;\n delayIn: number;\n delayOut: number;\n size: TooltipSize;\n}\n\nexport const DefaultTooltipOptions: TooltipOptions = {\n matchReferenceWidth: false,\n size: TooltipSize.AUTO,\n trigger: 'hover',\n position: 'top',\n delayIn: 0,\n delayOut: 0,\n};\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { DefaultTooltipOptions, TooltipOptions } from './models';\n\nexport type TooltipConfig = TooltipOptions;\n\n/**\n * Utility functions generated by `createConfigTokens` to handle injection and provision of `TooltipConfig`.\n * These include tokens and functions to access and provide the default configuration for tooltips.\n *\n * `TooltipDefaultConfig` provides the default settings for tooltips.\n * `TooltipConfig` is a token that can be used to inject tooltip configuration settings.\n * `injectTooltipConfig` is a function that retrieves the current tooltip configuration.\n * `provideTooltipConfig` is a function used to specify a custom configuration for tooltips.\n *\n * @example\n * ```ts\n * // In module providers:\n * providers: [\n * provideTooltipConfig({ // ... global module configuration }),\n * ]\n *\n * // In a component or service:\n * constructor(@Inject(TooltipConfig) private readonly config: TooltipConfig) {}\n *\n * // Or using the `injectTooltipConfig` function:\n * @Component({ ... })\n * export class MyComponent {\n * private readonly config = injectTooltipConfig();\n * }\n * ```\n */\nexport const { TooltipDefaultConfig, TooltipConfig, injectTooltipConfig, provideTooltipConfig } = createConfigTokens(\n 'Tooltip',\n '@odx/angular/components/tooltip',\n {\n ...DefaultTooltipOptions,\n } as TooltipConfig,\n);\n","import { ChangeDetectionStrategy, Component, inject, Injector, Input, Type, ViewEncapsulation } from '@angular/core';\nimport { DynamicContent, DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { TooltipSize } from './models';\nimport { injectTooltipConfig } from './tooltip.config';\n\n/**\n /**\n * TooltipComponent displays contextual information related to an element when the user hovers over\n * or focuses on the element. It supports dynamic content and can be styled with different sizes.\n *\n * The component uses dynamic content rendering to provide flexible display options including text,\n * templates, or even other Angular components, making it highly customizable.\n */\n@CSSComponent('tooltip')\n@Component({\n standalone: true,\n selector: 'odx-tooltip',\n imports: [DynamicViewDirective],\n templateUrl: './tooltip.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n role: 'tooltip',\n },\n})\nexport class TooltipComponent {\n private readonly config = injectTooltipConfig();\n protected readonly injector = inject(Injector);\n public readonly element = injectElement();\n\n /**\n * The ID attribute of the tooltip, used for accessibility purposes to link the tooltip with its owner element.\n *\n * @type {string | null}\n * @default null\n */\n @Input()\n public id: string | null = null;\n\n /**\n * The content to be displayed within the tooltip. This can be text, a template reference, or a dynamic component.\n *\n * @type {DynamicContent | null}\n */\n @Input()\n public content?: Exclude<DynamicContent, Type<unknown>> | null;\n\n /**\n * Determines the size of the tooltip. It can adjust based on the content size or be set to specific dimensions.\n * The size influences the CSS class applied to the tooltip, allowing for custom styles.\n *\n * @type {TooltipSize}\n * @default TooltipSize.AUTO from the configuration\n */\n @CSSModifier()\n @Input()\n public size: TooltipSize = this.config.size;\n}\n","<ng-template [odxDynamicView]=\"content\" [odxDynamicViewInjector]=\"injector\" />\n","import { DOCUMENT } from '@angular/common';\nimport { booleanAttribute, Directive, inject, Injector, Input, NgZone, OnChanges, OnDestroy, OnInit, Type } from '@angular/core';\nimport { ConnectedOverlayRef, ConnectedOverlayService } from '@odx/angular/cdk/connected-overlay';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent, deepmerge } from '@odx/angular/internal';\nimport { delayUntil } from '@odx/angular/rxjs';\nimport { EventManager, getUniqueId, hasChanged, injectElement, NgChanges, untilDestroyed } from '@odx/angular/utils';\nimport { filter, merge, Subject, tap } from 'rxjs';\nimport { resolveTooltipTriggerEvents } from './helpers';\nimport { TooltipOptions, TooltipSize } from './models';\nimport { TooltipComponent } from './tooltip.component';\nimport { injectTooltipConfig } from './tooltip.config';\n\n/**\n * TooltipDirective manages tooltips for host elements by creating overlay components dynamically.\n * It provides configuration options such as content, delay timings, visibility, and tooltip sizing.\n * This directive uses Angular's connected overlay system to position and manage tooltip visibility.\n */\n@CSSComponent('tooltip-host')\n@Directive({ standalone: true, selector: '[odxTooltip]', exportAs: 'odxTooltip', providers: [EventManager], host: { '[attr.aria-describedby]': 'tooltipId' } })\nexport class TooltipDirective implements OnInit, OnChanges, OnDestroy {\n private readonly eventManager = inject(EventManager);\n private readonly connectedOverlayService = inject(ConnectedOverlayService);\n private readonly showTrigger$$ = new Subject<void>();\n private readonly hideTrigger$$ = new Subject<void>();\n private readonly document = inject(DOCUMENT);\n private readonly injector = inject(Injector);\n private readonly ngZone = inject(NgZone);\n\n private connectedOverlayRef: ConnectedOverlayRef | null = null;\n private tooltipOptions = injectTooltipConfig();\n private ignoreBrowserTabSwitchFocus = false;\n\n protected tooltipId: string | null = null;\n public readonly element = injectElement();\n\n /**\n * Input for dynamic content to display in the tooltip.\n * This content is reactive and can change dynamically.\n *\n * @type {DynamicContent | null}\n * @default null\n */\n @Input('odxTooltip')\n public content?: Exclude<DynamicContent, Type<unknown>> | null = null;\n\n /**\n * Controls whether the tooltip is disabled. A disabled tooltip will not be displayed.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ alias: 'odxTooltipDisabled', transform: booleanAttribute })\n public disabled = false;\n\n /**\n * Configuration options for the tooltip.\n * It allows setting various behaviors like delay and positioning.\n *\n * @param {Partial<TooltipOptions> | null | undefined}\n */\n @Input('odxTooltipOptions')\n public set options(value: Partial<TooltipOptions> | null | undefined) {\n this.tooltipOptions = deepmerge(this.tooltipOptions, value) as TooltipOptions;\n }\n\n /**\n * Sets the size of the tooltip.\n *\n * @type {TooltipSize}\n * @default null\n */\n @Input('odxTooltipSize')\n public size?: TooltipSize | null = null;\n\n /**\n * Controls the visibility of the tooltip.\n * Useful for programmatically toggling the tooltip display.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ alias: 'odxTooltipVisible', transform: booleanAttribute })\n public visible = false;\n\n /**\n * Indicates whether the tooltip is currently open.\n *\n * @returns {boolean}\n */\n public get isOpen(): boolean {\n return this.connectedOverlayRef !== null;\n }\n\n constructor() {\n const takeUntilDestroyed = untilDestroyed();\n const show$ = this.showTrigger$$.pipe(\n filter(() => !this.isOpen),\n delayUntil(() => this.tooltipOptions.delayIn, this.hideTrigger$$),\n tap(() => this.show()),\n );\n const hide$ = this.hideTrigger$$.pipe(\n filter(() => this.isOpen),\n delayUntil(() => this.tooltipOptions.delayOut, this.showTrigger$$),\n tap(() => this.hide()),\n );\n merge(show$, hide$).pipe(takeUntilDestroyed()).subscribe();\n }\n\n public ngOnInit(): void {\n this.registerEvents();\n }\n\n public ngOnChanges(changes: NgChanges<TooltipDirective>): void {\n if (hasChanged(changes, 'disabled') && this.disabled) {\n this.hide();\n }\n if (hasChanged(changes, ['content', 'size'])) {\n this.connectedOverlayRef?.update({ context: { content: this.content, size: this.size } });\n }\n if (hasChanged(changes, 'options')) {\n this.connectedOverlayRef?.update(this.tooltipOptions);\n this.registerEvents();\n }\n if (this.visible && !this.disabled) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n public ngOnDestroy(): void {\n this.hide(true);\n }\n\n /**\n * Shows the tooltip, creating and attaching the overlay to the host element.\n */\n public show(): void {\n if (this.isOpen || this.disabled || !this.content) return;\n this.tooltipId = getUniqueId('odx-tooltip');\n this.connectedOverlayRef = this.connectedOverlayService.createOverlay(\n this.element.nativeElement,\n {\n ...this.tooltipOptions,\n containerClass: 'odx-tooltip-overlay',\n content: TooltipComponent,\n context: { content: this.content, size: this.size ?? this.tooltipOptions.size, id: this.tooltipId },\n showArrow: true,\n enableFallback: true,\n nonInteractive: true,\n },\n { host: this.element.nativeElement.parentElement, injector: this.injector },\n );\n }\n\n /**\n * Hides the tooltip, detaching the overlay from the host element.\n */\n public hide(force = false): void {\n if ((!this.isOpen || (this.visible && !this.disabled)) && !force) return;\n this.connectedOverlayRef?.close(force);\n this.connectedOverlayRef = null;\n this.tooltipId = null;\n }\n\n private registerEvents(): void {\n const [openEvent, closeEvent] = resolveTooltipTriggerEvents(this.tooltipOptions.trigger);\n this.eventManager.destroyListeners();\n this.ngZone.runOutsideAngular(() => {\n this.eventManager.register([openEvent, 'focusin'], (event: Event | undefined) => {\n if (this.ignoreBrowserTabSwitchFocus && event?.type === 'focusin') {\n this.ignoreBrowserTabSwitchFocus = false;\n return;\n }\n this.showTrigger$$.next();\n });\n this.eventManager.register([closeEvent, 'focusout'], () => this.hideTrigger$$.next());\n this.eventManager.register(['keyup.esc'], () => this.hideTrigger$$.next(), 'document');\n this.eventManager.register(\n ['visibilitychange'],\n () => {\n if (this.document.visibilityState === 'hidden') {\n this.ignoreBrowserTabSwitchFocus = true;\n }\n },\n 'document',\n );\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-components-tooltip.mjs","sources":["../../../../libs/angular/components/tooltip/src/lib/helpers/resolve-tooltip-trigger-events.ts","../../../../libs/angular/components/tooltip/src/lib/models/tooltip-size.ts","../../../../libs/angular/components/tooltip/src/lib/models/tooltip-options.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.config.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.component.ts","../../../../libs/angular/components/tooltip/src/lib/tooltip.component.html","../../../../libs/angular/components/tooltip/src/lib/tooltip.directive.ts","../../../../libs/angular/components/tooltip/src/odx-angular-components-tooltip.ts"],"sourcesContent":["import { TooltipTrigger } from '../models';\n\n/**\n * @internal\n * Resolves the appropriate event names for the provided tooltip trigger.\n *\n * @param {TooltipTrigger} trigger - The trigger to resolve.\n * @returns {[string, string | null]} - The event names for the trigger.\n */\nexport function resolveTooltipTriggerEvents(trigger: TooltipTrigger): [string, string | null] {\n if (trigger === 'click') {\n return ['click', null];\n } else {\n return ['mouseenter', 'mouseleave'];\n }\n}\n","export type TooltipSize = typeof TooltipSize[keyof typeof TooltipSize];\n\nexport const TooltipSize = {\n AUTO: 'auto',\n SMALL: 'small',\n MEDIUM: 'medium',\n LARGE: 'large',\n} as const;\n","import { ConnectedOverlayOptions } from '@odx/angular/cdk/connected-overlay';\nimport { TooltipSize } from './tooltip-size';\nimport { TooltipTrigger } from './tooltip-trigger';\n\nexport interface TooltipOptions extends Pick<ConnectedOverlayOptions, 'position' | 'matchReferenceWidth'> {\n trigger: TooltipTrigger;\n delayIn: number;\n delayOut: number;\n size: TooltipSize;\n}\n\nexport const DefaultTooltipOptions: TooltipOptions = {\n matchReferenceWidth: false,\n size: TooltipSize.AUTO,\n trigger: 'hover',\n position: 'top',\n delayIn: 0,\n delayOut: 0,\n};\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { DefaultTooltipOptions, TooltipOptions } from './models';\n\nexport type TooltipConfig = TooltipOptions;\n\n/**\n * Utility functions generated by `createConfigTokens` to handle injection and provision of `TooltipConfig`.\n * These include tokens and functions to access and provide the default configuration for tooltips.\n *\n * `TooltipDefaultConfig` provides the default settings for tooltips.\n * `TooltipConfig` is a token that can be used to inject tooltip configuration settings.\n * `injectTooltipConfig` is a function that retrieves the current tooltip configuration.\n * `provideTooltipConfig` is a function used to specify a custom configuration for tooltips.\n *\n * @example\n * ```ts\n * // In module providers:\n * providers: [\n * provideTooltipConfig({ // ... global module configuration }),\n * ]\n *\n * // In a component or service:\n * constructor(@Inject(TooltipConfig) private readonly config: TooltipConfig) {}\n *\n * // Or using the `injectTooltipConfig` function:\n * @Component({ ... })\n * export class MyComponent {\n * private readonly config = injectTooltipConfig();\n * }\n * ```\n */\nexport const { TooltipDefaultConfig, TooltipConfig, injectTooltipConfig, provideTooltipConfig } = createConfigTokens(\n 'Tooltip',\n '@odx/angular/components/tooltip',\n {\n ...DefaultTooltipOptions,\n } as TooltipConfig,\n);\n","import { ChangeDetectionStrategy, Component, inject, Injector, Input, Type, ViewEncapsulation } from '@angular/core';\nimport { DynamicContent, DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { TooltipSize } from './models';\nimport { injectTooltipConfig } from './tooltip.config';\n\n/**\n /**\n * TooltipComponent displays contextual information related to an element when the user hovers over\n * or focuses on the element. It supports dynamic content and can be styled with different sizes.\n *\n * The component uses dynamic content rendering to provide flexible display options including text,\n * templates, or even other Angular components, making it highly customizable.\n */\n@CSSComponent('tooltip')\n@Component({\n standalone: true,\n selector: 'odx-tooltip',\n imports: [DynamicViewDirective],\n templateUrl: './tooltip.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n role: 'tooltip',\n },\n})\nexport class TooltipComponent {\n private readonly config = injectTooltipConfig();\n protected readonly injector = inject(Injector);\n public readonly element = injectElement();\n\n /**\n * The ID attribute of the tooltip, used for accessibility purposes to link the tooltip with its owner element.\n *\n * @type {string | null}\n * @default null\n */\n @Input()\n public id: string | null = null;\n\n /**\n * The content to be displayed within the tooltip. This can be text, a template reference, or a dynamic component.\n *\n * @type {DynamicContent | null}\n */\n @Input()\n public content?: Exclude<DynamicContent, Type<unknown>> | null;\n\n /**\n * Determines the size of the tooltip. It can adjust based on the content size or be set to specific dimensions.\n * The size influences the CSS class applied to the tooltip, allowing for custom styles.\n *\n * @type {TooltipSize}\n * @default TooltipSize.AUTO from the configuration\n */\n @CSSModifier()\n @Input()\n public size: TooltipSize = this.config.size;\n}\n","<ng-template [odxDynamicView]=\"content\" [odxDynamicViewInjector]=\"injector\" />\n","import { DOCUMENT } from '@angular/common';\nimport { booleanAttribute, Directive, inject, Injector, Input, NgZone, OnChanges, OnDestroy, OnInit, Type } from '@angular/core';\nimport { ConnectedOverlayRef, ConnectedOverlayService } from '@odx/angular/cdk/connected-overlay';\nimport { DynamicContent } from '@odx/angular/cdk/dynamic-view';\nimport { CSSComponent, deepmerge } from '@odx/angular/internal';\nimport { delayUntil } from '@odx/angular/rxjs';\nimport { EventManager, getUniqueId, hasChanged, injectElement, NgChanges, untilDestroyed } from '@odx/angular/utils';\nimport { filter, merge, Subject, tap } from 'rxjs';\nimport { resolveTooltipTriggerEvents } from './helpers';\nimport { TooltipOptions, TooltipSize } from './models';\nimport { TooltipComponent } from './tooltip.component';\nimport { injectTooltipConfig } from './tooltip.config';\n\n/**\n * TooltipDirective manages tooltips for host elements by creating overlay components dynamically.\n * It provides configuration options such as content, delay timings, visibility, and tooltip sizing.\n * This directive uses Angular's connected overlay system to position and manage tooltip visibility.\n */\n@CSSComponent('tooltip-host')\n@Directive({ standalone: true, selector: '[odxTooltip]', exportAs: 'odxTooltip', providers: [EventManager], host: { '[attr.aria-describedby]': 'tooltipId' } })\nexport class TooltipDirective implements OnInit, OnChanges, OnDestroy {\n private readonly eventManager = inject(EventManager);\n private readonly connectedOverlayService = inject(ConnectedOverlayService);\n private readonly showTrigger$$ = new Subject<void>();\n private readonly hideTrigger$$ = new Subject<void>();\n private readonly document = inject(DOCUMENT);\n private readonly injector = inject(Injector);\n private readonly ngZone = inject(NgZone);\n\n private connectedOverlayRef: ConnectedOverlayRef | null = null;\n private tooltipOptions = injectTooltipConfig();\n private ignoreBrowserTabSwitchFocus = false;\n\n protected tooltipId: string | null = null;\n public readonly element = injectElement();\n\n /**\n * Input for dynamic content to display in the tooltip.\n * This content is reactive and can change dynamically.\n *\n * @type {DynamicContent | null}\n * @default null\n */\n @Input('odxTooltip')\n public content?: Exclude<DynamicContent, Type<unknown>> | null = null;\n\n /**\n * Controls whether the tooltip is disabled. A disabled tooltip will not be displayed.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ alias: 'odxTooltipDisabled', transform: booleanAttribute })\n public disabled = false;\n\n /**\n * Configuration options for the tooltip.\n * It allows setting various behaviors like delay and positioning.\n *\n * @param {Partial<TooltipOptions> | null | undefined}\n */\n @Input('odxTooltipOptions')\n public set options(value: Partial<TooltipOptions> | null | undefined) {\n this.tooltipOptions = deepmerge(this.tooltipOptions, value) as TooltipOptions;\n }\n\n /**\n * Sets the size of the tooltip.\n *\n * @type {TooltipSize}\n * @default null\n */\n @Input('odxTooltipSize')\n public size?: TooltipSize | null = null;\n\n /**\n * Controls the visibility of the tooltip.\n * Useful for programmatically toggling the tooltip display.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ alias: 'odxTooltipVisible', transform: booleanAttribute })\n public visible = false;\n\n /**\n * Indicates whether the tooltip is currently open.\n *\n * @returns {boolean}\n */\n public get isOpen(): boolean {\n return this.connectedOverlayRef !== null;\n }\n\n constructor() {\n const takeUntilDestroyed = untilDestroyed();\n const show$ = this.showTrigger$$.pipe(\n filter(() => !this.isOpen),\n delayUntil(() => this.tooltipOptions.delayIn, this.hideTrigger$$),\n tap(() => this.show()),\n );\n const hide$ = this.hideTrigger$$.pipe(\n filter(() => this.isOpen),\n delayUntil(() => this.tooltipOptions.delayOut, this.showTrigger$$),\n tap(() => this.hide()),\n );\n merge(show$, hide$).pipe(takeUntilDestroyed()).subscribe();\n }\n\n public ngOnInit(): void {\n this.registerEvents();\n }\n\n public ngOnChanges(changes: NgChanges<TooltipDirective>): void {\n if (hasChanged(changes, 'disabled') && this.disabled) {\n this.hide();\n }\n if (hasChanged(changes, ['content', 'size'])) {\n this.connectedOverlayRef?.update({ context: { content: this.content, size: this.size } });\n }\n if (hasChanged(changes, 'options')) {\n this.connectedOverlayRef?.update(this.tooltipOptions);\n this.registerEvents();\n }\n if (this.visible && !this.disabled) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n public ngOnDestroy(): void {\n this.hide(true);\n }\n\n /**\n * Shows the tooltip, creating and attaching the overlay to the host element.\n */\n public show(): void {\n if (this.isOpen || this.disabled || !this.content) return;\n this.tooltipId = getUniqueId('odx-tooltip');\n this.connectedOverlayRef = this.connectedOverlayService.createOverlay(\n this.element.nativeElement,\n {\n ...this.tooltipOptions,\n containerClass: 'odx-tooltip-overlay',\n content: TooltipComponent,\n context: { content: this.content, size: this.size ?? this.tooltipOptions.size, id: this.tooltipId },\n showArrow: true,\n enableFallback: true,\n nonInteractive: true,\n },\n { host: this.element.nativeElement.parentElement, injector: this.injector },\n );\n }\n\n /**\n * Hides the tooltip, detaching the overlay from the host element.\n */\n public hide(force = false): void {\n if ((!this.isOpen || (this.visible && !this.disabled)) && !force) return;\n this.connectedOverlayRef?.close(force);\n this.connectedOverlayRef = null;\n this.tooltipId = null;\n }\n\n private registerEvents(): void {\n const [openEvent, closeEvent] = resolveTooltipTriggerEvents(this.tooltipOptions.trigger);\n this.eventManager.destroyListeners();\n this.ngZone.runOutsideAngular(() => {\n this.eventManager.register([openEvent, 'focusin'], (event: Event | undefined) => {\n if (this.ignoreBrowserTabSwitchFocus && event?.type === 'focusin') {\n this.ignoreBrowserTabSwitchFocus = false;\n return;\n }\n this.showTrigger$$.next();\n });\n this.eventManager.register([closeEvent, 'focusout'], () => this.hideTrigger$$.next());\n this.eventManager.register(['keyup.esc'], () => this.hideTrigger$$.next(), 'document');\n this.eventManager.register(\n ['visibilitychange'],\n () => {\n if (this.document.visibilityState === 'hidden') {\n this.ignoreBrowserTabSwitchFocus = true;\n }\n },\n 'document',\n );\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __metadata } from 'tslib';
2
2
  import * as i0 from '@angular/core';
3
- import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, HostListener, inject, Renderer2, signal, EventEmitter, booleanAttribute, ContentChildren, Output, NgModule } from '@angular/core';
3
+ import { HostListener, Input, ViewEncapsulation, ChangeDetectionStrategy, Component, inject, Renderer2, signal, EventEmitter, booleanAttribute, Output, ContentChildren, NgModule } from '@angular/core';
4
4
  import * as i1 from '@odx/angular';
5
5
  import { WithTabIndex, WithDisabledState, WindowRef, CoreModule } from '@odx/angular';
6
6
  import { IconComponent } from '@odx/angular/components/icon';
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-components-wizard.mjs","sources":["../../../../libs/angular/components/wizard/src/lib/components/wizard-step/wizard-step.component.ts","../../../../libs/angular/components/wizard/src/lib/components/wizard-step/wizard-step.component.html","../../../../libs/angular/components/wizard/src/lib/wizard.component.ts","../../../../libs/angular/components/wizard/src/lib/wizard.component.html","../../../../libs/angular/components/wizard/src/lib/wizard.module.ts","../../../../libs/angular/components/wizard/src/odx-angular-components-wizard.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostListener, Input, ViewEncapsulation } from '@angular/core';\nimport { WithDisabledState, WithTabIndex } from '@odx/angular';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { Subject } from 'rxjs';\n\n/**\n * WizardStepComponent represents an individual step within a wizard navigation sequence. It can be configured\n * to display icons, listen for user interactions, and indicate various states such as active, passed, or valid.\n * This component interacts with the WizardComponent to manage the step progression and visibility.\n *\n * Has host directives WithTabIndex and WithDisabledState.\n *\n * @see {WithTabIndex}\n * @see {WithDisabledState}\n */\n@CSSComponent('wizard-step')\n@Component({\n selector: 'odx-wizard-step',\n templateUrl: './wizard-step.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [IconComponent],\n hostDirectives: [WithTabIndex, WithDisabledState],\n})\nexport class WizardStepComponent {\n public readonly element = injectElement();\n\n /**\n * Emitted when the step is chosen by the user, indicating that the step should be activated.\n *\n * @emits {WizardStepComponent} The chosen step.\n */\n public readonly stepChosen$ = new Subject<WizardStepComponent>();\n\n /**\n * Indicates if this step was the last one interacted with in the wizard sequence.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public isLastTouched = false;\n\n /**\n * Indicates if this step is currently active.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public active = false;\n\n /**\n * Indicates if this step has been passed in the navigation sequence.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public passed = false;\n\n /**\n * Controls the visibility of this step in the UI.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public visible = true;\n\n /**\n * Indicates if this step is valid and can be progressed to.\n *\n * @type {boolean}\n * @default false\n */\n @CSSModifier()\n @Input()\n public valid = false;\n\n /**\n * Indicates if this step has been touched by the user.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public touched = false;\n\n /**\n * Sets the validation state of this step.\n *\n * @param {boolean} state - The new validation state.\n */\n public setValid(state: boolean): void {\n this.valid = state;\n }\n\n @HostListener('click')\n @HostListener('keyup.enter')\n @HostListener('keyup.space')\n protected chooseStep(): void {\n this.stepChosen$.next(this);\n }\n}\n","<span class=\"odx-wizard-step__label\">\n <ng-content />\n</span>\n\n<div class=\"odx-wizard-step__holder\">\n <span class=\"odx-wizard-step__line-before\"></span>\n <span class=\"odx-wizard-step__circle\"> <odx-icon class=\"odx-wizard-step__icon\" name=\"check\" iconSet=\"core\" /> </span>\n <span class=\"odx-wizard-step__line-after\"></span>\n</div>\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n inject,\n Input,\n Output,\n QueryList,\n Renderer2,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { BehaviorSubject, debounceTime, fromEvent, merge, tap } from 'rxjs';\nimport { WizardStepComponent } from './components';\n\n/**\n * WizardComponent manages a series of steps, providing functionality for navigating forwards and backwards\n * through the steps. It dynamically adjusts the visibility of steps based on the available space and current active step.\n * The component supports both horizontal and vertical orientations.\n */\n@CSSComponent('wizard')\n@Component({\n selector: 'odx-wizard',\n templateUrl: './wizard.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class WizardComponent implements AfterViewInit {\n private readonly destroyed = untilDestroyed();\n private readonly renderer = inject(Renderer2);\n\n private readonly responsive$ = new BehaviorSubject<boolean>(true);\n private visibleStepsSegments = 0;\n private readonly dottedLineStart = this.renderer.createElement('div');\n private readonly dottedLineEnd = this.renderer.createElement('div');\n\n private readonly windowRef = inject(WindowRef);\n\n @ContentChildren(WizardStepComponent)\n protected readonly steps!: QueryList<WizardStepComponent>;\n\n public readonly activeStep = signal(0);\n public readonly element = injectElement();\n\n /**\n * Indicates if the wizard layout should be vertical. When true, the wizard orientation changes to vertical.\n *\n * @type {boolean}\n * @default false\n */\n @CSSModifier()\n @Input({ transform: booleanAttribute })\n public vertical = false;\n\n /**\n * Indicates whether the wizard component is responsive\n * and hides the steps that do not fit in the available space.\n */\n @Input({ transform: booleanAttribute })\n public set responsive(value: boolean) {\n this.responsive$.next(value);\n }\n\n /**\n * Event emitted when the active step changes, providing the index of the new active step.\n *\n * @emits {number}\n */\n @Output()\n public activeStepChanged: EventEmitter<number> = new EventEmitter();\n\n public ngAfterViewInit(): void {\n if (!this.steps) return;\n [this.dottedLineStart, this.dottedLineEnd].forEach((l) => this.renderer.addClass(l, 'odx-wizard-step__dotted-line'));\n this.visibleStepsSegments = this.calculateVisibleStepsSegments();\n this.setActiveStep();\n\n merge(fromEvent(this.windowRef.nativeWindow, 'resize'), this.steps.changes, this.responsive$)\n .pipe(this.destroyed(), debounceTime(600))\n .subscribe(() => {\n this.visibleStepsSegments = this.calculateVisibleStepsSegments();\n this.setHiddenSteps();\n });\n this.clickStepSubscriber();\n }\n\n /**\n * Navigates to the next step in the wizard.\n */\n public nextStep(): void {\n this.activeStep() < this.steps.length - 1 && this.changeStepHandler(this.steps.get(this.activeStep() + 1) as WizardStepComponent);\n }\n\n /**\n * Navigates to the previous step in the wizard.\n */\n public previousStep(): void {\n this.activeStep() > 0 && this.changeStepHandler(this.steps.get(this.activeStep() - 1) as WizardStepComponent);\n }\n\n /**\n * Sets the active step valid.\n */\n public setActiveStepValid(): void {\n this.steps.get(this.activeStep())?.setValid(true);\n }\n\n /**\n * Sets the validity of a step at the specified index.\n *\n * @param {number} stepIndex - Index of the step to set validity.\n * @param {boolean} valid - Whether the step should be valid or not.\n */\n public setStepValid(stepIndex: number, valid: boolean): void {\n const step = this.steps.get(stepIndex);\n if (step) {\n step.setValid(valid);\n if (stepIndex === this.activeStep()) {\n this.activeStepChanged.emit(this.activeStep());\n }\n }\n }\n\n /**\n * Returns whether the step at the specified index is valid.\n *\n * @param {number} stepIndex - Index of the step to check validity.\n * @returns {boolean} - Whether the step is valid or not.\n */\n public isStepValid(stepIndex: number): boolean {\n return !!this.steps?.get(stepIndex)?.valid;\n }\n\n /**\n * Returns whether the current active step is valid.\n *\n * @returns {boolean} - Whether the current step is valid or not.\n */\n public isCurrentStepValid(): boolean {\n return this.isStepValid(this.activeStep());\n }\n\n private calculateVisibleStepsSegments(): number {\n if (!this.responsive$.getValue()) return this.steps.length;\n const container = this.element.nativeElement;\n const { width, height } = container.getBoundingClientRect();\n const containerSize = this.vertical ? height : width;\n\n let visibleSteps = 0;\n let summaryStepsSize = 0;\n const prop = this.vertical ? 'flex-basis' : 'min-width';\n const minStepSize = parseInt(this.getStyleFromCSS(this.steps.first.element.nativeElement, prop));\n\n this.steps.forEach(() => {\n summaryStepsSize += minStepSize;\n if (summaryStepsSize < containerSize) visibleSteps++;\n });\n\n return visibleSteps;\n }\n\n private getStyleFromCSS(el: HTMLElement, prop: string): string {\n return this.windowRef.nativeWindow.getComputedStyle(el).getPropertyValue(prop);\n }\n\n private setActiveStep(): void {\n const touched: WizardStepComponent[] = [];\n this.steps.forEach((step, index) => {\n step.active = false;\n step.isLastTouched = false;\n if (this.activeStep() === index) step.touched = true;\n step.touched && touched.push(step);\n this.activeStep() === index && (step.active = true);\n step.passed = index <= this.activeStep();\n });\n const lastTouched = touched.pop();\n lastTouched && (lastTouched.isLastTouched = true);\n this.setHiddenSteps();\n }\n\n private clickStepSubscriber(): void {\n merge(...this.steps.map((step) => step.stepChosen$))\n .pipe(\n this.destroyed(),\n tap((step) => this.changeStepHandler(step)),\n )\n .subscribe();\n }\n\n private changeStepHandler(step: WizardStepComponent): void {\n const index = this.steps.toArray().indexOf(step);\n const isPreviousStepValid = this.steps.get(index - 1)?.valid;\n const isFirstStepTarget = index === 0;\n\n if ((isPreviousStepValid || isFirstStepTarget) && index !== this.activeStep()) {\n this.activeStep.set(index);\n this.activeStepChanged.emit(this.activeStep());\n this.setActiveStep();\n }\n }\n\n private setHiddenSteps() {\n const length = this.steps.length;\n\n [this.dottedLineStart, this.dottedLineEnd].forEach((l) => this.setDottedLineActive(l, true));\n\n this.renderer.insertBefore(this.element.nativeElement, this.dottedLineStart, this.steps.get(1)?.element.nativeElement);\n this.renderer.insertBefore(this.element.nativeElement, this.dottedLineEnd, this.steps.get(length - 1)?.element.nativeElement);\n const start = this.activeStep() < length / 2;\n const stepsForHide = this.steps.toArray().slice(1, -1);\n const visibleStepsSegments = this.visibleStepsSegments - 2;\n stepsForHide.forEach((step, i) => {\n if (length > this.visibleStepsSegments) {\n step.visible = start\n ? i < visibleStepsSegments - 1 || this.isNeighbors(i, stepsForHide)\n : i > stepsForHide.length - (visibleStepsSegments - 1) || this.isNeighbors(i, stepsForHide);\n } else {\n step.visible = true;\n }\n });\n const filteredVisibleSteps = stepsForHide.filter((s) => s.visible);\n if (visibleStepsSegments - 1 < filteredVisibleSteps.length && length > this.visibleStepsSegments) {\n const overflowSize = filteredVisibleSteps.length - visibleStepsSegments + 1;\n const index = start ? overflowSize : filteredVisibleSteps.length - overflowSize - 1;\n\n filteredVisibleSteps.forEach((s, i) => {\n (start ? i <= index : i >= index) && !this.isNeighbors(i, filteredVisibleSteps) && (s.visible = false);\n });\n }\n\n this.steps.last.active && (stepsForHide[stepsForHide.length - 1].visible = true);\n this.steps.first.active && (stepsForHide[0].visible = true);\n\n !this.steps.get(1)?.visible && this.setDottedLineActive(this.dottedLineStart);\n !this.steps.get(length - 2)?.visible && this.setDottedLineActive(this.dottedLineEnd);\n }\n\n private isNeighbors(index: number, steps: WizardStepComponent[]): boolean {\n const activeStep = steps.indexOf(steps.find((s) => s.active) as WizardStepComponent);\n return activeStep !== -1 && (index === activeStep - 1 || index === activeStep + 1 || index === activeStep);\n }\n\n private setDottedLineActive(line: HTMLElement, unset?: boolean): void {\n unset ? this.renderer.removeClass(line, 'odx-wizard-step__dotted-line--active') : this.renderer.addClass(line, 'odx-wizard-step__dotted-line--active');\n }\n}\n","<ng-content select=\"odx-wizard-step\" />\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { WizardStepComponent } from './components';\nimport { WizardComponent } from './wizard.component';\n\nconst modules = [WizardComponent, WizardStepComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class WizardModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-components-wizard.mjs","sources":["../../../../libs/angular/components/wizard/src/lib/components/wizard-step/wizard-step.component.ts","../../../../libs/angular/components/wizard/src/lib/components/wizard-step/wizard-step.component.html","../../../../libs/angular/components/wizard/src/lib/wizard.component.ts","../../../../libs/angular/components/wizard/src/lib/wizard.component.html","../../../../libs/angular/components/wizard/src/lib/wizard.module.ts","../../../../libs/angular/components/wizard/src/odx-angular-components-wizard.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostListener, Input, ViewEncapsulation } from '@angular/core';\nimport { WithDisabledState, WithTabIndex } from '@odx/angular';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { Subject } from 'rxjs';\n\n/**\n * WizardStepComponent represents an individual step within a wizard navigation sequence. It can be configured\n * to display icons, listen for user interactions, and indicate various states such as active, passed, or valid.\n * This component interacts with the WizardComponent to manage the step progression and visibility.\n *\n * Has host directives WithTabIndex and WithDisabledState.\n *\n * @see {WithTabIndex}\n * @see {WithDisabledState}\n */\n@CSSComponent('wizard-step')\n@Component({\n selector: 'odx-wizard-step',\n templateUrl: './wizard-step.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [IconComponent],\n hostDirectives: [WithTabIndex, WithDisabledState],\n})\nexport class WizardStepComponent {\n public readonly element = injectElement();\n\n /**\n * Emitted when the step is chosen by the user, indicating that the step should be activated.\n *\n * @emits {WizardStepComponent} The chosen step.\n */\n public readonly stepChosen$ = new Subject<WizardStepComponent>();\n\n /**\n * Indicates if this step was the last one interacted with in the wizard sequence.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public isLastTouched = false;\n\n /**\n * Indicates if this step is currently active.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public active = false;\n\n /**\n * Indicates if this step has been passed in the navigation sequence.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public passed = false;\n\n /**\n * Controls the visibility of this step in the UI.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public visible = true;\n\n /**\n * Indicates if this step is valid and can be progressed to.\n *\n * @type {boolean}\n * @default false\n */\n @CSSModifier()\n @Input()\n public valid = false;\n\n /**\n * Indicates if this step has been touched by the user.\n *\n * @type {boolean}\n */\n @CSSModifier()\n public touched = false;\n\n /**\n * Sets the validation state of this step.\n *\n * @param {boolean} state - The new validation state.\n */\n public setValid(state: boolean): void {\n this.valid = state;\n }\n\n @HostListener('click')\n @HostListener('keyup.enter')\n @HostListener('keyup.space')\n protected chooseStep(): void {\n this.stepChosen$.next(this);\n }\n}\n","<span class=\"odx-wizard-step__label\">\n <ng-content />\n</span>\n\n<div class=\"odx-wizard-step__holder\">\n <span class=\"odx-wizard-step__line-before\"></span>\n <span class=\"odx-wizard-step__circle\"> <odx-icon class=\"odx-wizard-step__icon\" name=\"check\" iconSet=\"core\" /> </span>\n <span class=\"odx-wizard-step__line-after\"></span>\n</div>\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n inject,\n Input,\n Output,\n QueryList,\n Renderer2,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { BehaviorSubject, debounceTime, fromEvent, merge, tap } from 'rxjs';\nimport { WizardStepComponent } from './components';\n\n/**\n * WizardComponent manages a series of steps, providing functionality for navigating forwards and backwards\n * through the steps. It dynamically adjusts the visibility of steps based on the available space and current active step.\n * The component supports both horizontal and vertical orientations.\n */\n@CSSComponent('wizard')\n@Component({\n selector: 'odx-wizard',\n templateUrl: './wizard.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class WizardComponent implements AfterViewInit {\n private readonly destroyed = untilDestroyed();\n private readonly renderer = inject(Renderer2);\n\n private readonly responsive$ = new BehaviorSubject<boolean>(true);\n private visibleStepsSegments = 0;\n private readonly dottedLineStart = this.renderer.createElement('div');\n private readonly dottedLineEnd = this.renderer.createElement('div');\n\n private readonly windowRef = inject(WindowRef);\n\n @ContentChildren(WizardStepComponent)\n protected readonly steps!: QueryList<WizardStepComponent>;\n\n public readonly activeStep = signal(0);\n public readonly element = injectElement();\n\n /**\n * Indicates if the wizard layout should be vertical. When true, the wizard orientation changes to vertical.\n *\n * @type {boolean}\n * @default false\n */\n @CSSModifier()\n @Input({ transform: booleanAttribute })\n public vertical = false;\n\n /**\n * Indicates whether the wizard component is responsive\n * and hides the steps that do not fit in the available space.\n */\n @Input({ transform: booleanAttribute })\n public set responsive(value: boolean) {\n this.responsive$.next(value);\n }\n\n /**\n * Event emitted when the active step changes, providing the index of the new active step.\n *\n * @emits {number}\n */\n @Output()\n public activeStepChanged: EventEmitter<number> = new EventEmitter();\n\n public ngAfterViewInit(): void {\n if (!this.steps) return;\n [this.dottedLineStart, this.dottedLineEnd].forEach((l) => this.renderer.addClass(l, 'odx-wizard-step__dotted-line'));\n this.visibleStepsSegments = this.calculateVisibleStepsSegments();\n this.setActiveStep();\n\n merge(fromEvent(this.windowRef.nativeWindow, 'resize'), this.steps.changes, this.responsive$)\n .pipe(this.destroyed(), debounceTime(600))\n .subscribe(() => {\n this.visibleStepsSegments = this.calculateVisibleStepsSegments();\n this.setHiddenSteps();\n });\n this.clickStepSubscriber();\n }\n\n /**\n * Navigates to the next step in the wizard.\n */\n public nextStep(): void {\n this.activeStep() < this.steps.length - 1 && this.changeStepHandler(this.steps.get(this.activeStep() + 1) as WizardStepComponent);\n }\n\n /**\n * Navigates to the previous step in the wizard.\n */\n public previousStep(): void {\n this.activeStep() > 0 && this.changeStepHandler(this.steps.get(this.activeStep() - 1) as WizardStepComponent);\n }\n\n /**\n * Sets the active step valid.\n */\n public setActiveStepValid(): void {\n this.steps.get(this.activeStep())?.setValid(true);\n }\n\n /**\n * Sets the validity of a step at the specified index.\n *\n * @param {number} stepIndex - Index of the step to set validity.\n * @param {boolean} valid - Whether the step should be valid or not.\n */\n public setStepValid(stepIndex: number, valid: boolean): void {\n const step = this.steps.get(stepIndex);\n if (step) {\n step.setValid(valid);\n if (stepIndex === this.activeStep()) {\n this.activeStepChanged.emit(this.activeStep());\n }\n }\n }\n\n /**\n * Returns whether the step at the specified index is valid.\n *\n * @param {number} stepIndex - Index of the step to check validity.\n * @returns {boolean} - Whether the step is valid or not.\n */\n public isStepValid(stepIndex: number): boolean {\n return !!this.steps?.get(stepIndex)?.valid;\n }\n\n /**\n * Returns whether the current active step is valid.\n *\n * @returns {boolean} - Whether the current step is valid or not.\n */\n public isCurrentStepValid(): boolean {\n return this.isStepValid(this.activeStep());\n }\n\n private calculateVisibleStepsSegments(): number {\n if (!this.responsive$.getValue()) return this.steps.length;\n const container = this.element.nativeElement;\n const { width, height } = container.getBoundingClientRect();\n const containerSize = this.vertical ? height : width;\n\n let visibleSteps = 0;\n let summaryStepsSize = 0;\n const prop = this.vertical ? 'flex-basis' : 'min-width';\n const minStepSize = parseInt(this.getStyleFromCSS(this.steps.first.element.nativeElement, prop));\n\n this.steps.forEach(() => {\n summaryStepsSize += minStepSize;\n if (summaryStepsSize < containerSize) visibleSteps++;\n });\n\n return visibleSteps;\n }\n\n private getStyleFromCSS(el: HTMLElement, prop: string): string {\n return this.windowRef.nativeWindow.getComputedStyle(el).getPropertyValue(prop);\n }\n\n private setActiveStep(): void {\n const touched: WizardStepComponent[] = [];\n this.steps.forEach((step, index) => {\n step.active = false;\n step.isLastTouched = false;\n if (this.activeStep() === index) step.touched = true;\n step.touched && touched.push(step);\n this.activeStep() === index && (step.active = true);\n step.passed = index <= this.activeStep();\n });\n const lastTouched = touched.pop();\n lastTouched && (lastTouched.isLastTouched = true);\n this.setHiddenSteps();\n }\n\n private clickStepSubscriber(): void {\n merge(...this.steps.map((step) => step.stepChosen$))\n .pipe(\n this.destroyed(),\n tap((step) => this.changeStepHandler(step)),\n )\n .subscribe();\n }\n\n private changeStepHandler(step: WizardStepComponent): void {\n const index = this.steps.toArray().indexOf(step);\n const isPreviousStepValid = this.steps.get(index - 1)?.valid;\n const isFirstStepTarget = index === 0;\n\n if ((isPreviousStepValid || isFirstStepTarget) && index !== this.activeStep()) {\n this.activeStep.set(index);\n this.activeStepChanged.emit(this.activeStep());\n this.setActiveStep();\n }\n }\n\n private setHiddenSteps() {\n const length = this.steps.length;\n\n [this.dottedLineStart, this.dottedLineEnd].forEach((l) => this.setDottedLineActive(l, true));\n\n this.renderer.insertBefore(this.element.nativeElement, this.dottedLineStart, this.steps.get(1)?.element.nativeElement);\n this.renderer.insertBefore(this.element.nativeElement, this.dottedLineEnd, this.steps.get(length - 1)?.element.nativeElement);\n const start = this.activeStep() < length / 2;\n const stepsForHide = this.steps.toArray().slice(1, -1);\n const visibleStepsSegments = this.visibleStepsSegments - 2;\n stepsForHide.forEach((step, i) => {\n if (length > this.visibleStepsSegments) {\n step.visible = start\n ? i < visibleStepsSegments - 1 || this.isNeighbors(i, stepsForHide)\n : i > stepsForHide.length - (visibleStepsSegments - 1) || this.isNeighbors(i, stepsForHide);\n } else {\n step.visible = true;\n }\n });\n const filteredVisibleSteps = stepsForHide.filter((s) => s.visible);\n if (visibleStepsSegments - 1 < filteredVisibleSteps.length && length > this.visibleStepsSegments) {\n const overflowSize = filteredVisibleSteps.length - visibleStepsSegments + 1;\n const index = start ? overflowSize : filteredVisibleSteps.length - overflowSize - 1;\n\n filteredVisibleSteps.forEach((s, i) => {\n (start ? i <= index : i >= index) && !this.isNeighbors(i, filteredVisibleSteps) && (s.visible = false);\n });\n }\n\n this.steps.last.active && (stepsForHide[stepsForHide.length - 1].visible = true);\n this.steps.first.active && (stepsForHide[0].visible = true);\n\n !this.steps.get(1)?.visible && this.setDottedLineActive(this.dottedLineStart);\n !this.steps.get(length - 2)?.visible && this.setDottedLineActive(this.dottedLineEnd);\n }\n\n private isNeighbors(index: number, steps: WizardStepComponent[]): boolean {\n const activeStep = steps.indexOf(steps.find((s) => s.active) as WizardStepComponent);\n return activeStep !== -1 && (index === activeStep - 1 || index === activeStep + 1 || index === activeStep);\n }\n\n private setDottedLineActive(line: HTMLElement, unset?: boolean): void {\n unset ? this.renderer.removeClass(line, 'odx-wizard-step__dotted-line--active') : this.renderer.addClass(line, 'odx-wizard-step__dotted-line--active');\n }\n}\n","<ng-content select=\"odx-wizard-step\" />\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { WizardStepComponent } from './components';\nimport { WizardComponent } from './wizard.component';\n\nconst modules = [WizardComponent, WizardStepComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class WizardModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-internal-translate.mjs","sources":["../../../../libs/angular/internal/translate/src/lib/translate.service.ts","../../../../libs/angular/internal/translate/src/lib/pipes/translate.pipe.ts","../../../../libs/angular/internal/translate/src/lib/translate.config.ts","../../../../libs/angular/internal/translate/src/odx-angular-internal-translate.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { LocalizationService } from '@odx/angular/localization';\nimport { getLanguageCode } from '@odx/angular/utils';\nimport { distinctUntilChanged, map, Observable, shareReplay, startWith } from 'rxjs';\nimport { TranslationObject } from './models';\n\n/**\n * Service for translating keys into localized text. It listens to changes in the active language\n * and provides translated strings based on the current language preference. The service uses\n * provided `TranslationObject` containing the translations for each supported language.\n *\n * @example\n * ```ts\n * // Using TranslateService in a component\n * class MyComponent {\n * constructor(private translateService: TranslateService) {\n * translateService.translate('greeting').subscribe(translatedText => {\n * console.log(translatedText); // Outputs \"Hello\" or \"Bonjour\" based on the active language\n * });\n * }\n * }\n * ```\n */\nexport class TranslateService {\n private readonly localizationService = inject(LocalizationService);\n\n /**\n * An observable that emits the current translation object based on the active language.\n * It ensures that translations are updated dynamically whenever the user's language preference changes.\n *\n * @emits {TranslationObject} activeTranslation$ - The translation object for the active language.\n */\n public readonly activeTranslation$ = this.localizationService.activeLanguage$.pipe(\n startWith(this.localizationService.defaultLanguage),\n distinctUntilChanged(),\n map((language) => {\n const languageCode = getLanguageCode(language);\n if (this.translations[language]) {\n return this.translations[language];\n }\n if (this.translations[languageCode]) {\n return this.translations[languageCode];\n }\n return this.translations[this.localizationService.defaultLanguage];\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n constructor(private readonly translations: TranslationObject) {}\n\n /**\n * Translates a key into its localized text, optionally replacing placeholders with dynamic values.\n * @param {string} key - The translation key to translate.\n * @param {Record<string, unknown>} [data={}] - An object mapping placeholder names to replacement values.\n * @returns {Observable<string>} An observable emitting the translated text, with placeholders replaced by provided values.\n */\n public translate(key: string, data: Record<string, unknown> = {}): Observable<string> {\n return this.activeTranslation$.pipe(\n map((translation) =>\n Object.entries(data).reduce((acc, [variableName, variable]) => {\n const variableRegex = RegExp(`{{\\\\s*${variableName}\\\\s*}}`, 'g');\n return acc.replace(variableRegex, variable as never);\n }, translation[key] ?? ''),\n ),\n );\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { TranslateService } from '../translate.service';\n\n@Pipe({\n standalone: true,\n name: 'odxTranslate',\n pure: true,\n})\nexport class TranslatePipe implements PipeTransform {\n private readonly translateService = inject(TranslateService);\n\n public transform(key: string, placeholder: Record<string, unknown> = {}): Observable<string> {\n return this.translateService.translate(key, placeholder);\n }\n}\n","import { TranslationObject } from './models';\nimport { TranslateService } from './translate.service';\n\n/**\n * Provides a configuration for Angular's dependency injection system to instantiate the `TranslateService`\n * with a specific set of translations. This function is useful for setting up the translation service\n * at the module level, ensuring that a single instance with a consistent set of translations is used\n * throughout the application.\n *\n * @param {TranslationObject} translations - An object containing key-value pairs where each key is a\n * translation key and the value is the translated string or an object containing translations for\n * nested keys. This object should include translations for all supported languages.\n * @returns {Provider} An Angular provider configuration object that can be used in the `providers` array\n * of an `@NgModule` or `@Component` decorator to supply the `TranslateService` with the provided translations.\n *\n * @example\n * ```ts\n * // Example usage in an Angular module\n * import { NgModule } from '@angular/core';\n * import { provideTranslations } from '@odx/angular/internal/translate';\n *\n * const appTranslations = {\n * en: { welcome: \"Welcome\" },\n * fr: { welcome: \"Bienvenue\" }\n * };\n *\n * @NgModule({\n * providers: [\n * provideTranslations(appTranslations)\n * ]\n * })\n * export class AppModule { }\n * ```\n */\nexport function provideTranslations(translations: TranslationObject) {\n return {\n provide: TranslateService,\n useFactory: () => new TranslateService(translations),\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAMA;;;;;;;;;;;;;;;;AAgBG;MACU,gBAAgB,CAAA;AAyB3B,IAAA,WAAA,CAA6B,YAA+B,EAAA;QAA/B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAmB;AAxB3C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAEnE;;;;;AAKG;QACa,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAChF,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,EACnD,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AAC/B,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;aACpC;AACD,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;AACnC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;aACxC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACrE,SAAC,CAAC,EACF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;KAE8D;AAEhE;;;;;AAKG;AACI,IAAA,SAAS,CAAC,GAAW,EAAE,IAAA,GAAgC,EAAE,EAAA;AAC9D,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACjC,GAAG,CAAC,CAAC,WAAW,KACd,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAI;YAC5D,MAAM,aAAa,GAAG,MAAM,CAAC,CAAA,MAAA,EAAS,YAAY,CAAQ,MAAA,CAAA,EAAE,GAAG,CAAC,CAAC;YACjE,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,QAAiB,CAAC,CAAC;SACtD,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAC3B,CACF,CAAC;KACH;AACF;;MCzDY,aAAa,CAAA;AAL1B,IAAA,WAAA,GAAA;AAMmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAK9D,KAAA;AAHQ,IAAA,SAAS,CAAC,GAAW,EAAE,WAAA,GAAuC,EAAE,EAAA;QACrE,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;KAC1D;+GALU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA,EAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA,CAAA;;;ACLD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACG,SAAU,mBAAmB,CAAC,YAA+B,EAAA;IACjE,OAAO;AACL,QAAA,OAAO,EAAE,gBAAgB;QACzB,UAAU,EAAE,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC;KACrD,CAAC;AACJ;;ACvCA;;AAEG;;;;"}
1
+ {"version":3,"file":"odx-angular-internal-translate.mjs","sources":["../../../../libs/angular/internal/translate/src/lib/translate.service.ts","../../../../libs/angular/internal/translate/src/lib/pipes/translate.pipe.ts","../../../../libs/angular/internal/translate/src/lib/translate.config.ts","../../../../libs/angular/internal/translate/src/odx-angular-internal-translate.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { LocalizationService } from '@odx/angular/localization';\nimport { getLanguageCode } from '@odx/angular/utils';\nimport { distinctUntilChanged, map, Observable, shareReplay, startWith } from 'rxjs';\nimport { TranslationObject } from './models';\n\n/**\n * Service for translating keys into localized text. It listens to changes in the active language\n * and provides translated strings based on the current language preference. The service uses\n * provided `TranslationObject` containing the translations for each supported language.\n *\n * @example\n * ```ts\n * // Using TranslateService in a component\n * class MyComponent {\n * constructor(private translateService: TranslateService) {\n * translateService.translate('greeting').subscribe(translatedText => {\n * console.log(translatedText); // Outputs \"Hello\" or \"Bonjour\" based on the active language\n * });\n * }\n * }\n * ```\n */\nexport class TranslateService {\n private readonly localizationService = inject(LocalizationService);\n\n /**\n * An observable that emits the current translation object based on the active language.\n * It ensures that translations are updated dynamically whenever the user's language preference changes.\n *\n * @emits {TranslationObject} activeTranslation$ - The translation object for the active language.\n */\n public readonly activeTranslation$ = this.localizationService.activeLanguage$.pipe(\n startWith(this.localizationService.defaultLanguage),\n distinctUntilChanged(),\n map((language) => {\n const languageCode = getLanguageCode(language);\n if (this.translations[language]) {\n return this.translations[language];\n }\n if (this.translations[languageCode]) {\n return this.translations[languageCode];\n }\n return this.translations[this.localizationService.defaultLanguage];\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n constructor(private readonly translations: TranslationObject) {}\n\n /**\n * Translates a key into its localized text, optionally replacing placeholders with dynamic values.\n * @param {string} key - The translation key to translate.\n * @param {Record<string, unknown>} [data={}] - An object mapping placeholder names to replacement values.\n * @returns {Observable<string>} An observable emitting the translated text, with placeholders replaced by provided values.\n */\n public translate(key: string, data: Record<string, unknown> = {}): Observable<string> {\n return this.activeTranslation$.pipe(\n map((translation) =>\n Object.entries(data).reduce((acc, [variableName, variable]) => {\n const variableRegex = RegExp(`{{\\\\s*${variableName}\\\\s*}}`, 'g');\n return acc.replace(variableRegex, variable as never);\n }, translation[key] ?? ''),\n ),\n );\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { TranslateService } from '../translate.service';\n\n@Pipe({\n standalone: true,\n name: 'odxTranslate',\n pure: true,\n})\nexport class TranslatePipe implements PipeTransform {\n private readonly translateService = inject(TranslateService);\n\n public transform(key: string, placeholder: Record<string, unknown> = {}): Observable<string> {\n return this.translateService.translate(key, placeholder);\n }\n}\n","import { TranslationObject } from './models';\nimport { TranslateService } from './translate.service';\n\n/**\n * Provides a configuration for Angular's dependency injection system to instantiate the `TranslateService`\n * with a specific set of translations. This function is useful for setting up the translation service\n * at the module level, ensuring that a single instance with a consistent set of translations is used\n * throughout the application.\n *\n * @param {TranslationObject} translations - An object containing key-value pairs where each key is a\n * translation key and the value is the translated string or an object containing translations for\n * nested keys. This object should include translations for all supported languages.\n * @returns {Provider} An Angular provider configuration object that can be used in the `providers` array\n * of an `@NgModule` or `@Component` decorator to supply the `TranslateService` with the provided translations.\n *\n * @example\n * ```ts\n * // Example usage in an Angular module\n * import { NgModule } from '@angular/core';\n * import { provideTranslations } from '@odx/angular/internal/translate';\n *\n * const appTranslations = {\n * en: { welcome: \"Welcome\" },\n * fr: { welcome: \"Bienvenue\" }\n * };\n *\n * @NgModule({\n * providers: [\n * provideTranslations(appTranslations)\n * ]\n * })\n * export class AppModule { }\n * ```\n */\nexport function provideTranslations(translations: TranslationObject) {\n return {\n provide: TranslateService,\n useFactory: () => new TranslateService(translations),\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAMA;;;;;;;;;;;;;;;;AAgBG;MACU,gBAAgB,CAAA;AAyB3B,IAAA,WAAA,CAA6B,YAA+B,EAAA;QAA/B,IAAA,CAAA,YAAY,GAAZ,YAAY;AAxBxB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAElE;;;;;AAKG;QACa,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAChF,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,EACnD,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AAC/B,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YACpC;AACA,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;AACnC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACxC;YACA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;AACpE,QAAA,CAAC,CAAC,EACF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C;IAE8D;AAE/D;;;;;AAKG;AACI,IAAA,SAAS,CAAC,GAAW,EAAE,IAAA,GAAgC,EAAE,EAAA;AAC9D,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CACjC,GAAG,CAAC,CAAC,WAAW,KACd,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAI;YAC5D,MAAM,aAAa,GAAG,MAAM,CAAC,CAAA,MAAA,EAAS,YAAY,CAAA,MAAA,CAAQ,EAAE,GAAG,CAAC;YAChE,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,QAAiB,CAAC;QACtD,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAC3B,CACF;IACH;AACD;;MCzDY,aAAa,CAAA;AAL1B,IAAA,WAAA,GAAA;AAMmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAK7D,IAAA;AAHQ,IAAA,SAAS,CAAC,GAAW,EAAE,WAAA,GAAuC,EAAE,EAAA;QACrE,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1D;+GALW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA;;;ACLD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACG,SAAU,mBAAmB,CAAC,YAA+B,EAAA;IACjE,OAAO;AACL,QAAA,OAAO,EAAE,gBAAgB;QACzB,UAAU,EAAE,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC;KACrD;AACH;;ACvCA;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-internal.mjs","sources":["../../../../libs/angular/internal/src/lib/helpers/camel-to-kebab-case.ts","../../../../libs/angular/internal/src/lib/helpers/decorator-property-name.ts","../../../../libs/angular/internal/src/lib/helpers/deepmerge.ts","../../../../libs/angular/internal/src/lib/helpers/fast-equals.ts","../../../../libs/angular/internal/src/lib/helpers/get-css-variables.ts","../../../../libs/angular/internal/src/lib/helpers/get-enum-values.ts","../../../../libs/angular/internal/src/lib/helpers/toggle-form-disabled-state.ts","../../../../libs/angular/internal/src/lib/decorators/css-component.ts","../../../../libs/angular/internal/src/lib/decorators/css-modifier.ts","../../../../libs/angular/internal/src/lib/logger.ts","../../../../libs/angular/internal/src/odx-angular-internal.ts"],"sourcesContent":["/** @internal */\n/* istanbul ignore next */\nexport function camelToKebabCase(value: string): string {\n if (value !== value.toLowerCase()) {\n return value.replace(/[A-Z]/g, (match, index) => {\n const char = match.toLowerCase();\n\n return index === 0 ? char : `-${char}`;\n });\n }\n return value;\n}\n","/**\n * @internal\n * Generates a unique property name for a decorator.\n *\n * @param {string} decoratorName - The name of the decorator.\n * @param {string} propertyName - The name of the property.\n * @returns {string} - The unique property name.\n */\nexport function decoratorPropertyName<D extends string, T extends string>(decoratorName: D, propertyName: T): `__ODX_${D}_${T}__` {\n return `__ODX_${decoratorName}_${propertyName}__`;\n}\n","import { deepmergeCustom } from 'deepmerge-ts';\n\nexport const deepmerge = deepmergeCustom({\n mergeArrays: false,\n mergeSets: false,\n});\n","import { deepEqual } from 'fast-equals';\n\nexport const fastDeepEqual = (obj1: unknown, obj2: unknown) => deepEqual(obj1, obj2);\n","interface CSSVariableDefinition {\n name: string;\n value: string;\n}\n\n/* istanbul ignore next */\nfunction isSameDomain({ href }: StyleSheet): boolean {\n return !href || href.startsWith(window.location.origin);\n}\n\n/** @internal */\n/* istanbul ignore next */\nexport function getCSSVariables(filter: RegExp, selector = ':root'): CSSVariableDefinition[] {\n const stylesheets = Array.from(document.styleSheets).filter(isSameDomain);\n\n return stylesheets.reduce<CSSVariableDefinition[]>((variables, { cssRules }) => {\n const rules = Array.from(cssRules).filter(({ type }) => type === CSSRule.STYLE_RULE) as CSSStyleRule[];\n for (const { style, selectorText } of rules) {\n for (const propName of Array.from(style)) {\n const name = propName.trim();\n if (!name.startsWith('--') || !filter.test(name) || (selector && selectorText !== selector)) continue;\n variables.push({ name, value: style.getPropertyValue(propName).trim() });\n }\n }\n return variables;\n }, []);\n}\n","/** @internal */\nexport function getEnumValues<TEnum, TKeys extends string>(e: { [key in TKeys]: TEnum }): TEnum[] {\n const keys = Object.keys(e) as TKeys[];\n return keys.filter((key) => e[key] !== undefined).map((key) => e[key]);\n}\n","import { FormGroup } from '@angular/forms';\n\n/** @internal */\nexport function toggleFormDisabledState(form: FormGroup) {\n form.disabled ? form.enable() : form.disable();\n console.log('form', form);\n}\n","import { ElementRef, Type } from '@angular/core';\nimport { decoratorPropertyName } from '../helpers';\n\nexport const CSS_COMPONENT_NAME = decoratorPropertyName('CSSComponent', 'name');\n\n/** @internal */\nexport interface CSSComponent {\n readonly element: ElementRef<HTMLElement>;\n}\n\n/** @internal */\n/* istanbul ignore next */\nexport function CSSComponent(name: string, prefix = 'odx') {\n return (target: Type<CSSComponent>) => {\n const cssClass = `${prefix}-${name}`;\n Object.defineProperty(target.prototype, CSS_COMPONENT_NAME, {\n value: cssClass,\n });\n\n (function (this: unknown, ngOnInit?: () => void) {\n target.prototype.ngOnInit = function (this: CSSComponent) {\n this.element.nativeElement.classList.add(cssClass);\n ngOnInit?.call(this);\n };\n })(target.prototype.ngOnInit);\n };\n}\n","import { camelToKebabCase, decoratorPropertyName } from '../helpers';\nimport { CSSComponent, CSS_COMPONENT_NAME } from './css-component';\n\n/** @internal */\ninterface CSSModifierOptions {\n withComponentPrefix?: boolean;\n withPrefix?: boolean;\n}\n\ntype CSSComponentInstance = CSSComponent & Record<string, unknown>;\n\n/** @internal */\n/* istanbul ignore next */\nexport function CSSModifier(options?: CSSModifierOptions) {\n return (target: CSSComponent, propertyKey: PropertyKey) => {\n const propertyKeyName = propertyKey.toString();\n const propertyKeyKebabCase = camelToKebabCase(propertyKeyName);\n const propertySymbol = decoratorPropertyName('CSSModifier', propertyKeyName);\n const propertyDefaultValue = decoratorPropertyName('CSSModifier', `${propertyKeyName}_default`);\n\n function createModifierClass(this: CSSComponentInstance, value: unknown) {\n if (typeof value === 'boolean' || (typeof value === 'string' && value.length > 0)) {\n let modifier = typeof value === 'boolean' ? propertyKeyKebabCase : value;\n if (options?.withPrefix) {\n modifier = `${propertyKeyName}-${modifier}`;\n }\n if (options?.withComponentPrefix ?? true) {\n return `${this[CSS_COMPONENT_NAME]}--${modifier}`;\n }\n return modifier;\n }\n return null;\n }\n\n function getter(this: CSSComponentInstance) {\n return this[propertySymbol];\n }\n\n function setter(this: CSSComponentInstance, value: unknown) {\n this[propertyDefaultValue] ??= value;\n const currentValue = this[propertySymbol] ?? null;\n const nextValue = value ?? this[propertyDefaultValue] ?? null;\n\n if (nextValue !== currentValue) {\n const currentModifierClass = createModifierClass.call(this, currentValue);\n if (currentModifierClass !== null) {\n this.element.nativeElement.classList.remove(currentModifierClass);\n }\n const newModifierClass = createModifierClass.call(this, nextValue);\n if (newModifierClass !== null && (typeof nextValue === 'boolean' ? nextValue : true)) {\n this.element.nativeElement.classList.add(newModifierClass);\n }\n }\n this[propertySymbol] = nextValue;\n }\n Object.defineProperty(target, propertyKey, {\n get: getter,\n set: setter,\n });\n };\n}\n","import { isDevMode } from '@angular/core';\n\nexport class Logger {\n private isEnabled: boolean;\n private readonly name: string;\n private readonly prefix: string;\n\n constructor(name: string) {\n this.name = name;\n this.prefix = `[${this.name}]`;\n this.isEnabled = isDevMode();\n }\n\n public log(...data: unknown[]): void {\n this.handle('log', data);\n }\n\n public info(...data: unknown[]): void {\n this.handle('info', data);\n }\n\n public warn(...data: unknown[]): void {\n this.handle('warn', data);\n }\n\n public error(...data: unknown[]): void {\n this.handle('error', data);\n }\n\n public debug(...data: unknown[]): void {\n this.handle('debug', data);\n }\n\n public group(name: string, groupHandler: (this: Logger, log: (...data: unknown[]) => void) => void, collapsed = true): void {\n if (!this.isEnabled) return;\n console[collapsed ? 'groupCollapsed' : 'group'](this.prefix, name);\n groupHandler.apply(this, [console.info]);\n console.groupEnd();\n }\n\n public enable(): void {\n this.isEnabled = true;\n }\n\n public disable(): void {\n this.isEnabled = false;\n }\n\n protected handle(method: 'debug' | 'log' | 'info' | 'warn' | 'error', data: unknown[]): void {\n if (!this.isEnabled) return;\n console[method](this.prefix, ...data);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-internal.mjs","sources":["../../../../libs/angular/internal/src/lib/helpers/camel-to-kebab-case.ts","../../../../libs/angular/internal/src/lib/helpers/decorator-property-name.ts","../../../../libs/angular/internal/src/lib/helpers/deepmerge.ts","../../../../libs/angular/internal/src/lib/helpers/fast-equals.ts","../../../../libs/angular/internal/src/lib/helpers/get-css-variables.ts","../../../../libs/angular/internal/src/lib/helpers/get-enum-values.ts","../../../../libs/angular/internal/src/lib/helpers/toggle-form-disabled-state.ts","../../../../libs/angular/internal/src/lib/decorators/css-component.ts","../../../../libs/angular/internal/src/lib/decorators/css-modifier.ts","../../../../libs/angular/internal/src/lib/logger.ts","../../../../libs/angular/internal/src/odx-angular-internal.ts"],"sourcesContent":["/** @internal */\n/* istanbul ignore next */\nexport function camelToKebabCase(value: string): string {\n if (value !== value.toLowerCase()) {\n return value.replace(/[A-Z]/g, (match, index) => {\n const char = match.toLowerCase();\n\n return index === 0 ? char : `-${char}`;\n });\n }\n return value;\n}\n","/**\n * @internal\n * Generates a unique property name for a decorator.\n *\n * @param {string} decoratorName - The name of the decorator.\n * @param {string} propertyName - The name of the property.\n * @returns {string} - The unique property name.\n */\nexport function decoratorPropertyName<D extends string, T extends string>(decoratorName: D, propertyName: T): `__ODX_${D}_${T}__` {\n return `__ODX_${decoratorName}_${propertyName}__`;\n}\n","import { deepmergeCustom } from 'deepmerge-ts';\n\nexport const deepmerge = deepmergeCustom({\n mergeArrays: false,\n mergeSets: false,\n});\n","import { deepEqual } from 'fast-equals';\n\nexport const fastDeepEqual = (obj1: unknown, obj2: unknown) => deepEqual(obj1, obj2);\n","interface CSSVariableDefinition {\n name: string;\n value: string;\n}\n\n/* istanbul ignore next */\nfunction isSameDomain({ href }: StyleSheet): boolean {\n return !href || href.startsWith(window.location.origin);\n}\n\n/** @internal */\n/* istanbul ignore next */\nexport function getCSSVariables(filter: RegExp, selector = ':root'): CSSVariableDefinition[] {\n const stylesheets = Array.from(document.styleSheets).filter(isSameDomain);\n\n return stylesheets.reduce<CSSVariableDefinition[]>((variables, { cssRules }) => {\n const rules = Array.from(cssRules).filter(({ type }) => type === CSSRule.STYLE_RULE) as CSSStyleRule[];\n for (const { style, selectorText } of rules) {\n for (const propName of Array.from(style)) {\n const name = propName.trim();\n if (!name.startsWith('--') || !filter.test(name) || (selector && selectorText !== selector)) continue;\n variables.push({ name, value: style.getPropertyValue(propName).trim() });\n }\n }\n return variables;\n }, []);\n}\n","/** @internal */\nexport function getEnumValues<TEnum, TKeys extends string>(e: { [key in TKeys]: TEnum }): TEnum[] {\n const keys = Object.keys(e) as TKeys[];\n return keys.filter((key) => e[key] !== undefined).map((key) => e[key]);\n}\n","import { FormGroup } from '@angular/forms';\n\n/** @internal */\nexport function toggleFormDisabledState(form: FormGroup) {\n form.disabled ? form.enable() : form.disable();\n console.log('form', form);\n}\n","import { ElementRef, Type } from '@angular/core';\nimport { decoratorPropertyName } from '../helpers';\n\nexport const CSS_COMPONENT_NAME = decoratorPropertyName('CSSComponent', 'name');\n\n/** @internal */\nexport interface CSSComponent {\n readonly element: ElementRef<HTMLElement>;\n}\n\n/** @internal */\n/* istanbul ignore next */\nexport function CSSComponent(name: string, prefix = 'odx') {\n return (target: Type<CSSComponent>) => {\n const cssClass = `${prefix}-${name}`;\n Object.defineProperty(target.prototype, CSS_COMPONENT_NAME, {\n value: cssClass,\n });\n\n (function (this: unknown, ngOnInit?: () => void) {\n target.prototype.ngOnInit = function (this: CSSComponent) {\n this.element.nativeElement.classList.add(cssClass);\n ngOnInit?.call(this);\n };\n })(target.prototype.ngOnInit);\n };\n}\n","import { camelToKebabCase, decoratorPropertyName } from '../helpers';\nimport { CSSComponent, CSS_COMPONENT_NAME } from './css-component';\n\n/** @internal */\ninterface CSSModifierOptions {\n withComponentPrefix?: boolean;\n withPrefix?: boolean;\n}\n\ntype CSSComponentInstance = CSSComponent & Record<string, unknown>;\n\n/** @internal */\n/* istanbul ignore next */\nexport function CSSModifier(options?: CSSModifierOptions) {\n return (target: CSSComponent, propertyKey: PropertyKey) => {\n const propertyKeyName = propertyKey.toString();\n const propertyKeyKebabCase = camelToKebabCase(propertyKeyName);\n const propertySymbol = decoratorPropertyName('CSSModifier', propertyKeyName);\n const propertyDefaultValue = decoratorPropertyName('CSSModifier', `${propertyKeyName}_default`);\n\n function createModifierClass(this: CSSComponentInstance, value: unknown) {\n if (typeof value === 'boolean' || (typeof value === 'string' && value.length > 0)) {\n let modifier = typeof value === 'boolean' ? propertyKeyKebabCase : value;\n if (options?.withPrefix) {\n modifier = `${propertyKeyName}-${modifier}`;\n }\n if (options?.withComponentPrefix ?? true) {\n return `${this[CSS_COMPONENT_NAME]}--${modifier}`;\n }\n return modifier;\n }\n return null;\n }\n\n function getter(this: CSSComponentInstance) {\n return this[propertySymbol];\n }\n\n function setter(this: CSSComponentInstance, value: unknown) {\n this[propertyDefaultValue] ??= value;\n const currentValue = this[propertySymbol] ?? null;\n const nextValue = value ?? this[propertyDefaultValue] ?? null;\n\n if (nextValue !== currentValue) {\n const currentModifierClass = createModifierClass.call(this, currentValue);\n if (currentModifierClass !== null) {\n this.element.nativeElement.classList.remove(currentModifierClass);\n }\n const newModifierClass = createModifierClass.call(this, nextValue);\n if (newModifierClass !== null && (typeof nextValue === 'boolean' ? nextValue : true)) {\n this.element.nativeElement.classList.add(newModifierClass);\n }\n }\n this[propertySymbol] = nextValue;\n }\n Object.defineProperty(target, propertyKey, {\n get: getter,\n set: setter,\n });\n };\n}\n","import { isDevMode } from '@angular/core';\n\nexport class Logger {\n private isEnabled: boolean;\n private readonly name: string;\n private readonly prefix: string;\n\n constructor(name: string) {\n this.name = name;\n this.prefix = `[${this.name}]`;\n this.isEnabled = isDevMode();\n }\n\n public log(...data: unknown[]): void {\n this.handle('log', data);\n }\n\n public info(...data: unknown[]): void {\n this.handle('info', data);\n }\n\n public warn(...data: unknown[]): void {\n this.handle('warn', data);\n }\n\n public error(...data: unknown[]): void {\n this.handle('error', data);\n }\n\n public debug(...data: unknown[]): void {\n this.handle('debug', data);\n }\n\n public group(name: string, groupHandler: (this: Logger, log: (...data: unknown[]) => void) => void, collapsed = true): void {\n if (!this.isEnabled) return;\n console[collapsed ? 'groupCollapsed' : 'group'](this.prefix, name);\n groupHandler.apply(this, [console.info]);\n console.groupEnd();\n }\n\n public enable(): void {\n this.isEnabled = true;\n }\n\n public disable(): void {\n this.isEnabled = false;\n }\n\n protected handle(method: 'debug' | 'log' | 'info' | 'warn' | 'error', data: unknown[]): void {\n if (!this.isEnabled) return;\n console[method](this.prefix, ...data);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}