@odx/angular 12.5.0 → 12.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/components/bar/lib/directives/bar-button.directive.d.ts +2 -1
  3. package/components/table/lib/components/header-title/header-title.component.d.ts +2 -1
  4. package/components/table/lib/models/column-width.d.ts +5 -0
  5. package/components/table/lib/models/header-cell.d.ts +2 -0
  6. package/components/table/lib/models/index.d.ts +1 -0
  7. package/components/table/lib/table.component.d.ts +12 -8
  8. package/esm2022/components/bar/lib/directives/bar-button.directive.mjs +5 -7
  9. package/esm2022/components/table/lib/components/header-title/header-title.component.mjs +15 -9
  10. package/esm2022/components/table/lib/models/column-width.mjs +2 -0
  11. package/esm2022/components/table/lib/models/header-cell.mjs +1 -1
  12. package/esm2022/components/table/lib/models/index.mjs +2 -1
  13. package/esm2022/components/table/lib/table.component.mjs +29 -25
  14. package/fesm2022/odx-angular-animations.mjs.map +1 -1
  15. package/fesm2022/odx-angular-breakpoints.mjs +1 -1
  16. package/fesm2022/odx-angular-breakpoints.mjs.map +1 -1
  17. package/fesm2022/odx-angular-cdk-a11y.mjs +1 -1
  18. package/fesm2022/odx-angular-cdk-a11y.mjs.map +1 -1
  19. package/fesm2022/odx-angular-cdk-active-indicator.mjs +1 -1
  20. package/fesm2022/odx-angular-cdk-active-indicator.mjs.map +1 -1
  21. package/fesm2022/odx-angular-cdk-autocomplete-control.mjs +1 -1
  22. package/fesm2022/odx-angular-cdk-autocomplete-control.mjs.map +1 -1
  23. package/fesm2022/odx-angular-cdk-checkbox-control.mjs +1 -1
  24. package/fesm2022/odx-angular-cdk-checkbox-control.mjs.map +1 -1
  25. package/fesm2022/odx-angular-cdk-connected-overlay.mjs +1 -1
  26. package/fesm2022/odx-angular-cdk-connected-overlay.mjs.map +1 -1
  27. package/fesm2022/odx-angular-cdk-custom-form-control.mjs +1 -1
  28. package/fesm2022/odx-angular-cdk-custom-form-control.mjs.map +1 -1
  29. package/fesm2022/odx-angular-cdk-dynamic-view.mjs +1 -1
  30. package/fesm2022/odx-angular-cdk-dynamic-view.mjs.map +1 -1
  31. package/fesm2022/odx-angular-cdk-event-plugins.mjs.map +1 -1
  32. package/fesm2022/odx-angular-cdk-expandable.mjs +1 -1
  33. package/fesm2022/odx-angular-cdk-expandable.mjs.map +1 -1
  34. package/fesm2022/odx-angular-cdk-option-control.mjs +1 -1
  35. package/fesm2022/odx-angular-cdk-option-control.mjs.map +1 -1
  36. package/fesm2022/odx-angular-cdk-radio-group-control.mjs +1 -1
  37. package/fesm2022/odx-angular-cdk-radio-group-control.mjs.map +1 -1
  38. package/fesm2022/odx-angular-components-accordion.mjs +1 -1
  39. package/fesm2022/odx-angular-components-accordion.mjs.map +1 -1
  40. package/fesm2022/odx-angular-components-action-group.mjs +1 -1
  41. package/fesm2022/odx-angular-components-action-group.mjs.map +1 -1
  42. package/fesm2022/odx-angular-components-area-header.mjs +1 -1
  43. package/fesm2022/odx-angular-components-area-header.mjs.map +1 -1
  44. package/fesm2022/odx-angular-components-autocomplete.mjs +1 -1
  45. package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
  46. package/fesm2022/odx-angular-components-avatar.mjs +1 -1
  47. package/fesm2022/odx-angular-components-avatar.mjs.map +1 -1
  48. package/fesm2022/odx-angular-components-badge.mjs +1 -1
  49. package/fesm2022/odx-angular-components-badge.mjs.map +1 -1
  50. package/fesm2022/odx-angular-components-bar.mjs +5 -7
  51. package/fesm2022/odx-angular-components-bar.mjs.map +1 -1
  52. package/fesm2022/odx-angular-components-breadcrumbs.mjs +1 -1
  53. package/fesm2022/odx-angular-components-breadcrumbs.mjs.map +1 -1
  54. package/fesm2022/odx-angular-components-button-group.mjs +1 -1
  55. package/fesm2022/odx-angular-components-button-group.mjs.map +1 -1
  56. package/fesm2022/odx-angular-components-button.mjs +1 -1
  57. package/fesm2022/odx-angular-components-button.mjs.map +1 -1
  58. package/fesm2022/odx-angular-components-calendar.mjs +2 -2
  59. package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
  60. package/fesm2022/odx-angular-components-card.mjs +2 -2
  61. package/fesm2022/odx-angular-components-card.mjs.map +1 -1
  62. package/fesm2022/odx-angular-components-checkbox.mjs +1 -1
  63. package/fesm2022/odx-angular-components-checkbox.mjs.map +1 -1
  64. package/fesm2022/odx-angular-components-chip.mjs +1 -1
  65. package/fesm2022/odx-angular-components-chip.mjs.map +1 -1
  66. package/fesm2022/odx-angular-components-circular-progress.mjs +1 -1
  67. package/fesm2022/odx-angular-components-circular-progress.mjs.map +1 -1
  68. package/fesm2022/odx-angular-components-content-box.mjs +1 -1
  69. package/fesm2022/odx-angular-components-content-box.mjs.map +1 -1
  70. package/fesm2022/odx-angular-components-datepicker.mjs +2 -2
  71. package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
  72. package/fesm2022/odx-angular-components-daterangepicker.mjs +3 -3
  73. package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
  74. package/fesm2022/odx-angular-components-dropdown.mjs +1 -1
  75. package/fesm2022/odx-angular-components-dropdown.mjs.map +1 -1
  76. package/fesm2022/odx-angular-components-error-page.mjs +1 -1
  77. package/fesm2022/odx-angular-components-error-page.mjs.map +1 -1
  78. package/fesm2022/odx-angular-components-footer.mjs +2 -2
  79. package/fesm2022/odx-angular-components-footer.mjs.map +1 -1
  80. package/fesm2022/odx-angular-components-form-field.mjs +1 -1
  81. package/fesm2022/odx-angular-components-form-field.mjs.map +1 -1
  82. package/fesm2022/odx-angular-components-header-navigation.mjs +1 -1
  83. package/fesm2022/odx-angular-components-header-navigation.mjs.map +1 -1
  84. package/fesm2022/odx-angular-components-header.mjs +1 -1
  85. package/fesm2022/odx-angular-components-header.mjs.map +1 -1
  86. package/fesm2022/odx-angular-components-icon.mjs +1 -1
  87. package/fesm2022/odx-angular-components-icon.mjs.map +1 -1
  88. package/fesm2022/odx-angular-components-inline-message.mjs +1 -1
  89. package/fesm2022/odx-angular-components-inline-message.mjs.map +1 -1
  90. package/fesm2022/odx-angular-components-link.mjs.map +1 -1
  91. package/fesm2022/odx-angular-components-list.mjs +2 -2
  92. package/fesm2022/odx-angular-components-list.mjs.map +1 -1
  93. package/fesm2022/odx-angular-components-loading-spinner.mjs +1 -1
  94. package/fesm2022/odx-angular-components-loading-spinner.mjs.map +1 -1
  95. package/fesm2022/odx-angular-components-logo.mjs +1 -1
  96. package/fesm2022/odx-angular-components-logo.mjs.map +1 -1
  97. package/fesm2022/odx-angular-components-main-menu.mjs +2 -2
  98. package/fesm2022/odx-angular-components-main-menu.mjs.map +1 -1
  99. package/fesm2022/odx-angular-components-mainfilter-group.mjs +1 -1
  100. package/fesm2022/odx-angular-components-mainfilter-group.mjs.map +1 -1
  101. package/fesm2022/odx-angular-components-menu.mjs +1 -1
  102. package/fesm2022/odx-angular-components-menu.mjs.map +1 -1
  103. package/fesm2022/odx-angular-components-modal.mjs +1 -1
  104. package/fesm2022/odx-angular-components-modal.mjs.map +1 -1
  105. package/fesm2022/odx-angular-components-navigation-back.mjs +1 -1
  106. package/fesm2022/odx-angular-components-navigation-back.mjs.map +1 -1
  107. package/fesm2022/odx-angular-components-notification-testing.mjs.map +1 -1
  108. package/fesm2022/odx-angular-components-notification.mjs +3 -3
  109. package/fesm2022/odx-angular-components-notification.mjs.map +1 -1
  110. package/fesm2022/odx-angular-components-paginator.mjs +1 -1
  111. package/fesm2022/odx-angular-components-paginator.mjs.map +1 -1
  112. package/fesm2022/odx-angular-components-progress.mjs +1 -1
  113. package/fesm2022/odx-angular-components-progress.mjs.map +1 -1
  114. package/fesm2022/odx-angular-components-radio-group.mjs +1 -1
  115. package/fesm2022/odx-angular-components-radio-group.mjs.map +1 -1
  116. package/fesm2022/odx-angular-components-rail-navigation.mjs +1 -1
  117. package/fesm2022/odx-angular-components-rail-navigation.mjs.map +1 -1
  118. package/fesm2022/odx-angular-components-rich-list.mjs +1 -1
  119. package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
  120. package/fesm2022/odx-angular-components-search-bar.mjs.map +1 -1
  121. package/fesm2022/odx-angular-components-select.mjs +1 -1
  122. package/fesm2022/odx-angular-components-select.mjs.map +1 -1
  123. package/fesm2022/odx-angular-components-slider.mjs +1 -1
  124. package/fesm2022/odx-angular-components-slider.mjs.map +1 -1
  125. package/fesm2022/odx-angular-components-spinbox.mjs +1 -1
  126. package/fesm2022/odx-angular-components-spinbox.mjs.map +1 -1
  127. package/fesm2022/odx-angular-components-switch.mjs +1 -1
  128. package/fesm2022/odx-angular-components-switch.mjs.map +1 -1
  129. package/fesm2022/odx-angular-components-tab-bar.mjs +1 -1
  130. package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
  131. package/fesm2022/odx-angular-components-table.mjs +40 -31
  132. package/fesm2022/odx-angular-components-table.mjs.map +1 -1
  133. package/fesm2022/odx-angular-components-timepicker.mjs +2 -2
  134. package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
  135. package/fesm2022/odx-angular-components-toast.mjs +1 -1
  136. package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
  137. package/fesm2022/odx-angular-components-toggle-button-group.mjs +1 -1
  138. package/fesm2022/odx-angular-components-toggle-button-group.mjs.map +1 -1
  139. package/fesm2022/odx-angular-components-tooltip.mjs +1 -1
  140. package/fesm2022/odx-angular-components-tooltip.mjs.map +1 -1
  141. package/fesm2022/odx-angular-components-wizard.mjs +1 -1
  142. package/fesm2022/odx-angular-components-wizard.mjs.map +1 -1
  143. package/fesm2022/odx-angular-internal-translate.mjs.map +1 -1
  144. package/fesm2022/odx-angular-internal.mjs.map +1 -1
  145. package/fesm2022/odx-angular-localization.mjs.map +1 -1
  146. package/fesm2022/odx-angular-rxjs.mjs.map +1 -1
  147. package/fesm2022/odx-angular-sdk.mjs.map +1 -1
  148. package/fesm2022/odx-angular-theming.mjs.map +1 -1
  149. package/fesm2022/odx-angular-utils.mjs.map +1 -1
  150. package/fesm2022/odx-angular.mjs +2 -2
  151. package/fesm2022/odx-angular.mjs.map +1 -1
  152. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @odx/angular
2
2
 
3
+ ## 12.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - e15932c: Fix: console error when empty data. Feat: enhance table component with column width support and no data handling.
8
+
9
+ ## 12.6.0
10
+
11
+ ### Minor Changes
12
+
13
+ - c08ddaa: Fixed bar button disabled state
14
+
3
15
  ## 12.5.0
4
16
 
5
17
  ### Minor Changes
@@ -1,6 +1,7 @@
1
1
  import { DisabledController } from '@odx/angular';
2
2
  import { BarButtonVariant } from '../models/bar-button-variant';
3
3
  import * as i0 from "@angular/core";
4
+ import * as i1 from "@odx/angular";
4
5
  /**
5
6
  * Represents a directive for a bar button.
6
7
  */
@@ -15,5 +16,5 @@ export declare class BarButtonDirective {
15
16
  */
16
17
  variant?: BarButtonVariant | null;
17
18
  static ɵfac: i0.ɵɵFactoryDeclaration<BarButtonDirective, never>;
18
- static ɵdir: i0.ɵɵDirectiveDeclaration<BarButtonDirective, "button[odxBarButton]", never, { "variant": { "alias": "variant"; "required": false; }; }, {}, never, never, true, never>;
19
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BarButtonDirective, "button[odxBarButton]", never, { "variant": { "alias": "variant"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.WithDisabledState; inputs: {}; outputs: {}; }]>;
19
20
  }
@@ -1,6 +1,6 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { FormControl, FormGroup } from '@angular/forms';
3
- import { SortStatus, TableHeaderCell } from '../../models';
3
+ import { ColumnWidth, SortStatus, TableHeaderCell } from '../../models';
4
4
  import { TableSortVariant } from '../../models/sort-variant';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
@@ -66,6 +66,7 @@ export declare class HeaderTitleComponent implements OnInit {
66
66
  ngOnInit(): void;
67
67
  private checkBoxListener;
68
68
  get indeterminate(): boolean;
69
+ protected get columnWidth(): ColumnWidth;
69
70
  static ɵfac: i0.ɵɵFactoryDeclaration<HeaderTitleComponent, never>;
70
71
  static ɵcmp: i0.ɵɵComponentDeclaration<HeaderTitleComponent, "th[odxHeaderTitle]", never, { "item": { "alias": "item"; "required": false; }; }, {}, never, ["odx-form-field"], true, never>;
71
72
  }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Column width type for html table th or td elements.
3
+ * @example '100px', '50%', 'auto'
4
+ */
5
+ export type ColumnWidth = `${number}px` | `${number}%` | 'auto';
@@ -1,7 +1,9 @@
1
+ import { ColumnWidth } from './column-width';
1
2
  export interface TableHeaderCell {
2
3
  title?: string;
3
4
  name: string;
4
5
  filter?: boolean;
5
6
  sortable?: boolean;
6
7
  check?: boolean;
8
+ width?: ColumnWidth;
7
9
  }
@@ -1,4 +1,5 @@
1
1
  export * from './body-cell';
2
+ export * from './column-width';
2
3
  export * from './header-cell';
3
4
  export * from './sort-status';
4
5
  export * from './sort-variant';
@@ -15,6 +15,7 @@ import * as i0 from "@angular/core";
15
15
  */
16
16
  export declare class TableComponent<T> implements OnInit {
17
17
  private readonly takeUntilDestroyed;
18
+ protected headerColumns: import("@angular/core").Signal<TableHeaderCell[]>;
18
19
  readonly element: import("@angular/core").ElementRef<HTMLElement>;
19
20
  /**
20
21
  * Specifies the table variant for CSS styling.
@@ -25,17 +26,21 @@ export declare class TableComponent<T> implements OnInit {
25
26
  /**
26
27
  * Data array of type T that the table displays.
27
28
  *
28
- * @type {T[]}
29
- * @default []
29
+ * @type {Signal<T[]>}
30
30
  */
31
- data: T[];
31
+ data: import("@angular/core").InputSignal<T[]>;
32
+ /**
33
+ * Message to display when no data is available.
34
+ *
35
+ * @type {Signal<string>}
36
+ */
37
+ noDataMessage: import("@angular/core").InputSignal<string>;
32
38
  /**
33
39
  * Configuration for table header data which controls sorting, filtering, and additional metadata.
34
40
  *
35
- * @type {TableHeaderCell[]}
36
- * @default []
41
+ * @type {Signal<TableHeaderCell[]>}
37
42
  */
38
- headerData: TableHeaderCell[];
43
+ headerData: import("@angular/core").InputSignal<TableHeaderCell[]>;
39
44
  /**
40
45
  * FormGroup to handle the dynamic filtering controls, each tied to a header cell that has filtering enabled.
41
46
  */
@@ -75,7 +80,6 @@ export declare class TableComponent<T> implements OnInit {
75
80
  */
76
81
  clearSort(): void;
77
82
  private formListener;
78
- private setHeaderData;
79
83
  static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
80
- static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "table[odxTable]", never, { "variant": { "alias": "variant"; "required": false; }; "data": { "alias": "data"; "required": false; }; "headerData": { "alias": "headerData"; "required": false; }; }, { "sorted": "sorted"; "filtered": "filtered"; "checked": "checked"; }, never, ["tr"], true, never>;
84
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "table[odxTable]", never, { "variant": { "alias": "variant"; "required": false; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "noDataMessage": { "alias": "noDataMessage"; "required": false; "isSignal": true; }; "headerData": { "alias": "headerData"; "required": false; "isSignal": true; }; }, { "sorted": "sorted"; "filtered": "filtered"; "checked": "checked"; }, never, ["tr"], true, never>;
81
85
  }
@@ -1,10 +1,11 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Directive, Input } from '@angular/core';
3
- import { DisabledController } from '@odx/angular';
3
+ import { DisabledController, WithDisabledState } from '@odx/angular';
4
4
  import { CSSComponent, CSSModifier } from '@odx/angular/internal';
5
5
  import { injectElement } from '@odx/angular/utils';
6
6
  import { BarButtonVariant } from '../models/bar-button-variant';
7
7
  import * as i0 from "@angular/core";
8
+ import * as i1 from "@odx/angular";
8
9
  /**
9
10
  * Represents a directive for a bar button.
10
11
  */
@@ -21,7 +22,7 @@ let BarButtonDirective = class BarButtonDirective {
21
22
  this.variant = BarButtonVariant.DEFAULT;
22
23
  }
23
24
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
24
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: BarButtonDirective, isStandalone: true, selector: "button[odxBarButton]", inputs: { variant: "variant" }, host: { properties: { "class.is-disabled": "disabledController?.disabled" } }, providers: [DisabledController.connect()], ngImport: i0 }); }
25
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: BarButtonDirective, isStandalone: true, selector: "button[odxBarButton]", inputs: { variant: "variant" }, hostDirectives: [{ directive: i1.WithDisabledState }], ngImport: i0 }); }
25
26
  };
26
27
  __decorate([
27
28
  CSSModifier(),
@@ -36,12 +37,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36
37
  args: [{
37
38
  selector: 'button[odxBarButton]',
38
39
  standalone: true,
39
- providers: [DisabledController.connect()],
40
- host: {
41
- '[class.is-disabled]': 'disabledController?.disabled',
42
- },
40
+ hostDirectives: [WithDisabledState],
43
41
  }]
44
42
  }], propDecorators: { variant: [{
45
43
  type: Input
46
44
  }] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWJ1dHRvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9iYXIvc3JjL2xpYi9kaXJlY3RpdmVzL2Jhci1idXR0b24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBRWhFOztHQUVHO0FBVUksSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7SUFBeEI7UUFDYyx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwRCxZQUFPLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFFMUM7Ozs7O1dBS0c7UUFHSSxZQUFPLEdBQTZCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztLQUNyRTsrR0FiWSxrQkFBa0I7bUdBQWxCLGtCQUFrQixrTEFMbEIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7QUFpQmxDO0lBRk4sV0FBVyxFQUFFOzttREFFc0Q7QUFaekQsa0JBQWtCO0lBVDlCLFlBQVksQ0FBQyxZQUFZLENBQUM7R0FTZCxrQkFBa0IsQ0FhOUI7OzRGQWJZLGtCQUFrQjtrQkFSOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3pDLElBQUksRUFBRTt3QkFDSixxQkFBcUIsRUFBRSw4QkFBOEI7cUJBQ3REO2lCQUNGOzhCQWFRLE9BQU87c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpc2FibGVkQ29udHJvbGxlciB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQsIENTU01vZGlmaWVyIH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgQmFyQnV0dG9uVmFyaWFudCB9IGZyb20gJy4uL21vZGVscy9iYXItYnV0dG9uLXZhcmlhbnQnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBkaXJlY3RpdmUgZm9yIGEgYmFyIGJ1dHRvbi5cbiAqL1xuQENTU0NvbXBvbmVudCgnYmFyLWJ1dHRvbicpXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdidXR0b25bb2R4QmFyQnV0dG9uXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW0Rpc2FibGVkQ29udHJvbGxlci5jb25uZWN0KCldLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5pcy1kaXNhYmxlZF0nOiAnZGlzYWJsZWRDb250cm9sbGVyPy5kaXNhYmxlZCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEJhckJ1dHRvbkRpcmVjdGl2ZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBkaXNhYmxlZENvbnRyb2xsZXIgPSBEaXNhYmxlZENvbnRyb2xsZXIuaW5qZWN0KCk7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCBvZiB0aGUgYmFyIGJ1dHRvbi5cbiAgICpcbiAgICogQHR5cGUge0JhckJ1dHRvblZhcmlhbnR9XG4gICAqIEBkZWZhdWx0IEJhckJ1dHRvblZhcmlhbnQuREVGQVVMVFxuICAgKi9cbiAgQENTU01vZGlmaWVyKClcbiAgQElucHV0KClcbiAgcHVibGljIHZhcmlhbnQ/OiBCYXJCdXR0b25WYXJpYW50IHwgbnVsbCA9IEJhckJ1dHRvblZhcmlhbnQuREVGQVVMVDtcbn1cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWJ1dHRvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9iYXIvc3JjL2xpYi9kaXJlY3RpdmVzL2Jhci1idXR0b24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQUVoRTs7R0FFRztBQU9JLElBQU0sa0JBQWtCLEdBQXhCLE1BQU0sa0JBQWtCO0lBQXhCO1FBQ2MsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEQsWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBRTFDOzs7OztXQUtHO1FBR0ksWUFBTyxHQUE2QixnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7S0FDckU7K0dBYlksa0JBQWtCO21HQUFsQixrQkFBa0I7O0FBWXRCO0lBRk4sV0FBVyxFQUFFOzttREFFc0Q7QUFaekQsa0JBQWtCO0lBTjlCLFlBQVksQ0FBQyxZQUFZLENBQUM7R0FNZCxrQkFBa0IsQ0FhOUI7OzRGQWJZLGtCQUFrQjtrQkFMOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsY0FBYyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQ3BDOzhCQWFRLE9BQU87c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpc2FibGVkQ29udHJvbGxlciwgV2l0aERpc2FibGVkU3RhdGUgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50LCBDU1NNb2RpZmllciB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBpbmplY3RFbGVtZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IEJhckJ1dHRvblZhcmlhbnQgfSBmcm9tICcuLi9tb2RlbHMvYmFyLWJ1dHRvbi12YXJpYW50JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGlyZWN0aXZlIGZvciBhIGJhciBidXR0b24uXG4gKi9cbkBDU1NDb21wb25lbnQoJ2Jhci1idXR0b24nKVxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnYnV0dG9uW29keEJhckJ1dHRvbl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0RGlyZWN0aXZlczogW1dpdGhEaXNhYmxlZFN0YXRlXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFyQnV0dG9uRGlyZWN0aXZlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpc2FibGVkQ29udHJvbGxlciA9IERpc2FibGVkQ29udHJvbGxlci5pbmplY3QoKTtcbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IG9mIHRoZSBiYXIgYnV0dG9uLlxuICAgKlxuICAgKiBAdHlwZSB7QmFyQnV0dG9uVmFyaWFudH1cbiAgICogQGRlZmF1bHQgQmFyQnV0dG9uVmFyaWFudC5ERUZBVUxUXG4gICAqL1xuICBAQ1NTTW9kaWZpZXIoKVxuICBASW5wdXQoKVxuICBwdWJsaWMgdmFyaWFudD86IEJhckJ1dHRvblZhcmlhbnQgfCBudWxsID0gQmFyQnV0dG9uVmFyaWFudC5ERUZBVUxUO1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, ViewEncapsulation } from '@angular/core';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, inject, Input, ViewEncapsulation } from '@angular/core';
3
3
  import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
4
4
  import { CheckboxComponent } from '@odx/angular/components/checkbox';
5
5
  import { untilDestroyed } from '@odx/angular/utils';
@@ -74,7 +74,7 @@ export class HeaderTitleComponent {
74
74
  * @returns {number}
75
75
  */
76
76
  get selected() {
77
- return this.table.data.filter((d) => d[this.item.name]).length;
77
+ return this.table.data().filter((d) => d[this.item.name]).length;
78
78
  }
79
79
  /**
80
80
  * Updates the component view, usually after a state change.
@@ -88,8 +88,8 @@ export class HeaderTitleComponent {
88
88
  * @returns {boolean}
89
89
  */
90
90
  get checked() {
91
- const column = this.table.headerData.find((h) => h.check)?.name;
92
- return this.table.data.every((item) => column && item[column]);
91
+ const column = this.item.check && this.item.name;
92
+ return this.table.data().every((item) => column && item[column]);
93
93
  }
94
94
  ngOnInit() {
95
95
  this.checkBoxListener();
@@ -103,18 +103,24 @@ export class HeaderTitleComponent {
103
103
  .subscribe();
104
104
  }
105
105
  get indeterminate() {
106
- const column = this.table.headerData.find((h) => h.check)?.name;
107
- const { length } = this.table.data;
108
- const unchecked = length - this.table.data.filter((item) => column && item[column]).length;
106
+ const column = this.item.check && this.item.name;
107
+ const { length } = this.table.data();
108
+ const unchecked = length - this.table.data().filter((item) => column && item[column]).length;
109
109
  return unchecked > 0 && unchecked < length;
110
110
  }
111
+ get columnWidth() {
112
+ return this.item.width ?? 'auto';
113
+ }
111
114
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
112
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: HeaderTitleComponent, isStandalone: true, selector: "th[odxHeaderTitle]", inputs: { item: "item" }, ngImport: i0, template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CheckboxComponent, selector: "odx-checkbox", inputs: ["indeterminate"], outputs: ["indeterminateChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
115
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: HeaderTitleComponent, isStandalone: true, selector: "th[odxHeaderTitle]", inputs: { item: "item" }, host: { properties: { "style.width": "this.columnWidth" } }, ngImport: i0, template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CheckboxComponent, selector: "odx-checkbox", inputs: ["indeterminate"], outputs: ["indeterminateChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
113
116
  }
114
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderTitleComponent, decorators: [{
115
118
  type: Component,
116
119
  args: [{ selector: 'th[odxHeaderTitle]', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, CheckboxComponent, ReactiveFormsModule], template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n" }]
117
120
  }], propDecorators: { item: [{
118
121
  type: Input
122
+ }], columnWidth: [{
123
+ type: HostBinding,
124
+ args: ['style.width']
119
125
  }] } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXRpdGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUUzQzs7OztHQUlHO0FBVUgsTUFBTSxPQUFPLG9CQUFvQjtJQVRqQztRQVVtQixVQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyx1QkFBa0IsR0FB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QW1CLENBQUM7OEJBY3hELElBQUk7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvY2hlY2tib3gnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTb3J0U3RhdHVzLCBUYWJsZUJvZHlDZWxsLCBUYWJsZUhlYWRlckNlbGwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVTb3J0VmFyaWFudCB9IGZyb20gJy4uLy4uL21vZGVscy9zb3J0LXZhcmlhbnQnO1xuaW1wb3J0IHsgVEFCTEUgfSBmcm9tICcuLi8uLi90YWJsZS5jb25maWcnO1xuXG4vKipcbiAqIEhlYWRlclRpdGxlQ29tcG9uZW50IHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IGZvciBhIHRhYmxlIGhlYWRlciBjZWxsLCBpbmNsdWRpbmcgc29ydGluZyBhbmQgY2hlY2tib3hcbiAqIG9wZXJhdGlvbnMgaWYgYXBwbGljYWJsZS4gSXQgaGFuZGxlcyBjaGFuZ2VzIGluIHNvcnQgc3RhdGUgYW5kIGVtaXRzIHJlbGV2YW50IGV2ZW50cyB0byB0aGUgdGFibGUgY29tcG9uZW50XG4gKiB0byBtYW5hZ2Ugc29ydGluZyBhbmQgc2VsZWN0aW9uIHN0YXRlIGFjcm9zcyB0aGUgdGFibGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ3RoW29keEhlYWRlclRpdGxlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXItdGl0bGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2hlY2tib3hDb21wb25lbnQsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJUaXRsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGUgPSBpbmplY3QoVEFCTEUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHJpdmF0ZSBzb3J0U3RhdHVzOiBTb3J0U3RhdHVzID0gdGhpcy5nZXRTb3J0U3RhdHVzO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyIGNlbGwgaXRlbSBjb250YWluaW5nIG1ldGFkYXRhIGxpa2UgY29sdW1uIG5hbWUsIHNvcnRhYmlsaXR5LCBhbmQgd2hldGhlciBpdCBzaG91bGQgaW5jbHVkZSBhIGNoZWNrYm94LlxuICAgKlxuICAgKiBAdHlwZSB7VGFibGVIZWFkZXJDZWxsfVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGl0ZW0hOiBUYWJsZUhlYWRlckNlbGw7XG5cbiAgLyoqXG4gICAqIEZvcm1Hcm91cCB0byBtYW5hZ2UgdGhlIGNoZWNrYm94IHN0YXRlIHdpdGhpbiB0aGUgaGVhZGVyLlxuICAgKlxuICAgKiBAdHlwZSB7Rm9ybUdyb3VwfVxuICAgKi9cbiAgcHVibGljIGNoZWNrRm9ybSA9IG5ldyBGb3JtR3JvdXAoeyBjaGVjazogbmV3IEZvcm1Db250cm9sKGZhbHNlKSB9KTtcblxuICAvKipcbiAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgc29ydCBzdGF0dXMgb2YgdGhlIGNvbHVtbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBoZWFkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTb3J0U3RhdHVzfVxuICAgKi9cbiAgcHVibGljIGdldCBnZXRTb3J0U3RhdHVzKCk6IFNvcnRTdGF0dXMge1xuICAgIHJldHVybiB7IGNvbHVtbjogdGhpcy5pdGVtPy5uYW1lLCBzb3J0VmFyaWFudDogVGFibGVTb3J0VmFyaWFudC5VTlNPUlRFRCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGljb24gb3IgaW5kaWNhdG9yIGZvciB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXR1cyAoYXNjZW5kaW5nLCBkZXNjZW5kaW5nLCB1bnNvcnRlZCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUYWJsZVNvcnRWYXJpYW50fVxuICAgKi9cbiAgcHVibGljIGdldCBzb3J0SWNvbigpOiBUYWJsZVNvcnRWYXJpYW50IHtcbiAgICByZXR1cm4gdGhpcy5zb3J0U3RhdHVzLnNvcnRWYXJpYW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHNvcnRpbmcgc3RhdHVzIG9mIHRoZSBjb2x1bW4gYW5kIGluZm9ybXMgdGhlIHRhYmxlIGNvbXBvbmVudCBvZiB0aGUgY2hhbmdlLlxuICAgKi9cbiAgcHVibGljIHNvcnRDb2x1bW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW0/LnNvcnRhYmxlKSByZXR1cm47XG4gICAgc3dpdGNoICh0aGlzLnNvcnRTdGF0dXMuc29ydFZhcmlhbnQpIHtcbiAgICAgIGNhc2UgVGFibGVTb3J0VmFyaWFudC5ERVNDOlxuICAgICAgY2FzZSBUYWJsZVNvcnRWYXJpYW50LlVOU09SVEVEOlxuICAgICAgICB0aGlzLnRhYmxlLmNsZWFyU29ydCgpO1xuICAgICAgICB0aGlzLnNvcnRTdGF0dXMgPSB7IC4uLnRoaXMuc29ydFN0YXR1cywgc29ydFZhcmlhbnQ6IFRhYmxlU29ydFZhcmlhbnQuQVNDIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUYWJsZVNvcnRWYXJpYW50LkFTQzpcbiAgICAgICAgdGhpcy50YWJsZS5jbGVhclNvcnQoKTtcblxuICAgICAgICB0aGlzLnNvcnRTdGF0dXMgPSB7IC4uLnRoaXMuc29ydFN0YXR1cywgc29ydFZhcmlhbnQ6IFRhYmxlU29ydFZhcmlhbnQuREVTQyB9O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlLnNvcnRlZC5lbWl0KHRoaXMuc29ydFN0YXR1cyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzb3J0IHN0YXR1cyB0byB1bnNvcnRlZC5cbiAgICovXG4gIHB1YmxpYyBjbGVhclNvcnRTdGF0dXMoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0U3RhdHVzID0geyBjb2x1bW46IHRoaXMuaXRlbT8ubmFtZSwgc29ydFZhcmlhbnQ6IFRhYmxlU29ydFZhcmlhbnQuVU5TT1JURUQgfTtcbiAgICB0aGlzLmNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSBjb2x1bW4sIHVzZWQgdG8gZGV0ZXJtaW5lIGNoZWNrYm94IHN0YXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmRhdGEuZmlsdGVyKChkOiBUYWJsZUJvZHlDZWxsKSA9PiBkW3RoaXMuaXRlbS5uYW1lXSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCB2aWV3LCB1c3VhbGx5IGFmdGVyIGEgc3RhdGUgY2hhbmdlLlxuICAgKi9cbiAgcHVibGljIGNoZWNrKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgY2hlY2tib3ggc2hvdWxkIGJlIG1hcmtlZCBhcyBjaGVja2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRhYmxlLmhlYWRlckRhdGEuZmluZCgoaDogVGFibGVIZWFkZXJDZWxsKSA9PiBoLmNoZWNrKT8ubmFtZTtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5kYXRhLmV2ZXJ5KChpdGVtOiBUYWJsZUJvZHlDZWxsKSA9PiBjb2x1bW4gJiYgaXRlbVtjb2x1bW5dKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrQm94TGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tCb3hMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbS5jaGVjaykgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tGb3JtXG4gICAgICAuZ2V0KCdjaGVjaycpXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICB0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICB0YXAoKGNoZWNrKSA9PiB0aGlzLnRhYmxlLmNoZWNrZWQuZW1pdCh7IGNvbHVtbjogdGhpcy5pdGVtLm5hbWUsIGNoZWNrOiAhIWNoZWNrIH0pKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRhYmxlLmhlYWRlckRhdGEuZmluZCgoaDogVGFibGVIZWFkZXJDZWxsKSA9PiBoLmNoZWNrKT8ubmFtZTtcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy50YWJsZS5kYXRhO1xuICAgIGNvbnN0IHVuY2hlY2tlZCA9IGxlbmd0aCAtIHRoaXMudGFibGUuZGF0YS5maWx0ZXIoKGl0ZW06IFRhYmxlQm9keUNlbGwpID0+IGNvbHVtbiAmJiBpdGVtW2NvbHVtbl0pLmxlbmd0aDtcbiAgICByZXR1cm4gdW5jaGVja2VkID4gMCAmJiB1bmNoZWNrZWQgPCBsZW5ndGg7XG4gIH1cbn1cbiIsIkBpZiAoaXRlbS5jaGVjaykge1xuICA8ZGl2IGNsYXNzPVwib2R4LXRhYmxlX19jaGVja1wiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJjaGVja0Zvcm1cIj5cbiAgICAgIDxvZHgtY2hlY2tib3ggW2NoZWNrZWRdPVwiY2hlY2tlZFwiIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJjaGVja1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXYgY2xhc3M9XCJvZHgtdGFibGVfX2hlYWRlci1jZWxsLXRpdGxlXCIgKGNsaWNrKT1cInNvcnRDb2x1bW4oKVwiIFtjbGFzcy5zb3J0YWJsZV09XCJpdGVtLnNvcnRhYmxlXCI+XG4gICAge3sgaXRlbS50aXRsZSB9fVxuICAgIEBpZiAoaXRlbS5zb3J0YWJsZSkge1xuICAgICAgQHN3aXRjaCAoc29ydEljb24pIHtcbiAgICAgICAgQGNhc2UgKCd1bnNvcnRlZCcpIHtcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwibTE0LDVIMnYtMmgxMnYyWm0tNCwySDJ2Mmg4di0yWm0tNCw0SDJ2Mmg0di0yWlwiIHN0eWxlPVwiZmlsbDogdmFyKC0tYmx1ZS03MDApXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2Rlc2MnKSB7XG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMTEgNiA4IDMgNSA2IDcgNiA3IDEzIDkgMTMgOSA2IDExIDZcIiBzdHlsZT1cImZpbGw6IHZhcigtLWJsdWUtNzAwKVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdhc2MnKSB7XG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiNSAxMCA4IDEzIDExIDEwIDkgMTAgOSAzIDcgMyA3IDEwIDUgMTBcIiBzdHlsZT1cImZpbGw6IHZhcigtLWJsdWUtNzAwKVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJvZHgtZm9ybS1maWVsZFwiIC8+XG59XG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXRpdGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdJLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFM0M7Ozs7R0FJRztBQVVILE1BQU0sT0FBTyxvQkFBb0I7SUFUakM7UUFVbUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMs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WUFBWSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDOzhCQWN4RCxJQUFJO3NCQURWLEtBQUs7Z0JBMEdRLFdBQVc7c0JBRHhCLFdBQVc7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2NoZWNrYm94JztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29sdW1uV2lkdGgsIFNvcnRTdGF0dXMsIFRhYmxlQm9keUNlbGwsIFRhYmxlSGVhZGVyQ2VsbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBUYWJsZVNvcnRWYXJpYW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NvcnQtdmFyaWFudCc7XG5pbXBvcnQgeyBUQUJMRSB9IGZyb20gJy4uLy4uL3RhYmxlLmNvbmZpZyc7XG5cbi8qKlxuICogSGVhZGVyVGl0bGVDb21wb25lbnQgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIGEgdGFibGUgaGVhZGVyIGNlbGwsIGluY2x1ZGluZyBzb3J0aW5nIGFuZCBjaGVja2JveFxuICogb3BlcmF0aW9ucyBpZiBhcHBsaWNhYmxlLiBJdCBoYW5kbGVzIGNoYW5nZXMgaW4gc29ydCBzdGF0ZSBhbmQgZW1pdHMgcmVsZXZhbnQgZXZlbnRzIHRvIHRoZSB0YWJsZSBjb21wb25lbnRcbiAqIHRvIG1hbmFnZSBzb3J0aW5nIGFuZCBzZWxlY3Rpb24gc3RhdGUgYWNyb3NzIHRoZSB0YWJsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAndGhbb2R4SGVhZGVyVGl0bGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci10aXRsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaGVja2JveENvbXBvbmVudCwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlclRpdGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZSA9IGluamVjdChUQUJMRSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuICBwcml2YXRlIHNvcnRTdGF0dXM6IFNvcnRTdGF0dXMgPSB0aGlzLmdldFNvcnRTdGF0dXM7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFkZXIgY2VsbCBpdGVtIGNvbnRhaW5pbmcgbWV0YWRhdGEgbGlrZSBjb2x1bW4gbmFtZSwgc29ydGFiaWxpdHksIGFuZCB3aGV0aGVyIGl0IHNob3VsZCBpbmNsdWRlIGEgY2hlY2tib3guXG4gICAqXG4gICAqIEB0eXBlIHtUYWJsZUhlYWRlckNlbGx9XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXRlbSE6IFRhYmxlSGVhZGVyQ2VsbDtcblxuICAvKipcbiAgICogRm9ybUdyb3VwIHRvIG1hbmFnZSB0aGUgY2hlY2tib3ggc3RhdGUgd2l0aGluIHRoZSBoZWFkZXIuXG4gICAqXG4gICAqIEB0eXBlIHtGb3JtR3JvdXB9XG4gICAqL1xuICBwdWJsaWMgY2hlY2tGb3JtID0gbmV3IEZvcm1Hcm91cCh7IGNoZWNrOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpIH0pO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBzb3J0IHN0YXR1cyBvZiB0aGUgY29sdW1uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGhlYWRlci5cbiAgICpcbiAgICogQHJldHVybnMge1NvcnRTdGF0dXN9XG4gICAqL1xuICBwdWJsaWMgZ2V0IGdldFNvcnRTdGF0dXMoKTogU29ydFN0YXR1cyB7XG4gICAgcmV0dXJuIHsgY29sdW1uOiB0aGlzLml0ZW0/Lm5hbWUsIHNvcnRWYXJpYW50OiBUYWJsZVNvcnRWYXJpYW50LlVOU09SVEVEIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaWNvbiBvciBpbmRpY2F0b3IgZm9yIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdHVzIChhc2NlbmRpbmcsIGRlc2NlbmRpbmcsIHVuc29ydGVkKS5cbiAgICpcbiAgICogQHJldHVybnMge1RhYmxlU29ydFZhcmlhbnR9XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNvcnRJY29uKCk6IFRhYmxlU29ydFZhcmlhbnQge1xuICAgIHJldHVybiB0aGlzLnNvcnRTdGF0dXMuc29ydFZhcmlhbnQ7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgc29ydGluZyBzdGF0dXMgb2YgdGhlIGNvbHVtbiBhbmQgaW5mb3JtcyB0aGUgdGFibGUgY29tcG9uZW50IG9mIHRoZSBjaGFuZ2UuXG4gICAqL1xuICBwdWJsaWMgc29ydENvbHVtbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbT8uc29ydGFibGUpIHJldHVybjtcbiAgICBzd2l0Y2ggKHRoaXMuc29ydFN0YXR1cy5zb3J0VmFyaWFudCkge1xuICAgICAgY2FzZSBUYWJsZVNvcnRWYXJpYW50LkRFU0M6XG4gICAgICBjYXNlIFRhYmxlU29ydFZhcmlhbnQuVU5TT1JURUQ6XG4gICAgICAgIHRoaXMudGFibGUuY2xlYXJTb3J0KCk7XG4gICAgICAgIHRoaXMuc29ydFN0YXR1cyA9IHsgLi4udGhpcy5zb3J0U3RhdHVzLCBzb3J0VmFyaWFudDogVGFibGVTb3J0VmFyaWFudC5BU0MgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRhYmxlU29ydFZhcmlhbnQuQVNDOlxuICAgICAgICB0aGlzLnRhYmxlLmNsZWFyU29ydCgpO1xuXG4gICAgICAgIHRoaXMuc29ydFN0YXR1cyA9IHsgLi4udGhpcy5zb3J0U3RhdHVzLCBzb3J0VmFyaWFudDogVGFibGVTb3J0VmFyaWFudC5ERVNDIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMudGFibGUuc29ydGVkLmVtaXQodGhpcy5zb3J0U3RhdHVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHNvcnQgc3RhdHVzIHRvIHVuc29ydGVkLlxuICAgKi9cbiAgcHVibGljIGNsZWFyU29ydFN0YXR1cygpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnRTdGF0dXMgPSB7IGNvbHVtbjogdGhpcy5pdGVtPy5uYW1lLCBzb3J0VmFyaWFudDogVGFibGVTb3J0VmFyaWFudC5VTlNPUlRFRCB9O1xuICAgIHRoaXMuY2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIGNvbHVtbiwgdXNlZCB0byBkZXRlcm1pbmUgY2hlY2tib3ggc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZGF0YSgpLmZpbHRlcigoZDogVGFibGVCb2R5Q2VsbCkgPT4gZFt0aGlzLml0ZW0ubmFtZV0pLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb21wb25lbnQgdmlldywgdXN1YWxseSBhZnRlciBhIHN0YXRlIGNoYW5nZS5cbiAgICovXG4gIHB1YmxpYyBjaGVjaygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNoZWNrYm94IHNob3VsZCBiZSBtYXJrZWQgYXMgY2hlY2tlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5pdGVtLmNoZWNrICYmIHRoaXMuaXRlbS5uYW1lO1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmRhdGEoKS5ldmVyeSgoaXRlbTogVGFibGVCb2R5Q2VsbCkgPT4gY29sdW1uICYmIGl0ZW1bY29sdW1uXSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0JveExpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQm94TGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW0uY2hlY2spIHJldHVybjtcbiAgICB0aGlzLmNoZWNrRm9ybVxuICAgICAgLmdldCgnY2hlY2snKVxuICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgdGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgdGFwKChjaGVjaykgPT4gdGhpcy50YWJsZS5jaGVja2VkLmVtaXQoeyBjb2x1bW46IHRoaXMuaXRlbS5uYW1lLCBjaGVjazogISFjaGVjayB9KSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5pdGVtLmNoZWNrICYmIHRoaXMuaXRlbS5uYW1lO1xuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB0aGlzLnRhYmxlLmRhdGEoKTtcbiAgICBjb25zdCB1bmNoZWNrZWQgPSBsZW5ndGggLSB0aGlzLnRhYmxlLmRhdGEoKS5maWx0ZXIoKGl0ZW06IFRhYmxlQm9keUNlbGwpID0+IGNvbHVtbiAmJiBpdGVtW2NvbHVtbl0pLmxlbmd0aDtcbiAgICByZXR1cm4gdW5jaGVja2VkID4gMCAmJiB1bmNoZWNrZWQgPCBsZW5ndGg7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJylcbiAgcHJvdGVjdGVkIGdldCBjb2x1bW5XaWR0aCgpOiBDb2x1bW5XaWR0aCB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS53aWR0aCA/PyAnYXV0byc7XG4gIH1cbn1cbiIsIkBpZiAoaXRlbS5jaGVjaykge1xuICA8ZGl2IGNsYXNzPVwib2R4LXRhYmxlX19jaGVja1wiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJjaGVja0Zvcm1cIj5cbiAgICAgIDxvZHgtY2hlY2tib3ggW2NoZWNrZWRdPVwiY2hlY2tlZFwiIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJjaGVja1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXYgY2xhc3M9XCJvZHgtdGFibGVfX2hlYWRlci1jZWxsLXRpdGxlXCIgKGNsaWNrKT1cInNvcnRDb2x1bW4oKVwiIFtjbGFzcy5zb3J0YWJsZV09XCJpdGVtLnNvcnRhYmxlXCI+XG4gICAge3sgaXRlbS50aXRsZSB9fVxuICAgIEBpZiAoaXRlbS5zb3J0YWJsZSkge1xuICAgICAgQHN3aXRjaCAoc29ydEljb24pIHtcbiAgICAgICAgQGNhc2UgKCd1bnNvcnRlZCcpIHtcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwibTE0LDVIMnYtMmgxMnYyWm0tNCwySDJ2Mmg4di0yWm0tNCw0SDJ2Mmg0di0yWlwiIHN0eWxlPVwiZmlsbDogdmFyKC0tYmx1ZS03MDApXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2Rlc2MnKSB7XG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMTEgNiA4IDMgNSA2IDcgNiA3IDEzIDkgMTMgOSA2IDExIDZcIiBzdHlsZT1cImZpbGw6IHZhcigtLWJsdWUtNzAwKVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdhc2MnKSB7XG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiNSAxMCA4IDEzIDExIDEwIDkgMTAgOSAzIDcgMyA3IDEwIDUgMTBcIiBzdHlsZT1cImZpbGw6IHZhcigtLWJsdWUtNzAwKVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJvZHgtZm9ybS1maWVsZFwiIC8+XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXdpZHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGFibGUvc3JjL2xpYi9tb2RlbHMvY29sdW1uLXdpZHRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbHVtbiB3aWR0aCB0eXBlIGZvciBodG1sIHRhYmxlIHRoIG9yIHRkIGVsZW1lbnRzLlxuICogQGV4YW1wbGUgJzEwMHB4JywgJzUwJScsICdhdXRvJ1xuICovXG5leHBvcnQgdHlwZSBDb2x1bW5XaWR0aCA9IGAke251bWJlcn1weGAgfCBgJHtudW1iZXJ9JWAgfCAnYXV0byc7XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLWNlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL21vZGVscy9oZWFkZXItY2VsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUYWJsZUhlYWRlckNlbGwge1xuICB0aXRsZT86IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBmaWx0ZXI/OiBib29sZWFuO1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIGNoZWNrPzogYm9vbGVhbjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLWNlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL21vZGVscy9oZWFkZXItY2VsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sdW1uV2lkdGggfSBmcm9tICcuL2NvbHVtbi13aWR0aCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVIZWFkZXJDZWxsIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZmlsdGVyPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBjaGVjaz86IGJvb2xlYW47XG4gIHdpZHRoPzogQ29sdW1uV2lkdGg7XG59XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  export * from './body-cell';
2
+ export * from './column-width';
2
3
  export * from './header-cell';
3
4
  export * from './sort-status';
4
5
  export * from './sort-variant';
5
6
  export * from './table-variant';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2JvZHktY2VsbCc7XG5leHBvcnQgKiBmcm9tICcuL2hlYWRlci1jZWxsJztcbmV4cG9ydCAqIGZyb20gJy4vc29ydC1zdGF0dXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zb3J0LXZhcmlhbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS12YXJpYW50JztcbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9keS1jZWxsJztcbmV4cG9ydCAqIGZyb20gJy4vY29sdW1uLXdpZHRoJztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyLWNlbGwnO1xuZXhwb3J0ICogZnJvbSAnLi9zb3J0LXN0YXR1cyc7XG5leHBvcnQgKiBmcm9tICcuL3NvcnQtdmFyaWFudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLXZhcmlhbnQnO1xuIl19
@@ -1,13 +1,13 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { CommonModule } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';
3
+ import { ChangeDetectionStrategy, Component, computed, EventEmitter, input, Input, Output, QueryList, ViewChildren, ViewEncapsulation, } from '@angular/core';
4
4
  import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
5
5
  import { FormFieldModule } from '@odx/angular/components/form-field';
6
- import { IconComponent } from '@odx/angular/components/icon';
7
6
  import { CSSComponent, CSSModifier } from '@odx/angular/internal';
8
7
  import { injectElement, untilDestroyed } from '@odx/angular/utils';
9
8
  import { debounceTime, tap } from 'rxjs';
10
9
  import { HeaderTitleComponent } from './components/header-title/header-title.component';
10
+ import { TableCellDirective, TableRowDirective } from './directives';
11
11
  import { TABLE } from './table.config';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "@angular/forms";
@@ -25,21 +25,38 @@ import * as i2 from "@odx/angular/components/form-field";
25
25
  let TableComponent = class TableComponent {
26
26
  constructor() {
27
27
  this.takeUntilDestroyed = untilDestroyed();
28
+ this.headerColumns = computed(() => {
29
+ const [firstRow] = this.data() ?? [];
30
+ const headerColumns = this.headerData();
31
+ if (!(headerColumns && firstRow))
32
+ return headerColumns;
33
+ return Object.keys(firstRow).map((key) => headerColumns.find((item) => item.name === key) ?? {
34
+ name: key,
35
+ title: key.charAt(0).toUpperCase() + key.slice(1),
36
+ sortable: false,
37
+ filter: false,
38
+ check: key === 'selected',
39
+ });
40
+ });
28
41
  this.element = injectElement();
29
42
  /**
30
43
  * Data array of type T that the table displays.
31
44
  *
32
- * @type {T[]}
33
- * @default []
45
+ * @type {Signal<T[]>}
46
+ */
47
+ this.data = input.required();
48
+ /**
49
+ * Message to display when no data is available.
50
+ *
51
+ * @type {Signal<string>}
34
52
  */
35
- this.data = [];
53
+ this.noDataMessage = input('No data available');
36
54
  /**
37
55
  * Configuration for table header data which controls sorting, filtering, and additional metadata.
38
56
  *
39
- * @type {TableHeaderCell[]}
40
- * @default []
57
+ * @type {Signal<TableHeaderCell[]>}
41
58
  */
42
- this.headerData = [];
59
+ this.headerData = input([]);
43
60
  /**
44
61
  * FormGroup to handle the dynamic filtering controls, each tied to a header cell that has filtering enabled.
45
62
  */
@@ -64,8 +81,7 @@ let TableComponent = class TableComponent {
64
81
  this.checked = new EventEmitter();
65
82
  }
66
83
  ngOnInit() {
67
- this.setHeaderData();
68
- this.headerData.forEach((item) => item.filter && this.form.addControl(item.name, new FormControl('')));
84
+ this.headerData().forEach((item) => item.filter && this.form.addControl(item.name, new FormControl('')));
69
85
  this.formListener();
70
86
  }
71
87
  /**
@@ -84,16 +100,8 @@ let TableComponent = class TableComponent {
84
100
  }))
85
101
  .subscribe();
86
102
  }
87
- setHeaderData() {
88
- this.headerData = Object.keys(this.data[0]).map((key) => this.headerData.find((item) => item.name === key) || {
89
- name: key,
90
- title: `${key[0].toUpperCase()}${key.slice(1)}`,
91
- sortable: false,
92
- filter: false,
93
- });
94
- }
95
103
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "table[odxTable]", inputs: { variant: "variant", data: "data", headerData: "headerData" }, outputs: { sorted: "sorted", filtered: "filtered", checked: "checked" }, host: { properties: { "attr.role": "\"table\"" } }, providers: [{ provide: TABLE, useExisting: TableComponent }], viewQueries: [{ propertyName: "headers", predicate: HeaderTitleComponent, descendants: true }], ngImport: i0, template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerData; track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n <ng-content select=\"tr\" />\n</tbody>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormFieldModule }, { kind: "component", type: i2.FormFieldComponent, selector: "odx-form-field", inputs: ["label", "hasWarning", "variant"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "[odxFormFieldControl]", exportAs: ["odxFormFieldControl"] }, { kind: "component", type: HeaderTitleComponent, selector: "th[odxHeaderTitle]", inputs: ["item"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
104
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "table[odxTable]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, noDataMessage: { classPropertyName: "noDataMessage", publicName: "noDataMessage", isSignal: true, isRequired: false, transformFunction: null }, headerData: { classPropertyName: "headerData", publicName: "headerData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sorted: "sorted", filtered: "filtered", checked: "checked" }, host: { properties: { "attr.role": "\"table\"" } }, providers: [{ provide: TABLE, useExisting: TableComponent }], viewQueries: [{ propertyName: "headers", predicate: HeaderTitleComponent, descendants: true }], ngImport: i0, template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerColumns(); track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n @if (data() && !!data().length) {\n <ng-content select=\"tr\" />\n } @else {\n <tr odx-table-row class=\"odx-table__no-data-row\">\n <td odx-table-cell [attr.colspan]=\"headerColumns().length\">{{ noDataMessage() }}</td>\n </tr>\n }\n</tbody>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormFieldModule }, { kind: "component", type: i2.FormFieldComponent, selector: "odx-form-field", inputs: ["label", "hasWarning", "variant"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "[odxFormFieldControl]", exportAs: ["odxFormFieldControl"] }, { kind: "component", type: HeaderTitleComponent, selector: "th[odxHeaderTitle]", inputs: ["item"] }, { kind: "directive", type: TableRowDirective, selector: "tr[odx-table-row]" }, { kind: "directive", type: TableCellDirective, selector: "td[odx-table-cell]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
97
105
  };
98
106
  __decorate([
99
107
  CSSModifier(),
@@ -107,13 +115,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
107
115
  type: Component,
108
116
  args: [{ selector: 'table[odxTable]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
109
117
  '[attr.role]': '"table"',
110
- }, imports: [CommonModule, IconComponent, ReactiveFormsModule, FormFieldModule, HeaderTitleComponent], providers: [{ provide: TABLE, useExisting: TableComponent }], template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerData; track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n <ng-content select=\"tr\" />\n</tbody>\n" }]
118
+ }, imports: [CommonModule, ReactiveFormsModule, FormFieldModule, HeaderTitleComponent, TableRowDirective, TableCellDirective], providers: [{ provide: TABLE, useExisting: TableComponent }], template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerColumns(); track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n @if (data() && !!data().length) {\n <ng-content select=\"tr\" />\n } @else {\n <tr odx-table-row class=\"odx-table__no-data-row\">\n <td odx-table-cell [attr.colspan]=\"headerColumns().length\">{{ noDataMessage() }}</td>\n </tr>\n }\n</tbody>\n" }]
111
119
  }], propDecorators: { variant: [{
112
120
  type: Input
113
- }], data: [{
114
- type: Input
115
- }], headerData: [{
116
- type: Input
117
121
  }], sorted: [{
118
122
  type: Output
119
123
  }], filtered: [{
@@ -124,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
124
128
  type: ViewChildren,
125
129
  args: [HeaderTitleComponent]
126
130
  }] } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BKLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFeEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRXZDOzs7Ozs7Ozs7R0FTRztBQWVJLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFBcEI7UUFDWSx1QkFBa0IsR0FBRyxjQUFjLEVBQUUsQ0FBQztR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QUFXLEVBQUU7OytDQUV1QjtBQVgxQixjQUFjO0lBZDFCLFlBQVksQ0FBQyxPQUFPLENBQUM7R0FjVCxjQUFjLENBMEcxQjs7NEZBMUdZLGNBQWM7a0JBYjFCLFNBQVM7K0JBRUUsaUJBQWlCLGNBQ2YsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLGFBQWEsRUFBRSxTQUFTO3FCQUN6QixXQUVRLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLENBQUMsYUFDdkYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxnQkFBZ0IsRUFBRSxDQUFDOzhCQWFyRCxPQUFPO3NCQURiLEtBQUs7Z0JBVUMsSUFBSTtzQkFEVixLQUFLO2dCQVVDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBY1UsTUFBTTtzQkFEckIsTUFBTTtnQkFTUyxRQUFRO3NCQUR2QixNQUFNO2dCQVNTLE9BQU87c0JBRHRCLE1BQU07Z0JBU0EsT0FBTztzQkFEYixZQUFZO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQsIENTU01vZGlmaWVyIH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIZWFkZXJUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTb3J0U3RhdHVzLCBUYWJsZUJvZHlDZWxsLCBUYWJsZUhlYWRlckNlbGwsIFRhYmxlVmFyaWFudCB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFRBQkxFIH0gZnJvbSAnLi90YWJsZS5jb25maWcnO1xuXG4vKipcbiAqIFRhYmxlQ29tcG9uZW50IGlzIGEgZHluYW1pYyB0YWJsZSBzdHJ1Y3R1cmUgYnVpbHQgZm9yIGRpc3BsYXlpbmcgY29tcGxleCBkYXRhIHNldHMgd2l0aCBzb3J0aW5nLCBmaWx0ZXJpbmcsXG4gKiBhbmQgY2hlY2thYmxlIGZ1bmN0aW9uYWxpdHkuIEl0IHByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aHJvdWdoIHZhcmlvdXMgaW5wdXRzIHRoYXQgYWxsb3cgdGhlXG4gKiBjdXN0b21pemF0aW9uIG9mIHRhYmxlIGJlaGF2aW9yIGFuZCBwcmVzZW50YXRpb24uXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgaGlnaGx5IG1vZHVsYXIsIGludGVncmF0aW5nIHdpdGggb3RoZXIgY29tcG9uZW50cyBzdWNoIGFzIGBIZWFkZXJUaXRsZUNvbXBvbmVudGAgZm9yIGhlYWRlclxuICogbWFuYWdlbWVudCwgYW5kIHVzaW5nIEFuZ3VsYXIgZm9ybXMgZm9yIGR5bmFtaWMgZGF0YSBmaWx0ZXJpbmcuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgdGhlIHRhYmxlIGRpc3BsYXlzLlxuICovXG5AQ1NTQ29tcG9uZW50KCd0YWJsZScpXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICd0YWJsZVtvZHhUYWJsZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbYXR0ci5yb2xlXSc6ICdcInRhYmxlXCInLFxuICB9LFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uQ29tcG9uZW50LCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtRmllbGRNb2R1bGUsIEhlYWRlclRpdGxlQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUQUJMRSwgdXNlRXhpc3Rpbmc6IFRhYmxlQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdGFibGUgdmFyaWFudCBmb3IgQ1NTIHN0eWxpbmcuXG4gICAqXG4gICAqIEB0eXBlIHtUYWJsZVZhcmlhbnQgfCBudWxsfVxuICAgKi9cbiAgQENTU01vZGlmaWVyKClcbiAgQElucHV0KClcbiAgcHVibGljIHZhcmlhbnQ/OiBUYWJsZVZhcmlhbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBEYXRhIGFycmF5IG9mIHR5cGUgVCB0aGF0IHRoZSB0YWJsZSBkaXNwbGF5cy5cbiAgICpcbiAgICogQHR5cGUge1RbXX1cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhOiBUW10gPSBbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGFibGUgaGVhZGVyIGRhdGEgd2hpY2ggY29udHJvbHMgc29ydGluZywgZmlsdGVyaW5nLCBhbmQgYWRkaXRpb25hbCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHR5cGUge1RhYmxlSGVhZGVyQ2VsbFtdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlYWRlckRhdGE6IFRhYmxlSGVhZGVyQ2VsbFtdID0gW107XG5cbiAgLyoqXG4gICAqIEZvcm1Hcm91cCB0byBoYW5kbGUgdGhlIGR5bmFtaWMgZmlsdGVyaW5nIGNvbnRyb2xzLCBlYWNoIHRpZWQgdG8gYSBoZWFkZXIgY2VsbCB0aGF0IGhhcyBmaWx0ZXJpbmcgZW5hYmxlZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciBmb3Igd2hlbiBhIGNvbHVtbidzIHNvcnRpbmcgc3RhdHVzIGNoYW5nZXMuXG4gICAqXG4gICAqIEBlbWl0cyB7U29ydFN0YXR1c31cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgc29ydGVkOiBFdmVudEVtaXR0ZXI8U29ydFN0YXR1cz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZXIgZm9yIHdoZW4gdGhlIHRhYmxlJ3MgZmlsdGVyaW5nIGNvbmRpdGlvbnMgY2hhbmdlLlxuICAgKlxuICAgKiBAZW1pdHMge3sgW2tleTogc3RyaW5nXTogc3RyaW5nIH19XG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlcmVkOiBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZXIgZm9yIHdoZW4gYSBjaGVja2JveCBjb2x1bW4ncyBjaGVja2VkIHN0YXRlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBlbWl0cyB7eyBjb2x1bW46IHN0cmluZzsgY2hlY2s6IGJvb2xlYW4gfX1cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgY2hlY2tlZDogRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBzdHJpbmc7IGNoZWNrOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBBIFF1ZXJ5TGlzdCBvZiBIZWFkZXJUaXRsZUNvbXBvbmVudCBpbnN0YW5jZXMsIGVhY2ggY29ycmVzcG9uZGluZyB0byBhIGhlYWRlciBjZWxsIGluIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQHR5cGUge1F1ZXJ5TGlzdDxIZWFkZXJUaXRsZUNvbXBvbmVudD59XG4gICAqL1xuICBAVmlld0NoaWxkcmVuKEhlYWRlclRpdGxlQ29tcG9uZW50KVxuICBwdWJsaWMgaGVhZGVycyE6IFF1ZXJ5TGlzdDxIZWFkZXJUaXRsZUNvbXBvbmVudD47XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0SGVhZGVyRGF0YSgpO1xuICAgIHRoaXMuaGVhZGVyRGF0YS5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLmZpbHRlciAmJiB0aGlzLmZvcm0uYWRkQ29udHJvbChpdGVtLm5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpKTtcbiAgICB0aGlzLmZvcm1MaXN0ZW5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgc29ydGluZyBzdGF0dXMgb2YgYWxsIGhlYWRlcnMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJTb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVycy5mb3JFYWNoKChoZWFkZXIpID0+IGhlYWRlci5jbGVhclNvcnRTdGF0dXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1MaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDYwMCksXG4gICAgICAgIHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZC5lbWl0KHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzPy5maWx0ZXIoKGhlYWRlcikgPT4gISFoZWFkZXIuaXRlbS5jaGVjaykuZm9yRWFjaCgoaGVhZGVyKSA9PiBoZWFkZXIuY2hlY2soKSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIZWFkZXJEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVyRGF0YSA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXSBhcyBUYWJsZUJvZHlDZWxsKS5tYXAoXG4gICAgICAoa2V5KSA9PlxuICAgICAgICB0aGlzLmhlYWRlckRhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBrZXkpIHx8IHtcbiAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgdGl0bGU6IGAke2tleVswXS50b1VwcGVyQ2FzZSgpfSR7a2V5LnNsaWNlKDEpfWAsXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZpbHRlcjogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwiPHRoZWFkIGNsYXNzPVwib2R4LXRhYmxlX19oZWFkXCIgcm9sZT1cInJvd2dyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDx0ciBjbGFzcz1cIm9keC10YWJsZV9faGVhZGVyLXJvd1wiIHJvbGU9XCJyb3dcIj5cbiAgICBAZm9yIChpdGVtIG9mIGhlYWRlckRhdGE7IHRyYWNrICRpbmRleCkge1xuICAgICAgPHRoIGNsYXNzPVwib2R4LXRhYmxlX19oZWFkZXItY2VsbFwiIHJvbGU9XCJjb2x1bW5oZWFkZXJcIiBvZHhIZWFkZXJUaXRsZSBbaXRlbV09XCJpdGVtXCI+XG4gICAgICAgIEBpZiAoaXRlbS5maWx0ZXIpIHtcbiAgICAgICAgICA8b2R4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8aW5wdXQgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0ubmFtZVwiIHR5cGU9XCJ0ZXh0XCIgb2R4Rm9ybUZpZWxkQ29udHJvbCAvPlxuICAgICAgICAgIDwvb2R4LWZvcm0tZmllbGQ+XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG4gICAgfVxuICA8L3RyPlxuPC90aGVhZD5cbjx0Ym9keSBjbGFzcz1cIm9keC10YWJsZV9fYm9keVwiIHJvbGU9XCJyb3dncm91cFwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJ0clwiIC8+XG48L3Rib2R5PlxuIl19
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUV2Qzs7Ozs7Ozs7O0dBU0c7QUFlSSxJQUFNLGNBQWMsR0FBcEIsTUFBTSxjQUFjO0lBQXBC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QyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOytHQS9HVSxjQUFjO21HQUFkLGNBQWMsaXRCQUZkLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxzREFzRjlDLG9CQUFvQixnRENwSXBDLDAwQkFzQkEsMkNEdUJZLFlBQVksOEJBQUUsbUJBQW1CLG0yQkFBRSxlQUFlLDRSQUFFLG9CQUFvQixpRkFBRSxpQkFBaUIsOERBQUUsa0JBQWtCOztBQThCbEg7SUFGTixXQUFXLEVBQUU7OytDQUV1QjtBQTNCMUIsY0FBYztJQWQxQixZQUFZLENBQUMsT0FBTyxDQUFDO0dBY1QsY0FBYyxDQWdIMUI7OzRGQWhIWSxjQUFjO2tCQWIxQixTQUFTOytCQUVFLGlCQUFpQixjQUNmLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixhQUFhLEVBQUUsU0FBUztxQkFDekIsV0FFUSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsYUFDL0csQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxnQkFBZ0IsRUFBRSxDQUFDOzhCQTZCckQsT0FBTztzQkFEYixLQUFLO2dCQW1DVSxNQUFNO3NCQURyQixNQUFNO2dCQVNTLFFBQVE7c0JBRHZCLE1BQU07Z0JBU1MsT0FBTztzQkFEdEIsTUFBTTtnQkFTQSxPQUFPO3NCQURiLFlBQVk7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBFdmVudEVtaXR0ZXIsXG4gIGlucHV0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQsIENTU01vZGlmaWVyIH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIZWFkZXJUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUNlbGxEaXJlY3RpdmUsIFRhYmxlUm93RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFNvcnRTdGF0dXMsIFRhYmxlSGVhZGVyQ2VsbCwgVGFibGVWYXJpYW50IH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgVEFCTEUgfSBmcm9tICcuL3RhYmxlLmNvbmZpZyc7XG5cbi8qKlxuICogVGFibGVDb21wb25lbnQgaXMgYSBkeW5hbWljIHRhYmxlIHN0cnVjdHVyZSBidWlsdCBmb3IgZGlzcGxheWluZyBjb21wbGV4IGRhdGEgc2V0cyB3aXRoIHNvcnRpbmcsIGZpbHRlcmluZyxcbiAqIGFuZCBjaGVja2FibGUgZnVuY3Rpb25hbGl0eS4gSXQgcHJvdmlkZXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRocm91Z2ggdmFyaW91cyBpbnB1dHMgdGhhdCBhbGxvdyB0aGVcbiAqIGN1c3RvbWl6YXRpb24gb2YgdGFibGUgYmVoYXZpb3IgYW5kIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyBoaWdobHkgbW9kdWxhciwgaW50ZWdyYXRpbmcgd2l0aCBvdGhlciBjb21wb25lbnRzIHN1Y2ggYXMgYEhlYWRlclRpdGxlQ29tcG9uZW50YCBmb3IgaGVhZGVyXG4gKiBtYW5hZ2VtZW50LCBhbmQgdXNpbmcgQW5ndWxhciBmb3JtcyBmb3IgZHluYW1pYyBkYXRhIGZpbHRlcmluZy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB0aGUgdGFibGUgZGlzcGxheXMuXG4gKi9cbkBDU1NDb21wb25lbnQoJ3RhYmxlJylcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ3RhYmxlW29keFRhYmxlXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLnJvbGVdJzogJ1widGFibGVcIicsXG4gIH0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1GaWVsZE1vZHVsZSwgSGVhZGVyVGl0bGVDb21wb25lbnQsIFRhYmxlUm93RGlyZWN0aXZlLCBUYWJsZUNlbGxEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRBQkxFLCB1c2VFeGlzdGluZzogVGFibGVDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuICBwcm90ZWN0ZWQgaGVhZGVyQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBbZmlyc3RSb3ddID0gdGhpcy5kYXRhKCkgPz8gW107XG4gICAgY29uc3QgaGVhZGVyQ29sdW1ucyA9IHRoaXMuaGVhZGVyRGF0YSgpO1xuXG4gICAgaWYgKCEoaGVhZGVyQ29sdW1ucyAmJiBmaXJzdFJvdykpIHJldHVybiBoZWFkZXJDb2x1bW5zO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaXJzdFJvdykubWFwKFxuICAgICAgKGtleSkgPT5cbiAgICAgICAgaGVhZGVyQ29sdW1ucy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGtleSkgPz8ge1xuICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICB0aXRsZToga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpLFxuICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgIGNoZWNrOiBrZXkgPT09ICdzZWxlY3RlZCcsXG4gICAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHRhYmxlIHZhcmlhbnQgZm9yIENTUyBzdHlsaW5nLlxuICAgKlxuICAgKiBAdHlwZSB7VGFibGVWYXJpYW50IHwgbnVsbH1cbiAgICovXG4gIEBDU1NNb2RpZmllcigpXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YXJpYW50PzogVGFibGVWYXJpYW50IHwgbnVsbDtcblxuICAvKipcbiAgICogRGF0YSBhcnJheSBvZiB0eXBlIFQgdGhhdCB0aGUgdGFibGUgZGlzcGxheXMuXG4gICAqXG4gICAqIEB0eXBlIHtTaWduYWw8VFtdPn1cbiAgICovXG4gIHB1YmxpYyBkYXRhID0gaW5wdXQucmVxdWlyZWQ8VFtdPigpO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHR5cGUge1NpZ25hbDxzdHJpbmc+fVxuICAgKi9cbiAgcHVibGljIG5vRGF0YU1lc3NhZ2UgPSBpbnB1dDxzdHJpbmc+KCdObyBkYXRhIGF2YWlsYWJsZScpO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0YWJsZSBoZWFkZXIgZGF0YSB3aGljaCBjb250cm9scyBzb3J0aW5nLCBmaWx0ZXJpbmcsIGFuZCBhZGRpdGlvbmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAdHlwZSB7U2lnbmFsPFRhYmxlSGVhZGVyQ2VsbFtdPn1cbiAgICovXG4gIHB1YmxpYyBoZWFkZXJEYXRhID0gaW5wdXQ8VGFibGVIZWFkZXJDZWxsW10+KFtdKTtcblxuICAvKipcbiAgICogRm9ybUdyb3VwIHRvIGhhbmRsZSB0aGUgZHluYW1pYyBmaWx0ZXJpbmcgY29udHJvbHMsIGVhY2ggdGllZCB0byBhIGhlYWRlciBjZWxsIHRoYXQgaGFzIGZpbHRlcmluZyBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVyIGZvciB3aGVuIGEgY29sdW1uJ3Mgc29ydGluZyBzdGF0dXMgY2hhbmdlcy5cbiAgICpcbiAgICogQGVtaXRzIHtTb3J0U3RhdHVzfVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBzb3J0ZWQ6IEV2ZW50RW1pdHRlcjxTb3J0U3RhdHVzPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciBmb3Igd2hlbiB0aGUgdGFibGUncyBmaWx0ZXJpbmcgY29uZGl0aW9ucyBjaGFuZ2UuXG4gICAqXG4gICAqIEBlbWl0cyB7eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfX1cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyZWQ6IEV2ZW50RW1pdHRlcjx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciBmb3Igd2hlbiBhIGNoZWNrYm94IGNvbHVtbidzIGNoZWNrZWQgc3RhdGUgY2hhbmdlcy5cbiAgICpcbiAgICogQGVtaXRzIHt7IGNvbHVtbjogc3RyaW5nOyBjaGVjazogYm9vbGVhbiB9fVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBjaGVja2VkOiBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IHN0cmluZzsgY2hlY2s6IGJvb2xlYW4gfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEEgUXVlcnlMaXN0IG9mIEhlYWRlclRpdGxlQ29tcG9uZW50IGluc3RhbmNlcywgZWFjaCBjb3JyZXNwb25kaW5nIHRvIGEgaGVhZGVyIGNlbGwgaW4gdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAdHlwZSB7UXVlcnlMaXN0PEhlYWRlclRpdGxlQ29tcG9uZW50Pn1cbiAgICovXG4gIEBWaWV3Q2hpbGRyZW4oSGVhZGVyVGl0bGVDb21wb25lbnQpXG4gIHB1YmxpYyBoZWFkZXJzITogUXVlcnlMaXN0PEhlYWRlclRpdGxlQ29tcG9uZW50PjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oZWFkZXJEYXRhKCkuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5maWx0ZXIgJiYgdGhpcy5mb3JtLmFkZENvbnRyb2woaXRlbS5uYW1lLCBuZXcgRm9ybUNvbnRyb2woJycpKSk7XG4gICAgdGhpcy5mb3JtTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHNvcnRpbmcgc3RhdHVzIG9mIGFsbCBoZWFkZXJzLlxuICAgKi9cbiAgcHVibGljIGNsZWFyU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyKSA9PiBoZWFkZXIuY2xlYXJTb3J0U3RhdHVzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9scykubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSg2MDApLFxuICAgICAgICB0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgICAgIHRoaXMuaGVhZGVycz8uZmlsdGVyKChoZWFkZXIpID0+ICEhaGVhZGVyLml0ZW0uY2hlY2spLmZvckVhY2goKGhlYWRlcikgPT4gaGVhZGVyLmNoZWNrKCkpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPHRoZWFkIGNsYXNzPVwib2R4LXRhYmxlX19oZWFkXCIgcm9sZT1cInJvd2dyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDx0ciBjbGFzcz1cIm9keC10YWJsZV9faGVhZGVyLXJvd1wiIHJvbGU9XCJyb3dcIj5cbiAgICBAZm9yIChpdGVtIG9mIGhlYWRlckNvbHVtbnMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8dGggY2xhc3M9XCJvZHgtdGFibGVfX2hlYWRlci1jZWxsXCIgcm9sZT1cImNvbHVtbmhlYWRlclwiIG9keEhlYWRlclRpdGxlIFtpdGVtXT1cIml0ZW1cIj5cbiAgICAgICAgQGlmIChpdGVtLmZpbHRlcikge1xuICAgICAgICAgIDxvZHgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxpbnB1dCBwbGFjZWhvbGRlcj1cIkZpbHRlclwiIFtmb3JtQ29udHJvbE5hbWVdPVwiaXRlbS5uYW1lXCIgdHlwZT1cInRleHRcIiBvZHhGb3JtRmllbGRDb250cm9sIC8+XG4gICAgICAgICAgPC9vZHgtZm9ybS1maWVsZD5cbiAgICAgICAgfVxuICAgICAgPC90aD5cbiAgICB9XG4gIDwvdHI+XG48L3RoZWFkPlxuPHRib2R5IGNsYXNzPVwib2R4LXRhYmxlX19ib2R5XCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gIEBpZiAoZGF0YSgpICYmICEhZGF0YSgpLmxlbmd0aCkge1xuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInRyXCIgLz5cbiAgfSBAZWxzZSB7XG4gICAgPHRyIG9keC10YWJsZS1yb3cgY2xhc3M9XCJvZHgtdGFibGVfX25vLWRhdGEtcm93XCI+XG4gICAgICA8dGQgb2R4LXRhYmxlLWNlbGwgW2F0dHIuY29sc3Bhbl09XCJoZWFkZXJDb2x1bW5zKCkubGVuZ3RoXCI+e3sgbm9EYXRhTWVzc2FnZSgpIH19PC90ZD5cbiAgICA8L3RyPlxuICB9XG48L3Rib2R5PlxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-animations.mjs","sources":["../../../../libs/angular/animations/src/lib/config.ts","../../../../libs/angular/animations/src/lib/expand.ts","../../../../libs/angular/animations/src/lib/fade.ts","../../../../libs/angular/animations/src/lib/slide.ts","../../../../libs/angular/animations/src/lib/wait-for-child-animations.ts","../../../../libs/angular/animations/src/odx-angular-animations.ts"],"sourcesContent":["export const DEFAULT_ANIMATION_TIMING_FN = 'ease';\nexport const DEFAULT_ANIMATION_DURATION = '250ms';\nexport const DEFAULT_ANIMATION_PARAMS = {\n timingFn: DEFAULT_ANIMATION_TIMING_FN,\n duration: DEFAULT_ANIMATION_DURATION,\n delay: '0ms',\n};\n","import { animate, animation, style } from '@angular/animations';\nimport { DEFAULT_ANIMATION_PARAMS } from './config';\n\n/**\n * Animation for smoothly expanding an element from height 0 to its natural height.\n * It transitions the element's height, padding, margin, and opacity from a collapsed state to an expanded state,\n * making the element smoothly grow into view.\n *\n * The `expand` animation uses `DEFAULT_ANIMATION_PARAMS` for its default parameters, which can be overridden\n * when using the animation.\n *\n * @example\n * ```ts\n * // Example usage in an Angular component\n * import { expand, collapse } from '@odx/angular/animations';\n *\n * @Component({\n * selector: 'my-expandable-component',\n * templateUrl: './expandable-component.html',\n * animations: [\n * trigger('expandCollapse', [\n * transition('collapsed => expanded', useAnimation(expand)),\n * transition('expanded => collapsed', useAnimation(collapse)),\n * ])\n * ]\n * })\n * export class ExpandableComponent {\n * state = 'collapsed';\n *\n * toggle(): void {\n * this.state = this.state === 'collapsed' ? 'expanded' : 'collapsed';\n * }\n * }\n * ```\n *\n * The animation smoothly transitions various properties (height, padding, margin, and opacity) and is controlled\n * through parameters defined in `DEFAULT_ANIMATION_PARAMS` or those provided during usage.\n */\nexport const expand = animation(\n [\n style({ height: 0, minHeight: 0, paddingTop: 0, paddingBottom: 0, opacity: 0, marginTop: 0, marginBottom: 0, overflow: 'hidden' }),\n animate(\n '{{duration}} {{ delay }} {{ timingFn }}',\n style({ height: '*', paddingTop: '*', paddingBottom: '*', opacity: 1, marginTop: '*', marginBottom: '*' }),\n ),\n ],\n {\n params: DEFAULT_ANIMATION_PARAMS,\n },\n);\n\n/**\n * Animation for smoothly collapsing an element from its natural height to height 0.\n * It transitions the element's height, padding, margin, and opacity from an expanded state to a collapsed state,\n * making the element smoothly shrink out of view.\n *\n * The `collapse` animation also uses `DEFAULT_ANIMATION_PARAMS` for its default parameters, which can be overridden\n * when using the animation. It's designed to be used in conjunction with the `expand` animation for creating\n * expandable/collapsible elements.\n */\nexport const collapse = animation(\n [\n animate(\n '{{duration}} {{ delay }} {{ timingFn }}',\n style({ height: 0, minHeight: 0, paddingTop: 0, paddingBottom: 0, opacity: 0, marginTop: 0, marginBottom: 0, overflow: 'hidden' }),\n ),\n ],\n {\n params: DEFAULT_ANIMATION_PARAMS,\n },\n);\n","import { animate, animation, style } from '@angular/animations';\nimport { DEFAULT_ANIMATION_PARAMS } from './config';\n\n/**\n * Generates a fadeIn animation with customizable opacity target.\n * This animation gradually changes the element's opacity from 0 to a specified value, creating a \"fade in\" visual effect.\n *\n * @param {number} to - The final opacity value of the element at the end of the animation. Defaults to 1 (fully opaque).\n * @returns {AnimationReferenceMetadata} An Angular animation object that can be used with Angular's animation system.\n *\n * @example\n * ```ts\n * // Example usage in an Angular component with a fadeIn animation\n * import { fadeIn } from '@odx/angular/animations';\n * import { trigger, transition, useAnimation } from '@angular/animations';\n *\n * @Component({\n * selector: 'app-fade-in-example',\n * template: `\n * @if(isVisible) {\n * <div @fadeInAnimation>Fade In Content</div>\n * }\n * <button (click)=\"showContent()\">Show Content</button>`,\n * animations: [\n * trigger('fadeInAnimation', [\n * transition(':enter', useAnimation(fadeIn(), { params: { duration: '500ms' } }))\n * ])\n * ]\n * })\n * export class FadeInExampleComponent {\n * isVisible = false;\n *\n * showContent(): void {\n * this.isVisible = true;\n * }\n * }\n * ```\n *\n * This example demonstrates how to apply the fadeIn animation to an element, making it smoothly appear on the screen.\n */\nexport const fadeIn = (to = 1) =>\n animation([style({ opacity: 0 }), animate('{{duration}} {{ delay }} {{ timingFn }}', style({ opacity: to }))], {\n params: DEFAULT_ANIMATION_PARAMS,\n });\n\n/**\n * Generates a fadeOut animation with customizable opacity target.\n * This animation gradually changes the element's opacity from its current value to a specified value, creating a \"fade out\" visual effect.\n *\n * @param {number} to - The target opacity value of the element at the end of the animation. Defaults to 0 (fully transparent).\n * @returns {AnimationReferenceMetadata} An Angular animation object that can be used with Angular's animation system.\n *\n * @example\n * ```ts\n * // Example usage in an Angular component with a fadeOut animation\n * import { fadeOut } from '@odx/angular/animations';\n * import { trigger, transition, useAnimation } from '@angular/animations';\n *\n * @Component({\n * selector: 'app-fade-out-example',\n * template: `\n * @if(isVisible) {\n * <div @fadeOutAnimation>Fade Out Content</div>\n * }\n * <button (click)=\"hideContent()\">Hide Content</button>`,\n * animations: [\n * trigger('fadeOutAnimation', [\n * transition(':leave', useAnimation(fadeOut(), { params: { duration: '500ms' } }))\n * ])\n * ]\n * })\n * export class FadeOutExampleComponent {\n * isVisible = true;\n *\n * hideContent(): void {\n * this.isVisible = false;\n * }\n * }\n * ```\n *\n * This example demonstrates how to apply the fadeOut animation to an element, making it smoothly disappear from the screen.\n */\nexport const fadeOut = (to = 0) =>\n animation([animate('{{duration}} {{ delay }} {{ timingFn }}', style({ opacity: to }))], {\n params: DEFAULT_ANIMATION_PARAMS,\n });\n","import { animate, animation, AnimationReferenceMetadata, style } from '@angular/animations';\nimport { DEFAULT_ANIMATION_PARAMS } from './config';\n\nfunction createSlideInAnimation(from: string, direction: 'X' | 'Y'): AnimationReferenceMetadata {\n return animation(\n [\n style({ transform: `translate${direction}({{ from }})` }),\n animate('{{duration}} {{ delay }} {{ timingFn }}', style({ transform: `translate${direction}(0)` })),\n ],\n {\n params: {\n ...DEFAULT_ANIMATION_PARAMS,\n from,\n },\n },\n );\n}\n\nfunction createSlideOutAnimation(to: string, direction: 'X' | 'Y'): AnimationReferenceMetadata {\n return animation([animate('{{duration}} {{ delay }} {{ timingFn }}', style({ transform: `translate${direction}({{ to }})` }))], {\n params: {\n ...DEFAULT_ANIMATION_PARAMS,\n to,\n },\n });\n}\n\n/**\n * Utility functions for creating slide-in and slide-out animations in specific directions.\n * These include slideInX, slideInY, slideInDown, slideInUp, slideInLeft, slideInRight,\n * slideOutX, slideOutY, slideOutDown, slideOutUp, slideOutLeft, and slideOutRight.\n * Each function is configured for a specific slide direction and distance, making it easy to apply\n * consistent slide animations across your application.\n *\n * @example\n * ```ts\n * // Using slideInLeft and slideOutRight in a component\n * animations: [\n * trigger('slideInOut', [\n * transition(':enter', [useAnimation(slideInLeft)]),\n * transition(':leave', [useAnimation(slideOutRight)])\n * ])\n * ]\n * ```\n *\n * Note: The 'from' and 'to' parameters for slideIn and slideOut functions respectively\n * can be customized for different slide distances.\n */\nexport const slideInX = (from: string) => createSlideInAnimation(from, 'X');\nexport const slideInY = (from: string) => createSlideInAnimation(from, 'Y');\nexport const slideInDown = slideInY('-100%');\nexport const slideInUp = slideInY('100%');\nexport const slideInLeft = slideInX('-100%');\nexport const slideInRight = slideInX('100%');\n\nexport const slideOutX = (to: string) => createSlideOutAnimation(to, 'X');\nexport const slideOutY = (to: string) => createSlideOutAnimation(to, 'Y');\nexport const slideOutDown = slideOutY('100%');\nexport const slideOutUp = slideOutY('-100%');\nexport const slideOutLeft = slideOutX('-100%');\nexport const slideOutRight = slideOutX('100%');\n","import { animateChild, query, transition } from '@angular/animations';\n\n/**\n * Utility animation that waits for animations on child components to complete.\n * This animation should be used within parent components that have child components with their\n * own animations. It ensures that the parent's enter and leave animations are only triggered\n * after all child animations have completed, creating a seamless animation sequence.\n *\n * This utility uses Angular's animation functions `query` and `animateChild` to find and animate\n * child elements marked with Angular's animation triggers. The `{ optional: true }` parameter\n * ensures that the animation gracefully handles cases where no child animations are defined.\n *\n * @example\n * ```ts\n * // Using waitForChildAnimations in a parent component with children that have animations\n * import { trigger, transition, style, animate, query, animateChild } from '@angular/animations';\n * import { waitForChildAnimations } from '@odx/angular/animations';\n *\n * @Component({\n * selector: 'app-parent',\n * templateUrl: './parent.component.html',\n * animations: [\n * trigger('parentAnimation', [\n * // Define parent animations here\n * transition(':enter', [style({ opacity: 0 }), animate('0.5s ease-in', style({ opacity: 1 }))]),\n * transition(':leave', [animate('0.5s ease-out', style({ opacity: 0 }))]),\n * // Use waitForChildAnimations for coordinating with child animations\n * waitForChildAnimations\n * ])\n * ]\n * })\n * export class ParentComponent {\n * // Component logic here\n * }\n * ```\n *\n * Note: The `waitForChildAnimations` utility is added to the parent component's animation triggers,\n * ensuring that any child component animations are completed before continuing with the parent's\n * own animations.\n */\nexport const waitForChildAnimations = transition(':enter, :leave', [query('@*', animateChild(), { optional: true })]);\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-animations.mjs","sources":["../../../../libs/angular/animations/src/lib/config.ts","../../../../libs/angular/animations/src/lib/expand.ts","../../../../libs/angular/animations/src/lib/fade.ts","../../../../libs/angular/animations/src/lib/slide.ts","../../../../libs/angular/animations/src/lib/wait-for-child-animations.ts","../../../../libs/angular/animations/src/odx-angular-animations.ts"],"sourcesContent":["export const DEFAULT_ANIMATION_TIMING_FN = 'ease';\nexport const DEFAULT_ANIMATION_DURATION = '250ms';\nexport const DEFAULT_ANIMATION_PARAMS = {\n timingFn: DEFAULT_ANIMATION_TIMING_FN,\n duration: DEFAULT_ANIMATION_DURATION,\n delay: '0ms',\n};\n","import { animate, animation, style } from '@angular/animations';\nimport { DEFAULT_ANIMATION_PARAMS } from './config';\n\n/**\n * Animation for smoothly expanding an element from height 0 to its natural height.\n * It transitions the element's height, padding, margin, and opacity from a collapsed state to an expanded state,\n * making the element smoothly grow into view.\n *\n * The `expand` animation uses `DEFAULT_ANIMATION_PARAMS` for its default parameters, which can be overridden\n * when using the animation.\n *\n * @example\n * ```ts\n * // Example usage in an Angular component\n * import { expand, collapse } from '@odx/angular/animations';\n *\n * @Component({\n * selector: 'my-expandable-component',\n * templateUrl: './expandable-component.html',\n * animations: [\n * trigger('expandCollapse', [\n * transition('collapsed => expanded', useAnimation(expand)),\n * transition('expanded => collapsed', useAnimation(collapse)),\n * ])\n * ]\n * })\n * export class ExpandableComponent {\n * state = 'collapsed';\n *\n * toggle(): void {\n * this.state = this.state === 'collapsed' ? 'expanded' : 'collapsed';\n * }\n * }\n * ```\n *\n * The animation smoothly transitions various properties (height, padding, margin, and opacity) and is controlled\n * through parameters defined in `DEFAULT_ANIMATION_PARAMS` or those provided during usage.\n */\nexport const expand = animation(\n [\n style({ height: 0, minHeight: 0, paddingTop: 0, paddingBottom: 0, opacity: 0, marginTop: 0, marginBottom: 0, overflow: 'hidden' }),\n animate(\n '{{duration}} {{ delay }} {{ timingFn }}',\n style({ height: '*', paddingTop: '*', paddingBottom: '*', opacity: 1, marginTop: '*', marginBottom: '*' }),\n ),\n ],\n {\n params: DEFAULT_ANIMATION_PARAMS,\n },\n);\n\n/**\n * Animation for smoothly collapsing an element from its natural height to height 0.\n * It transitions the element's height, padding, margin, and opacity from an expanded state to a collapsed state,\n * making the element smoothly shrink out of view.\n *\n * The `collapse` animation also uses `DEFAULT_ANIMATION_PARAMS` for its default parameters, which can be overridden\n * when using the animation. It's designed to be used in conjunction with the `expand` animation for creating\n * expandable/collapsible elements.\n */\nexport const collapse = animation(\n [\n animate(\n '{{duration}} {{ delay }} {{ timingFn }}',\n style({ height: 0, minHeight: 0, paddingTop: 0, paddingBottom: 0, opacity: 0, marginTop: 0, marginBottom: 0, overflow: 'hidden' }),\n ),\n ],\n {\n params: DEFAULT_ANIMATION_PARAMS,\n },\n);\n","import { animate, animation, style } from '@angular/animations';\nimport { DEFAULT_ANIMATION_PARAMS } from './config';\n\n/**\n * Generates a fadeIn animation with customizable opacity target.\n * This animation gradually changes the element's opacity from 0 to a specified value, creating a \"fade in\" visual effect.\n *\n * @param {number} to - The final opacity value of the element at the end of the animation. Defaults to 1 (fully opaque).\n * @returns {AnimationReferenceMetadata} An Angular animation object that can be used with Angular's animation system.\n *\n * @example\n * ```ts\n * // Example usage in an Angular component with a fadeIn animation\n * import { fadeIn } from '@odx/angular/animations';\n * import { trigger, transition, useAnimation } from '@angular/animations';\n *\n * @Component({\n * selector: 'app-fade-in-example',\n * template: `\n * @if(isVisible) {\n * <div @fadeInAnimation>Fade In Content</div>\n * }\n * <button (click)=\"showContent()\">Show Content</button>`,\n * animations: [\n * trigger('fadeInAnimation', [\n * transition(':enter', useAnimation(fadeIn(), { params: { duration: '500ms' } }))\n * ])\n * ]\n * })\n * export class FadeInExampleComponent {\n * isVisible = false;\n *\n * showContent(): void {\n * this.isVisible = true;\n * }\n * }\n * ```\n *\n * This example demonstrates how to apply the fadeIn animation to an element, making it smoothly appear on the screen.\n */\nexport const fadeIn = (to = 1) =>\n animation([style({ opacity: 0 }), animate('{{duration}} {{ delay }} {{ timingFn }}', style({ opacity: to }))], {\n params: DEFAULT_ANIMATION_PARAMS,\n });\n\n/**\n * Generates a fadeOut animation with customizable opacity target.\n * This animation gradually changes the element's opacity from its current value to a specified value, creating a \"fade out\" visual effect.\n *\n * @param {number} to - The target opacity value of the element at the end of the animation. Defaults to 0 (fully transparent).\n * @returns {AnimationReferenceMetadata} An Angular animation object that can be used with Angular's animation system.\n *\n * @example\n * ```ts\n * // Example usage in an Angular component with a fadeOut animation\n * import { fadeOut } from '@odx/angular/animations';\n * import { trigger, transition, useAnimation } from '@angular/animations';\n *\n * @Component({\n * selector: 'app-fade-out-example',\n * template: `\n * @if(isVisible) {\n * <div @fadeOutAnimation>Fade Out Content</div>\n * }\n * <button (click)=\"hideContent()\">Hide Content</button>`,\n * animations: [\n * trigger('fadeOutAnimation', [\n * transition(':leave', useAnimation(fadeOut(), { params: { duration: '500ms' } }))\n * ])\n * ]\n * })\n * export class FadeOutExampleComponent {\n * isVisible = true;\n *\n * hideContent(): void {\n * this.isVisible = false;\n * }\n * }\n * ```\n *\n * This example demonstrates how to apply the fadeOut animation to an element, making it smoothly disappear from the screen.\n */\nexport const fadeOut = (to = 0) =>\n animation([animate('{{duration}} {{ delay }} {{ timingFn }}', style({ opacity: to }))], {\n params: DEFAULT_ANIMATION_PARAMS,\n });\n","import { animate, animation, AnimationReferenceMetadata, style } from '@angular/animations';\nimport { DEFAULT_ANIMATION_PARAMS } from './config';\n\nfunction createSlideInAnimation(from: string, direction: 'X' | 'Y'): AnimationReferenceMetadata {\n return animation(\n [\n style({ transform: `translate${direction}({{ from }})` }),\n animate('{{duration}} {{ delay }} {{ timingFn }}', style({ transform: `translate${direction}(0)` })),\n ],\n {\n params: {\n ...DEFAULT_ANIMATION_PARAMS,\n from,\n },\n },\n );\n}\n\nfunction createSlideOutAnimation(to: string, direction: 'X' | 'Y'): AnimationReferenceMetadata {\n return animation([animate('{{duration}} {{ delay }} {{ timingFn }}', style({ transform: `translate${direction}({{ to }})` }))], {\n params: {\n ...DEFAULT_ANIMATION_PARAMS,\n to,\n },\n });\n}\n\n/**\n * Utility functions for creating slide-in and slide-out animations in specific directions.\n * These include slideInX, slideInY, slideInDown, slideInUp, slideInLeft, slideInRight,\n * slideOutX, slideOutY, slideOutDown, slideOutUp, slideOutLeft, and slideOutRight.\n * Each function is configured for a specific slide direction and distance, making it easy to apply\n * consistent slide animations across your application.\n *\n * @example\n * ```ts\n * // Using slideInLeft and slideOutRight in a component\n * animations: [\n * trigger('slideInOut', [\n * transition(':enter', [useAnimation(slideInLeft)]),\n * transition(':leave', [useAnimation(slideOutRight)])\n * ])\n * ]\n * ```\n *\n * Note: The 'from' and 'to' parameters for slideIn and slideOut functions respectively\n * can be customized for different slide distances.\n */\nexport const slideInX = (from: string) => createSlideInAnimation(from, 'X');\nexport const slideInY = (from: string) => createSlideInAnimation(from, 'Y');\nexport const slideInDown = slideInY('-100%');\nexport const slideInUp = slideInY('100%');\nexport const slideInLeft = slideInX('-100%');\nexport const slideInRight = slideInX('100%');\n\nexport const slideOutX = (to: string) => createSlideOutAnimation(to, 'X');\nexport const slideOutY = (to: string) => createSlideOutAnimation(to, 'Y');\nexport const slideOutDown = slideOutY('100%');\nexport const slideOutUp = slideOutY('-100%');\nexport const slideOutLeft = slideOutX('-100%');\nexport const slideOutRight = slideOutX('100%');\n","import { animateChild, query, transition } from '@angular/animations';\n\n/**\n * Utility animation that waits for animations on child components to complete.\n * This animation should be used within parent components that have child components with their\n * own animations. It ensures that the parent's enter and leave animations are only triggered\n * after all child animations have completed, creating a seamless animation sequence.\n *\n * This utility uses Angular's animation functions `query` and `animateChild` to find and animate\n * child elements marked with Angular's animation triggers. The `{ optional: true }` parameter\n * ensures that the animation gracefully handles cases where no child animations are defined.\n *\n * @example\n * ```ts\n * // Using waitForChildAnimations in a parent component with children that have animations\n * import { trigger, transition, style, animate, query, animateChild } from '@angular/animations';\n * import { waitForChildAnimations } from '@odx/angular/animations';\n *\n * @Component({\n * selector: 'app-parent',\n * templateUrl: './parent.component.html',\n * animations: [\n * trigger('parentAnimation', [\n * // Define parent animations here\n * transition(':enter', [style({ opacity: 0 }), animate('0.5s ease-in', style({ opacity: 1 }))]),\n * transition(':leave', [animate('0.5s ease-out', style({ opacity: 0 }))]),\n * // Use waitForChildAnimations for coordinating with child animations\n * waitForChildAnimations\n * ])\n * ]\n * })\n * export class ParentComponent {\n * // Component logic here\n * }\n * ```\n *\n * Note: The `waitForChildAnimations` utility is added to the parent component's animation triggers,\n * ensuring that any child component animations are completed before continuing with the parent's\n * own animations.\n */\nexport const waitForChildAnimations = transition(':enter, :leave', [query('@*', animateChild(), { optional: true })]);\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 { createConfigTokens, untilDestroyed, coerceArray } from '@odx/angular/utils';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, Injectable, TemplateRef, ViewContainerRef, Input, Directive, NgModule } from '@angular/core';
3
+ import { inject, Injectable, TemplateRef, ViewContainerRef, Directive, Input, NgModule } from '@angular/core';
4
4
  import { of, map, distinctUntilChanged, shareReplay, BehaviorSubject, switchMap, tap } from 'rxjs';
5
5
  import { BreakpointObserver } from '@angular/cdk/layout';
6
6