@bravura/ui 2.4.0 → 2.5.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.
@@ -0,0 +1,388 @@
1
+ import * as i1 from '@angular/cdk/bidi';
2
+ import { BidiModule } from '@angular/cdk/bidi';
3
+ import * as i4 from '@angular/cdk/observers';
4
+ import { ObserversModule } from '@angular/cdk/observers';
5
+ import { CommonModule } from '@angular/common';
6
+ import * as i0 from '@angular/core';
7
+ import { EventEmitter, TemplateRef, ElementRef, ViewContainerRef, Component, ChangeDetectionStrategy, Host, ViewChild, InjectionToken, Directive, Inject, Input, Output, NgModule } from '@angular/core';
8
+ import * as i2 from '@angular/material/button';
9
+ import { MatButtonModule } from '@angular/material/button';
10
+ import * as i3 from '@angular/material/icon';
11
+ import { MatIconModule } from '@angular/material/icon';
12
+ import { BuiCommonModule } from '@bravura/ui/common';
13
+ import * as i5 from '@bravura/ui/icon-font';
14
+ import { IconFontModule } from '@bravura/ui/icon-font';
15
+ import { trigger, state, style, transition, group, animate, query, animateChild } from '@angular/animations';
16
+ import { Subject, takeUntil } from 'rxjs';
17
+
18
+ class ClipNoteComponent {
19
+ constructor(_cd, _dir, _elemRef) {
20
+ this._cd = _cd;
21
+ this._dir = _dir;
22
+ this._elemRef = _elemRef;
23
+ this.buttonText = '';
24
+ this.panelState = 'closed-ltr';
25
+ this.direction = 'ltr';
26
+ this._buttonAnimating = false;
27
+ this._hasContent = false;
28
+ this.opened = new EventEmitter();
29
+ this.closed = new EventEmitter();
30
+ this._hovering = false;
31
+ this._destroyed$ = new Subject();
32
+ this._toggleQueue = [];
33
+ }
34
+ get buttonState() {
35
+ if (this._hovering || this.panelState === 'open') {
36
+ return 'active';
37
+ }
38
+ return 'inactive';
39
+ }
40
+ get buttonIconState() {
41
+ if (this.panelState === 'open') {
42
+ return `open-${this.direction}`;
43
+ }
44
+ if (this.buttonState === 'active') {
45
+ return `active-${this.direction}`;
46
+ }
47
+ return 'inactive';
48
+ }
49
+ ngOnInit() {
50
+ const changeDir = () => {
51
+ this.direction = this._dir.value;
52
+ this.panelState = `closed-${this.direction}`;
53
+ this._cd.markForCheck();
54
+ };
55
+ this._dir.change.pipe(takeUntil(this._destroyed$)).subscribe(changeDir);
56
+ changeDir();
57
+ }
58
+ ngOnDestroy() {
59
+ this._destroyed$.next();
60
+ this._destroyed$.complete();
61
+ }
62
+ _mouseOverButton(hovering) {
63
+ if (this._hovering !== hovering) {
64
+ this._hovering = hovering;
65
+ this._cd.markForCheck();
66
+ }
67
+ }
68
+ toggle() {
69
+ this.panelState = this.panelState === `closed-${this.direction}` ? 'open' : `closed-${this.direction}`;
70
+ this._cd.markForCheck();
71
+ }
72
+ _scheduleToggle() {
73
+ if (this._buttonAnimating) {
74
+ this._toggleQueue.push(true);
75
+ }
76
+ else {
77
+ this.toggle();
78
+ }
79
+ }
80
+ _checkToggle() {
81
+ if (this._toggleQueue.pop()) {
82
+ this.toggle();
83
+ }
84
+ }
85
+ open() {
86
+ this.panelState = 'open';
87
+ this._cd.markForCheck();
88
+ this._emit();
89
+ }
90
+ close() {
91
+ this.panelState = `closed-${this.direction}`;
92
+ this._cd.markForCheck();
93
+ this._emit();
94
+ }
95
+ _emit() {
96
+ if (this.panelState === 'open') {
97
+ this.opened.emit();
98
+ }
99
+ else {
100
+ this.closed.emit();
101
+ }
102
+ }
103
+ _contentChanged(content) {
104
+ let template;
105
+ if (content instanceof TemplateRef) {
106
+ template = content;
107
+ }
108
+ else {
109
+ template = this._fallbackTemplate;
110
+ this._content = content;
111
+ }
112
+ this._noteViewRef.clear();
113
+ const context = {};
114
+ this._contentView = this._noteViewRef.createEmbeddedView(template, context);
115
+ this._checkContent(true);
116
+ }
117
+ _checkContent(initial) {
118
+ this._contentView?.detectChanges();
119
+ this._hasContent = !!this._viewDiv.nativeElement.textContent?.trim();
120
+ const classList = this._elemRef.nativeElement.classList;
121
+ const cls = 'bui-clip-note-hidden';
122
+ const cls1 = 'bui-clip-note-reveal';
123
+ if (this._hasContent) {
124
+ classList.remove(cls);
125
+ if (!initial && this.panelState !== 'open') {
126
+ classList.add(cls1);
127
+ }
128
+ this._elemRef.nativeElement.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
129
+ }
130
+ else {
131
+ classList.add(cls);
132
+ classList.remove(cls1);
133
+ this.close();
134
+ }
135
+ }
136
+ _assignColor(color) {
137
+ this._color = color;
138
+ this._cd.markForCheck();
139
+ }
140
+ _assignButtonText(text) {
141
+ this.buttonText = text;
142
+ this._cd.markForCheck();
143
+ }
144
+ _assignButtonIcon(icon) {
145
+ this._icon = icon;
146
+ this._cd.markForCheck();
147
+ }
148
+ }
149
+ ClipNoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ClipNoteComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Directionality }, { token: i0.ElementRef, host: true }], target: i0.ɵɵFactoryTarget.Component });
150
+ ClipNoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: ClipNoteComponent, selector: "bui-clip-note", host: { classAttribute: "bui-clip-note bui-host" }, viewQueries: [{ propertyName: "_viewDiv", first: true, predicate: ["viewDiv"], descendants: true, read: ElementRef, static: true }, { propertyName: "_noteViewRef", first: true, predicate: ["noteViewRef"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_fallbackTemplate", first: true, predicate: ["fallbackTemplate"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"bui-clip-note-wrapper\">\n\t<div\n\t\tclass=\"bui-clip-note-content bui-border-{{ _color }} mat-elevation-z3\"\n\t\t[@panelAnimation]=\"panelState\"\n\t\t#viewDiv\n\t\t(cdkObserveContent)=\"_checkContent()\"\n\t>\n\t\t<ng-container #noteViewRef></ng-container>\n\t</div>\n\n\t<button\n\t\tmat-raised-button\n\t\tclass=\"bui-clip-note-trigger bui-clip-note-trigger-{{ buttonIconState }}\"\n\t\t[color]=\"_color\"\n\t\t[@buttonAnimation]=\"buttonState\"\n\t\t(mouseenter)=\"_mouseOverButton(true)\"\n\t\t(mouseleave)=\"_mouseOverButton(false)\"\n\t\t(click)=\"_scheduleToggle()\"\n\t>\n\t\t<mat-icon\n\t\t\t[@buttonIconAnimation]=\"_icon ? 'disabled' : buttonIconState\"\n\t\t\t(@buttonIconAnimation.start)=\"_buttonAnimating = true\"\n\t\t\t(@buttonIconAnimation.done)=\"_buttonAnimating = false; _checkToggle()\"\n\t\t\t[buiIcon]=\"_icon || (direction === 'rtl' ? 'chevron_right' : 'chevron_left')\"\n\t\t>\n\t\t</mat-icon>\n\t\t<span [@buttonTextAnimation]=\"buttonState\" class=\"bui-clip-note-button-text\">&nbsp; {{ buttonText }}</span>\n\t</button>\n</div>\n\n<ng-template #fallbackTemplate>\n\t<div [innerHTML]=\"_content\"></div>\n</ng-template>\n", styles: [":host{position:absolute;top:2rem;box-sizing:border-box;z-index:var(--bui-clip-note-z-index, 100)}:host(.bui-clip-note-hidden){display:none}:host-context(:not([dir=rtl])){right:0}:host-context(:not([dir=rtl])) .bui-clip-note-trigger{right:-18px}:host-context([dir=rtl]){left:0;right:unset}:host-context([dir=rtl]) .bui-clip-note-trigger{left:-18px;right:unset}.bui-clip-note-trigger{border-radius:18px;overflow:hidden;position:absolute;top:-1rem}.bui-clip-note-button-text{display:inline-block;overflow-x:hidden}.bui-clip-note-wrapper{position:relative}.bui-clip-note-content{max-width:320px;min-width:150px;background-color:var(--bui-bg-body);border-radius:6px;border-width:1px;border-style:solid;padding:1rem;overflow-y:hidden}@keyframes rubber-band{0%{transform:scaleZ(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleZ(1)}}:host(.bui-clip-note-reveal) .bui-clip-note-trigger{animation:rubber-band .8s ease}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { kind: "directive", type: i5.IconDirective, selector: "[buiIcon]", inputs: ["buiIcon", "size", "variant"] }], animations: [
151
+ trigger('buttonAnimation', [
152
+ state('*', style({ width: '36px', minWidth: 0, padding: 0 })),
153
+ state('active', style({})),
154
+ transition('inactive <=> active', [
155
+ group([animate('250ms cubic-bezier(.56,.14,.18,.91)'), query('@buttonTextAnimation', animateChild())]),
156
+ query('@buttonIconAnimation', animateChild())
157
+ ])
158
+ ]),
159
+ trigger('buttonTextAnimation', [
160
+ state('inactive', style({ opacity: 0, width: 0 })),
161
+ state('active', style({ opacity: 1 })),
162
+ transition('inactive => active', animate('250ms cubic-bezier(.88,.15,.63,.61)')),
163
+ transition('active => inactive', animate('250ms cubic-bezier(.05,.72,.44,.92)'))
164
+ ]),
165
+ trigger('buttonIconAnimation', [
166
+ state('active-ltr', style({ transform: 'rotate(-90deg)' })),
167
+ state('active-rtl', style({ transform: 'rotate(90deg)' })),
168
+ state('open-ltr', style({ transform: 'rotate(90deg)' })),
169
+ state('open-rtl', style({ transform: 'rotate(270deg)' })),
170
+ state('inactive', style({})),
171
+ transition('inactive <=> *, * <=> open-ltr, * <=> open-rtl', animate('250ms cubic-bezier(0.25, 0.8, 0.25, 1)'))
172
+ ]),
173
+ trigger('panelAnimation', [
174
+ state('open', style({})),
175
+ state('closed-rtl', style({ transform: 'scale(0) translate(-80%, -100%)', padding: 0, opacity: 0 })),
176
+ state('closed-ltr', style({ transform: 'scale(0) translate(80%, -100%)', padding: 0, opacity: 0 })),
177
+ transition('open <=> *', animate('300ms cubic-bezier(.69,.12,.6,.62)'))
178
+ ])
179
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush });
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ClipNoteComponent, decorators: [{
181
+ type: Component,
182
+ args: [{ selector: 'bui-clip-note', host: { class: 'bui-clip-note bui-host' }, animations: [
183
+ trigger('buttonAnimation', [
184
+ state('*', style({ width: '36px', minWidth: 0, padding: 0 })),
185
+ state('active', style({})),
186
+ transition('inactive <=> active', [
187
+ group([animate('250ms cubic-bezier(.56,.14,.18,.91)'), query('@buttonTextAnimation', animateChild())]),
188
+ query('@buttonIconAnimation', animateChild())
189
+ ])
190
+ ]),
191
+ trigger('buttonTextAnimation', [
192
+ state('inactive', style({ opacity: 0, width: 0 })),
193
+ state('active', style({ opacity: 1 })),
194
+ transition('inactive => active', animate('250ms cubic-bezier(.88,.15,.63,.61)')),
195
+ transition('active => inactive', animate('250ms cubic-bezier(.05,.72,.44,.92)'))
196
+ ]),
197
+ trigger('buttonIconAnimation', [
198
+ state('active-ltr', style({ transform: 'rotate(-90deg)' })),
199
+ state('active-rtl', style({ transform: 'rotate(90deg)' })),
200
+ state('open-ltr', style({ transform: 'rotate(90deg)' })),
201
+ state('open-rtl', style({ transform: 'rotate(270deg)' })),
202
+ state('inactive', style({})),
203
+ transition('inactive <=> *, * <=> open-ltr, * <=> open-rtl', animate('250ms cubic-bezier(0.25, 0.8, 0.25, 1)'))
204
+ ]),
205
+ trigger('panelAnimation', [
206
+ state('open', style({})),
207
+ state('closed-rtl', style({ transform: 'scale(0) translate(-80%, -100%)', padding: 0, opacity: 0 })),
208
+ state('closed-ltr', style({ transform: 'scale(0) translate(80%, -100%)', padding: 0, opacity: 0 })),
209
+ transition('open <=> *', animate('300ms cubic-bezier(.69,.12,.6,.62)'))
210
+ ])
211
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"bui-clip-note-wrapper\">\n\t<div\n\t\tclass=\"bui-clip-note-content bui-border-{{ _color }} mat-elevation-z3\"\n\t\t[@panelAnimation]=\"panelState\"\n\t\t#viewDiv\n\t\t(cdkObserveContent)=\"_checkContent()\"\n\t>\n\t\t<ng-container #noteViewRef></ng-container>\n\t</div>\n\n\t<button\n\t\tmat-raised-button\n\t\tclass=\"bui-clip-note-trigger bui-clip-note-trigger-{{ buttonIconState }}\"\n\t\t[color]=\"_color\"\n\t\t[@buttonAnimation]=\"buttonState\"\n\t\t(mouseenter)=\"_mouseOverButton(true)\"\n\t\t(mouseleave)=\"_mouseOverButton(false)\"\n\t\t(click)=\"_scheduleToggle()\"\n\t>\n\t\t<mat-icon\n\t\t\t[@buttonIconAnimation]=\"_icon ? 'disabled' : buttonIconState\"\n\t\t\t(@buttonIconAnimation.start)=\"_buttonAnimating = true\"\n\t\t\t(@buttonIconAnimation.done)=\"_buttonAnimating = false; _checkToggle()\"\n\t\t\t[buiIcon]=\"_icon || (direction === 'rtl' ? 'chevron_right' : 'chevron_left')\"\n\t\t>\n\t\t</mat-icon>\n\t\t<span [@buttonTextAnimation]=\"buttonState\" class=\"bui-clip-note-button-text\">&nbsp; {{ buttonText }}</span>\n\t</button>\n</div>\n\n<ng-template #fallbackTemplate>\n\t<div [innerHTML]=\"_content\"></div>\n</ng-template>\n", styles: [":host{position:absolute;top:2rem;box-sizing:border-box;z-index:var(--bui-clip-note-z-index, 100)}:host(.bui-clip-note-hidden){display:none}:host-context(:not([dir=rtl])){right:0}:host-context(:not([dir=rtl])) .bui-clip-note-trigger{right:-18px}:host-context([dir=rtl]){left:0;right:unset}:host-context([dir=rtl]) .bui-clip-note-trigger{left:-18px;right:unset}.bui-clip-note-trigger{border-radius:18px;overflow:hidden;position:absolute;top:-1rem}.bui-clip-note-button-text{display:inline-block;overflow-x:hidden}.bui-clip-note-wrapper{position:relative}.bui-clip-note-content{max-width:320px;min-width:150px;background-color:var(--bui-bg-body);border-radius:6px;border-width:1px;border-style:solid;padding:1rem;overflow-y:hidden}@keyframes rubber-band{0%{transform:scaleZ(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleZ(1)}}:host(.bui-clip-note-reveal) .bui-clip-note-trigger{animation:rubber-band .8s ease}\n"] }]
212
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Directionality }, { type: i0.ElementRef, decorators: [{
213
+ type: Host
214
+ }] }]; }, propDecorators: { _viewDiv: [{
215
+ type: ViewChild,
216
+ args: ['viewDiv', { static: true, read: ElementRef }]
217
+ }], _noteViewRef: [{
218
+ type: ViewChild,
219
+ args: ['noteViewRef', { static: true, read: ViewContainerRef }]
220
+ }], _fallbackTemplate: [{
221
+ type: ViewChild,
222
+ args: ['fallbackTemplate', { static: true }]
223
+ }] } });
224
+
225
+ /** Used to provide default config for clip notes. */
226
+ const CLIP_NOTE_DEFAULT_CONFIG = new InjectionToken('bui-clip-note.default-config', {
227
+ factory: () => ({ color: 'primary', caption: 'More info' })
228
+ });
229
+ /**
230
+ * A clip note consists of a toggle button and a floating 'notepad' element, attached to the top end of the host element's
231
+ * viewable area. The 'notepad' normally collapses away and only reveals itself when the toggle button is active.
232
+ *
233
+ * The toggle button clips on the edge of the host element and expands to display the full caption when hovered. It hides itself
234
+ * automatically when there is no content provided via the `buiClipNote` property of the directive.
235
+ *
236
+ * The clip note component is suitable for large page container elements with visible boundaries. It can present contextual
237
+ * information regarding and in addition to the content displayed in the main view area.
238
+ *
239
+ * The properties `buiClipNoteColor` and `buiClipNoteCaption` customise the appearance of the clip note, the default values of which
240
+ * can optionally be provided by the `ClipNoteModule.forConfig()` method.
241
+ *
242
+ */
243
+ class ClipNoteDirective {
244
+ constructor(_elementRef, _vc, _config) {
245
+ this._elementRef = _elementRef;
246
+ this._vc = _vc;
247
+ /** Emits when the panel opens */
248
+ this.buiClipNoteOpened = new EventEmitter();
249
+ /** Emits when the panel closes */
250
+ this.buiClipNoteClosed = new EventEmitter();
251
+ this._color = 'primary';
252
+ this._caption = _config.caption;
253
+ this._color = _config.color;
254
+ }
255
+ /**
256
+ * Provide content to the clip note's floating notepad element.
257
+ * It accepts a `string` of HTML content or a `TemplateRef` object.
258
+ */
259
+ get buiClipNote() {
260
+ return this._content;
261
+ }
262
+ set buiClipNote(note) {
263
+ this._content = note;
264
+ if (this._compRef) {
265
+ this._processContent();
266
+ }
267
+ }
268
+ /**
269
+ * Customise the theme color alias.
270
+ * @default 'primary'
271
+ */
272
+ get buiClipNoteColor() {
273
+ return this._color;
274
+ }
275
+ set buiClipNoteColor(color) {
276
+ this._color = color;
277
+ if (this._compRef) {
278
+ this._compRef.instance._assignColor(this._color);
279
+ }
280
+ }
281
+ /**
282
+ * Customise the icon on the toggle button. With this property specified, the animation on the icon
283
+ * will not be active.
284
+ */
285
+ get buiClipNoteIcon() {
286
+ return this._icon;
287
+ }
288
+ set buiClipNoteIcon(icon) {
289
+ this._icon = icon;
290
+ if (this._compRef) {
291
+ this._compRef.instance._assignButtonIcon(this._icon);
292
+ }
293
+ }
294
+ /**
295
+ * The caption of the toggle button when expanded.
296
+ */
297
+ get buiClipNoteCaption() {
298
+ return this._caption;
299
+ }
300
+ set buiClipNoteCaption(text) {
301
+ this._caption = text;
302
+ if (this._compRef) {
303
+ this._compRef.instance._assignButtonText(this._caption);
304
+ }
305
+ }
306
+ ngAfterViewInit() {
307
+ setTimeout(() => {
308
+ this._compRef = this._vc.createComponent(ClipNoteComponent);
309
+ const childElement = this._compRef.location.nativeElement;
310
+ const element = this._elementRef.nativeElement;
311
+ element.style.position = 'relative';
312
+ element.appendChild(childElement);
313
+ this._compRef.instance._assignColor(this._color);
314
+ this._compRef.instance._assignButtonText(this._caption);
315
+ this._compRef.instance._assignButtonIcon(this._icon);
316
+ this._compRef.instance.opened.subscribe(this.buiClipNoteOpened.next.bind(this.buiClipNoteOpened));
317
+ this._compRef.instance.closed.subscribe(this.buiClipNoteClosed.next.bind(this.buiClipNoteClosed));
318
+ this._processContent();
319
+ });
320
+ }
321
+ ngOnDestroy() {
322
+ this._compRef.destroy();
323
+ }
324
+ /** Open the note panel */
325
+ open() {
326
+ this._compRef.instance.open();
327
+ }
328
+ /** Close the note panel */
329
+ close() {
330
+ this._compRef.instance.close();
331
+ }
332
+ _processContent() {
333
+ this._compRef.instance._contentChanged(this._content);
334
+ }
335
+ }
336
+ ClipNoteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ClipNoteDirective, deps: [{ token: i0.ElementRef, host: true }, { token: i0.ViewContainerRef }, { token: CLIP_NOTE_DEFAULT_CONFIG }], target: i0.ɵɵFactoryTarget.Directive });
337
+ ClipNoteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.3", type: ClipNoteDirective, selector: "[buiClipNote]", inputs: { buiClipNote: "buiClipNote", buiClipNoteColor: "buiClipNoteColor", buiClipNoteIcon: "buiClipNoteIcon", buiClipNoteCaption: "buiClipNoteCaption" }, outputs: { buiClipNoteOpened: "buiClipNoteOpened", buiClipNoteClosed: "buiClipNoteClosed" }, exportAs: ["buiClipNote"], ngImport: i0 });
338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ClipNoteDirective, decorators: [{
339
+ type: Directive,
340
+ args: [{
341
+ selector: '[buiClipNote]',
342
+ exportAs: 'buiClipNote'
343
+ }]
344
+ }], ctorParameters: function () { return [{ type: i0.ElementRef, decorators: [{
345
+ type: Host
346
+ }] }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
347
+ type: Inject,
348
+ args: [CLIP_NOTE_DEFAULT_CONFIG]
349
+ }] }]; }, propDecorators: { buiClipNote: [{
350
+ type: Input
351
+ }], buiClipNoteColor: [{
352
+ type: Input
353
+ }], buiClipNoteIcon: [{
354
+ type: Input
355
+ }], buiClipNoteCaption: [{
356
+ type: Input
357
+ }], buiClipNoteOpened: [{
358
+ type: Output
359
+ }], buiClipNoteClosed: [{
360
+ type: Output
361
+ }] } });
362
+
363
+ class ClipNoteModule {
364
+ static forConfig(config) {
365
+ return {
366
+ ngModule: ClipNoteModule,
367
+ providers: [{ provide: CLIP_NOTE_DEFAULT_CONFIG, useValue: config }]
368
+ };
369
+ }
370
+ }
371
+ ClipNoteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ClipNoteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
372
+ ClipNoteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: ClipNoteModule, declarations: [ClipNoteComponent, ClipNoteDirective], imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule], exports: [ClipNoteDirective] });
373
+ ClipNoteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ClipNoteModule, imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule] });
374
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: ClipNoteModule, decorators: [{
375
+ type: NgModule,
376
+ args: [{
377
+ declarations: [ClipNoteComponent, ClipNoteDirective],
378
+ imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule],
379
+ exports: [ClipNoteDirective]
380
+ }]
381
+ }] });
382
+
383
+ /**
384
+ * Generated bundle index. Do not edit.
385
+ */
386
+
387
+ export { ClipNoteDirective, ClipNoteModule };
388
+ //# sourceMappingURL=bravura-ui-clip-note.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bravura-ui-clip-note.mjs","sources":["../../../projects/ui/clip-note/clip-note.component.ts","../../../projects/ui/clip-note/clip-note.component.html","../../../projects/ui/clip-note/clip-note.directive.ts","../../../projects/ui/clip-note/clip-note.module.ts","../../../projects/ui/clip-note/bravura-ui-clip-note.ts"],"sourcesContent":["import { animate, animateChild, group, query, state, style, transition, trigger } from '@angular/animations';\nimport { Directionality } from '@angular/cdk/bidi';\nimport {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tEmbeddedViewRef,\n\tEventEmitter,\n\tHost,\n\tOnDestroy,\n\tOnInit,\n\tTemplateRef,\n\tViewChild,\n\tViewContainerRef\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { Subject, takeUntil } from 'rxjs';\n\n@Component({\n\tselector: 'bui-clip-note',\n\ttemplateUrl: './clip-note.component.html',\n\tstyleUrls: ['./clip-note.component.scss'],\n\thost: { class: 'bui-clip-note bui-host' },\n\tanimations: [\n\t\ttrigger('buttonAnimation', [\n\t\t\tstate('*', style({ width: '36px', minWidth: 0, padding: 0 })),\n\t\t\tstate('active', style({})),\n\t\t\ttransition('inactive <=> active', [\n\t\t\t\tgroup([animate('250ms cubic-bezier(.56,.14,.18,.91)'), query('@buttonTextAnimation', animateChild())]),\n\t\t\t\tquery('@buttonIconAnimation', animateChild())\n\t\t\t])\n\t\t]),\n\t\ttrigger('buttonTextAnimation', [\n\t\t\tstate('inactive', style({ opacity: 0, width: 0 })),\n\t\t\tstate('active', style({ opacity: 1 })),\n\t\t\ttransition('inactive => active', animate('250ms cubic-bezier(.88,.15,.63,.61)')),\n\t\t\ttransition('active => inactive', animate('250ms cubic-bezier(.05,.72,.44,.92)'))\n\t\t]),\n\t\ttrigger('buttonIconAnimation', [\n\t\t\tstate('active-ltr', style({ transform: 'rotate(-90deg)' })),\n\t\t\tstate('active-rtl', style({ transform: 'rotate(90deg)' })),\n\t\t\tstate('open-ltr', style({ transform: 'rotate(90deg)' })),\n\t\t\tstate('open-rtl', style({ transform: 'rotate(270deg)' })),\n\t\t\tstate('inactive', style({})),\n\t\t\ttransition('inactive <=> *, * <=> open-ltr, * <=> open-rtl', animate('250ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n\t\t]),\n\t\ttrigger('panelAnimation', [\n\t\t\tstate('open', style({})),\n\t\t\tstate('closed-rtl', style({ transform: 'scale(0) translate(-80%, -100%)', padding: 0, opacity: 0 })),\n\t\t\tstate('closed-ltr', style({ transform: 'scale(0) translate(80%, -100%)', padding: 0, opacity: 0 })),\n\t\t\ttransition('open <=> *', animate('300ms cubic-bezier(.69,.12,.6,.62)'))\n\t\t])\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ClipNoteComponent implements OnInit, OnDestroy {\n\tbuttonText = '';\n\n\tget buttonState(): string {\n\t\tif (this._hovering || this.panelState === 'open') {\n\t\t\treturn 'active';\n\t\t}\n\t\treturn 'inactive';\n\t}\n\n\tget buttonIconState(): string {\n\t\tif (this.panelState === 'open') {\n\t\t\treturn `open-${this.direction}`;\n\t\t}\n\t\tif (this.buttonState === 'active') {\n\t\t\treturn `active-${this.direction}`;\n\t\t}\n\t\treturn 'inactive';\n\t}\n\n\tpanelState: 'open' | 'closed-ltr' | 'closed-rtl' = 'closed-ltr';\n\n\tdirection = 'ltr';\n\t_contentView?: EmbeddedViewRef<any>;\n\t_content?: string;\n\t_color: ThemePalette;\n\t_buttonAnimating = false;\n\t_icon?: string;\n\t_hasContent = false;\n\n\treadonly opened = new EventEmitter<void>();\n\treadonly closed = new EventEmitter<void>();\n\n\tprivate _hovering = false;\n\tprivate _destroyed$ = new Subject<void>();\n\tprivate _toggleQueue: boolean[] = [];\n\n\t@ViewChild('viewDiv', { static: true, read: ElementRef })\n\tprivate _viewDiv!: ElementRef<HTMLDivElement>;\n\n\t@ViewChild('noteViewRef', { static: true, read: ViewContainerRef })\n\tprivate _noteViewRef!: ViewContainerRef;\n\n\t@ViewChild('fallbackTemplate', { static: true })\n\tprivate _fallbackTemplate!: TemplateRef<any>;\n\n\tconstructor(\n\t\tprivate _cd: ChangeDetectorRef,\n\t\tprivate _dir: Directionality,\n\t\t@Host() private _elemRef: ElementRef<HTMLElement>\n\t) {}\n\n\tngOnInit(): void {\n\t\tconst changeDir = () => {\n\t\t\tthis.direction = this._dir.value;\n\t\t\tthis.panelState = `closed-${this.direction}` as any;\n\t\t\tthis._cd.markForCheck();\n\t\t};\n\t\tthis._dir.change.pipe(takeUntil(this._destroyed$)).subscribe(changeDir);\n\t\tchangeDir();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroyed$.next();\n\t\tthis._destroyed$.complete();\n\t}\n\n\t_mouseOverButton(hovering: boolean) {\n\t\tif (this._hovering !== hovering) {\n\t\t\tthis._hovering = hovering;\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n\n\ttoggle() {\n\t\tthis.panelState = this.panelState === `closed-${this.direction}` ? 'open' : (`closed-${this.direction}` as any);\n\t\tthis._cd.markForCheck();\n\t}\n\n\t_scheduleToggle() {\n\t\tif (this._buttonAnimating) {\n\t\t\tthis._toggleQueue.push(true);\n\t\t} else {\n\t\t\tthis.toggle();\n\t\t}\n\t}\n\n\t_checkToggle() {\n\t\tif (this._toggleQueue.pop()) {\n\t\t\tthis.toggle();\n\t\t}\n\t}\n\n\topen() {\n\t\tthis.panelState = 'open';\n\t\tthis._cd.markForCheck();\n\t\tthis._emit();\n\t}\n\n\tclose() {\n\t\tthis.panelState = `closed-${this.direction}` as any;\n\t\tthis._cd.markForCheck();\n\t\tthis._emit();\n\t}\n\n\t_emit() {\n\t\tif (this.panelState === 'open') {\n\t\t\tthis.opened.emit();\n\t\t} else {\n\t\t\tthis.closed.emit();\n\t\t}\n\t}\n\n\t_contentChanged(content?: string | TemplateRef<any>) {\n\t\tlet template: TemplateRef<any>;\n\n\t\tif (content instanceof TemplateRef) {\n\t\t\ttemplate = content;\n\t\t} else {\n\t\t\ttemplate = this._fallbackTemplate;\n\t\t\tthis._content = content;\n\t\t}\n\t\tthis._noteViewRef.clear();\n\t\tconst context = {};\n\t\tthis._contentView = this._noteViewRef.createEmbeddedView(template, context);\n\t\tthis._checkContent(true);\n\t}\n\n\t_checkContent(initial?: boolean) {\n\t\tthis._contentView?.detectChanges();\n\t\tthis._hasContent = !!this._viewDiv.nativeElement.textContent?.trim();\n\t\tconst classList = this._elemRef.nativeElement.classList;\n\t\tconst cls = 'bui-clip-note-hidden';\n\t\tconst cls1 = 'bui-clip-note-reveal';\n\t\tif (this._hasContent) {\n\t\t\tclassList.remove(cls);\n\t\t\tif (!initial && this.panelState !== 'open') {\n\t\t\t\tclassList.add(cls1);\n\t\t\t}\n\t\t\tthis._elemRef.nativeElement.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n\t\t} else {\n\t\t\tclassList.add(cls);\n\t\t\tclassList.remove(cls1);\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t_assignColor(color: ThemePalette) {\n\t\tthis._color = color;\n\t\tthis._cd.markForCheck();\n\t}\n\n\t_assignButtonText(text: string) {\n\t\tthis.buttonText = text;\n\t\tthis._cd.markForCheck();\n\t}\n\n\t_assignButtonIcon(icon?: string) {\n\t\tthis._icon = icon;\n\t\tthis._cd.markForCheck();\n\t}\n}\n","<div class=\"bui-clip-note-wrapper\">\n\t<div\n\t\tclass=\"bui-clip-note-content bui-border-{{ _color }} mat-elevation-z3\"\n\t\t[@panelAnimation]=\"panelState\"\n\t\t#viewDiv\n\t\t(cdkObserveContent)=\"_checkContent()\"\n\t>\n\t\t<ng-container #noteViewRef></ng-container>\n\t</div>\n\n\t<button\n\t\tmat-raised-button\n\t\tclass=\"bui-clip-note-trigger bui-clip-note-trigger-{{ buttonIconState }}\"\n\t\t[color]=\"_color\"\n\t\t[@buttonAnimation]=\"buttonState\"\n\t\t(mouseenter)=\"_mouseOverButton(true)\"\n\t\t(mouseleave)=\"_mouseOverButton(false)\"\n\t\t(click)=\"_scheduleToggle()\"\n\t>\n\t\t<mat-icon\n\t\t\t[@buttonIconAnimation]=\"_icon ? 'disabled' : buttonIconState\"\n\t\t\t(@buttonIconAnimation.start)=\"_buttonAnimating = true\"\n\t\t\t(@buttonIconAnimation.done)=\"_buttonAnimating = false; _checkToggle()\"\n\t\t\t[buiIcon]=\"_icon || (direction === 'rtl' ? 'chevron_right' : 'chevron_left')\"\n\t\t>\n\t\t</mat-icon>\n\t\t<span [@buttonTextAnimation]=\"buttonState\" class=\"bui-clip-note-button-text\">&nbsp; {{ buttonText }}</span>\n\t</button>\n</div>\n\n<ng-template #fallbackTemplate>\n\t<div [innerHTML]=\"_content\"></div>\n</ng-template>\n","import {\n\tAfterViewInit,\n\tComponentRef,\n\tDirective,\n\tElementRef,\n\tEventEmitter,\n\tHost,\n\tInject,\n\tInjectionToken,\n\tInput,\n\tOutput,\n\tTemplateRef,\n\tViewContainerRef\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { ClipNoteComponent } from './clip-note.component';\n\nexport interface ClipNoteDefaultConfig {\n\tcolor: ThemePalette;\n\tcaption: string;\n}\n\n/** Used to provide default config for clip notes. */\nexport const CLIP_NOTE_DEFAULT_CONFIG = new InjectionToken<ClipNoteDefaultConfig>('bui-clip-note.default-config', {\n\tfactory: () => ({ color: 'primary', caption: 'More info' })\n});\n\n/**\n * A clip note consists of a toggle button and a floating 'notepad' element, attached to the top end of the host element's\n * viewable area. The 'notepad' normally collapses away and only reveals itself when the toggle button is active.\n *\n * The toggle button clips on the edge of the host element and expands to display the full caption when hovered. It hides itself\n * automatically when there is no content provided via the `buiClipNote` property of the directive.\n *\n * The clip note component is suitable for large page container elements with visible boundaries. It can present contextual\n * information regarding and in addition to the content displayed in the main view area.\n *\n * The properties `buiClipNoteColor` and `buiClipNoteCaption` customise the appearance of the clip note, the default values of which\n * can optionally be provided by the `ClipNoteModule.forConfig()` method.\n *\n */\n@Directive({\n\tselector: '[buiClipNote]',\n\texportAs: 'buiClipNote'\n})\nexport class ClipNoteDirective implements AfterViewInit {\n\t/**\n\t * Provide content to the clip note's floating notepad element.\n\t * It accepts a `string` of HTML content or a `TemplateRef` object.\n\t */\n\t@Input()\n\tget buiClipNote(): string | TemplateRef<any> | undefined {\n\t\treturn this._content;\n\t}\n\tset buiClipNote(note: string | TemplateRef<any> | undefined) {\n\t\tthis._content = note;\n\t\tif (this._compRef) {\n\t\t\tthis._processContent();\n\t\t}\n\t}\n\n\t/**\n\t * Customise the theme color alias.\n\t * @default 'primary'\n\t */\n\t@Input()\n\tget buiClipNoteColor(): ThemePalette {\n\t\treturn this._color;\n\t}\n\tset buiClipNoteColor(color: ThemePalette) {\n\t\tthis._color = color;\n\t\tif (this._compRef) {\n\t\t\tthis._compRef.instance._assignColor(this._color);\n\t\t}\n\t}\n\n\t/**\n\t * Customise the icon on the toggle button. With this property specified, the animation on the icon\n\t * will not be active.\n\t */\n\t@Input()\n\tget buiClipNoteIcon(): string | undefined {\n\t\treturn this._icon;\n\t}\n\tset buiClipNoteIcon(icon: string | undefined) {\n\t\tthis._icon = icon;\n\t\tif (this._compRef) {\n\t\t\tthis._compRef.instance._assignButtonIcon(this._icon);\n\t\t}\n\t}\n\n\t/**\n\t * The caption of the toggle button when expanded.\n\t */\n\t@Input()\n\tget buiClipNoteCaption(): string {\n\t\treturn this._caption;\n\t}\n\tset buiClipNoteCaption(text: string) {\n\t\tthis._caption = text;\n\t\tif (this._compRef) {\n\t\t\tthis._compRef.instance._assignButtonText(this._caption);\n\t\t}\n\t}\n\n\t/** Emits when the panel opens */\n\t@Output()\n\treadonly buiClipNoteOpened = new EventEmitter<void>();\n\n\t/** Emits when the panel closes */\n\t@Output()\n\treadonly buiClipNoteClosed = new EventEmitter<void>();\n\n\tprivate _content?: string | TemplateRef<any>;\n\tprivate _color: ThemePalette = 'primary';\n\tprivate _compRef!: ComponentRef<ClipNoteComponent>;\n\tprivate _caption: string;\n\tprivate _icon?: string;\n\n\tconstructor(\n\t\t@Host() private _elementRef: ElementRef<HTMLElement>,\n\t\tprivate _vc: ViewContainerRef,\n\t\t@Inject(CLIP_NOTE_DEFAULT_CONFIG) _config: ClipNoteDefaultConfig\n\t) {\n\t\tthis._caption = _config.caption;\n\t\tthis._color = _config.color;\n\t}\n\n\tngAfterViewInit(): void {\n\t\tsetTimeout(() => {\n\t\t\tthis._compRef = this._vc.createComponent(ClipNoteComponent);\n\t\t\tconst childElement: HTMLElement = this._compRef.location.nativeElement;\n\t\t\tconst element = this._elementRef.nativeElement;\n\t\t\telement.style.position = 'relative';\n\t\t\telement.appendChild(childElement);\n\t\t\tthis._compRef.instance._assignColor(this._color);\n\t\t\tthis._compRef.instance._assignButtonText(this._caption);\n\t\t\tthis._compRef.instance._assignButtonIcon(this._icon);\n\t\t\tthis._compRef.instance.opened.subscribe(this.buiClipNoteOpened.next.bind(this.buiClipNoteOpened));\n\t\t\tthis._compRef.instance.closed.subscribe(this.buiClipNoteClosed.next.bind(this.buiClipNoteClosed));\n\t\t\tthis._processContent();\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._compRef.destroy();\n\t}\n\n\t/** Open the note panel */\n\topen() {\n\t\tthis._compRef.instance.open();\n\t}\n\n\t/** Close the note panel */\n\tclose() {\n\t\tthis._compRef.instance.close();\n\t}\n\n\tprivate _processContent() {\n\t\tthis._compRef.instance._contentChanged(this._content);\n\t}\n}\n","import { BidiModule } from '@angular/cdk/bidi';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { BuiCommonModule } from '@bravura/ui/common';\nimport { IconFontModule } from '@bravura/ui/icon-font';\nimport { ClipNoteComponent } from './clip-note.component';\nimport { ClipNoteDefaultConfig, ClipNoteDirective, CLIP_NOTE_DEFAULT_CONFIG } from './clip-note.directive';\n\n@NgModule({\n\tdeclarations: [ClipNoteComponent, ClipNoteDirective],\n\timports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule],\n\texports: [ClipNoteDirective]\n})\nexport class ClipNoteModule {\n\tstatic forConfig(config: ClipNoteDefaultConfig): ModuleWithProviders<ClipNoteModule> {\n\t\treturn {\n\t\t\tngModule: ClipNoteModule,\n\t\t\tproviders: [{ provide: CLIP_NOTE_DEFAULT_CONFIG, useValue: config }]\n\t\t};\n\t}\n}\n\nexport { ClipNoteDirective };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;MAwDa,iBAAiB,CAAA;AA8C7B,IAAA,WAAA,CACS,GAAsB,EACtB,IAAoB,EACZ,QAAiC,EAAA;QAFzC,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAgB;QACZ,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAyB;QAhDlD,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAmBhB,IAAU,CAAA,UAAA,GAAyC,YAAY,CAAC;QAEhE,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAIlB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAEzB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAEX,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;AAClC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;QAEnC,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAClB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;QAClC,IAAY,CAAA,YAAA,GAAc,EAAE,CAAC;KAejC;AA/CJ,IAAA,IAAI,WAAW,GAAA;QACd,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;AACjD,YAAA,OAAO,QAAQ,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KAClB;AAED,IAAA,IAAI,eAAe,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;AAC/B,YAAA,OAAO,CAAQ,KAAA,EAAA,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;AAClC,YAAA,OAAO,CAAU,OAAA,EAAA,IAAI,CAAC,SAAS,EAAE,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KAClB;IAkCD,QAAQ,GAAA;QACP,MAAM,SAAS,GAAG,MAAK;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,EAAS,CAAC;AACpD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACzB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACxE,QAAA,SAAS,EAAE,CAAC;KACZ;IAED,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KAC5B;AAED,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACxB,SAAA;KACD;IAED,MAAM,GAAA;QACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAA,CAAE,GAAG,MAAM,GAAI,UAAU,IAAI,CAAC,SAAS,CAAA,CAAU,CAAC;AAChH,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACxB;IAED,eAAe,GAAA;QACd,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;YACN,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,SAAA;KACD;IAED,YAAY,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,SAAA;KACD;IAED,IAAI,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE,CAAC;KACb;IAED,KAAK,GAAA;QACJ,IAAI,CAAC,UAAU,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,EAAS,CAAC;AACpD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE,CAAC;KACb;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnB,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnB,SAAA;KACD;AAED,IAAA,eAAe,CAAC,OAAmC,EAAA;AAClD,QAAA,IAAI,QAA0B,CAAC;QAE/B,IAAI,OAAO,YAAY,WAAW,EAAE;YACnC,QAAQ,GAAG,OAAO,CAAC;AACnB,SAAA;AAAM,aAAA;AACN,YAAA,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACzB;AAED,IAAA,aAAa,CAAC,OAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;QACxD,MAAM,GAAG,GAAG,sBAAsB,CAAC;QACnC,MAAM,IAAI,GAAG,sBAAsB,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;AAC3C,gBAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrF,SAAA;AAAM,aAAA;AACN,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,YAAA,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,SAAA;KACD;AAED,IAAA,YAAY,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACxB;AAED,IAAA,iBAAiB,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACxB;AAED,IAAA,iBAAiB,CAAC,IAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACxB;;8GAhKW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,yLAqCe,UAAU,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGN,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChGjE,ipCAiCA,EDTa,MAAA,EAAA,CAAA,+hCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;QACX,OAAO,CAAC,iBAAiB,EAAE;AAC1B,YAAA,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7D,YAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,UAAU,CAAC,qBAAqB,EAAE;AACjC,gBAAA,KAAK,CAAC,CAAC,OAAO,CAAC,qCAAqC,CAAC,EAAE,KAAK,CAAC,sBAAsB,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;AACtG,gBAAA,KAAK,CAAC,sBAAsB,EAAE,YAAY,EAAE,CAAC;aAC7C,CAAC;SACF,CAAC;QACF,OAAO,CAAC,qBAAqB,EAAE;AAC9B,YAAA,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACtC,YAAA,UAAU,CAAC,oBAAoB,EAAE,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAChF,YAAA,UAAU,CAAC,oBAAoB,EAAE,OAAO,CAAC,qCAAqC,CAAC,CAAC;SAChF,CAAC;QACF,OAAO,CAAC,qBAAqB,EAAE;YAC9B,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC3D,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;YAC1D,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;YACxD,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACzD,YAAA,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAA,UAAU,CAAC,gDAAgD,EAAE,OAAO,CAAC,wCAAwC,CAAC,CAAC;SAC/G,CAAC;QACF,OAAO,CAAC,gBAAgB,EAAE;AACzB,YAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACxB,YAAA,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,iCAAiC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACpG,YAAA,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gCAAgC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACnG,YAAA,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,oCAAoC,CAAC,CAAC;SACvE,CAAC;AACF,KAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAGW,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBArC7B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,QAGnB,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAC7B,UAAA,EAAA;wBACX,OAAO,CAAC,iBAAiB,EAAE;AAC1B,4BAAA,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7D,4BAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;4BAC1B,UAAU,CAAC,qBAAqB,EAAE;AACjC,gCAAA,KAAK,CAAC,CAAC,OAAO,CAAC,qCAAqC,CAAC,EAAE,KAAK,CAAC,sBAAsB,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;AACtG,gCAAA,KAAK,CAAC,sBAAsB,EAAE,YAAY,EAAE,CAAC;6BAC7C,CAAC;yBACF,CAAC;wBACF,OAAO,CAAC,qBAAqB,EAAE;AAC9B,4BAAA,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;4BAClD,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACtC,4BAAA,UAAU,CAAC,oBAAoB,EAAE,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAChF,4BAAA,UAAU,CAAC,oBAAoB,EAAE,OAAO,CAAC,qCAAqC,CAAC,CAAC;yBAChF,CAAC;wBACF,OAAO,CAAC,qBAAqB,EAAE;4BAC9B,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;4BAC3D,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;4BAC1D,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;4BACxD,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACzD,4BAAA,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AAC5B,4BAAA,UAAU,CAAC,gDAAgD,EAAE,OAAO,CAAC,wCAAwC,CAAC,CAAC;yBAC/G,CAAC;wBACF,OAAO,CAAC,gBAAgB,EAAE;AACzB,4BAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACxB,4BAAA,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,iCAAiC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACpG,4BAAA,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gCAAgC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACnG,4BAAA,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,oCAAoC,CAAC,CAAC;yBACvE,CAAC;qBACF,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ipCAAA,EAAA,MAAA,EAAA,CAAA,+hCAAA,CAAA,EAAA,CAAA;;0BAmD7C,IAAI;4CAXE,QAAQ,EAAA,CAAA;sBADf,SAAS;uBAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAIhD,YAAY,EAAA,CAAA;sBADnB,SAAS;uBAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAI1D,iBAAiB,EAAA,CAAA;sBADxB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;AE7EhD;AACO,MAAM,wBAAwB,GAAG,IAAI,cAAc,CAAwB,8BAA8B,EAAE;AACjH,IAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC3D,CAAA,CAAC,CAAC;AAEH;;;;;;;;;;;;;AAaG;MAKU,iBAAiB,CAAA;AA0E7B,IAAA,WAAA,CACiB,WAAoC,EAC5C,GAAqB,EACK,OAA8B,EAAA;QAFhD,IAAW,CAAA,WAAA,GAAX,WAAW,CAAyB;QAC5C,IAAG,CAAA,GAAA,GAAH,GAAG,CAAkB;;AAdrB,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAQ,CAAC;;AAI7C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAQ,CAAC;QAG9C,IAAM,CAAA,MAAA,GAAiB,SAAS,CAAC;AAUxC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;KAC5B;AAhFD;;;AAGG;AACH,IAAA,IACI,WAAW,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;KACrB;IACD,IAAI,WAAW,CAAC,IAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,SAAA;KACD;AAED;;;AAGG;AACH,IAAA,IACI,gBAAgB,GAAA;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC;KACnB;IACD,IAAI,gBAAgB,CAAC,KAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjD,SAAA;KACD;AAED;;;AAGG;AACH,IAAA,IACI,eAAe,GAAA;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC;KAClB;IACD,IAAI,eAAe,CAAC,IAAwB,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,SAAA;KACD;AAED;;AAEG;AACH,IAAA,IACI,kBAAkB,GAAA;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACrB;IACD,IAAI,kBAAkB,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxD,SAAA;KACD;IAyBD,eAAe,GAAA;QACd,UAAU,CAAC,MAAK;YACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YAC5D,MAAM,YAAY,GAAgB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AACvE,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AAC/C,YAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACpC,YAAA,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAC,CAAC,CAAC;KACH;IAED,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;KACxB;;IAGD,IAAI,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC9B;;IAGD,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;KAC/B;IAEO,eAAe,GAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACtD;;AAnHW,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,wFA6EpB,wBAAwB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGA7ErB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,iBAAA,CAAA;;0BA4EE,IAAI;;0BAEJ,MAAM;2BAAC,wBAAwB,CAAA;4CAvE7B,WAAW,EAAA,CAAA;sBADd,KAAK;gBAgBF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAgBF,eAAe,EAAA,CAAA;sBADlB,KAAK;gBAeF,kBAAkB,EAAA,CAAA;sBADrB,KAAK;gBAaG,iBAAiB,EAAA,CAAA;sBADzB,MAAM;gBAKE,iBAAiB,EAAA,CAAA;sBADzB,MAAM;;;MC9FK,cAAc,CAAA;IAC1B,OAAO,SAAS,CAAC,MAA6B,EAAA;QAC7C,OAAO;AACN,YAAA,QAAQ,EAAE,cAAc;YACxB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;SACpE,CAAC;KACF;;2GANW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBAJX,iBAAiB,EAAE,iBAAiB,CACzC,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,aAC1G,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAEf,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAHhB,OAAA,EAAA,CAAA,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,CAAA,EAAA,CAAA,CAAA;2FAGxG,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,YAAY,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;AACpD,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,CAAC;oBACrH,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC5B,iBAAA,CAAA;;;ACfD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bravura/ui",
3
3
  "description": "Bravura UI Components for Angular applications",
4
- "version": "2.4.0",
4
+ "version": "2.5.0",
5
5
  "keywords": [
6
6
  "Angular",
7
7
  "Angular Material",
@@ -57,6 +57,14 @@
57
57
  "node": "./fesm2015/bravura-ui-behavior.mjs",
58
58
  "default": "./fesm2020/bravura-ui-behavior.mjs"
59
59
  },
60
+ "./clip-note": {
61
+ "types": "./clip-note/index.d.ts",
62
+ "esm2020": "./esm2020/clip-note/bravura-ui-clip-note.mjs",
63
+ "es2020": "./fesm2020/bravura-ui-clip-note.mjs",
64
+ "es2015": "./fesm2015/bravura-ui-clip-note.mjs",
65
+ "node": "./fesm2015/bravura-ui-clip-note.mjs",
66
+ "default": "./fesm2020/bravura-ui-clip-note.mjs"
67
+ },
60
68
  "./common": {
61
69
  "types": "./common/index.d.ts",
62
70
  "esm2020": "./esm2020/common/bravura-ui-common.mjs",