@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,250 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, inject, Input, ViewChild } from '@angular/core';
3
+ import { Dynamic } from '../../engine';
4
+ import { OperationKeys } from '@decaf-ts/db-decorators';
5
+ import { ForAngularModule } from '../../for-angular.module';
6
+ import { CollapsableDirective } from '../../directives/collapsable.directive';
7
+ import { IonAccordion, IonAccordionGroup, IonItem } from '@ionic/angular/standalone';
8
+ import * as i0 from "@angular/core";
9
+ const _c0 = ["component"];
10
+ const _c1 = ["*"];
11
+ /**
12
+ * @description Dynamic fieldset component with collapsible accordion functionality.
13
+ * @summary This component provides a sophisticated fieldset container that automatically
14
+ * adapts its behavior based on CRUD operations. It integrates seamlessly with Ionic's
15
+ * accordion components to create expandable/collapsible sections for organizing form
16
+ * content and related information. The component intelligently determines its initial
17
+ * state based on the operation type, opening automatically for READ and DELETE operations
18
+ * while remaining closed for CREATE and UPDATE operations.
19
+ *
20
+ * @example
21
+ * ```html
22
+ * <!-- Basic usage with automatic state management -->
23
+ * <ngx-decaf-fieldset
24
+ * name="Personal Information"
25
+ * [operation]="OperationKeys.READ"
26
+ * target="_self">
27
+ * <ion-input label="Name" placeholder="Enter name"></ion-input>
28
+ * <ion-input label="Email" type="email" placeholder="Enter email"></ion-input>
29
+ * </ngx-decaf-fieldset>
30
+ *
31
+ * <!-- Advanced usage with custom operation -->
32
+ * <ngx-decaf-fieldset
33
+ * name="Contact Details"
34
+ * [operation]="currentOperation"
35
+ * target="_blank">
36
+ * <!-- Complex form fields -->
37
+ * </ngx-decaf-fieldset>
38
+ * ```
39
+ *
40
+ * @mermaid
41
+ * sequenceDiagram
42
+ * participant U as User
43
+ * participant F as FieldsetComponent
44
+ * participant I as Ionic Accordion
45
+ * participant D as DOM
46
+ *
47
+ * F->>F: ngAfterViewInit()
48
+ * alt operation is READ or DELETE
49
+ * F->>F: Set isOpen = true
50
+ * F->>D: Query accordion element
51
+ * F->>I: Set value attribute to 'open'
52
+ * F->>F: Trigger change detection
53
+ * end
54
+ * U->>I: Click accordion header
55
+ * I->>F: handleChange(event)
56
+ * F->>F: Update isOpen state
57
+ * F->>I: Reflect new state
58
+ *
59
+ * @memberOf ForAngularModule
60
+ */
61
+ let FieldsetComponent = class FieldsetComponent {
62
+ constructor() {
63
+ /**
64
+ * @description The display name or title of the fieldset section.
65
+ * @summary Sets the legend or header text that appears in the accordion header. This text
66
+ * provides a clear label for the collapsible section, helping users understand what content
67
+ * is contained within. The name is displayed prominently and serves as the clickable area
68
+ * for expanding/collapsing the fieldset.
69
+ *
70
+ * @type {string}
71
+ * @default 'Child'
72
+ * @memberOf FieldsetComponent
73
+ */
74
+ this.name = 'Child';
75
+ /**
76
+ * @description The current CRUD operation context.
77
+ * @summary Determines the component's initial behavior and state based on the current operation.
78
+ * This input is crucial for auto-state management: READ and DELETE operations automatically
79
+ * open the fieldset to show content, while CREATE and UPDATE operations keep it closed
80
+ * initially. This provides an intuitive user experience aligned with operation semantics.
81
+ *
82
+ * @type {OperationKeys}
83
+ * @default OperationKeys.READ
84
+ * @memberOf FieldsetComponent
85
+ */
86
+ this.operation = OperationKeys.READ;
87
+ /**
88
+ * @description Form target attribute for nested form submissions.
89
+ * @summary Specifies where to display the response after submitting forms contained within
90
+ * the fieldset. This attribute mirrors the HTML form target behavior, allowing control over
91
+ * whether form submissions open in the same window, new window, or specific frame. Useful
92
+ * for complex form workflows and multi-step processes.
93
+ *
94
+ * @type {HTMLFormTarget}
95
+ * @default '_self'
96
+ * @memberOf FieldsetComponent
97
+ */
98
+ this.target = '_self';
99
+ /**
100
+ * @description Current state of the accordion (expanded or collapsed).
101
+ * @summary Boolean flag that tracks whether the fieldset accordion is currently open or closed.
102
+ * This property is automatically managed based on user interactions and initial operation state.
103
+ * It serves as the single source of truth for the component's visibility state and is used
104
+ * to coordinate between user actions and programmatic state changes.
105
+ *
106
+ * @type {boolean}
107
+ * @default false
108
+ * @memberOf FieldsetComponent
109
+ */
110
+ this.isOpen = false;
111
+ /**
112
+ * @description Reference to CRUD operation constants for template usage.
113
+ * @summary Exposes the OperationKeys enum to the component template, enabling conditional
114
+ * rendering and behavior based on operation types. This protected readonly property ensures
115
+ * that template logic can access operation constants while maintaining encapsulation and
116
+ * preventing accidental modification of the enum values.
117
+ *
118
+ * @type {CrudOperations}
119
+ * @default OperationKeys.CREATE
120
+ * @memberOf FieldsetComponent
121
+ */
122
+ this.OperationKeys = OperationKeys.CREATE;
123
+ /**
124
+ * @description Angular change detection service.
125
+ * @summary Injected service that provides manual control over change detection cycles.
126
+ * This is essential for ensuring that programmatic DOM changes (like setting accordion
127
+ * attributes) are properly reflected in the component's state and trigger appropriate
128
+ * view updates when modifications occur outside the normal Angular change detection flow.
129
+ *
130
+ * @private
131
+ * @type {ChangeDetectorRef}
132
+ * @memberOf FieldsetComponent
133
+ */
134
+ this.changeDetectorRef = inject(ChangeDetectorRef);
135
+ }
136
+ /**
137
+ * @description Initializes the component state after view and child components are rendered.
138
+ * @summary This lifecycle hook implements intelligent auto-state management based on the current
139
+ * CRUD operation. For READ and DELETE operations, the fieldset automatically opens to provide
140
+ * immediate access to information, while CREATE and UPDATE operations keep it closed to maintain
141
+ * a clean initial interface. The method directly manipulates the DOM to ensure proper accordion
142
+ * synchronization and triggers change detection to reflect the programmatic state changes.
143
+ *
144
+ * @mermaid
145
+ * sequenceDiagram
146
+ * participant A as Angular Lifecycle
147
+ * participant F as FieldsetComponent
148
+ * participant D as DOM
149
+ * participant C as ChangeDetector
150
+ *
151
+ * A->>F: ngAfterViewInit()
152
+ * alt operation is READ or DELETE
153
+ * F->>F: Set isOpen = true
154
+ * F->>D: Query ion-accordion-group element
155
+ * alt accordion element exists
156
+ * F->>D: Set value attribute to 'open'
157
+ * end
158
+ * end
159
+ * F->>C: detectChanges()
160
+ * C->>F: Update view with new state
161
+ *
162
+ * @returns {void}
163
+ * @memberOf FieldsetComponent
164
+ */
165
+ ngAfterViewInit() {
166
+ if (this.operation === OperationKeys.READ || this.operation === OperationKeys.DELETE) {
167
+ this.isOpen = true;
168
+ const accordionElement = this.component?.nativeElement.querySelector('ion-accordion-group');
169
+ if (accordionElement)
170
+ accordionElement.setAttribute('value', 'open');
171
+ }
172
+ this.changeDetectorRef.detectChanges();
173
+ }
174
+ /**
175
+ * @description Handles accordion state change events from user interactions.
176
+ * @summary Processes CustomEvent objects triggered when users expand or collapse the accordion.
177
+ * This method extracts the new state from the event details and updates the component's
178
+ * internal state accordingly. It specifically listens for ION-ACCORDION-GROUP events to
179
+ * ensure proper event source validation and prevent handling of unrelated events.
180
+ *
181
+ * @param {CustomEvent} event - The event object containing accordion state change details
182
+ * @returns {void}
183
+ *
184
+ * @mermaid
185
+ * sequenceDiagram
186
+ * participant U as User
187
+ * participant I as Ion-Accordion
188
+ * participant F as FieldsetComponent
189
+ *
190
+ * U->>I: Click accordion header
191
+ * I->>F: handleChange(CustomEvent)
192
+ * F->>F: Extract target and detail from event
193
+ * F->>F: Validate target is ION-ACCORDION-GROUP
194
+ * alt valid target
195
+ * F->>F: Update isOpen = !!value
196
+ * end
197
+ * F->>I: Reflect updated state
198
+ *
199
+ * @memberOf FieldsetComponent
200
+ */
201
+ handleChange(event) {
202
+ const { target, detail } = event;
203
+ const { value } = detail;
204
+ if (target.tagName === 'ION-ACCORDION-GROUP')
205
+ this.isOpen = !!value;
206
+ }
207
+ static { this.ɵfac = function FieldsetComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FieldsetComponent)(); }; }
208
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FieldsetComponent, selectors: [["ngx-decaf-fieldset"]], viewQuery: function FieldsetComponent_Query(rf, ctx) { if (rf & 1) {
209
+ i0.ɵɵviewQuery(_c0, 5, ElementRef);
210
+ } if (rf & 2) {
211
+ let _t;
212
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.component = _t.first);
213
+ } }, inputs: { name: "name", operation: "operation", target: "target" }, standalone: true, features: [i0.ɵɵStandaloneFeature], ngContentSelectors: _c1, decls: 9, vars: 4, consts: [["component", ""], [3, "ionChange"], ["value", "open"], ["slot", "header"], ["slot", "content", "decafCollapsable", ""]], template: function FieldsetComponent_Template(rf, ctx) { if (rf & 1) {
214
+ const _r1 = i0.ɵɵgetCurrentView();
215
+ i0.ɵɵprojectionDef();
216
+ i0.ɵɵelementStart(0, "fieldset", null, 0)(2, "ion-accordion-group", 1);
217
+ i0.ɵɵlistener("ionChange", function FieldsetComponent_Template_ion_accordion_group_ionChange_2_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleChange($event)); });
218
+ i0.ɵɵelementStart(3, "ion-accordion", 2)(4, "ion-item", 3)(5, "legend");
219
+ i0.ɵɵtext(6);
220
+ i0.ɵɵelementEnd()();
221
+ i0.ɵɵelementStart(7, "div", 4);
222
+ i0.ɵɵprojection(8);
223
+ i0.ɵɵelementEnd()()()();
224
+ } if (rf & 2) {
225
+ i0.ɵɵclassMap("dcf-fieldset " + ctx.operation);
226
+ i0.ɵɵadvance(6);
227
+ i0.ɵɵtextInterpolate(ctx.name);
228
+ i0.ɵɵadvance();
229
+ i0.ɵɵattribute("aria-hidden", !ctx.isOpen);
230
+ } }, dependencies: [ForAngularModule, IonAccordionGroup, IonAccordion, IonItem, CollapsableDirective], styles: [".dcf-fieldset[_ngcontent-%COMP%]{margin-bottom:1.8rem;padding-bottom:0;padding-top:1rem;border:1px solid var(--ion-color-gray-2);border-radius:8px}.dcf-fieldset[_ngcontent-%COMP%] ion-accordion-group[_ngcontent-%COMP%]{--border-color:red !important}.dcf-fieldset.read[_ngcontent-%COMP%]{margin-top:1.25rem}.dcf-fieldset[_ngcontent-%COMP%] ion-accordion.accordion-collapsing[_ngcontent-%COMP%], .dcf-fieldset[_ngcontent-%COMP%] ion-accordion.accordion-collapsed[_ngcontent-%COMP%]{margin-bottom:1rem}.dcf-fieldset[_ngcontent-%COMP%] ion-accordion[_ngcontent-%COMP%] ion-item[slot=header][_ngcontent-%COMP%]{--border-color: transparent;--border-radius: 6px;--inner-border-width: 0;--padding-start: 12px}.dcf-fieldset[_ngcontent-%COMP%] ion-accordion[_ngcontent-%COMP%] ion-item[slot=header][_ngcontent-%COMP%] legend[_ngcontent-%COMP%]{font-weight:600;font-size:1rem;color:#333;margin:0}.dcf-fieldset[_ngcontent-%COMP%] ion-accordion[_ngcontent-%COMP%] [slot=content][_ngcontent-%COMP%]{padding-top:1rem!important;padding-inline:.75rem;background-color:#fff}"] }); }
231
+ };
232
+ FieldsetComponent = __decorate([
233
+ Dynamic()
234
+ ], FieldsetComponent);
235
+ export { FieldsetComponent };
236
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FieldsetComponent, [{
237
+ type: Component,
238
+ args: [{ standalone: true, selector: 'ngx-decaf-fieldset', schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [ForAngularModule, IonAccordionGroup, IonAccordion, IonItem, CollapsableDirective], template: "<fieldset [class]=\"'dcf-fieldset ' + operation\" #component>\n <ion-accordion-group (ionChange)=\"handleChange($event)\">\n <ion-accordion value=\"open\">\n <ion-item slot=\"header\" >\n <legend>{{ name }}</legend>\n </ion-item>\n <div slot=\"content\" [attr.aria-hidden]=\"!isOpen\" decafCollapsable>\n <ng-content></ng-content>\n </div>\n </ion-accordion>\n </ion-accordion-group>\n</fieldset>\n", styles: [".dcf-fieldset{margin-bottom:1.8rem;padding-bottom:0;padding-top:1rem;border:1px solid var(--ion-color-gray-2);border-radius:8px}.dcf-fieldset ion-accordion-group{--border-color:red !important}.dcf-fieldset.read{margin-top:1.25rem}.dcf-fieldset ion-accordion.accordion-collapsing,.dcf-fieldset ion-accordion.accordion-collapsed{margin-bottom:1rem}.dcf-fieldset ion-accordion ion-item[slot=header]{--border-color: transparent;--border-radius: 6px;--inner-border-width: 0;--padding-start: 12px}.dcf-fieldset ion-accordion ion-item[slot=header] legend{font-weight:600;font-size:1rem;color:#333;margin:0}.dcf-fieldset ion-accordion [slot=content]{padding-top:1rem!important;padding-inline:.75rem;background-color:#fff}\n"] }]
239
+ }], null, { component: [{
240
+ type: ViewChild,
241
+ args: ['component', { static: false, read: ElementRef }]
242
+ }], name: [{
243
+ type: Input
244
+ }], operation: [{
245
+ type: Input
246
+ }], target: [{
247
+ type: Input
248
+ }] }); })();
249
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FieldsetComponent, { className: "FieldsetComponent", filePath: "components/fieldset/fieldset.component.ts", lineNumber: 68 }); })();
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkc2V0L2ZpZWxkc2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHNldC9maWVsZHNldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFJLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUVyRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQVVJLElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWlCO0lBQXZCO1FBZUw7Ozs7Ozs7Ozs7V0FVRztRQUVILFNBQUksR0FBVyxPQUFPLENBQUM7UUFFdkI7Ozs7Ozs7Ozs7V0FVRztRQUVILGNBQVMsR0FBa0IsYUFBYSxDQUFDLElBQUksQ0FBQztRQUU5Qzs7Ozs7Ozs7OztXQVVHO1FBRUgsV0FBTSxHQUFtQixPQUFPLENBQUM7UUFFakM7Ozs7Ozs7Ozs7V0FVRztRQUNILFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEI7Ozs7Ozs7Ozs7V0FVRztRQUNnQixrQkFBYSxHQUFtQixhQUFhLENBQUMsTUFBTSxDQUFDO1FBRXhFOzs7Ozs7Ozs7O1dBVUc7UUFDSyxzQkFBaUIsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0EwRTFFO0lBeEVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNEJHO0lBQ0gsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDNUYsSUFBRyxnQkFBZ0I7Z0JBQ2pCLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMEJHO0lBQ0gsWUFBWSxDQUFDLEtBQWtCO1FBQzdCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSyxNQUF1QyxDQUFDLE9BQU8sS0FBSyxxQkFBcUI7WUFDNUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7a0hBdktVLGlCQUFpQjtvRUFBakIsaUJBQWlCO21DQVltQixVQUFVOzs7Ozs7O1lDOUV6RCxBQURGLHlDQUEyRCw2QkFDRDtZQUFuQywrSkFBYSx3QkFBb0IsS0FBQztZQUdqRCxBQURGLEFBREYsd0NBQTRCLGtCQUNELGFBQ2Y7WUFBQSxZQUFVO1lBQ3BCLEFBRG9CLGlCQUFTLEVBQ2xCO1lBQ1gsOEJBQWtFO1lBQ2hFLGtCQUF5QjtZQUlqQyxBQURFLEFBREUsQUFERSxpQkFBTSxFQUNRLEVBQ0ksRUFDYjs7WUFYRCw4Q0FBcUM7WUFJL0IsZUFBVTtZQUFWLDhCQUFVO1lBRUEsY0FBNEI7OzRCRDJEMUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxvQkFBb0I7O0FBRS9FLGlCQUFpQjtJQVQ3QixPQUFPLEVBQUU7R0FTRyxpQkFBaUIsQ0F3SzdCOztpRkF4S1ksaUJBQWlCO2NBUjdCLFNBQVM7NkJBQ0ksSUFBSSxZQUNOLG9CQUFvQixXQUdyQixDQUFDLHNCQUFzQixDQUFDLFdBQ3hCLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQztnQkFlM0YsU0FBUztrQkFEUixTQUFTO21CQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQWUzRCxJQUFJO2tCQURILEtBQUs7WUFlTixTQUFTO2tCQURSLEtBQUs7WUFlTixNQUFNO2tCQURMLEtBQUs7O2tGQXRESyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pYywgSFRNTEZvcm1UYXJnZXQgfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbnMsIE9wZXJhdGlvbktleXMgfSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IENvbGxhcHNhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb2xsYXBzYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSW9uQWNjb3JkaW9uLCBJb25BY2NvcmRpb25Hcm91cCwgSW9uSXRlbSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEeW5hbWljIGZpZWxkc2V0IGNvbXBvbmVudCB3aXRoIGNvbGxhcHNpYmxlIGFjY29yZGlvbiBmdW5jdGlvbmFsaXR5LlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBzb3BoaXN0aWNhdGVkIGZpZWxkc2V0IGNvbnRhaW5lciB0aGF0IGF1dG9tYXRpY2FsbHlcbiAqIGFkYXB0cyBpdHMgYmVoYXZpb3IgYmFzZWQgb24gQ1JVRCBvcGVyYXRpb25zLiBJdCBpbnRlZ3JhdGVzIHNlYW1sZXNzbHkgd2l0aCBJb25pYydzXG4gKiBhY2NvcmRpb24gY29tcG9uZW50cyB0byBjcmVhdGUgZXhwYW5kYWJsZS9jb2xsYXBzaWJsZSBzZWN0aW9ucyBmb3Igb3JnYW5pemluZyBmb3JtXG4gKiBjb250ZW50IGFuZCByZWxhdGVkIGluZm9ybWF0aW9uLiBUaGUgY29tcG9uZW50IGludGVsbGlnZW50bHkgZGV0ZXJtaW5lcyBpdHMgaW5pdGlhbFxuICogc3RhdGUgYmFzZWQgb24gdGhlIG9wZXJhdGlvbiB0eXBlLCBvcGVuaW5nIGF1dG9tYXRpY2FsbHkgZm9yIFJFQUQgYW5kIERFTEVURSBvcGVyYXRpb25zXG4gKiB3aGlsZSByZW1haW5pbmcgY2xvc2VkIGZvciBDUkVBVEUgYW5kIFVQREFURSBvcGVyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIEJhc2ljIHVzYWdlIHdpdGggYXV0b21hdGljIHN0YXRlIG1hbmFnZW1lbnQgLS0+XG4gKiA8bmd4LWRlY2FmLWZpZWxkc2V0XG4gKiAgIG5hbWU9XCJQZXJzb25hbCBJbmZvcm1hdGlvblwiXG4gKiAgIFtvcGVyYXRpb25dPVwiT3BlcmF0aW9uS2V5cy5SRUFEXCJcbiAqICAgdGFyZ2V0PVwiX3NlbGZcIj5cbiAqICAgPGlvbi1pbnB1dCBsYWJlbD1cIk5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIG5hbWVcIj48L2lvbi1pbnB1dD5cbiAqICAgPGlvbi1pbnB1dCBsYWJlbD1cIkVtYWlsXCIgdHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBlbWFpbFwiPjwvaW9uLWlucHV0PlxuICogPC9uZ3gtZGVjYWYtZmllbGRzZXQ+XG4gKlxuICogPCEtLSBBZHZhbmNlZCB1c2FnZSB3aXRoIGN1c3RvbSBvcGVyYXRpb24gLS0+XG4gKiA8bmd4LWRlY2FmLWZpZWxkc2V0XG4gKiAgIG5hbWU9XCJDb250YWN0IERldGFpbHNcIlxuICogICBbb3BlcmF0aW9uXT1cImN1cnJlbnRPcGVyYXRpb25cIlxuICogICB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAqICAgPCEtLSBDb21wbGV4IGZvcm0gZmllbGRzIC0tPlxuICogPC9uZ3gtZGVjYWYtZmllbGRzZXQ+XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICogICBwYXJ0aWNpcGFudCBGIGFzIEZpZWxkc2V0Q29tcG9uZW50XG4gKiAgIHBhcnRpY2lwYW50IEkgYXMgSW9uaWMgQWNjb3JkaW9uXG4gKiAgIHBhcnRpY2lwYW50IEQgYXMgRE9NXG4gKlxuICogICBGLT4+RjogbmdBZnRlclZpZXdJbml0KClcbiAqICAgYWx0IG9wZXJhdGlvbiBpcyBSRUFEIG9yIERFTEVURVxuICogICAgIEYtPj5GOiBTZXQgaXNPcGVuID0gdHJ1ZVxuICogICAgIEYtPj5EOiBRdWVyeSBhY2NvcmRpb24gZWxlbWVudFxuICogICAgIEYtPj5JOiBTZXQgdmFsdWUgYXR0cmlidXRlIHRvICdvcGVuJ1xuICogICAgIEYtPj5GOiBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAqICAgZW5kXG4gKiAgIFUtPj5JOiBDbGljayBhY2NvcmRpb24gaGVhZGVyXG4gKiAgIEktPj5GOiBoYW5kbGVDaGFuZ2UoZXZlbnQpXG4gKiAgIEYtPj5GOiBVcGRhdGUgaXNPcGVuIHN0YXRlXG4gKiAgIEYtPj5JOiBSZWZsZWN0IG5ldyBzdGF0ZVxuICpcbiAqIEBtZW1iZXJPZiBGb3JBbmd1bGFyTW9kdWxlXG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ25neC1kZWNhZi1maWVsZHNldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZHNldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpZWxkc2V0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgaW1wb3J0czogW0ZvckFuZ3VsYXJNb2R1bGUsIElvbkFjY29yZGlvbkdyb3VwLCBJb25BY2NvcmRpb24sIElvbkl0ZW0sIENvbGxhcHNhYmxlRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRzZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50J3MgbmF0aXZlIERPTSBlbGVtZW50LlxuICAgKiBAc3VtbWFyeSBWaWV3Q2hpbGQgcmVmZXJlbmNlIHRoYXQgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgY29tcG9uZW50J3Mgcm9vdCBET00gZWxlbWVudC5cbiAgICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIG1hbmlwdWxhdGluZyB0aGUgSW9uaWMgYWNjb3JkaW9uIGdyb3VwIGFmdGVyIHZpZXcgaW5pdGlhbGl6YXRpb24sXG4gICAqIHBhcnRpY3VsYXJseSBmb3Igc2V0dGluZyB0aGUgaW5pdGlhbCBvcGVuIHN0YXRlIHByb2dyYW1tYXRpY2FsbHkuIFRoZSByZWZlcmVuY2UgaXMgdXNlZFxuICAgKiB0byBxdWVyeSBhbmQgbW9kaWZ5IGFjY29yZGlvbiBhdHRyaWJ1dGVzIHRoYXQgY29udHJvbCB0aGUgY29tcG9uZW50J3MgZXhwYW5kZWQgc3RhdGUuXG4gICAqXG4gICAqIEB0eXBlIHtFbGVtZW50UmVmfVxuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2NvbXBvbmVudCcsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjb21wb25lbnQhOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGRpc3BsYXkgbmFtZSBvciB0aXRsZSBvZiB0aGUgZmllbGRzZXQgc2VjdGlvbi5cbiAgICogQHN1bW1hcnkgU2V0cyB0aGUgbGVnZW5kIG9yIGhlYWRlciB0ZXh0IHRoYXQgYXBwZWFycyBpbiB0aGUgYWNjb3JkaW9uIGhlYWRlci4gVGhpcyB0ZXh0XG4gICAqIHByb3ZpZGVzIGEgY2xlYXIgbGFiZWwgZm9yIHRoZSBjb2xsYXBzaWJsZSBzZWN0aW9uLCBoZWxwaW5nIHVzZXJzIHVuZGVyc3RhbmQgd2hhdCBjb250ZW50XG4gICAqIGlzIGNvbnRhaW5lZCB3aXRoaW4uIFRoZSBuYW1lIGlzIGRpc3BsYXllZCBwcm9taW5lbnRseSBhbmQgc2VydmVzIGFzIHRoZSBjbGlja2FibGUgYXJlYVxuICAgKiBmb3IgZXhwYW5kaW5nL2NvbGxhcHNpbmcgdGhlIGZpZWxkc2V0LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnQ2hpbGQnXG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgbmFtZTogc3RyaW5nID0gJ0NoaWxkJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjdXJyZW50IENSVUQgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgdGhlIGNvbXBvbmVudCdzIGluaXRpYWwgYmVoYXZpb3IgYW5kIHN0YXRlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG9wZXJhdGlvbi5cbiAgICogVGhpcyBpbnB1dCBpcyBjcnVjaWFsIGZvciBhdXRvLXN0YXRlIG1hbmFnZW1lbnQ6IFJFQUQgYW5kIERFTEVURSBvcGVyYXRpb25zIGF1dG9tYXRpY2FsbHlcbiAgICogb3BlbiB0aGUgZmllbGRzZXQgdG8gc2hvdyBjb250ZW50LCB3aGlsZSBDUkVBVEUgYW5kIFVQREFURSBvcGVyYXRpb25zIGtlZXAgaXQgY2xvc2VkXG4gICAqIGluaXRpYWxseS4gVGhpcyBwcm92aWRlcyBhbiBpbnR1aXRpdmUgdXNlciBleHBlcmllbmNlIGFsaWduZWQgd2l0aCBvcGVyYXRpb24gc2VtYW50aWNzLlxuICAgKlxuICAgKiBAdHlwZSB7T3BlcmF0aW9uS2V5c31cbiAgICogQGRlZmF1bHQgT3BlcmF0aW9uS2V5cy5SRUFEXG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzID0gT3BlcmF0aW9uS2V5cy5SRUFEO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRm9ybSB0YXJnZXQgYXR0cmlidXRlIGZvciBuZXN0ZWQgZm9ybSBzdWJtaXNzaW9ucy5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIGFmdGVyIHN1Ym1pdHRpbmcgZm9ybXMgY29udGFpbmVkIHdpdGhpblxuICAgKiB0aGUgZmllbGRzZXQuIFRoaXMgYXR0cmlidXRlIG1pcnJvcnMgdGhlIEhUTUwgZm9ybSB0YXJnZXQgYmVoYXZpb3IsIGFsbG93aW5nIGNvbnRyb2wgb3ZlclxuICAgKiB3aGV0aGVyIGZvcm0gc3VibWlzc2lvbnMgb3BlbiBpbiB0aGUgc2FtZSB3aW5kb3csIG5ldyB3aW5kb3csIG9yIHNwZWNpZmljIGZyYW1lLiBVc2VmdWxcbiAgICogZm9yIGNvbXBsZXggZm9ybSB3b3JrZmxvd3MgYW5kIG11bHRpLXN0ZXAgcHJvY2Vzc2VzLlxuICAgKlxuICAgKiBAdHlwZSB7SFRNTEZvcm1UYXJnZXR9XG4gICAqIEBkZWZhdWx0ICdfc2VsZidcbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB0YXJnZXQ6IEhUTUxGb3JtVGFyZ2V0ID0gJ19zZWxmJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGFjY29yZGlvbiAoZXhwYW5kZWQgb3IgY29sbGFwc2VkKS5cbiAgICogQHN1bW1hcnkgQm9vbGVhbiBmbGFnIHRoYXQgdHJhY2tzIHdoZXRoZXIgdGhlIGZpZWxkc2V0IGFjY29yZGlvbiBpcyBjdXJyZW50bHkgb3BlbiBvciBjbG9zZWQuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgYXV0b21hdGljYWxseSBtYW5hZ2VkIGJhc2VkIG9uIHVzZXIgaW50ZXJhY3Rpb25zIGFuZCBpbml0aWFsIG9wZXJhdGlvbiBzdGF0ZS5cbiAgICogSXQgc2VydmVzIGFzIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgY29tcG9uZW50J3MgdmlzaWJpbGl0eSBzdGF0ZSBhbmQgaXMgdXNlZFxuICAgKiB0byBjb29yZGluYXRlIGJldHdlZW4gdXNlciBhY3Rpb25zIGFuZCBwcm9ncmFtbWF0aWMgc3RhdGUgY2hhbmdlcy5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gQ1JVRCBvcGVyYXRpb24gY29uc3RhbnRzIGZvciB0ZW1wbGF0ZSB1c2FnZS5cbiAgICogQHN1bW1hcnkgRXhwb3NlcyB0aGUgT3BlcmF0aW9uS2V5cyBlbnVtIHRvIHRoZSBjb21wb25lbnQgdGVtcGxhdGUsIGVuYWJsaW5nIGNvbmRpdGlvbmFsXG4gICAqIHJlbmRlcmluZyBhbmQgYmVoYXZpb3IgYmFzZWQgb24gb3BlcmF0aW9uIHR5cGVzLiBUaGlzIHByb3RlY3RlZCByZWFkb25seSBwcm9wZXJ0eSBlbnN1cmVzXG4gICAqIHRoYXQgdGVtcGxhdGUgbG9naWMgY2FuIGFjY2VzcyBvcGVyYXRpb24gY29uc3RhbnRzIHdoaWxlIG1haW50YWluaW5nIGVuY2Fwc3VsYXRpb24gYW5kXG4gICAqIHByZXZlbnRpbmcgYWNjaWRlbnRhbCBtb2RpZmljYXRpb24gb2YgdGhlIGVudW0gdmFsdWVzLlxuICAgKlxuICAgKiBAdHlwZSB7Q3J1ZE9wZXJhdGlvbnN9XG4gICAqIEBkZWZhdWx0IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IE9wZXJhdGlvbktleXM6IENydWRPcGVyYXRpb25zID0gT3BlcmF0aW9uS2V5cy5DUkVBVEU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24gc2VydmljZS5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIG1hbnVhbCBjb250cm9sIG92ZXIgY2hhbmdlIGRldGVjdGlvbiBjeWNsZXMuXG4gICAqIFRoaXMgaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IHByb2dyYW1tYXRpYyBET00gY2hhbmdlcyAobGlrZSBzZXR0aW5nIGFjY29yZGlvblxuICAgKiBhdHRyaWJ1dGVzKSBhcmUgcHJvcGVybHkgcmVmbGVjdGVkIGluIHRoZSBjb21wb25lbnQncyBzdGF0ZSBhbmQgdHJpZ2dlciBhcHByb3ByaWF0ZVxuICAgKiB2aWV3IHVwZGF0ZXMgd2hlbiBtb2RpZmljYXRpb25zIG9jY3VyIG91dHNpZGUgdGhlIG5vcm1hbCBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24gZmxvdy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0NoYW5nZURldGVjdG9yUmVmfVxuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgc3RhdGUgYWZ0ZXIgdmlldyBhbmQgY2hpbGQgY29tcG9uZW50cyBhcmUgcmVuZGVyZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbGlmZWN5Y2xlIGhvb2sgaW1wbGVtZW50cyBpbnRlbGxpZ2VudCBhdXRvLXN0YXRlIG1hbmFnZW1lbnQgYmFzZWQgb24gdGhlIGN1cnJlbnRcbiAgICogQ1JVRCBvcGVyYXRpb24uIEZvciBSRUFEIGFuZCBERUxFVEUgb3BlcmF0aW9ucywgdGhlIGZpZWxkc2V0IGF1dG9tYXRpY2FsbHkgb3BlbnMgdG8gcHJvdmlkZVxuICAgKiBpbW1lZGlhdGUgYWNjZXNzIHRvIGluZm9ybWF0aW9uLCB3aGlsZSBDUkVBVEUgYW5kIFVQREFURSBvcGVyYXRpb25zIGtlZXAgaXQgY2xvc2VkIHRvIG1haW50YWluXG4gICAqIGEgY2xlYW4gaW5pdGlhbCBpbnRlcmZhY2UuIFRoZSBtZXRob2QgZGlyZWN0bHkgbWFuaXB1bGF0ZXMgdGhlIERPTSB0byBlbnN1cmUgcHJvcGVyIGFjY29yZGlvblxuICAgKiBzeW5jaHJvbml6YXRpb24gYW5kIHRyaWdnZXJzIGNoYW5nZSBkZXRlY3Rpb24gdG8gcmVmbGVjdCB0aGUgcHJvZ3JhbW1hdGljIHN0YXRlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBGIGFzIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgRCBhcyBET01cbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENoYW5nZURldGVjdG9yXG4gICAqXG4gICAqICAgQS0+PkY6IG5nQWZ0ZXJWaWV3SW5pdCgpXG4gICAqICAgYWx0IG9wZXJhdGlvbiBpcyBSRUFEIG9yIERFTEVURVxuICAgKiAgICAgRi0+PkY6IFNldCBpc09wZW4gPSB0cnVlXG4gICAqICAgICBGLT4+RDogUXVlcnkgaW9uLWFjY29yZGlvbi1ncm91cCBlbGVtZW50XG4gICAqICAgICBhbHQgYWNjb3JkaW9uIGVsZW1lbnQgZXhpc3RzXG4gICAqICAgICAgIEYtPj5EOiBTZXQgdmFsdWUgYXR0cmlidXRlIHRvICdvcGVuJ1xuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqICAgRi0+PkM6IGRldGVjdENoYW5nZXMoKVxuICAgKiAgIEMtPj5GOiBVcGRhdGUgdmlldyB3aXRoIG5ldyBzdGF0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlJFQUQgfHwgdGhpcy5vcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuREVMRVRFKSB7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICBjb25zdCBhY2NvcmRpb25FbGVtZW50ID0gdGhpcy5jb21wb25lbnQ/Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW9uLWFjY29yZGlvbi1ncm91cCcpO1xuICAgICAgaWYoYWNjb3JkaW9uRWxlbWVudClcbiAgICAgICAgYWNjb3JkaW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ29wZW4nKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgYWNjb3JkaW9uIHN0YXRlIGNoYW5nZSBldmVudHMgZnJvbSB1c2VyIGludGVyYWN0aW9ucy5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIEN1c3RvbUV2ZW50IG9iamVjdHMgdHJpZ2dlcmVkIHdoZW4gdXNlcnMgZXhwYW5kIG9yIGNvbGxhcHNlIHRoZSBhY2NvcmRpb24uXG4gICAqIFRoaXMgbWV0aG9kIGV4dHJhY3RzIHRoZSBuZXcgc3RhdGUgZnJvbSB0aGUgZXZlbnQgZGV0YWlscyBhbmQgdXBkYXRlcyB0aGUgY29tcG9uZW50J3NcbiAgICogaW50ZXJuYWwgc3RhdGUgYWNjb3JkaW5nbHkuIEl0IHNwZWNpZmljYWxseSBsaXN0ZW5zIGZvciBJT04tQUNDT1JESU9OLUdST1VQIGV2ZW50cyB0b1xuICAgKiBlbnN1cmUgcHJvcGVyIGV2ZW50IHNvdXJjZSB2YWxpZGF0aW9uIGFuZCBwcmV2ZW50IGhhbmRsaW5nIG9mIHVucmVsYXRlZCBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q3VzdG9tRXZlbnR9IGV2ZW50IC0gVGhlIGV2ZW50IG9iamVjdCBjb250YWluaW5nIGFjY29yZGlvbiBzdGF0ZSBjaGFuZ2UgZGV0YWlsc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgSSBhcyBJb24tQWNjb3JkaW9uXG4gICAqICAgcGFydGljaXBhbnQgRiBhcyBGaWVsZHNldENvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5JOiBDbGljayBhY2NvcmRpb24gaGVhZGVyXG4gICAqICAgSS0+PkY6IGhhbmRsZUNoYW5nZShDdXN0b21FdmVudClcbiAgICogICBGLT4+RjogRXh0cmFjdCB0YXJnZXQgYW5kIGRldGFpbCBmcm9tIGV2ZW50XG4gICAqICAgRi0+PkY6IFZhbGlkYXRlIHRhcmdldCBpcyBJT04tQUNDT1JESU9OLUdST1VQXG4gICAqICAgYWx0IHZhbGlkIHRhcmdldFxuICAgKiAgICAgRi0+PkY6IFVwZGF0ZSBpc09wZW4gPSAhIXZhbHVlXG4gICAqICAgZW5kXG4gICAqICAgRi0+Pkk6IFJlZmxlY3QgdXBkYXRlZCBzdGF0ZVxuICAgKlxuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNoYW5nZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7IHRhcmdldCwgZGV0YWlsIH0gPSBldmVudDtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBkZXRhaWw7XG4gICAgaWYgKCh0YXJnZXQgYXMgSFRNTElvbkFjY29yZGlvbkdyb3VwRWxlbWVudCkudGFnTmFtZSA9PT0gJ0lPTi1BQ0NPUkRJT04tR1JPVVAnKVxuICAgICAgdGhpcy5pc09wZW4gPSAhIXZhbHVlO1xuICB9XG59XG4iLCI8ZmllbGRzZXQgW2NsYXNzXT1cIidkY2YtZmllbGRzZXQgJyArIG9wZXJhdGlvblwiICNjb21wb25lbnQ+XG4gIDxpb24tYWNjb3JkaW9uLWdyb3VwIChpb25DaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8aW9uLWFjY29yZGlvbiB2YWx1ZT1cIm9wZW5cIj5cbiAgICAgIDxpb24taXRlbSBzbG90PVwiaGVhZGVyXCIgPlxuICAgICAgICA8bGVnZW5kPnt7IG5hbWUgfX08L2xlZ2VuZD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWlzT3BlblwiIGRlY2FmQ29sbGFwc2FibGU+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWFjY29yZGlvbj5cbiAgPC9pb24tYWNjb3JkaW9uLWdyb3VwPlxuPC9maWVsZHNldD5cbiJdfQ==