@ruc-lib/drawer 2.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,3 +1,375 @@
1
- export * from './lib/ruclib-drawer.module';
2
- export * from './lib/ruclib-drawer/ruclib-drawer.component';
3
- export * from './model/default-values';
1
+ import * as i0 from '@angular/core';
2
+ import { Type, OnInit, OnChanges, AfterViewInit, OnDestroy, EventEmitter, ViewContainerRef, ChangeDetectorRef, SimpleChanges } from '@angular/core';
3
+ import { AnimationEvent } from '@angular/animations';
4
+ import { MatDrawerMode } from '@angular/material/sidenav';
5
+
6
+ /**
7
+ * Defines the dimensions for a button, including text and icon sizing.
8
+ */
9
+ interface ButtonDimensions {
10
+ /**
11
+ * The width of the button.
12
+ * @example '120px', '5em'
13
+ * @optional
14
+ */
15
+ width?: string;
16
+ /**
17
+ * The height of the button.
18
+ * @example '40px', '2.5em'
19
+ * @optional
20
+ */
21
+ height?: string;
22
+ /**
23
+ * The padding of the button. Primarily for the main toggle button.
24
+ * @example '0 10px'
25
+ * @optional
26
+ */
27
+ padding?: string;
28
+ /**
29
+ * The font size for text within the button.
30
+ * @example '14px'
31
+ * @optional
32
+ */
33
+ fontSize?: string;
34
+ /**
35
+ * The size of the icon within the button.
36
+ * @example '20px'
37
+ * @optional
38
+ */
39
+ iconSize?: string;
40
+ }
41
+ /**
42
+ * Defines the dimensions for an icon button, like a close button.
43
+ */
44
+ interface IconDimensions {
45
+ /**
46
+ * The width of the icon button.
47
+ * @example '32px'
48
+ * @optional
49
+ */
50
+ width?: string;
51
+ /**
52
+ * The height of the icon button.
53
+ * @example '32px'
54
+ * @optional
55
+ */
56
+ height?: string;
57
+ /**
58
+ * The size of the icon itself within the button.
59
+ * @example '18px'
60
+ * @optional
61
+ */
62
+ iconSize?: string;
63
+ }
64
+ /**
65
+ * Defines the input properties for the RuclibDrawerComponent.
66
+ */
67
+ interface RuclibDrawerInput {
68
+ /**
69
+ * Position of the drawer.
70
+ * @default 'left'
71
+ * @optional
72
+ */
73
+ drawerPosition?: 'left' | 'right' | 'top' | 'bottom';
74
+ /**
75
+ * Mode of the drawer.
76
+ * `side`: Drawer stays open and reduces the content area.
77
+ * `over`: Drawer floats over the content.
78
+ * `push`: Drawer pushes the content away.
79
+ * @optional
80
+ */
81
+ mode?: MatDrawerMode;
82
+ /**
83
+ * Whether the drawer is initially opened.
84
+ * @optional
85
+ */
86
+ initialOpenedState?: boolean;
87
+ /**
88
+ * Width of the drawer, used when `drawerPosition` is 'left' or 'right'.
89
+ * @example '250px', '30vw'
90
+ * @optional
91
+ */
92
+ drawerWidth?: string;
93
+ /**
94
+ * Height of the drawer, used when `drawerPosition` is 'top' or 'bottom'.
95
+ * @example '200px', '40vh'
96
+ * @optional
97
+ */
98
+ drawerHeight?: string;
99
+ /**
100
+ * Content to be displayed in the drawer and main area.
101
+ * @optional
102
+ */
103
+ content?: {
104
+ /**
105
+ * Title displayed within the drawer.
106
+ * @optional
107
+ */
108
+ drawerTitle?: string;
109
+ /**
110
+ * HTML content for the body of the drawer. Used if `drawerContentComponent` is not provided.
111
+ * @optional
112
+ */
113
+ drawerBody?: string;
114
+ /**
115
+ * An Angular component to be rendered as the drawer's body content.
116
+ * If provided, `drawerBody` (HTML string) will be ignored for the drawer.
117
+ * @optional
118
+ */
119
+ drawerContentComponent?: Type<any>;
120
+ /**
121
+ * HTML content for the main application area beside/under the drawer.
122
+ * @optional
123
+ */
124
+ mainBody?: string;
125
+ };
126
+ /**
127
+ * Data to be passed to the `drawerContentComponent` instance.
128
+ * The dynamic component should have an @Input() property to receive this data.
129
+ */
130
+ drawerContentComponentData?: any;
131
+ /**
132
+ * Whether to disable the toggle button in the main content area.
133
+ * @optional
134
+ */
135
+ disableToggleButtonInMainContent?: boolean;
136
+ /**
137
+ * Text for the toggle button, supporting different text for open and close states.
138
+ * Also used for aria-label.
139
+ * @optional
140
+ */
141
+ toggleButtonText?: {
142
+ /**
143
+ * Text for the button when the drawer is closed (action to open).
144
+ * @optional
145
+ */
146
+ open?: string;
147
+ /**
148
+ * Text for the button when the drawer is open (action to close).
149
+ * @optional
150
+ */
151
+ close?: string;
152
+ };
153
+ /**
154
+ * Material icon name for the toggle button.
155
+ * @example 'menu', 'settings'
156
+ * @optional
157
+ */
158
+ toggleButtonIcon?: string;
159
+ /**
160
+ * URL for an image to be used in the toggle button.
161
+ * @optional
162
+ */
163
+ toggleButtonImageUrl?: string;
164
+ /**
165
+ * Alt text for the toggle button image.
166
+ * @optional
167
+ */
168
+ toggleButtonImageAlt?: string;
169
+ /**
170
+ * Whether the drawer has a backdrop, especially in 'over' mode.
171
+ * @optional
172
+ */
173
+ hasBackdrop?: boolean;
174
+ /**
175
+ * Custom background color for the backdrop.
176
+ * @example 'rgba(0,0,0,0.5)', '#333333'
177
+ * @optional
178
+ */
179
+ backdropBackgroundColor?: string;
180
+ /**
181
+ * Whether to show a close icon (e.g., 'x') inside the drawer.
182
+ * @optional
183
+ */
184
+ showCloseIcon?: boolean;
185
+ /**
186
+ * Whether to disable closing the drawer by pressing the Escape key or clicking on the backdrop.
187
+ * @optional
188
+ */
189
+ disableClose?: boolean;
190
+ /**
191
+ * Duration for the drawer's open/close animation.
192
+ * @example '300ms', '0.5s'
193
+ * @optional Defaults to Material's default (usually around 400ms for MatDrawer, or 300ms for custom animations).
194
+ */
195
+ animationDuration?: string;
196
+ /**
197
+ * Custom dimensions for the main toggle button.
198
+ * @optional
199
+ */
200
+ toggleButtonDimensions?: ButtonDimensions;
201
+ /**
202
+ * Custom dimensions for the close icon button inside the drawer.
203
+ * @optional
204
+ */
205
+ closeButtonDimensions?: IconDimensions;
206
+ }
207
+
208
+ declare class RuclibDrawerComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {
209
+ private cdr;
210
+ /**
211
+ * Input data for configuring the drawer's appearance and behavior.
212
+ * @see RuclibDrawerInput interface for detailed properties.
213
+ */
214
+ rucInputData: RuclibDrawerInput;
215
+ /**
216
+ * Optional custom theme class to be applied to the drawer panel.
217
+ * @example 'dark-theme', 'custom-theme-one'
218
+ */
219
+ customTheme: string | undefined;
220
+ /**
221
+ * EventEmitter for various drawer events.
222
+ * Emits objects with `type` (e.g., 'openedStart', 'closedStart', 'openedChange', 'drawerToggle')
223
+ * and `opened` (boolean) and `position` (string) properties.
224
+ */
225
+ rucEvent: EventEmitter<any>;
226
+ /** ViewContainerRef to host the dynamically loaded component. */
227
+ drawerComponentHost: ViewContainerRef;
228
+ /** Reference to the dynamically created component. */
229
+ private dynamicComponentRef;
230
+ /**
231
+ * Current animation state of the drawer ('in' or 'out').
232
+ * @public
233
+ */
234
+ drawerAnimationState: 'in' | 'out';
235
+ /**
236
+ * Current active position of the drawer.
237
+ * @public
238
+ * @default 'left'
239
+ */
240
+ currentDrawerPosition: 'left' | 'right' | 'top' | 'bottom';
241
+ /**
242
+ * Stores the next position if the drawer is currently open and a new position is requested.
243
+ * Used to sequence close and open animations.
244
+ * @private
245
+ */
246
+ private pendingDrawerPosition;
247
+ /**
248
+ * Flag to indicate if an animation is currently in progress to prevent rapid toggling.
249
+ * @public
250
+ */
251
+ isAnimating: boolean;
252
+ /**
253
+ * Effective animation duration for the drawer, derived from input or default.
254
+ * @public
255
+ * @default '300ms'
256
+ */
257
+ effectiveAnimationDuration: string;
258
+ /**
259
+ * Mode of the drawer, primarily for determining backdrop behavior with custom animations.
260
+ * @public
261
+ * @default 'side'
262
+ */
263
+ matDrawerMode: MatDrawerMode;
264
+ /**
265
+ * Actual position ('start' or 'end') used by Angular Material's MatDrawer if it were directly used.
266
+ * Retained for logical consistency in determining layout.
267
+ * @public
268
+ * @default 'start'
269
+ */
270
+ matActualPosition: 'start' | 'end';
271
+ /**
272
+ * Flag indicating if the drawer is in a vertical layout (top/bottom).
273
+ * Helps determine if width or height should be 100%.
274
+ * @public
275
+ */
276
+ isVerticalLayout: boolean;
277
+ /**
278
+ * Effective dimension (width or height) of the drawer panel.
279
+ * @public
280
+ * @default '250px'
281
+ */
282
+ effectiveDrawerDimension: string;
283
+ constructor(cdr: ChangeDetectorRef);
284
+ /**
285
+ * Angular lifecycle hook that is called after data-bound properties of a directive are initialized.
286
+ */
287
+ ngOnInit(): void;
288
+ /**
289
+ * Angular lifecycle hook that is called after Angular has fully initialized a component's view.
290
+ */
291
+ ngAfterViewInit(): void;
292
+ /**
293
+ * Angular lifecycle hook that is called when any data-bound property of a directive changes.
294
+ * @param changes - Object containing the changed properties.
295
+ */
296
+ ngOnChanges(changes: SimpleChanges): void;
297
+ /**
298
+ * Applies input data to component properties, calculating dimensions and positions.
299
+ * @private
300
+ */
301
+ private applyInputs;
302
+ /**
303
+ * Toggles the drawer's open/close state or switches to a new position.
304
+ * @param requestedPosition - The desired position to open the drawer from. If not provided, uses `currentDrawerPosition`.
305
+ */
306
+ toggleDrawer(requestedPosition?: 'left' | 'right' | 'top' | 'bottom'): void;
307
+ /**
308
+ * Sets the drawer's open state and triggers the animation.
309
+ * @param open - Boolean indicating whether to open (true) or close (false) the drawer.
310
+ * @private
311
+ */
312
+ private setDrawerOpenState;
313
+ /**
314
+ * Callback for when a drawer animation finishes.
315
+ * Manages state transitions, especially when switching between open drawers.
316
+ * @param event - The Angular AnimationEvent.
317
+ */
318
+ onAnimationDone(event: AnimationEvent): void;
319
+ /**
320
+ * Loads the dynamic component into the drawer if specified in rucInputData.
321
+ * Clears existing dynamic component if any.
322
+ * @private
323
+ */
324
+ private loadDynamicContent;
325
+ /**
326
+ * Getter for the current animation parameters to be passed to the animation triggers in the template.
327
+ * Includes the current animation state ('in' or 'out') and the effective duration.
328
+ */
329
+ get animationParams(): {
330
+ value: "out" | "in";
331
+ params: {
332
+ duration: string;
333
+ };
334
+ };
335
+ /**
336
+ * Getter for the backdrop animation parameters.
337
+ * Typically uses a faster duration than the main drawer animation.
338
+ */
339
+ get backdropAnimationParams(): {
340
+ value: "out" | "in";
341
+ params: {
342
+ duration: string;
343
+ };
344
+ };
345
+ /**
346
+ * Generates an accessible label for the toggle button based on the drawer's state and position.
347
+ * @returns The ARIA label string for the toggle button.
348
+ */
349
+ getToggleButtonAriaLabel(): string;
350
+ /**
351
+ * Handles clicks on the backdrop.
352
+ * Closes the drawer only if `disableClose` is not true.
353
+ * @public
354
+ */
355
+ handleBackdropClick(): void;
356
+ /**
357
+ * Listens for Escape key presses on the document.
358
+ * Closes the drawer if it's open and `disableClose` is not true.
359
+ * @param event - The KeyboardEvent.
360
+ */
361
+ onKeydownHandler(event: KeyboardEvent): void;
362
+ /**
363
+ * Clears any dynamically loaded component.
364
+ * @private
365
+ */
366
+ private clearDynamicContent;
367
+ /**
368
+ * Angular lifecycle hook that is called clear dynamic component content.
369
+ */
370
+ ngOnDestroy(): void;
371
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuclibDrawerComponent, never>;
372
+ static ɵcmp: i0.ɵɵComponentDeclaration<RuclibDrawerComponent, "uxp-ruclib-drawer", never, { "rucInputData": { "alias": "rucInputData"; "required": false; }; "customTheme": { "alias": "customTheme"; "required": false; }; }, { "rucEvent": "rucEvent"; }, never, never, true, never>;
373
+ }
374
+
375
+ export { RuclibDrawerComponent };
package/package.json CHANGED
@@ -1,24 +1,16 @@
1
1
  {
2
2
  "name": "@ruc-lib/drawer",
3
- "version": "2.0.0",
4
- "license": "MIT",
3
+ "version": "3.1.0",
5
4
  "peerDependencies": {
6
- "@angular/common": "^17.0.0 || ^16.0.0 || ^15.0.0",
7
- "@angular/core": "^17.0.0 || ^16.0.0 || ^15.0.0",
8
- "@angular/material": "^15.2.9 || ^14.0.0 || ^13.0.0"
5
+ "@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
6
+ "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
7
+ "@angular/material": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"
9
8
  },
10
9
  "dependencies": {
11
10
  "tslib": "^2.3.0"
12
11
  },
13
- "publishConfig": {
14
- "access": "public"
15
- },
16
12
  "sideEffects": false,
17
- "module": "fesm2015/ruc-lib-drawer.mjs",
18
- "es2020": "fesm2020/ruc-lib-drawer.mjs",
19
- "esm2020": "esm2020/ruc-lib-drawer.mjs",
20
- "fesm2020": "fesm2020/ruc-lib-drawer.mjs",
21
- "fesm2015": "fesm2015/ruc-lib-drawer.mjs",
13
+ "module": "fesm2022/ruc-lib-drawer.mjs",
22
14
  "typings": "index.d.ts",
23
15
  "exports": {
24
16
  "./package.json": {
@@ -26,11 +18,7 @@
26
18
  },
27
19
  ".": {
28
20
  "types": "./index.d.ts",
29
- "esm2020": "./esm2020/ruc-lib-drawer.mjs",
30
- "es2020": "./fesm2020/ruc-lib-drawer.mjs",
31
- "es2015": "./fesm2015/ruc-lib-drawer.mjs",
32
- "node": "./fesm2015/ruc-lib-drawer.mjs",
33
- "default": "./fesm2020/ruc-lib-drawer.mjs"
21
+ "default": "./fesm2022/ruc-lib-drawer.mjs"
34
22
  }
35
23
  }
36
24
  }
package/esm2020/index.mjs DELETED
@@ -1,4 +0,0 @@
1
- export * from './lib/ruclib-drawer.module';
2
- export * from './lib/ruclib-drawer/ruclib-drawer.component';
3
- export * from './model/default-values';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9ydWNsaWItZHJhd2VyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3J1Y2xpYi1kcmF3ZXIvcnVjbGliLWRyYXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2RlZmF1bHQtdmFsdWVzJzsiXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludGVyZmFjZS9kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdERyYXdlck1vZGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdlwiO1xyXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIHRoZSBkaW1lbnNpb25zIGZvciBhIGJ1dHRvbiwgaW5jbHVkaW5nIHRleHQgYW5kIGljb24gc2l6aW5nLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBCdXR0b25EaW1lbnNpb25zIHtcclxuICAvKipcclxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGJ1dHRvbi5cclxuICAgKiBAZXhhbXBsZSAnMTIwcHgnLCAnNWVtJ1xyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIHdpZHRoPzogc3RyaW5nOyAgICAgIC8vIGUuZy4sICcxMjBweCcsICc1ZW0nXHJcbiAgLyoqXHJcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgYnV0dG9uLlxyXG4gICAqIEBleGFtcGxlICc0MHB4JywgJzIuNWVtJ1xyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIGhlaWdodD86IHN0cmluZzsgICAgIC8vIGUuZy4sICc0MHB4JywgJzIuNWVtJ1xyXG4gIC8qKlxyXG4gICAqIFRoZSBwYWRkaW5nIG9mIHRoZSBidXR0b24uIFByaW1hcmlseSBmb3IgdGhlIG1haW4gdG9nZ2xlIGJ1dHRvbi5cclxuICAgKiBAZXhhbXBsZSAnMCAxMHB4J1xyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIHBhZGRpbmc/OiBzdHJpbmc7ICAgIC8vIGUuZy4sICcwIDEwcHgnIChNb3N0bHkgZm9yIHRvZ2dsZSBidXR0b24pXHJcbiAgLyoqXHJcbiAgICogVGhlIGZvbnQgc2l6ZSBmb3IgdGV4dCB3aXRoaW4gdGhlIGJ1dHRvbi5cclxuICAgKiBAZXhhbXBsZSAnMTRweCdcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKi9cclxuICBmb250U2l6ZT86IHN0cmluZzsgICAvLyBlLmcuLCAnMTRweCcgKEZvciB0ZXh0IGluIHRvZ2dsZSBidXR0b24pXHJcbiAgLyoqXHJcbiAgICogVGhlIHNpemUgb2YgdGhlIGljb24gd2l0aGluIHRoZSBidXR0b24uXHJcbiAgICogQGV4YW1wbGUgJzIwcHgnXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICovXHJcbiAgaWNvblNpemU/OiBzdHJpbmc7ICAgLy8gZS5nLiwgJzIwcHgnIChGb3IgaWNvbnMgaW4gdG9nZ2xlIG9yIGNsb3NlIGJ1dHRvbilcclxufVxyXG5cclxuLyoqXHJcbiAqIERlZmluZXMgdGhlIGRpbWVuc2lvbnMgZm9yIGFuIGljb24gYnV0dG9uLCBsaWtlIGEgY2xvc2UgYnV0dG9uLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJY29uRGltZW5zaW9ucyB7IC8vIFNpbXBsaWZpZWQgZm9yIGljb24gYnV0dG9ucyBsaWtlIGNsb3NlXHJcbiAgLyoqXHJcbiAgICogVGhlIHdpZHRoIG9mIHRoZSBpY29uIGJ1dHRvbi5cclxuICAgKiBAZXhhbXBsZSAnMzJweCdcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKi9cclxuICB3aWR0aD86IHN0cmluZzsgICAgICAvLyBlLmcuLCAnMzJweCdcclxuICAvKipcclxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBpY29uIGJ1dHRvbi5cclxuICAgKiBAZXhhbXBsZSAnMzJweCdcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKi9cclxuICBoZWlnaHQ/OiBzdHJpbmc7ICAgICAvLyBlLmcuLCAnMzJweCdcclxuICAvKipcclxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaWNvbiBpdHNlbGYgd2l0aGluIHRoZSBidXR0b24uXHJcbiAgICogQGV4YW1wbGUgJzE4cHgnXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICovXHJcbiAgaWNvblNpemU/OiBzdHJpbmc7ICAgLy8gZS5nLiwgJzE4cHgnXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGUgUnVjbGliRHJhd2VyQ29tcG9uZW50LlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBSdWNsaWJEcmF3ZXJJbnB1dCB7XHJcbiAgLyoqXHJcbiAgICogUG9zaXRpb24gb2YgdGhlIGRyYXdlci5cclxuICAgKiBAZGVmYXVsdCAnbGVmdCdcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKi9cclxuICBkcmF3ZXJQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nOyAvLyBEZWZhdWx0ICdsZWZ0J1xyXG4gIC8qKlxyXG4gICAqIE1vZGUgb2YgdGhlIGRyYXdlci5cclxuICAgKiBgc2lkZWA6IERyYXdlciBzdGF5cyBvcGVuIGFuZCByZWR1Y2VzIHRoZSBjb250ZW50IGFyZWEuXHJcbiAgICogYG92ZXJgOiBEcmF3ZXIgZmxvYXRzIG92ZXIgdGhlIGNvbnRlbnQuXHJcbiAgICogYHB1c2hgOiBEcmF3ZXIgcHVzaGVzIHRoZSBjb250ZW50IGF3YXkuXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICovXHJcbiAgbW9kZT86IE1hdERyYXdlck1vZGU7IC8vICdzaWRlJywgJ292ZXInLCAncHVzaCdcclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBkcmF3ZXIgaXMgaW5pdGlhbGx5IG9wZW5lZC5cclxuICAgKiBAb3B0aW9uYWxcclxuICAgKi9cclxuICBpbml0aWFsT3BlbmVkU3RhdGU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFdpZHRoIG9mIHRoZSBkcmF3ZXIsIHVzZWQgd2hlbiBgZHJhd2VyUG9zaXRpb25gIGlzICdsZWZ0JyBvciAncmlnaHQnLlxyXG4gICAqIEBleGFtcGxlICcyNTBweCcsICczMHZ3J1xyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIGRyYXdlcldpZHRoPzogc3RyaW5nOyAvLyBVc2VkIGZvciBsZWZ0L3JpZ2h0IGRyYXdlcnNcclxuICAvKipcclxuICAgKiBIZWlnaHQgb2YgdGhlIGRyYXdlciwgdXNlZCB3aGVuIGBkcmF3ZXJQb3NpdGlvbmAgaXMgJ3RvcCcgb3IgJ2JvdHRvbScuXHJcbiAgICogQGV4YW1wbGUgJzIwMHB4JywgJzQwdmgnXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICovXHJcbiAgZHJhd2VySGVpZ2h0Pzogc3RyaW5nOyAvLyBVc2VkIGZvciB0b3AvYm90dG9tIGRyYXdlcnNcclxuICAvKipcclxuICAgKiBDb250ZW50IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZHJhd2VyIGFuZCBtYWluIGFyZWEuXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICovXHJcbiAgY29udGVudD86IHtcclxuICAgIC8qKlxyXG4gICAgICogVGl0bGUgZGlzcGxheWVkIHdpdGhpbiB0aGUgZHJhd2VyLlxyXG4gICAgICogQG9wdGlvbmFsXHJcbiAgICAgKi9cclxuICAgIGRyYXdlclRpdGxlPzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBIVE1MIGNvbnRlbnQgZm9yIHRoZSBib2R5IG9mIHRoZSBkcmF3ZXIuIFVzZWQgaWYgYGRyYXdlckNvbnRlbnRDb21wb25lbnRgIGlzIG5vdCBwcm92aWRlZC5cclxuICAgICAqIEBvcHRpb25hbFxyXG4gICAgICovXHJcbiAgICBkcmF3ZXJCb2R5Pzogc3RyaW5nOyAvLyBIVE1MIGNvbnRlbnRcclxuICAgIC8qKlxyXG4gICAgICogQW4gQW5ndWxhciBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWQgYXMgdGhlIGRyYXdlcidzIGJvZHkgY29udGVudC5cclxuICAgICAqIElmIHByb3ZpZGVkLCBgZHJhd2VyQm9keWAgKEhUTUwgc3RyaW5nKSB3aWxsIGJlIGlnbm9yZWQgZm9yIHRoZSBkcmF3ZXIuXHJcbiAgICAgKiBAb3B0aW9uYWxcclxuICAgICAqL1xyXG4gICAgZHJhd2VyQ29udGVudENvbXBvbmVudD86IFR5cGU8YW55PjtcclxuICAgIC8qKlxyXG4gICAgICogSFRNTCBjb250ZW50IGZvciB0aGUgbWFpbiBhcHBsaWNhdGlvbiBhcmVhIGJlc2lkZS91bmRlciB0aGUgZHJhd2VyLlxyXG4gICAgICogQG9wdGlvbmFsXHJcbiAgICAgKi9cclxuICAgIG1haW5Cb2R5Pzogc3RyaW5nOyAgIC8vIEhUTUwgY29udGVudFxyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogRGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGBkcmF3ZXJDb250ZW50Q29tcG9uZW50YCBpbnN0YW5jZS5cclxuICAgKiBUaGUgZHluYW1pYyBjb21wb25lbnQgc2hvdWxkIGhhdmUgYW4gQElucHV0KCkgcHJvcGVydHkgdG8gcmVjZWl2ZSB0aGlzIGRhdGEuXHJcbiAgICovXHJcbiAgZHJhd2VyQ29udGVudENvbXBvbmVudERhdGE/OiBhbnk7XHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSB0b2dnbGUgYnV0dG9uIGluIHRoZSBtYWluIGNvbnRlbnQgYXJlYS5cclxuICAgKiBAb3B0aW9uYWxcclxuICAgKi9cclxuICBkaXNhYmxlVG9nZ2xlQnV0dG9uSW5NYWluQ29udGVudD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogVGV4dCBmb3IgdGhlIHRvZ2dsZSBidXR0b24sIHN1cHBvcnRpbmcgZGlmZmVyZW50IHRleHQgZm9yIG9wZW4gYW5kIGNsb3NlIHN0YXRlcy5cclxuICAgKiBBbHNvIHVzZWQgZm9yIGFyaWEtbGFiZWwuXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICovXHJcbiAgdG9nZ2xlQnV0dG9uVGV4dD86IHtcclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBmb3IgdGhlIGJ1dHRvbiB3aGVuIHRoZSBkcmF3ZXIgaXMgY2xvc2VkIChhY3Rpb24gdG8gb3BlbikuXHJcbiAgICAgKiBAb3B0aW9uYWxcclxuICAgICAqL1xyXG4gICAgb3Blbj86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGV4dCBmb3IgdGhlIGJ1dHRvbiB3aGVuIHRoZSBkcmF3ZXIgaXMgb3BlbiAoYWN0aW9uIHRvIGNsb3NlKS5cclxuICAgICAqIEBvcHRpb25hbFxyXG4gICAgICovXHJcbiAgICBjbG9zZT86IHN0cmluZzsgLy8gVXNlZCBmb3IgdGV4dCBkaXNwbGF5IGFuZCBhcmlhLWxhYmVsXHJcbiAgfTtcclxuICAvKipcclxuICAgKiBNYXRlcmlhbCBpY29uIG5hbWUgZm9yIHRoZSB0b2dnbGUgYnV0dG9uLlxyXG4gICAqIEBleGFtcGxlICdtZW51JywgJ3NldHRpbmdzJ1xyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIHRvZ2dsZUJ1dHRvbkljb24/OiBzdHJpbmc7IC8vIE1hdGVyaWFsIGljb24gbmFtZVxyXG4gIC8qKlxyXG4gICAqIFVSTCBmb3IgYW4gaW1hZ2UgdG8gYmUgdXNlZCBpbiB0aGUgdG9nZ2xlIGJ1dHRvbi5cclxuICAgKiBAb3B0aW9uYWxcclxuICAgKi9cclxuICB0b2dnbGVCdXR0b25JbWFnZVVybD86IHN0cmluZztcclxuICAvKipcclxuICAgKiBBbHQgdGV4dCBmb3IgdGhlIHRvZ2dsZSBidXR0b24gaW1hZ2UuXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICovXHJcbiAgdG9nZ2xlQnV0dG9uSW1hZ2VBbHQ/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgZHJhd2VyIGhhcyBhIGJhY2tkcm9wLCBlc3BlY2lhbGx5IGluICdvdmVyJyBtb2RlLlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIGhhc0JhY2tkcm9wPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBDdXN0b20gYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIGJhY2tkcm9wLlxyXG4gICAqIEBleGFtcGxlICdyZ2JhKDAsMCwwLDAuNSknLCAnIzMzMzMzMydcclxuICAgKiBAb3B0aW9uYWxcclxuICAgKi9cclxuICBiYWNrZHJvcEJhY2tncm91bmRDb2xvcj86IHN0cmluZztcclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSBjbG9zZSBpY29uIChlLmcuLCAneCcpIGluc2lkZSB0aGUgZHJhd2VyLlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIHNob3dDbG9zZUljb24/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBjbG9zaW5nIHRoZSBkcmF3ZXIgYnkgcHJlc3NpbmcgdGhlIEVzY2FwZSBrZXkgb3IgY2xpY2tpbmcgb24gdGhlIGJhY2tkcm9wLlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIGRpc2FibGVDbG9zZT86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogRHVyYXRpb24gZm9yIHRoZSBkcmF3ZXIncyBvcGVuL2Nsb3NlIGFuaW1hdGlvbi5cclxuICAgKiBAZXhhbXBsZSAnMzAwbXMnLCAnMC41cydcclxuICAgKiBAb3B0aW9uYWwgRGVmYXVsdHMgdG8gTWF0ZXJpYWwncyBkZWZhdWx0ICh1c3VhbGx5IGFyb3VuZCA0MDBtcyBmb3IgTWF0RHJhd2VyLCBvciAzMDBtcyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMpLlxyXG4gICAqL1xyXG4gIGFuaW1hdGlvbkR1cmF0aW9uPzogc3RyaW5nOyAvLyBlLmcuLCAnMzAwbXMnLCAnMC41cycuIERlZmF1bHQgaXMgTWF0ZXJpYWwncyBkZWZhdWx0ICh1c3VhbGx5IDQwMG1zKVxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBkaW1lbnNpb25zIGZvciB0aGUgbWFpbiB0b2dnbGUgYnV0dG9uLlxyXG4gICAqIEBvcHRpb25hbFxyXG4gICAqL1xyXG4gIHRvZ2dsZUJ1dHRvbkRpbWVuc2lvbnM/OiBCdXR0b25EaW1lbnNpb25zOyAvLyBDdXN0b20gZGltZW5zaW9ucyBmb3IgdGhlIG1haW4gdG9nZ2xlIGJ1dHRvblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBkaW1lbnNpb25zIGZvciB0aGUgY2xvc2UgaWNvbiBidXR0b24gaW5zaWRlIHRoZSBkcmF3ZXIuXHJcbiAgICogQG9wdGlvbmFsXHJcbiAgICovXHJcbiAgY2xvc2VCdXR0b25EaW1lbnNpb25zPzogSWNvbkRpbWVuc2lvbnM7ICAvLyBDdXN0b20gZGltZW5zaW9ucyBmb3IgdGhlIGNsb3NlIGljb24gYnV0dG9uXHJcbn0iXX0=