@decaf-ts/for-angular 0.0.10 → 0.0.12

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 (163) hide show
  1. package/dist/for-angular/cli/cli-module.d.ts +22 -0
  2. package/dist/for-angular/cli/cli-module.d.ts.map +1 -0
  3. package/dist/for-angular/cli/cli-module.js +131 -0
  4. package/dist/for-angular/cli/cli-module.js.map +1 -0
  5. package/dist/{components → lib/components}/component-renderer/component-renderer.component.d.ts +1 -0
  6. package/dist/lib/components/component-renderer/component-renderer.component.d.ts.map +1 -0
  7. package/dist/{components → lib/components}/crud-field/crud-field.component.d.ts +1 -0
  8. package/dist/lib/components/crud-field/crud-field.component.d.ts.map +1 -0
  9. package/dist/{components → lib/components}/crud-form/constants.d.ts +1 -0
  10. package/dist/lib/components/crud-form/constants.d.ts.map +1 -0
  11. package/dist/{components → lib/components}/crud-form/crud-form.component.d.ts +1 -0
  12. package/dist/lib/components/crud-form/crud-form.component.d.ts.map +1 -0
  13. package/dist/{components → lib/components}/crud-form/types.d.ts +1 -0
  14. package/dist/lib/components/crud-form/types.d.ts.map +1 -0
  15. package/dist/{components → lib/components}/empty-state/empty-state.component.d.ts +1 -0
  16. package/dist/lib/components/empty-state/empty-state.component.d.ts.map +1 -0
  17. package/dist/{components → lib/components}/fieldset/fieldset.component.d.ts +1 -0
  18. package/dist/lib/components/fieldset/fieldset.component.d.ts.map +1 -0
  19. package/dist/{components → lib/components}/filter/filter.component.d.ts +1 -0
  20. package/dist/lib/components/filter/filter.component.d.ts.map +1 -0
  21. package/dist/{components → lib/components}/for-angular-components.module.d.ts +1 -0
  22. package/dist/lib/components/for-angular-components.module.d.ts.map +1 -0
  23. package/dist/{components → lib/components}/index.d.ts +1 -0
  24. package/dist/lib/components/index.d.ts.map +1 -0
  25. package/dist/{components → lib/components}/layout/layout.component.d.ts +1 -0
  26. package/dist/lib/components/layout/layout.component.d.ts.map +1 -0
  27. package/dist/{components → lib/components}/list/constants.d.ts +1 -0
  28. package/dist/lib/components/list/constants.d.ts.map +1 -0
  29. package/dist/{components → lib/components}/list/list.component.d.ts +1 -0
  30. package/dist/lib/components/list/list.component.d.ts.map +1 -0
  31. package/dist/{components → lib/components}/list-item/list-item.component.d.ts +1 -0
  32. package/dist/lib/components/list-item/list-item.component.d.ts.map +1 -0
  33. package/dist/{components → lib/components}/model-renderer/model-renderer.component.d.ts +1 -0
  34. package/dist/lib/components/model-renderer/model-renderer.component.d.ts.map +1 -0
  35. package/dist/{components → lib/components}/pagination/constants.d.ts +1 -0
  36. package/dist/lib/components/pagination/constants.d.ts.map +1 -0
  37. package/dist/{components → lib/components}/pagination/pagination.component.d.ts +1 -0
  38. package/dist/lib/components/pagination/pagination.component.d.ts.map +1 -0
  39. package/dist/{components → lib/components}/searchbar/searchbar.component.d.ts +1 -0
  40. package/dist/lib/components/searchbar/searchbar.component.d.ts.map +1 -0
  41. package/dist/lib/decaf-ts-for-angular.d.ts.map +1 -0
  42. package/dist/{directives → lib/directives}/collapsable.directive.d.ts +1 -0
  43. package/dist/lib/directives/collapsable.directive.d.ts.map +1 -0
  44. package/dist/{directives → lib/directives}/index.d.ts +1 -0
  45. package/dist/lib/directives/index.d.ts.map +1 -0
  46. package/dist/{engine → lib/engine}/DynamicModule.d.ts +1 -0
  47. package/dist/lib/engine/DynamicModule.d.ts.map +1 -0
  48. package/dist/{engine → lib/engine}/NgxBaseComponent.d.ts +1 -0
  49. package/dist/lib/engine/NgxBaseComponent.d.ts.map +1 -0
  50. package/dist/{engine → lib/engine}/NgxCrudFormField.d.ts +1 -0
  51. package/dist/lib/engine/NgxCrudFormField.d.ts.map +1 -0
  52. package/dist/{engine → lib/engine}/NgxFormService.d.ts +1 -0
  53. package/dist/lib/engine/NgxFormService.d.ts.map +1 -0
  54. package/dist/{engine → lib/engine}/NgxRenderingEngine.d.ts +1 -0
  55. package/dist/lib/engine/NgxRenderingEngine.d.ts.map +1 -0
  56. package/dist/{engine → lib/engine}/NgxRenderingEngine2.d.ts +1 -0
  57. package/dist/lib/engine/NgxRenderingEngine2.d.ts.map +1 -0
  58. package/dist/{engine → lib/engine}/ValidatorFactory.d.ts +1 -0
  59. package/dist/lib/engine/ValidatorFactory.d.ts.map +1 -0
  60. package/dist/{engine → lib/engine}/constants.d.ts +1 -0
  61. package/dist/lib/engine/constants.d.ts.map +1 -0
  62. package/dist/{engine → lib/engine}/decorators.d.ts +1 -0
  63. package/dist/lib/engine/decorators.d.ts.map +1 -0
  64. package/dist/{engine → lib/engine}/index.d.ts +1 -0
  65. package/dist/lib/engine/index.d.ts.map +1 -0
  66. package/dist/{engine → lib/engine}/types.d.ts +1 -0
  67. package/dist/lib/engine/types.d.ts.map +1 -0
  68. package/dist/lib/esm2022/components/component-renderer/component-renderer.component.mjs +359 -0
  69. package/dist/lib/esm2022/components/crud-field/crud-field.component.mjs +456 -0
  70. package/dist/lib/esm2022/components/crud-form/constants.mjs +14 -0
  71. package/dist/lib/esm2022/components/crud-form/crud-form.component.mjs +272 -0
  72. package/dist/lib/esm2022/components/crud-form/types.mjs +2 -0
  73. package/dist/lib/esm2022/components/empty-state/empty-state.component.mjs +410 -0
  74. package/dist/lib/esm2022/components/fieldset/fieldset.component.mjs +250 -0
  75. package/dist/lib/esm2022/components/filter/filter.component.mjs +906 -0
  76. package/dist/lib/esm2022/components/for-angular-components.module.mjs +72 -0
  77. package/dist/lib/esm2022/components/index.mjs +20 -0
  78. package/dist/lib/esm2022/components/layout/layout.component.mjs +245 -0
  79. package/dist/lib/esm2022/components/list/constants.mjs +6 -0
  80. package/dist/lib/esm2022/components/list/list.component.mjs +1405 -0
  81. package/dist/lib/esm2022/components/list-item/list-item.component.mjs +612 -0
  82. package/dist/lib/esm2022/components/model-renderer/model-renderer.component.mjs +182 -0
  83. package/dist/lib/esm2022/components/pagination/constants.mjs +2 -0
  84. package/dist/lib/esm2022/components/pagination/pagination.component.mjs +364 -0
  85. package/dist/lib/esm2022/components/searchbar/searchbar.component.mjs +503 -0
  86. package/dist/lib/esm2022/decaf-ts-for-angular.mjs +5 -0
  87. package/dist/lib/esm2022/directives/collapsable.directive.mjs +28 -0
  88. package/dist/lib/esm2022/directives/index.mjs +2 -0
  89. package/dist/lib/esm2022/engine/DynamicModule.mjs +18 -0
  90. package/dist/lib/esm2022/engine/NgxBaseComponent.mjs +546 -0
  91. package/dist/lib/esm2022/engine/NgxCrudFormField.mjs +125 -0
  92. package/dist/lib/esm2022/engine/NgxFormService.mjs +315 -0
  93. package/dist/lib/esm2022/engine/NgxRenderingEngine.mjs +192 -0
  94. package/dist/lib/esm2022/engine/NgxRenderingEngine2.mjs +332 -0
  95. package/dist/lib/esm2022/engine/ValidatorFactory.mjs +102 -0
  96. package/dist/lib/esm2022/engine/constants.mjs +160 -0
  97. package/dist/lib/esm2022/engine/decorators.mjs +38 -0
  98. package/dist/lib/esm2022/engine/index.mjs +17 -0
  99. package/dist/lib/esm2022/engine/types.mjs +4 -0
  100. package/dist/lib/esm2022/for-angular.module.mjs +119 -0
  101. package/dist/lib/esm2022/helpers/index.mjs +13 -0
  102. package/dist/lib/esm2022/helpers/utils.mjs +415 -0
  103. package/dist/lib/esm2022/interfaces.mjs +2 -0
  104. package/dist/lib/esm2022/public-apis.mjs +14 -0
  105. package/dist/{fesm2022 → lib/fesm2022}/decaf-ts-for-angular.mjs +1805 -621
  106. package/dist/lib/fesm2022/decaf-ts-for-angular.mjs.map +1 -0
  107. package/dist/{for-angular.module.d.ts → lib/for-angular.module.d.ts} +1 -0
  108. package/dist/lib/for-angular.module.d.ts.map +1 -0
  109. package/dist/{helpers → lib/helpers}/index.d.ts +1 -0
  110. package/dist/lib/helpers/index.d.ts.map +1 -0
  111. package/dist/{helpers → lib/helpers}/utils.d.ts +1 -0
  112. package/dist/lib/helpers/utils.d.ts.map +1 -0
  113. package/dist/{index.d.ts → lib/index.d.ts} +1 -0
  114. package/dist/{interfaces.d.ts → lib/interfaces.d.ts} +1 -0
  115. package/dist/lib/interfaces.d.ts.map +1 -0
  116. package/dist/{public-apis.d.ts → lib/public-apis.d.ts} +1 -0
  117. package/dist/lib/public-apis.d.ts.map +1 -0
  118. package/package.json +3 -2
  119. package/dist/esm2022/components/component-renderer/component-renderer.component.mjs +0 -313
  120. package/dist/esm2022/components/crud-field/crud-field.component.mjs +0 -301
  121. package/dist/esm2022/components/crud-form/constants.mjs +0 -14
  122. package/dist/esm2022/components/crud-form/crud-form.component.mjs +0 -139
  123. package/dist/esm2022/components/crud-form/types.mjs +0 -2
  124. package/dist/esm2022/components/empty-state/empty-state.component.mjs +0 -348
  125. package/dist/esm2022/components/fieldset/fieldset.component.mjs +0 -225
  126. package/dist/esm2022/components/filter/filter.component.mjs +0 -689
  127. package/dist/esm2022/components/for-angular-components.module.mjs +0 -71
  128. package/dist/esm2022/components/index.mjs +0 -20
  129. package/dist/esm2022/components/layout/layout.component.mjs +0 -176
  130. package/dist/esm2022/components/list/constants.mjs +0 -6
  131. package/dist/esm2022/components/list/list.component.mjs +0 -1236
  132. package/dist/esm2022/components/list-item/list-item.component.mjs +0 -408
  133. package/dist/esm2022/components/model-renderer/model-renderer.component.mjs +0 -138
  134. package/dist/esm2022/components/pagination/constants.mjs +0 -2
  135. package/dist/esm2022/components/pagination/pagination.component.mjs +0 -323
  136. package/dist/esm2022/components/searchbar/searchbar.component.mjs +0 -493
  137. package/dist/esm2022/decaf-ts-for-angular.mjs +0 -5
  138. package/dist/esm2022/directives/collapsable.directive.mjs +0 -28
  139. package/dist/esm2022/directives/index.mjs +0 -2
  140. package/dist/esm2022/engine/DynamicModule.mjs +0 -18
  141. package/dist/esm2022/engine/NgxBaseComponent.mjs +0 -539
  142. package/dist/esm2022/engine/NgxCrudFormField.mjs +0 -125
  143. package/dist/esm2022/engine/NgxFormService.mjs +0 -315
  144. package/dist/esm2022/engine/NgxRenderingEngine.mjs +0 -192
  145. package/dist/esm2022/engine/NgxRenderingEngine2.mjs +0 -332
  146. package/dist/esm2022/engine/ValidatorFactory.mjs +0 -102
  147. package/dist/esm2022/engine/constants.mjs +0 -160
  148. package/dist/esm2022/engine/decorators.mjs +0 -38
  149. package/dist/esm2022/engine/index.mjs +0 -17
  150. package/dist/esm2022/engine/types.mjs +0 -4
  151. package/dist/esm2022/for-angular.module.mjs +0 -118
  152. package/dist/esm2022/helpers/index.mjs +0 -13
  153. package/dist/esm2022/helpers/utils.mjs +0 -415
  154. package/dist/esm2022/interfaces.mjs +0 -2
  155. package/dist/esm2022/public-apis.mjs +0 -14
  156. package/dist/fesm2022/decaf-ts-for-angular.mjs.map +0 -1
  157. /package/dist/{README.md → lib/README.md} +0 -0
  158. /package/dist/{assets → lib/assets}/i18n/en.json +0 -0
  159. /package/dist/{assets → lib/assets}/images/angular-logo.svg +0 -0
  160. /package/dist/{assets → lib/assets}/images/decaf-logo-black.svg +0 -0
  161. /package/dist/{assets → lib/assets}/images/decaf-logo-lw.svg +0 -0
  162. /package/dist/{assets → lib/assets}/images/decaf-logo-white.svg +0 -0
  163. /package/dist/{assets → lib/assets}/images/decaf-logo.svg +0 -0
@@ -0,0 +1,182 @@
1
+ import { Component, EventEmitter, inject, Injector, Input, Output, TemplateRef, ViewChild, ViewContainerRef, } from '@angular/core';
2
+ import { Model, sf } from '@decaf-ts/decorator-validation';
3
+ import { NgComponentOutlet } from '@angular/common';
4
+ import { AngularEngineKeys, BaseComponentProps, NgxRenderingEngine2, } from '../../engine';
5
+ import { ForAngularModule } from '../../for-angular.module';
6
+ import { ComponentRendererComponent } from '../component-renderer/component-renderer.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ const _c0 = ["inner"];
10
+ const _c1 = ["componentOuter"];
11
+ function ModelRendererComponent_ng_template_0_Template(rf, ctx) { }
12
+ function ModelRendererComponent_ng_template_2_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
13
+ i0.ɵɵelement(0, "ngx-decaf-component-renderer", 4);
14
+ } if (rf & 2) {
15
+ const child_r1 = i0.ɵɵnextContext().$implicit;
16
+ i0.ɵɵproperty("parent", child_r1);
17
+ } }
18
+ function ModelRendererComponent_ng_template_2_For_2_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementContainer(0, null, 2);
20
+ } }
21
+ function ModelRendererComponent_ng_template_2_For_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
22
+ i0.ɵɵtemplate(0, ModelRendererComponent_ng_template_2_For_2_Conditional_1_ng_container_0_Template, 2, 0, "ng-container", 5);
23
+ } if (rf & 2) {
24
+ const child_r1 = i0.ɵɵnextContext().$implicit;
25
+ i0.ɵɵproperty("ngComponentOutlet", child_r1.component)("ngComponentOutletInjector", child_r1.injector)("ngComponentOutletInputs", child_r1.inputs)("ngComponentOutletContent", child_r1.content);
26
+ } }
27
+ function ModelRendererComponent_ng_template_2_For_2_Template(rf, ctx) { if (rf & 1) {
28
+ i0.ɵɵtemplate(0, ModelRendererComponent_ng_template_2_For_2_Conditional_0_Template, 1, 1, "ngx-decaf-component-renderer", 4)(1, ModelRendererComponent_ng_template_2_For_2_Conditional_1_Template, 1, 4, "ng-container");
29
+ } if (rf & 2) {
30
+ const child_r1 = ctx.$implicit;
31
+ i0.ɵɵconditional((child_r1 == null ? null : child_r1.children == null ? null : child_r1.children.length) ? 0 : 1);
32
+ } }
33
+ function ModelRendererComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
34
+ i0.ɵɵelementStart(0, "div", 3);
35
+ i0.ɵɵrepeaterCreate(1, ModelRendererComponent_ng_template_2_For_2_Template, 2, 1, null, null, i0.ɵɵrepeaterTrackByIdentity);
36
+ i0.ɵɵelementEnd();
37
+ } if (rf & 2) {
38
+ const ctx_r1 = i0.ɵɵnextContext();
39
+ i0.ɵɵproperty("id", ctx_r1.rendererId || null);
40
+ i0.ɵɵadvance();
41
+ i0.ɵɵrepeater(ctx_r1.output == null ? null : ctx_r1.output.children);
42
+ } }
43
+ /**
44
+ * @description Component for rendering dynamic models
45
+ * @summary This component is responsible for dynamically rendering models,
46
+ * handling model changes, and managing event subscriptions for the rendered components.
47
+ * It uses the NgxRenderingEngine2 to render the models and supports both string and Model inputs.
48
+ * @class
49
+ * @template M - Type extending Model
50
+ * @param {Injector} injector - Angular Injector for dependency injection
51
+ * @example
52
+ * <ngx-decaf-model-renderer
53
+ * [model]="myModel"
54
+ * [globals]="globalVariables"
55
+ * (listenEvent)="handleEvent($event)">
56
+ * </ngx-decaf-model-renderer>
57
+ * @mermaid
58
+ * sequenceDiagram
59
+ * participant App
60
+ * participant ModelRenderer
61
+ * participant RenderingEngine
62
+ * participant Model
63
+ * App->>ModelRenderer: Input model
64
+ * ModelRenderer->>Model: Parse if string
65
+ * Model-->>ModelRenderer: Parsed model
66
+ * ModelRenderer->>RenderingEngine: Render model
67
+ * RenderingEngine-->>ModelRenderer: Rendered output
68
+ * ModelRenderer->>ModelRenderer: Subscribe to events
69
+ * ModelRenderer-->>App: Emit events
70
+ */
71
+ export class ModelRendererComponent {
72
+ constructor() {
73
+ /**
74
+ * @description Global variables to be passed to the rendered component
75
+ */
76
+ this.globals = {};
77
+ /**
78
+ * @description Event emitter for custom events from the rendered component
79
+ */
80
+ this.listenEvent = new EventEmitter();
81
+ this.injector = inject(Injector);
82
+ this.JSON = JSON;
83
+ }
84
+ // constructor() {}
85
+ /**
86
+ * @description Refreshes the rendered model
87
+ * @param {string | M} model - The model to be rendered
88
+ */
89
+ refresh(model) {
90
+ model =
91
+ typeof model === 'string'
92
+ ? Model.build({}, model)
93
+ : model;
94
+ this.output = model.render(this.globals || {}, this.vcr, this.injector, this.inner);
95
+ if (this.output?.inputs)
96
+ this.rendererId = sf(AngularEngineKeys.RENDERED_ID, this.output.inputs['rendererId']);
97
+ this.instance = this.output?.instance;
98
+ this.subscribeEvents();
99
+ }
100
+ /**
101
+ * @description Lifecycle hook that is called when data-bound properties of a directive change
102
+ * @param {SimpleChanges} changes - Object containing changes
103
+ */
104
+ ngOnChanges(changes) {
105
+ if (changes[BaseComponentProps.MODEL]) {
106
+ const { currentValue } = changes[BaseComponentProps.MODEL];
107
+ this.refresh(currentValue);
108
+ }
109
+ }
110
+ /**
111
+ * @description Lifecycle hook that is called when a directive, pipe, or service is destroyed
112
+ * @return {Promise<void>}
113
+ */
114
+ async ngOnDestroy() {
115
+ if (this.instance) {
116
+ this.unsubscribeEvents();
117
+ await NgxRenderingEngine2.destroy();
118
+ }
119
+ this.output = undefined;
120
+ }
121
+ subscribeEvents() {
122
+ if (this.instance) {
123
+ const componentKeys = Object.keys(this.instance);
124
+ for (const key of componentKeys) {
125
+ const value = this.instance[key];
126
+ if (value instanceof EventEmitter)
127
+ this.instance[key].subscribe((event) => {
128
+ this.listenEvent.emit({
129
+ component: this.output?.component.name || '',
130
+ name: key,
131
+ ...event,
132
+ });
133
+ });
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * @description Unsubscribes from events emitted by the rendered component
139
+ */
140
+ unsubscribeEvents() {
141
+ if (this.instance) {
142
+ const componentKeys = Object.keys(this.instance);
143
+ for (const key of componentKeys) {
144
+ const value = this.instance[key];
145
+ if (value instanceof EventEmitter)
146
+ this.instance[key].unsubscribe();
147
+ }
148
+ }
149
+ }
150
+ static { this.ɵfac = function ModelRendererComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ModelRendererComponent)(); }; }
151
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ModelRendererComponent, selectors: [["ngx-decaf-model-renderer"]], viewQuery: function ModelRendererComponent_Query(rf, ctx) { if (rf & 1) {
152
+ i0.ɵɵviewQuery(_c0, 7, TemplateRef);
153
+ i0.ɵɵviewQuery(_c1, 7, ViewContainerRef);
154
+ } if (rf & 2) {
155
+ let _t;
156
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.inner = _t.first);
157
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.vcr = _t.first);
158
+ } }, inputs: { model: "model", globals: "globals", rendererId: "rendererId" }, outputs: { listenEvent: "listenEvent" }, standalone: true, features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], decls: 4, vars: 0, consts: [["componentOuter", ""], ["inner", ""], ["childComponents", ""], [3, "id"], [3, "parent"], [4, "ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletInputs", "ngComponentOutletContent"]], template: function ModelRendererComponent_Template(rf, ctx) { if (rf & 1) {
159
+ i0.ɵɵtemplate(0, ModelRendererComponent_ng_template_0_Template, 0, 0, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(2, ModelRendererComponent_ng_template_2_Template, 3, 1, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
160
+ } }, dependencies: [ForAngularModule, i1.NgComponentOutlet, ComponentRendererComponent] }); }
161
+ }
162
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ModelRendererComponent, [{
163
+ type: Component,
164
+ args: [{ standalone: true, imports: [ForAngularModule, NgComponentOutlet, ComponentRendererComponent], selector: 'ngx-decaf-model-renderer', template: " <ng-template #componentOuter></ng-template>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child) {\n @if(child?.children?.length) {\n <ngx-decaf-component-renderer [parent]=\"child\" />\n } @else {\n <ng-container\n #childComponents\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n }\n }\n </div>\n </ng-template>\n" }]
165
+ }], null, { model: [{
166
+ type: Input,
167
+ args: [{ required: true }]
168
+ }], globals: [{
169
+ type: Input
170
+ }], inner: [{
171
+ type: ViewChild,
172
+ args: ['inner', { read: TemplateRef, static: true }]
173
+ }], rendererId: [{
174
+ type: Input
175
+ }], vcr: [{
176
+ type: ViewChild,
177
+ args: ['componentOuter', { static: true, read: ViewContainerRef }]
178
+ }], listenEvent: [{
179
+ type: Output
180
+ }] }); })();
181
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ModelRendererComponent, { className: "ModelRendererComponent", filePath: "components/model-renderer/model-renderer.component.ts", lineNumber: 65 }); })();
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vZGVsLXJlbmRlcmVyL21vZGVsLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2RlbC1yZW5kZXJlci9tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUVsQixtQkFBbUIsR0FFcEIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7SUN0QnRGLGtEQUFpRDs7O0lBQW5CLGlDQUFnQjs7O0lBRTlDLGlDQVFFOzs7SUFSRiwySEFRRTs7O0lBRmlCLEFBREEsQUFEQSxBQUZoQixzREFFZ0IsZ0RBQ0EsNENBQ0EsOENBRTdCOzs7SUFUVSxBQUZGLDRIQUE4Qiw0RkFFckI7OztJQUZULGlIQVlDOzs7SUFkTCw4QkFBZ0M7SUFDOUIsMkhBY0M7SUFDSCxpQkFBTTs7O0lBaEJBLDhDQUF5QjtJQUM3QixjQWNDO0lBZEQsb0VBY0M7O0FEWVA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztH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O1lBQ2pELEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksS0FBSyxZQUFZLFlBQVk7b0JBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3VIQXZJVSxzQkFBc0I7b0VBQXRCLHNCQUFzQjttQ0FtQkwsV0FBVzttQ0FpQlksZ0JBQWdCOzs7Ozs7WUNuR25FLEFBREEsd0hBQTZCLDJHQUNUOzRCRDBEVixnQkFBZ0Isd0JBQXFCLDBCQUEwQjs7aUZBSzlELHNCQUFzQjtjQVBsQyxTQUFTOzZCQUNJLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixDQUFDLFlBQ2hFLDBCQUEwQjtnQkFZcEMsS0FBSztrQkFESixLQUFLO21CQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQU96QixPQUFPO2tCQUROLEtBQUs7WUFPTixLQUFLO2tCQURKLFNBQVM7bUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBWXZELFVBQVU7a0JBRFQsS0FBSztZQU9OLEdBQUc7a0JBREYsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBT3JFLFdBQVc7a0JBRFYsTUFBTTs7a0ZBMUNJLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbCwgc2YgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgTmdDb21wb25lbnRPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQW5ndWxhckR5bmFtaWNPdXRwdXQsXG4gIEFuZ3VsYXJFbmdpbmVLZXlzLFxuICBCYXNlQ29tcG9uZW50UHJvcHMsXG4gIEJhc2VDdXN0b21FdmVudCxcbiAgTmd4UmVuZGVyaW5nRW5naW5lMixcbiAgUmVuZGVyZWRNb2RlbCxcbn0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IEtleVZhbHVlLCBSZW5kZXJlckN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgUmVuZGVyYWJsZSB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50LXJlbmRlcmVyL2NvbXBvbmVudC1yZW5kZXJlci5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgZm9yIHJlbmRlcmluZyBkeW5hbWljIG1vZGVsc1xuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIGR5bmFtaWNhbGx5IHJlbmRlcmluZyBtb2RlbHMsXG4gKiBoYW5kbGluZyBtb2RlbCBjaGFuZ2VzLCBhbmQgbWFuYWdpbmcgZXZlbnQgc3Vic2NyaXB0aW9ucyBmb3IgdGhlIHJlbmRlcmVkIGNvbXBvbmVudHMuXG4gKiBJdCB1c2VzIHRoZSBOZ3hSZW5kZXJpbmdFbmdpbmUyIHRvIHJlbmRlciB0aGUgbW9kZWxzIGFuZCBzdXBwb3J0cyBib3RoIHN0cmluZyBhbmQgTW9kZWwgaW5wdXRzLlxuICogQGNsYXNzXG4gKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIEFuZ3VsYXIgSW5qZWN0b3IgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogPG5neC1kZWNhZi1tb2RlbC1yZW5kZXJlclxuICogICBbbW9kZWxdPVwibXlNb2RlbFwiXG4gKiAgIFtnbG9iYWxzXT1cImdsb2JhbFZhcmlhYmxlc1wiXG4gKiAgIChsaXN0ZW5FdmVudCk9XCJoYW5kbGVFdmVudCgkZXZlbnQpXCI+XG4gKiA8L25neC1kZWNhZi1tb2RlbC1yZW5kZXJlcj5cbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQXBwXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsUmVuZGVyZXJcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIEFwcC0+Pk1vZGVsUmVuZGVyZXI6IElucHV0IG1vZGVsXG4gKiAgIE1vZGVsUmVuZGVyZXItPj5Nb2RlbDogUGFyc2UgaWYgc3RyaW5nXG4gKiAgIE1vZGVsLS0+Pk1vZGVsUmVuZGVyZXI6IFBhcnNlZCBtb2RlbFxuICogICBNb2RlbFJlbmRlcmVyLT4+UmVuZGVyaW5nRW5naW5lOiBSZW5kZXIgbW9kZWxcbiAqICAgUmVuZGVyaW5nRW5naW5lLS0+Pk1vZGVsUmVuZGVyZXI6IFJlbmRlcmVkIG91dHB1dFxuICogICBNb2RlbFJlbmRlcmVyLT4+TW9kZWxSZW5kZXJlcjogU3Vic2NyaWJlIHRvIGV2ZW50c1xuICogICBNb2RlbFJlbmRlcmVyLS0+PkFwcDogRW1pdCBldmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtGb3JBbmd1bGFyTW9kdWxlLCBOZ0NvbXBvbmVudE91dGxldCwgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRdLFxuICBzZWxlY3RvcjogJ25neC1kZWNhZi1tb2RlbC1yZW5kZXJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tb2RlbC1yZW5kZXJlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsUmVuZGVyZXJDb21wb25lbnQ8TSBleHRlbmRzIE1vZGVsPlxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBSZW5kZXJlZE1vZGVsIHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIElucHV0IG1vZGVsIHRvIGJlIHJlbmRlcmVkXG4gICAqIEBzdW1tYXJ5IENhbiBiZSBhIE1vZGVsIGluc3RhbmNlIG9yIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtb2RlbFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgbW9kZWwhOiBNIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2xvYmFsIHZhcmlhYmxlcyB0byBiZSBwYXNzZWQgdG8gdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgZ2xvYmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgaW5uZXIgY29udGVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnaW5uZXInLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgaW5uZXI/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIE91dHB1dCBvZiB0aGUgcmVuZGVyZWQgbW9kZWxcbiAgICovXG4gIG91dHB1dD86IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZW5kZXJlclxuICAgKi9cbiAgQElucHV0KClcbiAgcmVuZGVyZXJJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFZpZXcgY29udGFpbmVyIHJlZmVyZW5jZSBmb3IgZHluYW1pYyBjb21wb25lbnQgcmVuZGVyaW5nXG4gICAqL1xuICBAVmlld0NoaWxkKCdjb21wb25lbnRPdXRlcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIHZjciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBjdXN0b20gZXZlbnRzIGZyb20gdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGxpc3RlbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxSZW5kZXJlckN1c3RvbUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5zdGFuY2Ugb2YgdGhlIE5neFJlbmRlcmluZ0VuZ2luZTJcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyITogTmd4UmVuZGVyaW5nRW5naW5lMjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluc3RhbmNlIG9mIHRoZSByZW5kZXJlZCBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgaW5zdGFuY2UhOiBLZXlWYWx1ZSB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgLy8gY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmcmVzaGVzIHRoZSByZW5kZXJlZCBtb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IE19IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGJlIHJlbmRlcmVkXG4gICAqL1xuICBwcml2YXRlIHJlZnJlc2gobW9kZWw6IHN0cmluZyB8IE0pIHtcbiAgICBtb2RlbCA9XG4gICAgICB0eXBlb2YgbW9kZWwgPT09ICdzdHJpbmcnXG4gICAgICAgID8gKE1vZGVsLmJ1aWxkKHt9LCBtb2RlbCkgYXMgTSlcbiAgICAgICAgOiBtb2RlbDtcbiAgICB0aGlzLm91dHB1dCA9IChtb2RlbCBhcyB1bmtub3duIGFzIFJlbmRlcmFibGUpLnJlbmRlcjxBbmd1bGFyRHluYW1pY091dHB1dD4oXG4gICAgICB0aGlzLmdsb2JhbHMgfHwge30sXG4gICAgICB0aGlzLnZjcixcbiAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICB0aGlzLmlubmVyLFxuICAgICk7XG4gICAgaWYgKHRoaXMub3V0cHV0Py5pbnB1dHMpXG4gICAgICB0aGlzLnJlbmRlcmVySWQgPSBzZihcbiAgICAgICAgQW5ndWxhckVuZ2luZUtleXMuUkVOREVSRURfSUQsXG4gICAgICAgICh0aGlzLm91dHB1dC5pbnB1dHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydyZW5kZXJlcklkJ10gYXMgc3RyaW5nLFxuICAgICAgKTtcbiAgICB0aGlzLmluc3RhbmNlID0gdGhpcy5vdXRwdXQ/Lmluc3RhbmNlO1xuICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIHdoZW4gZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIG9mIGEgZGlyZWN0aXZlIGNoYW5nZVxuICAgKiBAcGFyYW0ge1NpbXBsZUNoYW5nZXN9IGNoYW5nZXMgLSBPYmplY3QgY29udGFpbmluZyBjaGFuZ2VzXG4gICAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbQmFzZUNvbXBvbmVudFByb3BzLk1PREVMXSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IGNoYW5nZXNbQmFzZUNvbXBvbmVudFByb3BzLk1PREVMXTtcbiAgICAgIHRoaXMucmVmcmVzaChjdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIGRpcmVjdGl2ZSwgcGlwZSwgb3Igc2VydmljZSBpcyBkZXN0cm95ZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIG5nT25EZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgICBhd2FpdCBOZ3hSZW5kZXJpbmdFbmdpbmUyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5vdXRwdXQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZUV2ZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgY29uc3QgY29tcG9uZW50S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2UpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29tcG9uZW50S2V5cykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKVxuICAgICAgICAgICh0aGlzLmluc3RhbmNlIGFzIEtleVZhbHVlKVtrZXldLnN1YnNjcmliZSgoZXZlbnQ6IFBhcnRpYWw8QmFzZUN1c3RvbUV2ZW50PikgPT4ge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5FdmVudC5lbWl0KHtcbiAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLm91dHB1dD8uY29tcG9uZW50Lm5hbWUgfHwgJycsXG4gICAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICB9IGFzIFJlbmRlcmVyQ3VzdG9tRXZlbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5zdWJzY3JpYmVzIGZyb20gZXZlbnRzIGVtaXR0ZWQgYnkgdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUV2ZW50cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgY29uc3QgY29tcG9uZW50S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5zdGFuY2UpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29tcG9uZW50S2V5cykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKVxuICAgICAgICAgIHRoaXMuaW5zdGFuY2Vba2V5XS51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBKU09OID0gSlNPTjtcbn1cbiIsIiAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRPdXRlcj48L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2lubmVyPlxuICAgIDxkaXYgIFtpZF09XCJyZW5kZXJlcklkIHx8IG51bGxcIj5cbiAgICAgIEBmb3IgKGNoaWxkIG9mIG91dHB1dD8uY2hpbGRyZW47IHRyYWNrIGNoaWxkKSB7XG4gICAgICAgIEBpZihjaGlsZD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIDxuZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyIFtwYXJlbnRdPVwiY2hpbGRcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAjY2hpbGRDb21wb25lbnRzXG4gICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgY2hpbGQuY29tcG9uZW50O1xuICAgICAgICAgICAgICBpbmplY3RvcjogY2hpbGQuaW5qZWN0b3I7XG4gICAgICAgICAgICAgIGlucHV0czogY2hpbGQuaW5wdXRzO1xuICAgICAgICAgICAgICBjb250ZW50OmNoaWxkLmNvbnRlbnQ7XG4gICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3BhZ2luYXRpb24vY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZW5naW5lXCJcblxuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbkN1c3RvbUV2ZW50ID0gQmFzZUN1c3RvbUV2ZW50ICYge1xuICBkYXRhOiB7XG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGRpcmVjdGlvbjogJ25leHQnIHwgJ3ByZXZpb3VzJ1xuICB9XG59XG4iXX0=
@@ -0,0 +1,364 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { IonIcon } from '@ionic/angular/standalone';
3
+ import { addIcons } from 'ionicons';
4
+ import { chevronBackOutline, chevronForwardOutline } from 'ionicons/icons';
5
+ import { ForAngularModule } from '../../for-angular.module';
6
+ import { NgxBaseComponent } from '../../engine/NgxBaseComponent';
7
+ import { EventConstants } from '../../engine';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@ngx-translate/core";
11
+ const _c0 = (a0, a1) => ({ value0: a0, value1: a1 });
12
+ const _c1 = a0 => ({ "dcf-disabled": a0 });
13
+ const _c2 = (a0, a1) => ({ "dcf-active": a0, "dcf-disabled": a1 });
14
+ function PaginationComponent_For_9_Template(rf, ctx) { if (rf & 1) {
15
+ const _r2 = i0.ɵɵgetCurrentView();
16
+ i0.ɵɵelementStart(0, "div", 8);
17
+ i0.ɵɵlistener("click", function PaginationComponent_For_9_Template_div_click_0_listener() { const page_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.navigate(page_r3["index"])); })("keydown.enter", function PaginationComponent_For_9_Template_div_keydown_enter_0_listener() { const page_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.navigate(page_r3["index"])); });
18
+ i0.ɵɵelementStart(1, "span", 10);
19
+ i0.ɵɵtext(2);
20
+ i0.ɵɵelementEnd()();
21
+ } if (rf & 2) {
22
+ const page_r3 = ctx.$implicit;
23
+ const ctx_r3 = i0.ɵɵnextContext();
24
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(2, _c2, ctx_r3.current === page_r3["index"], page_r3["index"] === ctx_r3.ndivl));
25
+ i0.ɵɵadvance(2);
26
+ i0.ɵɵtextInterpolate(page_r3["text"]);
27
+ } }
28
+ /**
29
+ * @description A pagination component for navigating through multiple pages of content.
30
+ * @summary This component provides a user interface for paginated content navigation,
31
+ * displaying page numbers and navigation controls. It supports customizable page counts,
32
+ * current page tracking, and emits events when users navigate between pages.
33
+ *
34
+ * The component intelligently handles large numbers of pages by showing a subset of page
35
+ * numbers with ellipses to indicate skipped pages, ensuring the UI remains clean and usable
36
+ * even with many pages.
37
+ *
38
+ * @mermaid
39
+ * sequenceDiagram
40
+ * participant U as User
41
+ * participant P as PaginationComponent
42
+ * participant E as External Component
43
+ *
44
+ * U->>P: Click page number
45
+ * P->>P: navigate(page)
46
+ * P->>P: handleClick(direction, page)
47
+ * P->>E: Emit clickEvent with PaginationCustomEvent
48
+ *
49
+ * U->>P: Click next button
50
+ * P->>P: next()
51
+ * P->>P: handleClick('next')
52
+ * P->>E: Emit clickEvent with PaginationCustomEvent
53
+ *
54
+ * U->>P: Click previous button
55
+ * P->>P: previous()
56
+ * P->>P: handleClick('previous')
57
+ * P->>E: Emit clickEvent with PaginationCustomEvent
58
+ *
59
+ * @example
60
+ * <ngx-decaf-pagination
61
+ * [pages]="10"
62
+ * [current]="3"
63
+ * (clickEvent)="handlePageChange($event)">
64
+ * </ngx-decaf-pagination>
65
+ *
66
+ * @extends {NgxBaseComponent}
67
+ * @implements {OnInit}
68
+ */
69
+ export class PaginationComponent extends NgxBaseComponent {
70
+ /**
71
+ * @constructor
72
+ * @description Initializes a new instance of the PaginationComponent.
73
+ * Calls the parent constructor with the component name for generate base locale string.
74
+ */
75
+ constructor() {
76
+ super("PaginationComponent");
77
+ /**
78
+ * @description Controls whether the component uses translation services.
79
+ * @summary When set to true, the component will attempt to use translation services
80
+ * for any text content. This allows for internationalization of the pagination component.
81
+ *
82
+ * @type {StringOrBoolean}
83
+ * @default true
84
+ * @memberOf PaginationComponent
85
+ */
86
+ this.translatable = true;
87
+ /**
88
+ * @description The currently active page number.
89
+ * @summary Specifies which page is currently active or selected. This value is used
90
+ * to highlight the current page in the UI and as a reference point for navigation.
91
+ *
92
+ * @type {number}
93
+ * @default 1
94
+ * @memberOf PaginationComponent
95
+ */
96
+ this.current = 1;
97
+ /**
98
+ * @description Event emitter for pagination navigation events.
99
+ * @summary Emits a custom event when users navigate between pages, either by clicking
100
+ * on page numbers or using the next/previous buttons. The event contains information
101
+ * about the navigation direction and the target page number.
102
+ *
103
+ * @type {EventEmitter<PaginationCustomEvent>}
104
+ * @memberOf PaginationComponent
105
+ */
106
+ this.clickEvent = new EventEmitter();
107
+ addIcons({ chevronBackOutline, chevronForwardOutline });
108
+ }
109
+ /**
110
+ * @description Initializes the component after Angular sets the input properties.
111
+ * @summary Sets up the component by initializing the locale settings based on the
112
+ * translatable property, generating the page numbers based on the total pages and
113
+ * current page, and storing the last page number for boundary checking.
114
+ *
115
+ * @mermaid
116
+ * sequenceDiagram
117
+ * participant A as Angular Lifecycle
118
+ * participant P as PaginationComponent
119
+ *
120
+ * A->>P: ngOnInit()
121
+ * P->>P: getLocale(translatable)
122
+ * P->>P: Set locale
123
+ * P->>P: getPages(data, current)
124
+ * P->>P: Set pages array
125
+ * P->>P: Set last page number
126
+ *
127
+ * @returns {void}
128
+ * @memberOf PaginationComponent
129
+ */
130
+ ngOnInit() {
131
+ this.locale = this.getLocale(this.translatable);
132
+ this.pages = this.getPages(this.totalPages, this.current);
133
+ this.last = this.totalPages;
134
+ }
135
+ /**
136
+ * @description Handles click events on pagination controls.
137
+ * @summary Processes user interactions with the pagination component, updating the
138
+ * current page if specified and emitting an event with navigation details. This method
139
+ * is called when users click on page numbers or navigation buttons.
140
+ *
141
+ * @param {('next' | 'previous')} direction - The direction of navigation
142
+ * @param {number} [page] - Optional page number to navigate to directly
143
+ * @returns {void}
144
+ *
145
+ * @mermaid
146
+ * sequenceDiagram
147
+ * participant U as User
148
+ * participant P as PaginationComponent
149
+ * participant E as External Component
150
+ *
151
+ * U->>P: Click pagination control
152
+ * P->>P: handleClick(direction, page?)
153
+ * alt page is provided
154
+ * P->>P: Update current page
155
+ * end
156
+ * P->>E: Emit clickEvent with direction and page
157
+ *
158
+ * @memberOf PaginationComponent
159
+ */
160
+ handleClick(direction, page) {
161
+ if (page)
162
+ this.current = page;
163
+ this.clickEvent.emit({
164
+ name: EventConstants.CLICK_EVENT,
165
+ data: {
166
+ direction,
167
+ page: this.current
168
+ },
169
+ component: this.componentName
170
+ });
171
+ }
172
+ /**
173
+ * @description Generates the array of page objects for display.
174
+ * @summary Creates an array of page objects based on the total number of pages and
175
+ * the current page. For small page counts (≤5), all pages are shown. For larger page
176
+ * counts, a subset is shown with ellipses to indicate skipped pages. This ensures
177
+ * the pagination UI remains clean and usable even with many pages.
178
+ *
179
+ * @param {number} total - The total number of pages
180
+ * @param {number} [current] - The current active page (defaults to this.current)
181
+ * @returns {KeyValue[]} Array of page objects with index and text properties
182
+ *
183
+ * @mermaid
184
+ * flowchart TD
185
+ * A[Start] --> B{total <= 5?}
186
+ * B -->|Yes| C[Show all pages]
187
+ * B -->|No| D[Show first page]
188
+ * D --> E[Show last pages]
189
+ * E --> F[Add ellipses for skipped pages]
190
+ * C --> G[Return pages array]
191
+ * F --> G
192
+ *
193
+ * @memberOf PaginationComponent
194
+ */
195
+ getPages(total, current) {
196
+ if (!current)
197
+ current = this.current;
198
+ const pages = [];
199
+ function getPage(index, text = '') {
200
+ if (pages.some(item => item['index'] === index))
201
+ return;
202
+ pages.push({ index, text: index != null ? index.toString().padStart(2, '0') : text });
203
+ }
204
+ if (total <= 5) {
205
+ for (let i = 1; i <= total; i++)
206
+ getPage(i);
207
+ }
208
+ else {
209
+ // Adiciona os dois primeiros
210
+ getPage(1);
211
+ getPage(2);
212
+ // Adiciona "..." entre os blocos
213
+ if (current && current > 3)
214
+ getPage(null, '...');
215
+ // Adiciona a página atual (se estiver no meio)
216
+ if (current && current > 2 && current < total - 1)
217
+ getPage(current);
218
+ // Adiciona "..." entre os blocos
219
+ if (current && current < total - 2)
220
+ getPage(null, '...');
221
+ // Adiciona os dois últimos
222
+ getPage(total - 1);
223
+ getPage(total);
224
+ }
225
+ return pages;
226
+ }
227
+ /**
228
+ * @description Gets the current active page number.
229
+ * @summary Returns the current page number that is active in the pagination component.
230
+ * This method provides a way to access the current page state from outside the component.
231
+ *
232
+ * @returns {number} The current page number
233
+ * @memberOf PaginationComponent
234
+ */
235
+ getCurrent() {
236
+ return this.current;
237
+ }
238
+ /**
239
+ * @description Navigates to the next page.
240
+ * @summary Increments the current page number if not at the last page and triggers
241
+ * the click event handler with 'next' direction. This method is typically called
242
+ * when the user clicks on the "next" button in the pagination UI.
243
+ *
244
+ * @returns {void}
245
+ *
246
+ * @mermaid
247
+ * sequenceDiagram
248
+ * participant U as User
249
+ * participant P as PaginationComponent
250
+ *
251
+ * U->>P: Click next button
252
+ * P->>P: next()
253
+ * alt page <= max pages
254
+ * P->>P: Increment current page
255
+ * P->>P: handleClick('next')
256
+ * end
257
+ *
258
+ * @memberOf PaginationComponent
259
+ */
260
+ next() {
261
+ const page = this.current + 1;
262
+ if (page <= Object.keys(this.pages)?.length || 0) {
263
+ this.current = page;
264
+ this.handleClick('next');
265
+ }
266
+ }
267
+ /**
268
+ * @description Navigates to the previous page.
269
+ * @summary Decrements the current page number if not at the first page and triggers
270
+ * the click event handler with 'previous' direction. This method is typically called
271
+ * when the user clicks on the "previous" button in the pagination UI.
272
+ *
273
+ * @returns {void}
274
+ *
275
+ * @mermaid
276
+ * sequenceDiagram
277
+ * participant U as User
278
+ * participant P as PaginationComponent
279
+ *
280
+ * U->>P: Click previous button
281
+ * P->>P: previous()
282
+ * alt page > 0
283
+ * P->>P: Decrement current page
284
+ * P->>P: handleClick('previous')
285
+ * end
286
+ *
287
+ * @memberOf PaginationComponent
288
+ */
289
+ previous() {
290
+ const page = this.current - 1;
291
+ if (page > 0) {
292
+ this.current = page;
293
+ this.handleClick('previous');
294
+ }
295
+ }
296
+ /**
297
+ * @description Navigates to a specific page number.
298
+ * @summary Updates the current page to the specified page number and triggers
299
+ * the click event handler with the appropriate direction. This method is typically
300
+ * called when the user clicks directly on a page number in the pagination UI.
301
+ *
302
+ * @param {number | null} page - The page number to navigate to
303
+ * @returns {void}
304
+ *
305
+ * @mermaid
306
+ * sequenceDiagram
307
+ * participant U as User
308
+ * participant P as PaginationComponent
309
+ *
310
+ * U->>P: Click page number
311
+ * P->>P: navigate(page)
312
+ * alt page is not null and different from current
313
+ * P->>P: Determine direction (next/previous)
314
+ * P->>P: handleClick(direction, page)
315
+ * end
316
+ *
317
+ * @memberOf PaginationComponent
318
+ */
319
+ navigate(page) {
320
+ if (page !== null && this.current !== page)
321
+ this.handleClick(page > this.current ? 'next' : 'previous', page);
322
+ }
323
+ static { this.ɵfac = function PaginationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationComponent)(); }; }
324
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaginationComponent, selectors: [["ngx-decaf-pagination"]], inputs: { totalPages: "totalPages", current: "current" }, outputs: { clickEvent: "clickEvent" }, standalone: true, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 12, vars: 13, consts: [["paginationComponent", ""], ["id", "dcf-paginator-container", 1, "dcf-flex", "dcf-flex-center"], [1, "dcf-width-1-1"], [1, "dcf-pagination-resume", 3, "innerHTML"], [1, "dcf-pagination", "aeon-pagination", "dcf-flex-center"], ["aria-label", "previous", "tabindex", "0", 3, "click", "keydown.enter", "ngClass"], ["name", "chevron-back-outline", "aria-hidden", "true"], ["tabindex", "0", 3, "ngClass"], ["tabindex", "0", 3, "click", "keydown.enter", "ngClass"], ["name", "chevron-forward-outline", "aria-hidden", "true"], [1, "page-item"]], template: function PaginationComponent_Template(rf, ctx) { if (rf & 1) {
325
+ const _r1 = i0.ɵɵgetCurrentView();
326
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
327
+ i0.ɵɵelement(2, "div", 3);
328
+ i0.ɵɵpipe(3, "translate");
329
+ i0.ɵɵelementStart(4, "div", 4, 0)(6, "div", 5);
330
+ i0.ɵɵlistener("click", function PaginationComponent_Template_div_click_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.previous()); })("keydown.enter", function PaginationComponent_Template_div_keydown_enter_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.previous()); });
331
+ i0.ɵɵelement(7, "ion-icon", 6);
332
+ i0.ɵɵelementEnd();
333
+ i0.ɵɵrepeaterCreate(8, PaginationComponent_For_9_Template, 3, 5, "div", 7, i0.ɵɵrepeaterTrackByIdentity);
334
+ i0.ɵɵelementStart(10, "div", 8);
335
+ i0.ɵɵlistener("click", function PaginationComponent_Template_div_click_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.next()); })("keydown.enter", function PaginationComponent_Template_div_keydown_enter_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.next()); });
336
+ i0.ɵɵelement(11, "ion-icon", 9);
337
+ i0.ɵɵelementEnd()()()();
338
+ } if (rf & 2) {
339
+ i0.ɵɵadvance(2);
340
+ i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(3, 3, ctx.locale + ".resume", i0.ɵɵpureFunction2(6, _c0, ctx.current, ctx.last)), i0.ɵɵsanitizeHtml);
341
+ i0.ɵɵadvance(4);
342
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(9, _c1, ctx.current === 1));
343
+ i0.ɵɵadvance(2);
344
+ i0.ɵɵrepeater(ctx.pages);
345
+ i0.ɵɵadvance(2);
346
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c1, ctx.current === ctx.last));
347
+ } }, dependencies: [ForAngularModule, i1.NgClass, i2.TranslatePipe, IonIcon], styles: ["#dcf-paginator-container[_ngcontent-%COMP%]{margin-bottom:1rem}.dcf-pagination[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination[_ngcontent-%COMP%] .page-item[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:top;color:var(--ion-color-gray-7);font-weight:600;width:36px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}.dcf-pagination[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{flex:none;padding-left:0;position:relative;margin:0px .15rem}.dcf-pagination[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:not(.disabled){cursor:pointer}.dcf-pagination[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]:hover .page-item[_ngcontent-%COMP%]{color:var(--ion-color-primary)}.dcf-pagination[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] .page-item[_ngcontent-%COMP%]{color:var(--ion-color-gray-7);font-weight:600}.dcf-pagination[_ngcontent-%COMP%] > *.dcf-active[_ngcontent-%COMP%] .page-item[_ngcontent-%COMP%]{background:rgba(var(--ion-color-primary-rgb),.15)}.dcf-pagination[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:var(--ion-color-gray-8);transition:color .1s ease-in-out}.dcf-pagination[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:hover{color:var(--ion-color-gray-6);text-decoration:none}.dcf-pagination[_ngcontent-%COMP%] .dcf-disabled[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{opacity:.5;color:var(--ion-color-gray-6)}.dcf-pagination-resume[_ngcontent-%COMP%]{color:var(--ion-color-gray-8);margin:1rem 0px;text-align:center}"] }); }
348
+ }
349
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationComponent, [{
350
+ type: Component,
351
+ args: [{ selector: 'ngx-decaf-pagination', imports: [
352
+ ForAngularModule,
353
+ IonIcon
354
+ ], standalone: true, template: " <div id=\"dcf-paginator-container\" class=\"dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination aeon-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index'], 'dcf-disabled': page['index'] === ndivl}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: ["#dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:top;color:var(--ion-color-gray-7);font-weight:600;width:36px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem}.dcf-pagination>*:not(.disabled){cursor:pointer}.dcf-pagination>*:hover .page-item{color:var(--ion-color-primary)}.dcf-pagination>* .page-item{color:var(--ion-color-gray-7);font-weight:600}.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--ion-color-primary-rgb),.15)}.dcf-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:var(--ion-color-gray-8);transition:color .1s ease-in-out}.dcf-pagination>*>:hover{color:var(--ion-color-gray-6);text-decoration:none}.dcf-pagination .dcf-disabled>*{opacity:.5;color:var(--ion-color-gray-6)}.dcf-pagination-resume{color:var(--ion-color-gray-8);margin:1rem 0px;text-align:center}\n"] }]
355
+ }], () => [], { totalPages: [{
356
+ type: Input,
357
+ args: [{ required: true }]
358
+ }], current: [{
359
+ type: Input
360
+ }], clickEvent: [{
361
+ type: Output
362
+ }] }); })();
363
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaginationComponent, { className: "PaginationComponent", filePath: "components/pagination/pagination.component.ts", lineNumber: 62 }); })();
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUE2QixNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7O0lDTWpFLDhCQUVpRztJQUQvRixBQURnQixzTUFBUyx3QkFBYyxPQUFPLEVBQUUsS0FBQyx5TUFDaEMsd0JBQWMsT0FBTyxFQUFFLEtBQUM7SUFFekMsZ0NBQXdCO0lBQUEsWUFBa0I7SUFDNUMsQUFENEMsaUJBQU8sRUFDN0M7Ozs7SUFGSiw0SEFBOEY7SUFDdEUsZUFBa0I7SUFBbEIscUNBQWtCOztBRE5wRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQVlILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxnQkFBZ0I7SUFvRXZEOzs7O09BSUc7SUFDSDtRQUNFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FB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MVNVLG1CQUFtQjtvRUFBbkIsbUJBQW1COztZQzVEOUIsQUFERCw4QkFBbUUsYUFDdkM7WUFDekIseUJBQXVIOztZQUVySCxBQURGLGlDQUFpRixhQUtKO1lBQXpFLEFBREEsbUlBQVMsY0FBVSxLQUFDLHNJQUNILGNBQVUsS0FBQztZQUM1Qiw4QkFBb0U7WUFDdEUsaUJBQU07WUFDTix3R0FNQztZQUNELCtCQUdpRDtZQUQvQyxBQURhLG9JQUFTLFVBQU0sS0FBQyx1SUFDWixVQUFNLEtBQUM7WUFFeEIsK0JBQXVFO1lBSS9FLEFBREUsQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRixFQUNGOztZQXhCaUMsZUFBNkU7WUFBN0UsOElBQTZFO1lBTS9FLGVBQTJDO1lBQTNDLHVFQUEyQztZQUcxRSxlQU1DO1lBTkQsd0JBTUM7WUFJQyxlQUE4QztZQUE5QywrRUFBOEM7NEJEa0NsRCxnQkFBZ0IsZ0NBQ2hCLE9BQU87O2lGQUtFLG1CQUFtQjtjQVgvQixTQUFTOzJCQUNFLHNCQUFzQixXQUd2QjtvQkFDUCxnQkFBZ0I7b0JBQ2hCLE9BQU87aUJBQ1IsY0FDVyxJQUFJO29CQTBCaEIsVUFBVTtrQkFEVCxLQUFLO21CQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQWF6QixPQUFPO2tCQUROLEtBQUs7WUFnQ04sVUFBVTtrQkFEVCxNQUFNOztrRkFqRUksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjaGV2cm9uQmFja091dGxpbmUsIGNoZXZyb25Gb3J3YXJkT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgTmd4QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hCYXNlQ29tcG9uZW50JztcbmltcG9ydCB7IEV2ZW50Q29uc3RhbnRzLCBLZXlWYWx1ZSwgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IFBhZ2luYXRpb25DdXN0b21FdmVudCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBwYWdpbmF0aW9uIGNvbXBvbmVudCBmb3IgbmF2aWdhdGluZyB0aHJvdWdoIG11bHRpcGxlIHBhZ2VzIG9mIGNvbnRlbnQuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIHVzZXIgaW50ZXJmYWNlIGZvciBwYWdpbmF0ZWQgY29udGVudCBuYXZpZ2F0aW9uLFxuICogZGlzcGxheWluZyBwYWdlIG51bWJlcnMgYW5kIG5hdmlnYXRpb24gY29udHJvbHMuIEl0IHN1cHBvcnRzIGN1c3RvbWl6YWJsZSBwYWdlIGNvdW50cyxcbiAqIGN1cnJlbnQgcGFnZSB0cmFja2luZywgYW5kIGVtaXRzIGV2ZW50cyB3aGVuIHVzZXJzIG5hdmlnYXRlIGJldHdlZW4gcGFnZXMuXG4gKlxuICogVGhlIGNvbXBvbmVudCBpbnRlbGxpZ2VudGx5IGhhbmRsZXMgbGFyZ2UgbnVtYmVycyBvZiBwYWdlcyBieSBzaG93aW5nIGEgc3Vic2V0IG9mIHBhZ2VcbiAqIG51bWJlcnMgd2l0aCBlbGxpcHNlcyB0byBpbmRpY2F0ZSBza2lwcGVkIHBhZ2VzLCBlbnN1cmluZyB0aGUgVUkgcmVtYWlucyBjbGVhbiBhbmQgdXNhYmxlXG4gKiBldmVuIHdpdGggbWFueSBwYWdlcy5cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAqICAgcGFydGljaXBhbnQgRSBhcyBFeHRlcm5hbCBDb21wb25lbnRcbiAqXG4gKiAgIFUtPj5QOiBDbGljayBwYWdlIG51bWJlclxuICogICBQLT4+UDogbmF2aWdhdGUocGFnZSlcbiAqICAgUC0+PlA6IGhhbmRsZUNsaWNrKGRpcmVjdGlvbiwgcGFnZSlcbiAqICAgUC0+PkU6IEVtaXQgY2xpY2tFdmVudCB3aXRoIFBhZ2luYXRpb25DdXN0b21FdmVudFxuICpcbiAqICAgVS0+PlA6IENsaWNrIG5leHQgYnV0dG9uXG4gKiAgIFAtPj5QOiBuZXh0KClcbiAqICAgUC0+PlA6IGhhbmRsZUNsaWNrKCduZXh0JylcbiAqICAgUC0+PkU6IEVtaXQgY2xpY2tFdmVudCB3aXRoIFBhZ2luYXRpb25DdXN0b21FdmVudFxuICpcbiAqICAgVS0+PlA6IENsaWNrIHByZXZpb3VzIGJ1dHRvblxuICogICBQLT4+UDogcHJldmlvdXMoKVxuICogICBQLT4+UDogaGFuZGxlQ2xpY2soJ3ByZXZpb3VzJylcbiAqICAgUC0+PkU6IEVtaXQgY2xpY2tFdmVudCB3aXRoIFBhZ2luYXRpb25DdXN0b21FdmVudFxuICpcbiAqIEBleGFtcGxlXG4gKiA8bmd4LWRlY2FmLXBhZ2luYXRpb25cbiAqICAgW3BhZ2VzXT1cIjEwXCJcbiAqICAgW2N1cnJlbnRdPVwiM1wiXG4gKiAgIChjbGlja0V2ZW50KT1cImhhbmRsZVBhZ2VDaGFuZ2UoJGV2ZW50KVwiPlxuICogPC9uZ3gtZGVjYWYtcGFnaW5hdGlvbj5cbiAqXG4gKiBAZXh0ZW5kcyB7Tmd4QmFzZUNvbXBvbmVudH1cbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtcbiAgICBGb3JBbmd1bGFyTW9kdWxlLFxuICAgIElvbkljb25cbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcblxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGV4dGVuZHMgTmd4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb250cm9scyB3aGV0aGVyIHRoZSBjb21wb25lbnQgdXNlcyB0cmFuc2xhdGlvbiBzZXJ2aWNlcy5cbiAgICogQHN1bW1hcnkgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIGNvbXBvbmVudCB3aWxsIGF0dGVtcHQgdG8gdXNlIHRyYW5zbGF0aW9uIHNlcnZpY2VzXG4gICAqIGZvciBhbnkgdGV4dCBjb250ZW50LiBUaGlzIGFsbG93cyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24gb2YgdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nT3JCb29sZWFufVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBvdmVycmlkZSB0cmFuc2xhdGFibGU6IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIHRvIGRpc3BsYXkgaW4gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBhdmFpbGFibGUgZm9yIG5hdmlnYXRpb24uIFRoaXMgaXMgYSByZXF1aXJlZFxuICAgKiBpbnB1dCB0aGF0IGRldGVybWluZXMgaG93IG1hbnkgcGFnZSBudW1iZXJzIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEByZXF1aXJlZFxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgdG90YWxQYWdlcyE6IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjdXJyZW50bHkgYWN0aXZlIHBhZ2UgbnVtYmVyLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggcGFnZSBpcyBjdXJyZW50bHkgYWN0aXZlIG9yIHNlbGVjdGVkLiBUaGlzIHZhbHVlIGlzIHVzZWRcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIFVJIGFuZCBhcyBhIHJlZmVyZW5jZSBwb2ludCBmb3IgbmF2aWdhdGlvbi5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgMVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgY3VycmVudCA9IDE7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBwYWdlIG9iamVjdHMgZm9yIHJlbmRlcmluZyBpbiB0aGUgdGVtcGxhdGUuXG4gICAqIEBzdW1tYXJ5IENvbnRhaW5zIHRoZSBwcm9jZXNzZWQgcGFnZSBkYXRhIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgcGFnaW5hdGlvbiBVSS5cbiAgICogRWFjaCBvYmplY3QgaW5jbHVkZXMgYW4gaW5kZXggKHBhZ2UgbnVtYmVyKSBhbmQgdGV4dCByZXByZXNlbnRhdGlvbi5cbiAgICpcbiAgICogQHR5cGUge0tleVZhbHVlW119XG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBwYWdlcyE6IEtleVZhbHVlW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbGFzdCBwYWdlIG51bWJlciBpbiB0aGUgcGFnaW5hdGlvbi5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgcGFnZSBmb3IgYm91bmRhcnkgY2hlY2tpbmcgZHVyaW5nIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBsYXN0ITogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZW1pdHRlciBmb3IgcGFnaW5hdGlvbiBuYXZpZ2F0aW9uIGV2ZW50cy5cbiAgICogQHN1bW1hcnkgRW1pdHMgYSBjdXN0b20gZXZlbnQgd2hlbiB1c2VycyBuYXZpZ2F0ZSBiZXR3ZWVuIHBhZ2VzLCBlaXRoZXIgYnkgY2xpY2tpbmdcbiAgICogb24gcGFnZSBudW1iZXJzIG9yIHVzaW5nIHRoZSBuZXh0L3ByZXZpb3VzIGJ1dHRvbnMuIFRoZSBldmVudCBjb250YWlucyBpbmZvcm1hdGlvblxuICAgKiBhYm91dCB0aGUgbmF2aWdhdGlvbiBkaXJlY3Rpb24gYW5kIHRoZSB0YXJnZXQgcGFnZSBudW1iZXIuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8UGFnaW5hdGlvbkN1c3RvbUV2ZW50Pn1cbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBjbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8UGFnaW5hdGlvbkN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnaW5hdGlvbkN1c3RvbUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBQYWdpbmF0aW9uQ29tcG9uZW50LlxuICAgKiBDYWxscyB0aGUgcGFyZW50IGNvbnN0cnVjdG9yIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lIGZvciBnZW5lcmF0ZSBiYXNlIGxvY2FsZSBzdHJpbmcuXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlBhZ2luYXRpb25Db21wb25lbnRcIik7XG4gICAgIGFkZEljb25zKHtjaGV2cm9uQmFja091dGxpbmUsIGNoZXZyb25Gb3J3YXJkT3V0bGluZX0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGFmdGVyIEFuZ3VsYXIgc2V0cyB0aGUgaW5wdXQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgY29tcG9uZW50IGJ5IGluaXRpYWxpemluZyB0aGUgbG9jYWxlIHNldHRpbmdzIGJhc2VkIG9uIHRoZVxuICAgKiB0cmFuc2xhdGFibGUgcHJvcGVydHksIGdlbmVyYXRpbmcgdGhlIHBhZ2UgbnVtYmVycyBiYXNlZCBvbiB0aGUgdG90YWwgcGFnZXMgYW5kXG4gICAqIGN1cnJlbnQgcGFnZSwgYW5kIHN0b3JpbmcgdGhlIGxhc3QgcGFnZSBudW1iZXIgZm9yIGJvdW5kYXJ5IGNoZWNraW5nLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFuZ3VsYXIgTGlmZWN5Y2xlXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqXG4gICAqICAgQS0+PlA6IG5nT25Jbml0KClcbiAgICogICBQLT4+UDogZ2V0TG9jYWxlKHRyYW5zbGF0YWJsZSlcbiAgICogICBQLT4+UDogU2V0IGxvY2FsZVxuICAgKiAgIFAtPj5QOiBnZXRQYWdlcyhkYXRhLCBjdXJyZW50KVxuICAgKiAgIFAtPj5QOiBTZXQgcGFnZXMgYXJyYXlcbiAgICogICBQLT4+UDogU2V0IGxhc3QgcGFnZSBudW1iZXJcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcbiAgICB0aGlzLnBhZ2VzID0gdGhpcy5nZXRQYWdlcyh0aGlzLnRvdGFsUGFnZXMsIHRoaXMuY3VycmVudCkgYXMgS2V5VmFsdWVbXTtcbiAgICB0aGlzLmxhc3QgPSB0aGlzLnRvdGFsUGFnZXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIHBhZ2luYXRpb24gY29udHJvbHMuXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyB1c2VyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudCwgdXBkYXRpbmcgdGhlXG4gICAqIGN1cnJlbnQgcGFnZSBpZiBzcGVjaWZpZWQgYW5kIGVtaXR0aW5nIGFuIGV2ZW50IHdpdGggbmF2aWdhdGlvbiBkZXRhaWxzLiBUaGlzIG1ldGhvZFxuICAgKiBpcyBjYWxsZWQgd2hlbiB1c2VycyBjbGljayBvbiBwYWdlIG51bWJlcnMgb3IgbmF2aWdhdGlvbiBidXR0b25zLlxuICAgKlxuICAgKiBAcGFyYW0geygnbmV4dCcgfCAncHJldmlvdXMnKX0gZGlyZWN0aW9uIC0gVGhlIGRpcmVjdGlvbiBvZiBuYXZpZ2F0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFnZV0gLSBPcHRpb25hbCBwYWdlIG51bWJlciB0byBuYXZpZ2F0ZSB0byBkaXJlY3RseVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgRSBhcyBFeHRlcm5hbCBDb21wb25lbnRcbiAgICpcbiAgICogICBVLT4+UDogQ2xpY2sgcGFnaW5hdGlvbiBjb250cm9sXG4gICAqICAgUC0+PlA6IGhhbmRsZUNsaWNrKGRpcmVjdGlvbiwgcGFnZT8pXG4gICAqICAgYWx0IHBhZ2UgaXMgcHJvdmlkZWRcbiAgICogICAgIFAtPj5QOiBVcGRhdGUgY3VycmVudCBwYWdlXG4gICAqICAgZW5kXG4gICAqICAgUC0+PkU6IEVtaXQgY2xpY2tFdmVudCB3aXRoIGRpcmVjdGlvbiBhbmQgcGFnZVxuICAgKlxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlQ2xpY2soZGlyZWN0aW9uOiAnbmV4dCcgfCAncHJldmlvdXMnLCBwYWdlPzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYocGFnZSlcbiAgICAgIHRoaXMuY3VycmVudCA9IHBhZ2U7XG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoe1xuICAgICAgbmFtZTogRXZlbnRDb25zdGFudHMuQ0xJQ0tfRVZFTlQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgcGFnZTogdGhpcy5jdXJyZW50XG4gICAgICB9LFxuICAgICAgY29tcG9uZW50OiB0aGlzLmNvbXBvbmVudE5hbWVcbiAgICB9IGFzIFBhZ2luYXRpb25DdXN0b21FdmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyB0aGUgYXJyYXkgb2YgcGFnZSBvYmplY3RzIGZvciBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGFuIGFycmF5IG9mIHBhZ2Ugb2JqZWN0cyBiYXNlZCBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIGFuZFxuICAgKiB0aGUgY3VycmVudCBwYWdlLiBGb3Igc21hbGwgcGFnZSBjb3VudHMgKOKJpDUpLCBhbGwgcGFnZXMgYXJlIHNob3duLiBGb3IgbGFyZ2VyIHBhZ2VcbiAgICogY291bnRzLCBhIHN1YnNldCBpcyBzaG93biB3aXRoIGVsbGlwc2VzIHRvIGluZGljYXRlIHNraXBwZWQgcGFnZXMuIFRoaXMgZW5zdXJlc1xuICAgKiB0aGUgcGFnaW5hdGlvbiBVSSByZW1haW5zIGNsZWFuIGFuZCB1c2FibGUgZXZlbiB3aXRoIG1hbnkgcGFnZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCAtIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjdXJyZW50XSAtIFRoZSBjdXJyZW50IGFjdGl2ZSBwYWdlIChkZWZhdWx0cyB0byB0aGlzLmN1cnJlbnQpXG4gICAqIEByZXR1cm5zIHtLZXlWYWx1ZVtdfSBBcnJheSBvZiBwYWdlIG9iamVjdHMgd2l0aCBpbmRleCBhbmQgdGV4dCBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIGZsb3djaGFydCBURFxuICAgKiAgIEFbU3RhcnRdIC0tPiBCe3RvdGFsIDw9IDU/fVxuICAgKiAgIEIgLS0+fFllc3wgQ1tTaG93IGFsbCBwYWdlc11cbiAgICogICBCIC0tPnxOb3wgRFtTaG93IGZpcnN0IHBhZ2VdXG4gICAqICAgRCAtLT4gRVtTaG93IGxhc3QgcGFnZXNdXG4gICAqICAgRSAtLT4gRltBZGQgZWxsaXBzZXMgZm9yIHNraXBwZWQgcGFnZXNdXG4gICAqICAgQyAtLT4gR1tSZXR1cm4gcGFnZXMgYXJyYXldXG4gICAqICAgRiAtLT4gR1xuICAgKlxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgZ2V0UGFnZXModG90YWw6IG51bWJlciwgY3VycmVudD86IG51bWJlcik6IEtleVZhbHVlW10ge1xuICAgIGlmICghY3VycmVudCkgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgIGNvbnN0IHBhZ2VzOiBLZXlWYWx1ZVtdID0gW107XG5cbiAgICBmdW5jdGlvbiBnZXRQYWdlKGluZGV4OiBudW1iZXIgfCBudWxsLCB0ZXh0ID0gJycpIHtcbiAgICAgICAgaWYgKHBhZ2VzLnNvbWUoaXRlbSA9PiBpdGVtWydpbmRleCddID09PSBpbmRleCkpIHJldHVybjtcbiAgICAgICAgcGFnZXMucHVzaCh7IGluZGV4LCB0ZXh0OiBpbmRleCAhPSBudWxsID8gaW5kZXgudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpIDogdGV4dCB9KTtcbiAgICB9XG5cbiAgICBpZiAodG90YWwgPD0gNSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbDsgaSsrKSBnZXRQYWdlKGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGljaW9uYSBvcyBkb2lzIHByaW1laXJvc1xuICAgICAgZ2V0UGFnZSgxKTtcbiAgICAgIGdldFBhZ2UoMik7XG5cbiAgICAgIC8vIEFkaWNpb25hIFwiLi4uXCIgZW50cmUgb3MgYmxvY29zXG4gICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50ID4gMykgZ2V0UGFnZShudWxsLCAnLi4uJyk7XG5cbiAgICAgIC8vIEFkaWNpb25hIGEgcMOhZ2luYSBhdHVhbCAoc2UgZXN0aXZlciBubyBtZWlvKVxuICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudCA+IDIgJiYgY3VycmVudCA8IHRvdGFsIC0gMSkgZ2V0UGFnZShjdXJyZW50KTtcblxuICAgICAgLy8gQWRpY2lvbmEgXCIuLi5cIiBlbnRyZSBvcyBibG9jb3NcbiAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQgPCB0b3RhbCAtIDIpIGdldFBhZ2UobnVsbCwgJy4uLicpO1xuXG4gICAgICAvLyBBZGljaW9uYSBvcyBkb2lzIMO6bHRpbW9zXG4gICAgICBnZXRQYWdlKHRvdGFsIC0gMSk7XG4gICAgICBnZXRQYWdlKHRvdGFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnZXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGN1cnJlbnQgYWN0aXZlIHBhZ2UgbnVtYmVyLlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyIHRoYXQgaXMgYWN0aXZlIGluIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudC5cbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYSB3YXkgdG8gYWNjZXNzIHRoZSBjdXJyZW50IHBhZ2Ugc3RhdGUgZnJvbSBvdXRzaWRlIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBnZXRDdXJyZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTmF2aWdhdGVzIHRvIHRoZSBuZXh0IHBhZ2UuXG4gICAqIEBzdW1tYXJ5IEluY3JlbWVudHMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgaWYgbm90IGF0IHRoZSBsYXN0IHBhZ2UgYW5kIHRyaWdnZXJzXG4gICAqIHRoZSBjbGljayBldmVudCBoYW5kbGVyIHdpdGggJ25leHQnIGRpcmVjdGlvbi4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IGNhbGxlZFxuICAgKiB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgXCJuZXh0XCIgYnV0dG9uIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PlA6IENsaWNrIG5leHQgYnV0dG9uXG4gICAqICAgUC0+PlA6IG5leHQoKVxuICAgKiAgIGFsdCBwYWdlIDw9IG1heCBwYWdlc1xuICAgKiAgICAgUC0+PlA6IEluY3JlbWVudCBjdXJyZW50IHBhZ2VcbiAgICogICAgIFAtPj5QOiBoYW5kbGVDbGljaygnbmV4dCcpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBuZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmN1cnJlbnQgKyAxO1xuICAgIGlmKHBhZ2UgPD0gT2JqZWN0LmtleXModGhpcy5wYWdlcyk/Lmxlbmd0aCB8fCAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBwYWdlO1xuICAgICAgdGhpcy5oYW5kbGVDbGljaygnbmV4dCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTmF2aWdhdGVzIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICAgKiBAc3VtbWFyeSBEZWNyZW1lbnRzIHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyIGlmIG5vdCBhdCB0aGUgZmlyc3QgcGFnZSBhbmQgdHJpZ2dlcnNcbiAgICogdGhlIGNsaWNrIGV2ZW50IGhhbmRsZXIgd2l0aCAncHJldmlvdXMnIGRpcmVjdGlvbi4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IGNhbGxlZFxuICAgKiB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgXCJwcmV2aW91c1wiIGJ1dHRvbiBpbiB0aGUgcGFnaW5hdGlvbiBVSS5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5QOiBDbGljayBwcmV2aW91cyBidXR0b25cbiAgICogICBQLT4+UDogcHJldmlvdXMoKVxuICAgKiAgIGFsdCBwYWdlID4gMFxuICAgKiAgICAgUC0+PlA6IERlY3JlbWVudCBjdXJyZW50IHBhZ2VcbiAgICogICAgIFAtPj5QOiBoYW5kbGVDbGljaygncHJldmlvdXMnKVxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuY3VycmVudCAtIDE7XG4gICAgaWYocGFnZSA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IHBhZ2U7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrKCdwcmV2aW91cycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWMgcGFnZSBudW1iZXIuXG4gICAqIEBzdW1tYXJ5IFVwZGF0ZXMgdGhlIGN1cnJlbnQgcGFnZSB0byB0aGUgc3BlY2lmaWVkIHBhZ2UgbnVtYmVyIGFuZCB0cmlnZ2Vyc1xuICAgKiB0aGUgY2xpY2sgZXZlbnQgaGFuZGxlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgZGlyZWN0bHkgb24gYSBwYWdlIG51bWJlciBpbiB0aGUgcGFnaW5hdGlvbiBVSS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsfSBwYWdlIC0gVGhlIHBhZ2UgbnVtYmVyIHRvIG5hdmlnYXRlIHRvXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICpcbiAgICogICBVLT4+UDogQ2xpY2sgcGFnZSBudW1iZXJcbiAgICogICBQLT4+UDogbmF2aWdhdGUocGFnZSlcbiAgICogICBhbHQgcGFnZSBpcyBub3QgbnVsbCBhbmQgZGlmZmVyZW50IGZyb20gY3VycmVudFxuICAgKiAgICAgUC0+PlA6IERldGVybWluZSBkaXJlY3Rpb24gKG5leHQvcHJldmlvdXMpXG4gICAqICAgICBQLT4+UDogaGFuZGxlQ2xpY2soZGlyZWN0aW9uLCBwYWdlKVxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgbmF2aWdhdGUocGFnZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmKHBhZ2UgIT09IG51bGwgJiYgdGhpcy5jdXJyZW50ICE9PSBwYWdlIGFzIG51bWJlcilcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2socGFnZSA+IHRoaXMuY3VycmVudCA/ICduZXh0JyA6ICdwcmV2aW91cycsIHBhZ2UpO1xuICB9XG59XG4iLCIgPGRpdiBpZD1cImRjZi1wYWdpbmF0b3ItY29udGFpbmVyXCIgY2xhc3M9XCJkY2YtZmxleCBkY2YtZmxleC1jZW50ZXJcIj5cbiAgPGRpdiBjbGFzcz1cImRjZi13aWR0aC0xLTFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGNmLXBhZ2luYXRpb24tcmVzdW1lXCIgW2lubmVySFRNTF09XCJsb2NhbGUgKyAnLnJlc3VtZScgfCB0cmFuc2xhdGU6IHt2YWx1ZTA6IGN1cnJlbnQsIHZhbHVlMTogbGFzdH1cIj48L2Rpdj5cbiAgICA8ZGl2ICNwYWdpbmF0aW9uQ29tcG9uZW50IGNsYXNzPVwiZGNmLXBhZ2luYXRpb24gYWVvbi1wYWdpbmF0aW9uIGRjZi1mbGV4LWNlbnRlclwiPlxuICAgICAgPGRpdlxuICAgICAgICBhcmlhLWxhYmVsPVwicHJldmlvdXNcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAoY2xpY2spPVwicHJldmlvdXMoKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cInByZXZpb3VzKClcIiBbbmdDbGFzc109XCJ7J2RjZi1kaXNhYmxlZCc6IGN1cnJlbnQgPT09IDF9XCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICBAZm9yKHBhZ2Ugb2YgcGFnZXM7IHRyYWNrIHBhZ2UpIHtcbiAgICAgICAgPGRpdiB0YWJpbmRleD1cIjBcIiAoY2xpY2spPVwibmF2aWdhdGUocGFnZVsnaW5kZXgnXSlcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm5hdmlnYXRlKHBhZ2VbJ2luZGV4J10pXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2RjZi1hY3RpdmUnOiBjdXJyZW50ID09PSBwYWdlWydpbmRleCddLCAnZGNmLWRpc2FibGVkJzogcGFnZVsnaW5kZXgnXSA9PT0gbmRpdmx9XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWl0ZW1cIj57eyBwYWdlWyd0ZXh0J10gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGRpdlxuICAgICAgICB0YWJpbmRleD1cIjBcIiAoY2xpY2spPVwibmV4dCgpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibmV4dCgpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydkY2YtZGlzYWJsZWQnOiBjdXJyZW50ID09PSBsYXN0fVwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZXZyb24tZm9yd2FyZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19