@bravura/ui 3.8.0 → 4.0.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/CHANGELOG.md +579 -557
- package/LICENSE +6 -6
- package/README.md +56 -54
- package/alert/alert-container.component.d.ts +1 -1
- package/alert/alert-message.component.d.ts +1 -1
- package/behavior/await.directive.d.ts +1 -1
- package/behavior/observe-content-class.directive.d.ts +1 -1
- package/behavior/sizing.directive.d.ts +1 -1
- package/clip-note/clip-note.directive.d.ts +1 -1
- package/currency-input/currency-input.directive.d.ts +1 -1
- package/decimal-input/decimal-input.directive.d.ts +1 -1
- package/discrete-input/discrete-input.component.d.ts +1 -1
- package/esm2022/alert/alert-container.component.mjs +207 -0
- package/esm2022/alert/alert-message.component.mjs +101 -0
- package/esm2022/alert/alert.module.mjs +22 -0
- package/{esm2020 → esm2022}/alert/public-api.mjs +1 -1
- package/esm2022/alert/testing/test-api.mjs +44 -0
- package/{esm2020 → esm2022}/behavior/await.directive.mjs +6 -6
- package/esm2022/behavior/behavior.module.mjs +37 -0
- package/{esm2020 → esm2022}/behavior/observe-content-class.directive.mjs +5 -5
- package/{esm2020 → esm2022}/behavior/public-api.mjs +1 -1
- package/esm2022/behavior/sizing-monitor.directive.mjs +31 -0
- package/esm2022/behavior/sizing.directive.mjs +256 -0
- package/esm2022/clip-note/clip-note.component.mjs +216 -0
- package/esm2022/clip-note/clip-note.directive.mjs +141 -0
- package/esm2022/clip-note/clip-note.module.mjs +32 -0
- package/{esm2020 → esm2022}/clip-note/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/common/common-utils.mjs +1 -1
- package/{esm2020 → esm2022}/common/common.module.mjs +7 -7
- package/{esm2020 → esm2022}/common/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/currency-input/currency-input.directive.mjs +6 -6
- package/esm2022/currency-input/currency-input.module.mjs +19 -0
- package/{esm2020 → esm2022}/currency-input/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/decimal-input/decimal-input.directive.mjs +9 -9
- package/{esm2020 → esm2022}/decimal-input/decimal-input.module.mjs +5 -5
- package/esm2022/discrete-input/discrete-input.component.mjs +337 -0
- package/esm2022/discrete-input/discrete-input.module.mjs +21 -0
- package/{esm2020 → esm2022}/discrete-input/public-api.mjs +1 -1
- package/esm2022/file-upload/file-upload.component.mjs +400 -0
- package/esm2022/file-upload/file-upload.module.mjs +44 -0
- package/esm2022/file-upload/file-upload.service.mjs +29 -0
- package/{esm2020 → esm2022}/file-upload/public-api.mjs +1 -1
- package/esm2022/form-field/form-field.component.mjs +82 -0
- package/esm2022/form-field/form-field.module.mjs +33 -0
- package/{esm2020 → esm2022}/form-field/public-api.mjs +1 -1
- package/esm2022/icon-font/icon-font.module.mjs +22 -0
- package/{esm2020 → esm2022}/icon-font/icon.directive.mjs +5 -5
- package/{esm2020 → esm2022}/icon-font/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/icon-font/utilities.mjs +1 -1
- package/esm2022/panel/panel-section.component.mjs +41 -0
- package/esm2022/panel/panel.component.mjs +87 -0
- package/esm2022/panel/panel.module.mjs +23 -0
- package/{esm2020 → esm2022}/panel/public-api.mjs +1 -1
- package/esm2022/panel/tinted.directive.mjs +60 -0
- package/esm2022/phone-number/phone-number.directive.mjs +188 -0
- package/{esm2020 → esm2022}/phone-number/phone-number.module.mjs +5 -5
- package/{esm2020 → esm2022}/phone-number/phone-number.pipe.mjs +6 -6
- package/esm2022/phone-number/phone-number.validator.mjs +64 -0
- package/{esm2020 → esm2022}/phone-number/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/public-api.mjs +1 -1
- package/esm2022/radio-panel/radio-panel-item.component.mjs +93 -0
- package/esm2022/radio-panel/radio-panel.component.mjs +81 -0
- package/{esm2020 → esm2022}/radio-panel/radio-panel.module.mjs +5 -5
- package/esm2022/radio-panel/testing/test-api.mjs +46 -0
- package/{esm2020 → esm2022}/selection-panel/public-api.mjs +1 -1
- package/esm2022/selection-panel/selection-panel-item.component.mjs +166 -0
- package/esm2022/selection-panel/selection-panel.directive.mjs +119 -0
- package/esm2022/selection-panel/selection-panel.module.mjs +23 -0
- package/{esm2020 → esm2022}/skeletons/public-api.mjs +1 -1
- package/esm2022/skeletons/skeleton-loader-presets.directive.mjs +83 -0
- package/{esm2020 → esm2022}/skeletons/skeleton-loader.component.mjs +5 -5
- package/esm2022/skeletons/skeletons.module.mjs +35 -0
- package/{esm2020 → esm2022}/stepper/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/stepper/stepper-animation.mjs +1 -1
- package/esm2022/stepper/stepper.component.mjs +176 -0
- package/esm2022/stepper/stepper.module.mjs +52 -0
- package/{esm2020 → esm2022}/tooltip/public-api.mjs +1 -1
- package/esm2022/tooltip/tooltip.component.mjs +63 -0
- package/esm2022/tooltip/tooltip.directive.mjs +148 -0
- package/esm2022/tooltip/tooltip.module.mjs +25 -0
- package/{fesm2020 → fesm2022}/bravura-ui-alert-testing.mjs +2 -2
- package/fesm2022/bravura-ui-alert-testing.mjs.map +1 -0
- package/fesm2022/bravura-ui-alert.mjs +327 -0
- package/fesm2022/bravura-ui-alert.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-behavior.mjs +45 -45
- package/fesm2022/bravura-ui-behavior.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-clip-note.mjs +70 -70
- package/fesm2022/bravura-ui-clip-note.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-common.mjs +6 -6
- package/fesm2022/bravura-ui-common.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-currency-input.mjs +11 -11
- package/fesm2022/bravura-ui-currency-input.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-decimal-input.mjs +12 -12
- package/fesm2022/bravura-ui-decimal-input.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-discrete-input.mjs +48 -48
- package/fesm2022/bravura-ui-discrete-input.mjs.map +1 -0
- package/fesm2022/bravura-ui-file-upload.mjs +474 -0
- package/fesm2022/bravura-ui-file-upload.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-form-field.mjs +19 -19
- package/fesm2022/bravura-ui-form-field.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-icon-font.mjs +8 -8
- package/fesm2022/bravura-ui-icon-font.mjs.map +1 -0
- package/fesm2022/bravura-ui-panel.mjs +206 -0
- package/fesm2022/bravura-ui-panel.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-phone-number.mjs +30 -30
- package/fesm2022/bravura-ui-phone-number.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-radio-panel-testing.mjs +5 -6
- package/fesm2022/bravura-ui-radio-panel-testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-radio-panel.mjs +31 -31
- package/fesm2022/bravura-ui-radio-panel.mjs.map +1 -0
- package/fesm2022/bravura-ui-selection-panel.mjs +306 -0
- package/fesm2022/bravura-ui-selection-panel.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-skeletons.mjs +43 -43
- package/fesm2022/bravura-ui-skeletons.mjs.map +1 -0
- package/fesm2022/bravura-ui-stepper.mjs +251 -0
- package/fesm2022/bravura-ui-stepper.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-tooltip.mjs +32 -24
- package/fesm2022/bravura-ui-tooltip.mjs.map +1 -0
- package/fesm2022/bravura-ui.mjs.map +1 -0
- package/file-upload/file-upload.component.d.ts +1 -1
- package/form-field/form-field.component.d.ts +1 -1
- package/icon-font/icon.directive.d.ts +1 -1
- package/package.json +76 -120
- package/panel/panel.component.d.ts +1 -1
- package/panel/tinted.directive.d.ts +1 -1
- package/phone-number/phone-number.directive.d.ts +1 -1
- package/phone-number/phone-number.validator.d.ts +2 -2
- package/radio-panel/radio-panel-item.component.d.ts +1 -1
- package/radio-panel/radio-panel.component.d.ts +1 -1
- package/radio-panel/testing/test-api.d.ts +2 -3
- package/selection-panel/selection-panel-item.component.d.ts +1 -1
- package/selection-panel/selection-panel.directive.d.ts +1 -1
- package/skeletons/skeleton-loader-presets.directive.d.ts +3 -3
- package/stepper/stepper.component.d.ts +1 -1
- package/theme/_bui-card.scss +56 -56
- package/theme/_ui-theme.scss +112 -112
- package/theme/global-style-by-bootstrap.scss +3 -3
- package/theme/global-style-by-tailwind.scss +3 -3
- package/theme/scrollbar.scss +40 -40
- package/tooltip/tooltip.component.d.ts +2 -0
- package/tooltip/tooltip.directive.d.ts +3 -5
- package/esm2020/alert/alert-container.component.mjs +0 -207
- package/esm2020/alert/alert-message.component.mjs +0 -102
- package/esm2020/alert/alert.module.mjs +0 -22
- package/esm2020/alert/testing/test-api.mjs +0 -44
- package/esm2020/behavior/behavior.module.mjs +0 -37
- package/esm2020/behavior/sizing-monitor.directive.mjs +0 -31
- package/esm2020/behavior/sizing.directive.mjs +0 -256
- package/esm2020/clip-note/clip-note.component.mjs +0 -216
- package/esm2020/clip-note/clip-note.directive.mjs +0 -141
- package/esm2020/clip-note/clip-note.module.mjs +0 -32
- package/esm2020/currency-input/currency-input.module.mjs +0 -19
- package/esm2020/discrete-input/discrete-input.component.mjs +0 -337
- package/esm2020/discrete-input/discrete-input.module.mjs +0 -21
- package/esm2020/file-upload/file-upload.component.mjs +0 -400
- package/esm2020/file-upload/file-upload.module.mjs +0 -44
- package/esm2020/file-upload/file-upload.service.mjs +0 -29
- package/esm2020/form-field/form-field.component.mjs +0 -82
- package/esm2020/form-field/form-field.module.mjs +0 -33
- package/esm2020/icon-font/icon-font.module.mjs +0 -22
- package/esm2020/panel/panel-section.component.mjs +0 -41
- package/esm2020/panel/panel.component.mjs +0 -87
- package/esm2020/panel/panel.module.mjs +0 -23
- package/esm2020/panel/tinted.directive.mjs +0 -60
- package/esm2020/phone-number/phone-number.directive.mjs +0 -188
- package/esm2020/phone-number/phone-number.validator.mjs +0 -64
- package/esm2020/radio-panel/radio-panel-item.component.mjs +0 -93
- package/esm2020/radio-panel/radio-panel.component.mjs +0 -81
- package/esm2020/radio-panel/testing/test-api.mjs +0 -47
- package/esm2020/selection-panel/selection-panel-item.component.mjs +0 -166
- package/esm2020/selection-panel/selection-panel.directive.mjs +0 -119
- package/esm2020/selection-panel/selection-panel.module.mjs +0 -23
- package/esm2020/skeletons/skeleton-loader-presets.directive.mjs +0 -83
- package/esm2020/skeletons/skeletons.module.mjs +0 -35
- package/esm2020/stepper/stepper.component.mjs +0 -176
- package/esm2020/stepper/stepper.module.mjs +0 -52
- package/esm2020/tooltip/tooltip.component.mjs +0 -54
- package/esm2020/tooltip/tooltip.directive.mjs +0 -149
- package/esm2020/tooltip/tooltip.module.mjs +0 -25
- package/fesm2015/bravura-ui-alert-testing.mjs +0 -64
- package/fesm2015/bravura-ui-alert-testing.mjs.map +0 -1
- package/fesm2015/bravura-ui-alert.mjs +0 -340
- package/fesm2015/bravura-ui-alert.mjs.map +0 -1
- package/fesm2015/bravura-ui-behavior.mjs +0 -515
- package/fesm2015/bravura-ui-behavior.mjs.map +0 -1
- package/fesm2015/bravura-ui-clip-note.mjs +0 -393
- package/fesm2015/bravura-ui-clip-note.mjs.map +0 -1
- package/fesm2015/bravura-ui-common.mjs +0 -96
- package/fesm2015/bravura-ui-common.mjs.map +0 -1
- package/fesm2015/bravura-ui-currency-input.mjs +0 -300
- package/fesm2015/bravura-ui-currency-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-decimal-input.mjs +0 -145
- package/fesm2015/bravura-ui-decimal-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-discrete-input.mjs +0 -365
- package/fesm2015/bravura-ui-discrete-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-file-upload.mjs +0 -478
- package/fesm2015/bravura-ui-file-upload.mjs.map +0 -1
- package/fesm2015/bravura-ui-form-field.mjs +0 -120
- package/fesm2015/bravura-ui-form-field.mjs.map +0 -1
- package/fesm2015/bravura-ui-icon-font.mjs +0 -178
- package/fesm2015/bravura-ui-icon-font.mjs.map +0 -1
- package/fesm2015/bravura-ui-panel.mjs +0 -210
- package/fesm2015/bravura-ui-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-phone-number.mjs +0 -327
- package/fesm2015/bravura-ui-phone-number.mjs.map +0 -1
- package/fesm2015/bravura-ui-radio-panel-testing.mjs +0 -63
- package/fesm2015/bravura-ui-radio-panel-testing.mjs.map +0 -1
- package/fesm2015/bravura-ui-radio-panel.mjs +0 -200
- package/fesm2015/bravura-ui-radio-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-selection-panel.mjs +0 -311
- package/fesm2015/bravura-ui-selection-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-skeletons.mjs +0 -195
- package/fesm2015/bravura-ui-skeletons.mjs.map +0 -1
- package/fesm2015/bravura-ui-stepper.mjs +0 -253
- package/fesm2015/bravura-ui-stepper.mjs.map +0 -1
- package/fesm2015/bravura-ui-tooltip.mjs +0 -229
- package/fesm2015/bravura-ui-tooltip.mjs.map +0 -1
- package/fesm2015/bravura-ui.mjs.map +0 -1
- package/fesm2020/bravura-ui-alert-testing.mjs.map +0 -1
- package/fesm2020/bravura-ui-alert.mjs +0 -328
- package/fesm2020/bravura-ui-alert.mjs.map +0 -1
- package/fesm2020/bravura-ui-behavior.mjs.map +0 -1
- package/fesm2020/bravura-ui-clip-note.mjs.map +0 -1
- package/fesm2020/bravura-ui-common.mjs.map +0 -1
- package/fesm2020/bravura-ui-currency-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-decimal-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-discrete-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-file-upload.mjs +0 -474
- package/fesm2020/bravura-ui-file-upload.mjs.map +0 -1
- package/fesm2020/bravura-ui-form-field.mjs.map +0 -1
- package/fesm2020/bravura-ui-icon-font.mjs.map +0 -1
- package/fesm2020/bravura-ui-panel.mjs +0 -206
- package/fesm2020/bravura-ui-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-phone-number.mjs.map +0 -1
- package/fesm2020/bravura-ui-radio-panel-testing.mjs.map +0 -1
- package/fesm2020/bravura-ui-radio-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-selection-panel.mjs +0 -306
- package/fesm2020/bravura-ui-selection-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-skeletons.mjs.map +0 -1
- package/fesm2020/bravura-ui-stepper.mjs +0 -251
- package/fesm2020/bravura-ui-stepper.mjs.map +0 -1
- package/fesm2020/bravura-ui-tooltip.mjs.map +0 -1
- package/fesm2020/bravura-ui.mjs +0 -8
- package/fesm2020/bravura-ui.mjs.map +0 -1
- /package/{esm2020 → esm2022}/alert/bravura-ui-alert.mjs +0 -0
- /package/{esm2020 → esm2022}/alert/testing/bravura-ui-alert-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/behavior/bravura-ui-behavior.mjs +0 -0
- /package/{esm2020 → esm2022}/bravura-ui.mjs +0 -0
- /package/{esm2020 → esm2022}/clip-note/bravura-ui-clip-note.mjs +0 -0
- /package/{esm2020 → esm2022}/common/bravura-ui-common.mjs +0 -0
- /package/{esm2020 → esm2022}/currency-input/bravura-ui-currency-input.mjs +0 -0
- /package/{esm2020 → esm2022}/decimal-input/bravura-ui-decimal-input.mjs +0 -0
- /package/{esm2020 → esm2022}/decimal-input/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/discrete-input/bravura-ui-discrete-input.mjs +0 -0
- /package/{esm2020 → esm2022}/file-upload/bravura-ui-file-upload.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/bravura-ui-form-field.mjs +0 -0
- /package/{esm2020 → esm2022}/icon-font/bravura-ui-icon-font.mjs +0 -0
- /package/{esm2020 → esm2022}/panel/bravura-ui-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/phone-number/bravura-ui-phone-number.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/bravura-ui-radio-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/testing/bravura-ui-radio-panel-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/selection-panel/bravura-ui-selection-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/skeletons/bravura-ui-skeletons.mjs +0 -0
- /package/{esm2020 → esm2022}/stepper/bravura-ui-stepper.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/bravura-ui-tooltip.mjs +0 -0
- /package/{fesm2015 → fesm2022}/bravura-ui.mjs +0 -0
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { Directive, EventEmitter, Host, Inject, InjectionToken, Input, Output } from '@angular/core';
|
|
2
|
-
import { ClipNoteComponent } from './clip-note.component';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/** Used to provide default config for clip notes. */
|
|
5
|
-
export const CLIP_NOTE_DEFAULT_CONFIG = new InjectionToken('bui-clip-note.default-config', {
|
|
6
|
-
factory: () => ({ color: 'primary', caption: 'More info' })
|
|
7
|
-
});
|
|
8
|
-
/**
|
|
9
|
-
* A clip note consists of a toggle button and a floating 'notepad' element, attached to the top end of the host element's
|
|
10
|
-
* viewable area. The 'notepad' normally collapses away and only reveals itself when the toggle button is active.
|
|
11
|
-
*
|
|
12
|
-
* The toggle button clips on the edge of the host element and expands to display the full caption when hovered. It hides itself
|
|
13
|
-
* automatically when there is no content provided via the `buiClipNote` property of the directive.
|
|
14
|
-
*
|
|
15
|
-
* The clip note component is suitable for large page container elements with visible boundaries. It can present contextual
|
|
16
|
-
* information regarding and in addition to the content displayed in the main view area.
|
|
17
|
-
*
|
|
18
|
-
* The properties `buiClipNoteColor` and `buiClipNoteCaption` customise the appearance of the clip note, the default values of which
|
|
19
|
-
* can optionally be provided by the `ClipNoteModule.forConfig()` method.
|
|
20
|
-
*
|
|
21
|
-
*/
|
|
22
|
-
export class ClipNoteDirective {
|
|
23
|
-
constructor(_elementRef, _vc, _config) {
|
|
24
|
-
this._elementRef = _elementRef;
|
|
25
|
-
this._vc = _vc;
|
|
26
|
-
/** Emits when the panel opens */
|
|
27
|
-
this.buiClipNoteOpened = new EventEmitter();
|
|
28
|
-
/** Emits when the panel closes */
|
|
29
|
-
this.buiClipNoteClosed = new EventEmitter();
|
|
30
|
-
this._color = 'primary';
|
|
31
|
-
this._caption = _config.caption;
|
|
32
|
-
this._color = _config.color;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Provide content to the clip note's floating notepad element.
|
|
36
|
-
* It accepts a `string` of HTML content or a `TemplateRef` object.
|
|
37
|
-
*/
|
|
38
|
-
get buiClipNote() {
|
|
39
|
-
return this._content;
|
|
40
|
-
}
|
|
41
|
-
set buiClipNote(note) {
|
|
42
|
-
this._content = note;
|
|
43
|
-
if (this._compRef) {
|
|
44
|
-
this._processContent();
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Customise the theme color alias.
|
|
49
|
-
* @default 'primary'
|
|
50
|
-
*/
|
|
51
|
-
get buiClipNoteColor() {
|
|
52
|
-
return this._color;
|
|
53
|
-
}
|
|
54
|
-
set buiClipNoteColor(color) {
|
|
55
|
-
this._color = color;
|
|
56
|
-
if (this._compRef) {
|
|
57
|
-
this._compRef.instance._assignColor(this._color);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Customise the icon on the toggle button. With this property specified, the animation on the icon
|
|
62
|
-
* will not be active.
|
|
63
|
-
*/
|
|
64
|
-
get buiClipNoteIcon() {
|
|
65
|
-
return this._icon;
|
|
66
|
-
}
|
|
67
|
-
set buiClipNoteIcon(icon) {
|
|
68
|
-
this._icon = icon;
|
|
69
|
-
if (this._compRef) {
|
|
70
|
-
this._compRef.instance._assignButtonIcon(this._icon);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* The caption of the toggle button when expanded.
|
|
75
|
-
*/
|
|
76
|
-
get buiClipNoteCaption() {
|
|
77
|
-
return this._caption;
|
|
78
|
-
}
|
|
79
|
-
set buiClipNoteCaption(text) {
|
|
80
|
-
this._caption = text;
|
|
81
|
-
if (this._compRef) {
|
|
82
|
-
this._compRef.instance._assignButtonText(this._caption);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
ngAfterViewInit() {
|
|
86
|
-
setTimeout(() => {
|
|
87
|
-
this._compRef = this._vc.createComponent(ClipNoteComponent);
|
|
88
|
-
const childElement = this._compRef.location.nativeElement;
|
|
89
|
-
const element = this._elementRef.nativeElement;
|
|
90
|
-
element.style.position = 'relative';
|
|
91
|
-
element.appendChild(childElement);
|
|
92
|
-
this._compRef.instance._assignColor(this._color);
|
|
93
|
-
this._compRef.instance._assignButtonText(this._caption);
|
|
94
|
-
this._compRef.instance._assignButtonIcon(this._icon);
|
|
95
|
-
this._compRef.instance.opened.subscribe(this.buiClipNoteOpened.next.bind(this.buiClipNoteOpened));
|
|
96
|
-
this._compRef.instance.closed.subscribe(this.buiClipNoteClosed.next.bind(this.buiClipNoteClosed));
|
|
97
|
-
this._processContent();
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
ngOnDestroy() {
|
|
101
|
-
this._compRef.destroy();
|
|
102
|
-
}
|
|
103
|
-
/** Open the note panel */
|
|
104
|
-
open() {
|
|
105
|
-
this._compRef.instance.open();
|
|
106
|
-
}
|
|
107
|
-
/** Close the note panel */
|
|
108
|
-
close() {
|
|
109
|
-
this._compRef.instance.close();
|
|
110
|
-
}
|
|
111
|
-
_processContent() {
|
|
112
|
-
this._compRef.instance._contentChanged(this._content);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
ClipNoteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteDirective, deps: [{ token: i0.ElementRef, host: true }, { token: i0.ViewContainerRef }, { token: CLIP_NOTE_DEFAULT_CONFIG }], target: i0.ɵɵFactoryTarget.Directive });
|
|
116
|
-
ClipNoteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.6", type: ClipNoteDirective, selector: "[buiClipNote]", inputs: { buiClipNote: "buiClipNote", buiClipNoteColor: "buiClipNoteColor", buiClipNoteIcon: "buiClipNoteIcon", buiClipNoteCaption: "buiClipNoteCaption" }, outputs: { buiClipNoteOpened: "buiClipNoteOpened", buiClipNoteClosed: "buiClipNoteClosed" }, exportAs: ["buiClipNote"], ngImport: i0 });
|
|
117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteDirective, decorators: [{
|
|
118
|
-
type: Directive,
|
|
119
|
-
args: [{
|
|
120
|
-
selector: '[buiClipNote]',
|
|
121
|
-
exportAs: 'buiClipNote'
|
|
122
|
-
}]
|
|
123
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef, decorators: [{
|
|
124
|
-
type: Host
|
|
125
|
-
}] }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
|
|
126
|
-
type: Inject,
|
|
127
|
-
args: [CLIP_NOTE_DEFAULT_CONFIG]
|
|
128
|
-
}] }]; }, propDecorators: { buiClipNote: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], buiClipNoteColor: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], buiClipNoteIcon: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], buiClipNoteCaption: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], buiClipNoteOpened: [{
|
|
137
|
-
type: Output
|
|
138
|
-
}], buiClipNoteClosed: [{
|
|
139
|
-
type: Output
|
|
140
|
-
}] } });
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcC1ub3RlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL2NsaXAtbm90ZS9jbGlwLW5vdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTixTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTzFELHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBd0IsOEJBQThCLEVBQUU7SUFDakgsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztDQUMzRCxDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBS0gsTUFBTSxPQUFPLGlCQUFpQjtJQTBFN0IsWUFDaUIsV0FBb0MsRUFDNUMsR0FBcUIsRUFDSyxPQUE4QjtRQUZoRCxnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDNUMsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFoQjlCLGlDQUFpQztRQUV4QixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXRELGtDQUFrQztRQUV6QixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRzlDLFdBQU0sR0FBaUIsU0FBUyxDQUFDO1FBVXhDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQWhGRDs7O09BR0c7SUFDSCxJQUNJLFdBQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxR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QUFPLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsMEJBQTBCO0lBQzFCLElBQUk7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLEtBQUs7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sZUFBZTtRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OzhHQW5IVyxpQkFBaUIsd0ZBNkVwQix3QkFBd0I7a0dBN0VyQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFKN0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLGFBQWE7aUJBQ3ZCOzswQkE0RUUsSUFBSTs7MEJBRUosTUFBTTsyQkFBQyx3QkFBd0I7NENBdkU3QixXQUFXO3NCQURkLEtBQUs7Z0JBZ0JGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFnQkYsZUFBZTtzQkFEbEIsS0FBSztnQkFlRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBYUcsaUJBQWlCO3NCQUR6QixNQUFNO2dCQUtFLGlCQUFpQjtzQkFEekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdENvbXBvbmVudFJlZixcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRFdmVudEVtaXR0ZXIsXG5cdEhvc3QsXG5cdEluamVjdCxcblx0SW5qZWN0aW9uVG9rZW4sXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBDbGlwTm90ZUNvbXBvbmVudCB9IGZyb20gJy4vY2xpcC1ub3RlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcE5vdGVEZWZhdWx0Q29uZmlnIHtcblx0Y29sb3I6IFRoZW1lUGFsZXR0ZTtcblx0Y2FwdGlvbjogc3RyaW5nO1xufVxuXG4vKiogVXNlZCB0byBwcm92aWRlIGRlZmF1bHQgY29uZmlnIGZvciBjbGlwIG5vdGVzLiAqL1xuZXhwb3J0IGNvbnN0IENMSVBfTk9URV9ERUZBVUxUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDbGlwTm90ZURlZmF1bHRDb25maWc+KCdidWktY2xpcC1ub3RlLmRlZmF1bHQtY29uZmlnJywge1xuXHRmYWN0b3J5OiAoKSA9PiAoeyBjb2xvcjogJ3ByaW1hcnknLCBjYXB0aW9uOiAnTW9yZSBpbmZvJyB9KVxufSk7XG5cbi8qKlxuICogQSBjbGlwIG5vdGUgY29uc2lzdHMgb2YgYSB0b2dnbGUgYnV0dG9uIGFuZCBhIGZsb2F0aW5nICdub3RlcGFkJyBlbGVtZW50LCBhdHRhY2hlZCB0byB0aGUgdG9wIGVuZCBvZiB0aGUgaG9zdCBlbGVtZW50J3NcbiAqIHZpZXdhYmxlIGFyZWEuIFRoZSAnbm90ZXBhZCcgbm9ybWFsbHkgY29sbGFwc2VzIGF3YXkgYW5kIG9ubHkgcmV2ZWFscyBpdHNlbGYgd2hlbiB0aGUgdG9nZ2xlIGJ1dHRvbiBpcyBhY3RpdmUuXG4gKlxuICogVGhlIHRvZ2dsZSBidXR0b24gY2xpcHMgb24gdGhlIGVkZ2Ugb2YgdGhlIGhvc3QgZWxlbWVudCBhbmQgZXhwYW5kcyB0byBkaXNwbGF5IHRoZSBmdWxsIGNhcHRpb24gd2hlbiBob3ZlcmVkLiBJdCBoaWRlcyBpdHNlbGZcbiAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGVyZSBpcyBubyBjb250ZW50IHByb3ZpZGVkIHZpYSB0aGUgYGJ1aUNsaXBOb3RlYCBwcm9wZXJ0eSBvZiB0aGUgZGlyZWN0aXZlLlxuICpcbiAqIFRoZSBjbGlwIG5vdGUgY29tcG9uZW50IGlzIHN1aXRhYmxlIGZvciBsYXJnZSBwYWdlIGNvbnRhaW5lciBlbGVtZW50cyB3aXRoIHZpc2libGUgYm91bmRhcmllcy4gSXQgY2FuIHByZXNlbnQgY29udGV4dHVhbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGFuZCBpbiBhZGRpdGlvbiB0byB0aGUgY29udGVudCBkaXNwbGF5ZWQgaW4gdGhlIG1haW4gdmlldyBhcmVhLlxuICpcbiAqIFRoZSBwcm9wZXJ0aWVzIGBidWlDbGlwTm90ZUNvbG9yYCBhbmQgYGJ1aUNsaXBOb3RlQ2FwdGlvbmAgY3VzdG9taXNlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBjbGlwIG5vdGUsIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB3aGljaFxuICogY2FuIG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgYnkgdGhlIGBDbGlwTm90ZU1vZHVsZS5mb3JDb25maWcoKWAgbWV0aG9kLlxuICpcbiAqL1xuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW2J1aUNsaXBOb3RlXScsXG5cdGV4cG9ydEFzOiAnYnVpQ2xpcE5vdGUnXG59KVxuZXhwb3J0IGNsYXNzIENsaXBOb3RlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cdC8qKlxuXHQgKiBQcm92aWRlIGNvbnRlbnQgdG8gdGhlIGNsaXAgbm90ZSdzIGZsb2F0aW5nIG5vdGVwYWQgZWxlbWVudC5cblx0ICogSXQgYWNjZXB0cyBhIGBzdHJpbmdgIG9mIEhUTUwgY29udGVudCBvciBhIGBUZW1wbGF0ZVJlZmAgb2JqZWN0LlxuXHQgKi9cblx0QElucHV0KClcblx0Z2V0IGJ1aUNsaXBOb3RlKCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9jb250ZW50O1xuXHR9XG5cdHNldCBidWlDbGlwTm90ZShub3RlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY29udGVudCA9IG5vdGU7XG5cdFx0aWYgKHRoaXMuX2NvbXBSZWYpIHtcblx0XHRcdHRoaXMuX3Byb2Nlc3NDb250ZW50KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEN1c3RvbWlzZSB0aGUgdGhlbWUgY29sb3IgYWxpYXMuXG5cdCAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuXHQgKi9cblx0QElucHV0KClcblx0Z2V0IGJ1aUNsaXBOb3RlQ29sb3IoKTogVGhlbWVQYWxldHRlIHtcblx0XHRyZXR1cm4gdGhpcy5fY29sb3I7XG5cdH1cblx0c2V0IGJ1aUNsaXBOb3RlQ29sb3IoY29sb3I6IFRoZW1lUGFsZXR0ZSkge1xuXHRcdHRoaXMuX2NvbG9yID0gY29sb3I7XG5cdFx0aWYgKHRoaXMuX2NvbXBSZWYpIHtcblx0XHRcdHRoaXMuX2NvbXBSZWYuaW5zdGFuY2UuX2Fzc2lnbkNvbG9yKHRoaXMuX2NvbG9yKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXNlIHRoZSBpY29uIG9uIHRoZSB0b2dnbGUgYnV0dG9uLiBXaXRoIHRoaXMgcHJvcGVydHkgc3BlY2lmaWVkLCB0aGUgYW5pbWF0aW9uIG9uIHRoZSBpY29uXG5cdCAqIHdpbGwgbm90IGJlIGFjdGl2ZS5cblx0ICovXG5cdEBJbnB1dCgpXG5cdGdldCBidWlDbGlwTm90ZUljb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5faWNvbjtcblx0fVxuXHRzZXQgYnVpQ2xpcE5vdGVJY29uKGljb246IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2ljb24gPSBpY29uO1xuXHRcdGlmICh0aGlzLl9jb21wUmVmKSB7XG5cdFx0XHR0aGlzLl9jb21wUmVmLmluc3RhbmNlLl9hc3NpZ25CdXR0b25JY29uKHRoaXMuX2ljb24pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY2FwdGlvbiBvZiB0aGUgdG9nZ2xlIGJ1dHRvbiB3aGVuIGV4cGFuZGVkLlxuXHQgKi9cblx0QElucHV0KClcblx0Z2V0IGJ1aUNsaXBOb3RlQ2FwdGlvbigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9jYXB0aW9uO1xuXHR9XG5cdHNldCBidWlDbGlwTm90ZUNhcHRpb24odGV4dDogc3RyaW5nKSB7XG5cdFx0dGhpcy5fY2FwdGlvbiA9IHRleHQ7XG5cdFx0aWYgKHRoaXMuX2NvbXBSZWYpIHtcblx0XHRcdHRoaXMuX2NvbXBSZWYuaW5zdGFuY2UuX2Fzc2lnbkJ1dHRvblRleHQodGhpcy5fY2FwdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEVtaXRzIHdoZW4gdGhlIHBhbmVsIG9wZW5zICovXG5cdEBPdXRwdXQoKVxuXHRyZWFkb25seSBidWlDbGlwTm90ZU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuXHQvKiogRW1pdHMgd2hlbiB0aGUgcGFuZWwgY2xvc2VzICovXG5cdEBPdXRwdXQoKVxuXHRyZWFkb25seSBidWlDbGlwTm90ZUNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuXHRwcml2YXRlIF9jb250ZW50Pzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0cHJpdmF0ZSBfY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdwcmltYXJ5Jztcblx0cHJpdmF0ZSBfY29tcFJlZiE6IENvbXBvbmVudFJlZjxDbGlwTm90ZUNvbXBvbmVudD47XG5cdHByaXZhdGUgX2NhcHRpb246IHN0cmluZztcblx0cHJpdmF0ZSBfaWNvbj86IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRASG9zdCgpIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuXHRcdHByaXZhdGUgX3ZjOiBWaWV3Q29udGFpbmVyUmVmLFxuXHRcdEBJbmplY3QoQ0xJUF9OT1RFX0RFRkFVTFRfQ09ORklHKSBfY29uZmlnOiBDbGlwTm90ZURlZmF1bHRDb25maWdcblx0KSB7XG5cdFx0dGhpcy5fY2FwdGlvbiA9IF9jb25maWcuY2FwdGlvbjtcblx0XHR0aGlzLl9jb2xvciA9IF9jb25maWcuY29sb3I7XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wUmVmID0gdGhpcy5fdmMuY3JlYXRlQ29tcG9uZW50KENsaXBOb3RlQ29tcG9uZW50KTtcblx0XHRcdGNvbnN0IGNoaWxkRWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLl9jb21wUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkRWxlbWVudCk7XG5cdFx0XHR0aGlzLl9jb21wUmVmLmluc3RhbmNlLl9hc3NpZ25Db2xvcih0aGlzLl9jb2xvcik7XG5cdFx0XHR0aGlzLl9jb21wUmVmLmluc3RhbmNlLl9hc3NpZ25CdXR0b25UZXh0KHRoaXMuX2NhcHRpb24pO1xuXHRcdFx0dGhpcy5fY29tcFJlZi5pbnN0YW5jZS5fYXNzaWduQnV0dG9uSWNvbih0aGlzLl9pY29uKTtcblx0XHRcdHRoaXMuX2NvbXBSZWYuaW5zdGFuY2Uub3BlbmVkLnN1YnNjcmliZSh0aGlzLmJ1aUNsaXBOb3RlT3BlbmVkLm5leHQuYmluZCh0aGlzLmJ1aUNsaXBOb3RlT3BlbmVkKSk7XG5cdFx0XHR0aGlzLl9jb21wUmVmLmluc3RhbmNlLmNsb3NlZC5zdWJzY3JpYmUodGhpcy5idWlDbGlwTm90ZUNsb3NlZC5uZXh0LmJpbmQodGhpcy5idWlDbGlwTm90ZUNsb3NlZCkpO1xuXHRcdFx0dGhpcy5fcHJvY2Vzc0NvbnRlbnQoKTtcblx0XHR9KTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuX2NvbXBSZWYuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqIE9wZW4gdGhlIG5vdGUgcGFuZWwgKi9cblx0b3BlbigpIHtcblx0XHR0aGlzLl9jb21wUmVmLmluc3RhbmNlLm9wZW4oKTtcblx0fVxuXG5cdC8qKiBDbG9zZSB0aGUgbm90ZSBwYW5lbCAqL1xuXHRjbG9zZSgpIHtcblx0XHR0aGlzLl9jb21wUmVmLmluc3RhbmNlLmNsb3NlKCk7XG5cdH1cblxuXHRwcml2YXRlIF9wcm9jZXNzQ29udGVudCgpIHtcblx0XHR0aGlzLl9jb21wUmVmLmluc3RhbmNlLl9jb250ZW50Q2hhbmdlZCh0aGlzLl9jb250ZW50KTtcblx0fVxufVxuIl19
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { BidiModule } from '@angular/cdk/bidi';
|
|
2
|
-
import { ObserversModule } from '@angular/cdk/observers';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { NgModule } from '@angular/core';
|
|
5
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
7
|
-
import { BuiCommonModule } from '@bravura/ui/common';
|
|
8
|
-
import { IconFontModule } from '@bravura/ui/icon-font';
|
|
9
|
-
import { ClipNoteComponent } from './clip-note.component';
|
|
10
|
-
import { ClipNoteDirective, CLIP_NOTE_DEFAULT_CONFIG } from './clip-note.directive';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
export class ClipNoteModule {
|
|
13
|
-
static forConfig(config) {
|
|
14
|
-
return {
|
|
15
|
-
ngModule: ClipNoteModule,
|
|
16
|
-
providers: [{ provide: CLIP_NOTE_DEFAULT_CONFIG, useValue: config }]
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
ClipNoteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
21
|
-
ClipNoteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteModule, declarations: [ClipNoteComponent, ClipNoteDirective], imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule], exports: [ClipNoteDirective] });
|
|
22
|
-
ClipNoteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteModule, imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule] });
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteModule, decorators: [{
|
|
24
|
-
type: NgModule,
|
|
25
|
-
args: [{
|
|
26
|
-
declarations: [ClipNoteComponent, ClipNoteDirective],
|
|
27
|
-
imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule],
|
|
28
|
-
exports: [ClipNoteDirective]
|
|
29
|
-
}]
|
|
30
|
-
}] });
|
|
31
|
-
export { ClipNoteDirective };
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcC1ub3RlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL2NsaXAtbm90ZS9jbGlwLW5vdGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQXlCLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTzNHLE1BQU0sT0FBTyxjQUFjO0lBQzFCLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBNkI7UUFDN0MsT0FBTztZQUNOLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztTQUNwRSxDQUFDO0lBQ0gsQ0FBQzs7MkdBTlcsY0FBYzs0R0FBZCxjQUFjLGlCQUpYLGlCQUFpQixFQUFFLGlCQUFpQixhQUN6QyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLGFBQzFHLGlCQUFpQjs0R0FFZixjQUFjLFlBSGhCLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWM7MkZBR3hHLGNBQWM7a0JBTDFCLFFBQVE7bUJBQUM7b0JBQ1QsWUFBWSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQztvQkFDckgsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQzVCOztBQVVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmlkaU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IE9ic2VydmVyc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vYnNlcnZlcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgQnVpQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGJyYXZ1cmEvdWkvY29tbW9uJztcbmltcG9ydCB7IEljb25Gb250TW9kdWxlIH0gZnJvbSAnQGJyYXZ1cmEvdWkvaWNvbi1mb250JztcbmltcG9ydCB7IENsaXBOb3RlQ29tcG9uZW50IH0gZnJvbSAnLi9jbGlwLW5vdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENsaXBOb3RlRGVmYXVsdENvbmZpZywgQ2xpcE5vdGVEaXJlY3RpdmUsIENMSVBfTk9URV9ERUZBVUxUX0NPTkZJRyB9IGZyb20gJy4vY2xpcC1ub3RlLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG5cdGRlY2xhcmF0aW9uczogW0NsaXBOb3RlQ29tcG9uZW50LCBDbGlwTm90ZURpcmVjdGl2ZV0sXG5cdGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgQmlkaU1vZHVsZSwgQnVpQ29tbW9uTW9kdWxlLCBPYnNlcnZlcnNNb2R1bGUsIEljb25Gb250TW9kdWxlXSxcblx0ZXhwb3J0czogW0NsaXBOb3RlRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBDbGlwTm90ZU1vZHVsZSB7XG5cdHN0YXRpYyBmb3JDb25maWcoY29uZmlnOiBDbGlwTm90ZURlZmF1bHRDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPENsaXBOb3RlTW9kdWxlPiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5nTW9kdWxlOiBDbGlwTm90ZU1vZHVsZSxcblx0XHRcdHByb3ZpZGVyczogW3sgcHJvdmlkZTogQ0xJUF9OT1RFX0RFRkFVTFRfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH1dXG5cdFx0fTtcblx0fVxufVxuXG5leHBvcnQgeyBDbGlwTm90ZURpcmVjdGl2ZSB9O1xuIl19
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { CurrencyInputDirective } from './currency-input.directive';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class CurrencyInputModule {
|
|
6
|
-
}
|
|
7
|
-
CurrencyInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: CurrencyInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
8
|
-
CurrencyInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.6", ngImport: i0, type: CurrencyInputModule, declarations: [CurrencyInputDirective], imports: [CommonModule], exports: [CurrencyInputDirective] });
|
|
9
|
-
CurrencyInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: CurrencyInputModule, imports: [CommonModule] });
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: CurrencyInputModule, decorators: [{
|
|
11
|
-
type: NgModule,
|
|
12
|
-
args: [{
|
|
13
|
-
declarations: [CurrencyInputDirective],
|
|
14
|
-
imports: [CommonModule],
|
|
15
|
-
exports: [CurrencyInputDirective]
|
|
16
|
-
}]
|
|
17
|
-
}] });
|
|
18
|
-
export { CurrencyInputDirective };
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3ktaW5wdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvY3VycmVuY3ktaW5wdXQvY3VycmVuY3ktaW5wdXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU9wRSxNQUFNLE9BQU8sbUJBQW1COztnSEFBbkIsbUJBQW1CO2lIQUFuQixtQkFBbUIsaUJBSmhCLHNCQUFzQixhQUMzQixZQUFZLGFBQ1osc0JBQXNCO2lIQUVwQixtQkFBbUIsWUFIckIsWUFBWTsyRkFHVixtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1QsWUFBWSxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDOztBQUdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXJyZW5jeUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi9jdXJyZW5jeS1pbnB1dC5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuXHRkZWNsYXJhdGlvbnM6IFtDdXJyZW5jeUlucHV0RGlyZWN0aXZlXSxcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG5cdGV4cG9ydHM6IFtDdXJyZW5jeUlucHV0RGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBDdXJyZW5jeUlucHV0TW9kdWxlIHt9XG5cbmV4cG9ydCB7IEN1cnJlbmN5SW5wdXREaXJlY3RpdmUgfTtcbiJdfQ==
|
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
2
|
-
import { Component, ElementRef, Inject, Input, Optional, Self, ViewChildren } from '@angular/core';
|
|
3
|
-
import { UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
|
|
4
|
-
import { mixinErrorState } from '@angular/material/core';
|
|
5
|
-
import { MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';
|
|
6
|
-
import { Subject } from 'rxjs';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/cdk/a11y";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
import * as i3 from "@angular/material/core";
|
|
11
|
-
import * as i4 from "@angular/common";
|
|
12
|
-
import * as i5 from "@angular/material/form-field";
|
|
13
|
-
// Boilerplate for applying mixins to form field control for error state checking.
|
|
14
|
-
/** @ignore */
|
|
15
|
-
const _DiscreteInputBase = mixinErrorState(class {
|
|
16
|
-
constructor(
|
|
17
|
-
/** @ignore */ _defaultErrorStateMatcher,
|
|
18
|
-
/** @ignore */ _parentForm,
|
|
19
|
-
/** @ignore */ _parentFormGroup,
|
|
20
|
-
/** @ignore */ ngControl) {
|
|
21
|
-
this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
|
|
22
|
-
this._parentForm = _parentForm;
|
|
23
|
-
this._parentFormGroup = _parentFormGroup;
|
|
24
|
-
this.ngControl = ngControl;
|
|
25
|
-
this.stateChanges = new Subject();
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
/**
|
|
29
|
-
* Custom `MatFormFieldControl` with an individual input box for each character, suitable for fixed-length fields,
|
|
30
|
-
* such as secondary PIN inputs, TFNs, or BSB code etc.
|
|
31
|
-
*
|
|
32
|
-
* Accessibility features are not yet fully implemented.
|
|
33
|
-
*
|
|
34
|
-
* Example:
|
|
35
|
-
*
|
|
36
|
-
* ```html
|
|
37
|
-
* <mat-form-field>
|
|
38
|
-
* <bui-discrete-input></bui-discrete-input>
|
|
39
|
-
* </mat-form-field>
|
|
40
|
-
* ```
|
|
41
|
-
*
|
|
42
|
-
*/
|
|
43
|
-
export class DiscreteInputComponent extends _DiscreteInputBase {
|
|
44
|
-
constructor(_focusMonitor, _elementRef, formField, control, _parentForm, _parentFormGroup, _defaultErrorStateMatcher) {
|
|
45
|
-
super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, control);
|
|
46
|
-
this._focusMonitor = _focusMonitor;
|
|
47
|
-
this._elementRef = _elementRef;
|
|
48
|
-
/** The type of input boxes */
|
|
49
|
-
this.type = 'text';
|
|
50
|
-
/** Input boxes are separated in groups. This specifies the characters displayed between two groups. */
|
|
51
|
-
this.separator = ' ';
|
|
52
|
-
/** @ignore */ this.id = `bui-discrete-input-${DiscreteInputComponent.nextId++}`;
|
|
53
|
-
this.autocomplete = 'off';
|
|
54
|
-
this._sizeSpec = [];
|
|
55
|
-
this._required = false;
|
|
56
|
-
this._disabled = false;
|
|
57
|
-
this._separatorPos = [];
|
|
58
|
-
/** @ignore */ this.onChange = (_) => { };
|
|
59
|
-
/** @ignore */ this.onTouched = () => { };
|
|
60
|
-
/** @ignore */ this.errorState = false;
|
|
61
|
-
this.parts = new UntypedFormArray([]);
|
|
62
|
-
this.group = new UntypedFormGroup({ parts: this.parts });
|
|
63
|
-
this.sizeSpec = [2, 2, 2];
|
|
64
|
-
this._formField = formField;
|
|
65
|
-
this.focused = false;
|
|
66
|
-
this.stateChanges = new Subject();
|
|
67
|
-
this.ngControl = control;
|
|
68
|
-
if (this.ngControl != null) {
|
|
69
|
-
this.ngControl.valueAccessor = this;
|
|
70
|
-
}
|
|
71
|
-
this._focusMonitor.monitor(this._elementRef, true).subscribe(origin => {
|
|
72
|
-
if (this.focused && !origin) {
|
|
73
|
-
this.onTouched();
|
|
74
|
-
}
|
|
75
|
-
this.focused = !!origin;
|
|
76
|
-
this.stateChanges.next();
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
/** @ignore */
|
|
80
|
-
get shouldLabelFloat() {
|
|
81
|
-
return true;
|
|
82
|
-
}
|
|
83
|
-
/** @ignore */
|
|
84
|
-
get empty() {
|
|
85
|
-
return this.parts.controls.every(c => !c.value);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Defines the length and grouping of the input.
|
|
89
|
-
* @default [2, 2, 2]
|
|
90
|
-
*/
|
|
91
|
-
get sizeSpec() {
|
|
92
|
-
return this._sizeSpec;
|
|
93
|
-
}
|
|
94
|
-
set sizeSpec(spec) {
|
|
95
|
-
let size = 0;
|
|
96
|
-
this._separatorPos = [];
|
|
97
|
-
spec.forEach((n, i) => {
|
|
98
|
-
size += n;
|
|
99
|
-
if (i < spec.length - 1) {
|
|
100
|
-
this._separatorPos.push(size);
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
if (size !== this.parts.length) {
|
|
104
|
-
const v = this.value;
|
|
105
|
-
this.parts.clear({ emitEvent: false });
|
|
106
|
-
for (let i = 0; i < size; i++) {
|
|
107
|
-
this.parts.setControl(i, new UntypedFormControl(null, [Validators.required, Validators.minLength(1), Validators.maxLength(1)]));
|
|
108
|
-
}
|
|
109
|
-
this.value = v;
|
|
110
|
-
this._sizeSpec = spec;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/** The placeholder for this control. */
|
|
114
|
-
get placeholder() {
|
|
115
|
-
return this._placeholder;
|
|
116
|
-
}
|
|
117
|
-
set placeholder(value) {
|
|
118
|
-
this._placeholder = value;
|
|
119
|
-
this.stateChanges.next();
|
|
120
|
-
}
|
|
121
|
-
/** Whether the control is required. */
|
|
122
|
-
get required() {
|
|
123
|
-
return this._required;
|
|
124
|
-
}
|
|
125
|
-
set required(value) {
|
|
126
|
-
this._required = coerceBooleanProperty(value);
|
|
127
|
-
this.stateChanges.next();
|
|
128
|
-
}
|
|
129
|
-
/** Whether the control is disabled. */
|
|
130
|
-
get disabled() {
|
|
131
|
-
return this._disabled;
|
|
132
|
-
}
|
|
133
|
-
set disabled(value) {
|
|
134
|
-
this._disabled = coerceBooleanProperty(value);
|
|
135
|
-
this._disabled ? this.parts.disable() : this.parts.enable();
|
|
136
|
-
this.stateChanges.next();
|
|
137
|
-
}
|
|
138
|
-
/** The value of the control. */
|
|
139
|
-
get value() {
|
|
140
|
-
return this.parts.controls
|
|
141
|
-
.map(c => c.value)
|
|
142
|
-
.filter(c => c)
|
|
143
|
-
.join('');
|
|
144
|
-
}
|
|
145
|
-
set value(v) {
|
|
146
|
-
v = v || '';
|
|
147
|
-
for (let i = 0; i < this.parts.controls.length; i++) {
|
|
148
|
-
this.parts.controls[i]?.setValue(v[i]);
|
|
149
|
-
}
|
|
150
|
-
this.stateChanges.next();
|
|
151
|
-
}
|
|
152
|
-
/** @ignore */
|
|
153
|
-
get _colorSuffix() {
|
|
154
|
-
return this.errorState ? 'warn' : this._formField?.color || 'primary';
|
|
155
|
-
}
|
|
156
|
-
/** @ignore */
|
|
157
|
-
ngOnDestroy() {
|
|
158
|
-
this.stateChanges.complete();
|
|
159
|
-
this._focusMonitor.stopMonitoring(this._elementRef);
|
|
160
|
-
}
|
|
161
|
-
/** @ignore */
|
|
162
|
-
setDescribedByIds(ids) {
|
|
163
|
-
const controlElement = this._elementRef.nativeElement.querySelector('.bui-discrete-input-container');
|
|
164
|
-
controlElement.setAttribute('aria-describedby', ids.join(' '));
|
|
165
|
-
}
|
|
166
|
-
/** @ignore */
|
|
167
|
-
onContainerClick() {
|
|
168
|
-
const l = this.parts.controls.length;
|
|
169
|
-
for (let i = 0; i < l; i++) {
|
|
170
|
-
if (this.parts.controls[i].invalid || i === l - 1) {
|
|
171
|
-
this._focusMonitor.focusVia(this.inputParts.get(i), 'program');
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
/** @ignore */
|
|
177
|
-
writeValue(v) {
|
|
178
|
-
this.value = v;
|
|
179
|
-
}
|
|
180
|
-
/** @ignore */
|
|
181
|
-
registerOnChange(fn) {
|
|
182
|
-
this.onChange = fn;
|
|
183
|
-
}
|
|
184
|
-
/** @ignore */
|
|
185
|
-
registerOnTouched(fn) {
|
|
186
|
-
this.onTouched = fn;
|
|
187
|
-
}
|
|
188
|
-
/** @ignore */
|
|
189
|
-
setDisabledState(isDisabled) {
|
|
190
|
-
this.disabled = isDisabled;
|
|
191
|
-
}
|
|
192
|
-
/** @ignore */
|
|
193
|
-
_handleInput(control, index, event) {
|
|
194
|
-
let v = control.value && control.value[0];
|
|
195
|
-
const rawValue = event.target.value;
|
|
196
|
-
if (rawValue.length > 1) {
|
|
197
|
-
this._replaceText(rawValue, event);
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
control.setValue(v);
|
|
201
|
-
const nextElement = this.inputParts.get(index + 1);
|
|
202
|
-
if (!control.errors && nextElement) {
|
|
203
|
-
this._focusPart(nextElement);
|
|
204
|
-
}
|
|
205
|
-
this.onChange(this.value);
|
|
206
|
-
}
|
|
207
|
-
/** @ignore */
|
|
208
|
-
_handleBeforeInput(index, event) {
|
|
209
|
-
const v = event.data;
|
|
210
|
-
if (this.accept && v && !new RegExp(`[${this.accept}]`).test(v)) {
|
|
211
|
-
event.preventDefault();
|
|
212
|
-
event.stopPropagation();
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
const inp = this.inputParts.get(index).nativeElement;
|
|
216
|
-
if (v && inp.value) {
|
|
217
|
-
inp.value = '';
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
/** @ignore */
|
|
221
|
-
_focusPart(elemRef) {
|
|
222
|
-
this._focusMonitor.focusVia(elemRef, 'program');
|
|
223
|
-
}
|
|
224
|
-
/** @ignore */
|
|
225
|
-
_consumeKey(event) {
|
|
226
|
-
event.stopPropagation();
|
|
227
|
-
event.preventDefault();
|
|
228
|
-
}
|
|
229
|
-
/** @ignore */
|
|
230
|
-
_leftArrow(index, event) {
|
|
231
|
-
this._consumeKey(event);
|
|
232
|
-
const prevElement = this.inputParts.get(index - 1);
|
|
233
|
-
if (prevElement) {
|
|
234
|
-
this._focusPart(prevElement);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
/** @ignore */
|
|
238
|
-
_rightArrow(index, event) {
|
|
239
|
-
this._consumeKey(event);
|
|
240
|
-
const nextElement = this.inputParts.get(index + 1);
|
|
241
|
-
if (nextElement) {
|
|
242
|
-
this._focusPart(nextElement);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/** @ignore */
|
|
246
|
-
_handleBackspace(control, index) {
|
|
247
|
-
const prevElement = index && this.inputParts.get(index - 1);
|
|
248
|
-
if (!control.value && prevElement) {
|
|
249
|
-
this._focusMonitor.focusVia(prevElement, 'program');
|
|
250
|
-
}
|
|
251
|
-
else if (control.value) {
|
|
252
|
-
control.setValue('');
|
|
253
|
-
this.onChange(this.value);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
/** @ignore */
|
|
257
|
-
_onPaste(event) {
|
|
258
|
-
let text = event.clipboardData?.getData('text');
|
|
259
|
-
this._replaceText(text, event);
|
|
260
|
-
}
|
|
261
|
-
/** @ignore */
|
|
262
|
-
_separatorRequired(index) {
|
|
263
|
-
return this._separatorPos.includes(index + 1);
|
|
264
|
-
}
|
|
265
|
-
/** @ignore */
|
|
266
|
-
_placeholderAt(index) {
|
|
267
|
-
return this._placeholder && this._placeholder[index];
|
|
268
|
-
}
|
|
269
|
-
/** @ignore */
|
|
270
|
-
ngDoCheck() {
|
|
271
|
-
if (this.ngControl) {
|
|
272
|
-
// We need to re-evaluate this on every change detection cycle, because there are some
|
|
273
|
-
// error triggers that we can't subscribe to (e.g. parent form submissions). This means
|
|
274
|
-
// that whatever logic is in here has to be super lean or we risk destroying the performance.
|
|
275
|
-
this.updateErrorState();
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
_replaceText(text, event) {
|
|
279
|
-
if (text) {
|
|
280
|
-
if (this.accept) {
|
|
281
|
-
text = text.replace(new RegExp(`[^${this.accept}]`, 'gi'), '');
|
|
282
|
-
}
|
|
283
|
-
this.value = text;
|
|
284
|
-
this.onChange(this.value);
|
|
285
|
-
}
|
|
286
|
-
event.preventDefault();
|
|
287
|
-
this.onContainerClick();
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
/** @ignore */
|
|
291
|
-
DiscreteInputComponent.nextId = 0;
|
|
292
|
-
DiscreteInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: DiscreteInputComponent, deps: [{ token: i1.FocusMonitor }, { token: i0.ElementRef }, { token: MAT_FORM_FIELD, optional: true }, { token: i2.NgControl, optional: true, self: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i3.ErrorStateMatcher }], target: i0.ɵɵFactoryTarget.Component });
|
|
293
|
-
DiscreteInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.6", type: DiscreteInputComponent, selector: "bui-discrete-input", inputs: { type: "type", separator: "separator", accept: "accept", userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], autocomplete: "autocomplete", sizeSpec: "sizeSpec", placeholder: "placeholder", required: "required", disabled: "disabled", value: "value" }, host: { classAttribute: "bui-discrete-input bui-host" }, providers: [{ provide: MatFormFieldControl, useExisting: DiscreteInputComponent }], viewQueries: [{ propertyName: "inputParts", predicate: ["part"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div\n\trole=\"group\"\n\tclass=\"bui-discrete-input-container\"\n\t[formGroup]=\"group\"\n\t[attr.aria-labelledby]=\"_formField?.getLabelId()\"\n>\n\t<ng-container [formArrayName]=\"'parts'\">\n\t\t<ng-template ngFor [ngForOf]=\"parts.controls\" let-p let-i=\"index\">\n\t\t\t<input\n\t\t\t\tclass=\"bui-discrete-input-element bui-outline-{{ _colorSuffix }}\"\n\t\t\t\t[formControlName]=\"i\"\n\t\t\t\t[attr.aria-label]=\"'character ' + (i + 1)\"\n\t\t\t\t(input)=\"_handleInput(p, i, $event)\"\n\t\t\t\t(beforeinput)=\"_handleBeforeInput(i, $event)\"\n\t\t\t\t(keydown.backspace)=\"_handleBackspace(p, i)\"\n\t\t\t\t(keydown.arrowup)=\"_consumeKey($event)\"\n\t\t\t\t(keydown.arrowdown)=\"_consumeKey($event)\"\n\t\t\t\t(keydown.arrowleft)=\"_leftArrow(i, $event)\"\n\t\t\t\t(keydown.arrowright)=\"_rightArrow(i, $event)\"\n\t\t\t\t[attr.placeholder]=\"_placeholderAt(i)\"\n\t\t\t\t#part\n\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t(paste)=\"_onPaste($event)\"\n\t\t\t\t[type]=\"['text', 'number', 'password'].includes(type) ? type : 'text'\"\n\t\t\t\t[attr.inputmode]=\"type === 'number' ? 'decimal' : undefined\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t/>\n\t\t\t<span *ngIf=\"_separatorRequired(i)\" class=\"bui-discrete-input-spacer\">{{ separator }}</span>\n\t\t</ng-template>\n\t</ng-container>\n</div>\n", styles: [".bui-discrete-input-container{display:flex;align-items:center}.bui-discrete-input-element{border:1px solid rgba(128,128,128,.4);border-radius:3px;background:none;padding:0;text-align:center;width:1.5em;height:1.5em;font-size:inherit;color:currentColor;caret-color:auto}.bui-discrete-input-element:not(:last-child){margin-right:.25em}.bui-discrete-input-element:focus-visible{outline-style:solid;outline-width:2px;outline-offset:-1px}.bui-discrete-input-element[type=number]::-webkit-inner-spin-button,.bui-discrete-input-element[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.bui-discrete-input-element[type=number]{-moz-appearance:textfield}.bui-discrete-input-spacer{margin-right:.25em;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }] });
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: DiscreteInputComponent, decorators: [{
|
|
295
|
-
type: Component,
|
|
296
|
-
args: [{ selector: 'bui-discrete-input', providers: [{ provide: MatFormFieldControl, useExisting: DiscreteInputComponent }], host: {
|
|
297
|
-
class: 'bui-discrete-input bui-host'
|
|
298
|
-
}, template: "<div\n\trole=\"group\"\n\tclass=\"bui-discrete-input-container\"\n\t[formGroup]=\"group\"\n\t[attr.aria-labelledby]=\"_formField?.getLabelId()\"\n>\n\t<ng-container [formArrayName]=\"'parts'\">\n\t\t<ng-template ngFor [ngForOf]=\"parts.controls\" let-p let-i=\"index\">\n\t\t\t<input\n\t\t\t\tclass=\"bui-discrete-input-element bui-outline-{{ _colorSuffix }}\"\n\t\t\t\t[formControlName]=\"i\"\n\t\t\t\t[attr.aria-label]=\"'character ' + (i + 1)\"\n\t\t\t\t(input)=\"_handleInput(p, i, $event)\"\n\t\t\t\t(beforeinput)=\"_handleBeforeInput(i, $event)\"\n\t\t\t\t(keydown.backspace)=\"_handleBackspace(p, i)\"\n\t\t\t\t(keydown.arrowup)=\"_consumeKey($event)\"\n\t\t\t\t(keydown.arrowdown)=\"_consumeKey($event)\"\n\t\t\t\t(keydown.arrowleft)=\"_leftArrow(i, $event)\"\n\t\t\t\t(keydown.arrowright)=\"_rightArrow(i, $event)\"\n\t\t\t\t[attr.placeholder]=\"_placeholderAt(i)\"\n\t\t\t\t#part\n\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t(paste)=\"_onPaste($event)\"\n\t\t\t\t[type]=\"['text', 'number', 'password'].includes(type) ? type : 'text'\"\n\t\t\t\t[attr.inputmode]=\"type === 'number' ? 'decimal' : undefined\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t/>\n\t\t\t<span *ngIf=\"_separatorRequired(i)\" class=\"bui-discrete-input-spacer\">{{ separator }}</span>\n\t\t</ng-template>\n\t</ng-container>\n</div>\n", styles: [".bui-discrete-input-container{display:flex;align-items:center}.bui-discrete-input-element{border:1px solid rgba(128,128,128,.4);border-radius:3px;background:none;padding:0;text-align:center;width:1.5em;height:1.5em;font-size:inherit;color:currentColor;caret-color:auto}.bui-discrete-input-element:not(:last-child){margin-right:.25em}.bui-discrete-input-element:focus-visible{outline-style:solid;outline-width:2px;outline-offset:-1px}.bui-discrete-input-element[type=number]::-webkit-inner-spin-button,.bui-discrete-input-element[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.bui-discrete-input-element[type=number]{-moz-appearance:textfield}.bui-discrete-input-spacer{margin-right:.25em;vertical-align:middle}\n"] }]
|
|
299
|
-
}], ctorParameters: function () { return [{ type: i1.FocusMonitor }, { type: i0.ElementRef }, { type: i5.MatFormField, decorators: [{
|
|
300
|
-
type: Optional
|
|
301
|
-
}, {
|
|
302
|
-
type: Inject,
|
|
303
|
-
args: [MAT_FORM_FIELD]
|
|
304
|
-
}] }, { type: i2.NgControl, decorators: [{
|
|
305
|
-
type: Optional
|
|
306
|
-
}, {
|
|
307
|
-
type: Self
|
|
308
|
-
}] }, { type: i2.NgForm, decorators: [{
|
|
309
|
-
type: Optional
|
|
310
|
-
}] }, { type: i2.FormGroupDirective, decorators: [{
|
|
311
|
-
type: Optional
|
|
312
|
-
}] }, { type: i3.ErrorStateMatcher }]; }, propDecorators: { type: [{
|
|
313
|
-
type: Input
|
|
314
|
-
}], separator: [{
|
|
315
|
-
type: Input
|
|
316
|
-
}], accept: [{
|
|
317
|
-
type: Input
|
|
318
|
-
}], userAriaDescribedBy: [{
|
|
319
|
-
type: Input,
|
|
320
|
-
args: ['aria-describedby']
|
|
321
|
-
}], inputParts: [{
|
|
322
|
-
type: ViewChildren,
|
|
323
|
-
args: ['part', { read: ElementRef }]
|
|
324
|
-
}], autocomplete: [{
|
|
325
|
-
type: Input
|
|
326
|
-
}], sizeSpec: [{
|
|
327
|
-
type: Input
|
|
328
|
-
}], placeholder: [{
|
|
329
|
-
type: Input
|
|
330
|
-
}], required: [{
|
|
331
|
-
type: Input
|
|
332
|
-
}], disabled: [{
|
|
333
|
-
type: Input
|
|
334
|
-
}], value: [{
|
|
335
|
-
type: Input
|
|
336
|
-
}] } });
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY3JldGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvZGlzY3JldGUtaW5wdXQvZGlzY3JldGUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvZGlzY3JldGUtaW5wdXQvZGlzY3JldGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBRVIsSUFBSSxFQUNKLFlBQVksRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR04sZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFJaEIsVUFBVSxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFxQixlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RSxPQUFPLEVBQWdCLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFFL0Isa0ZBQWtGO0FBQ2xGLGNBQWM7QUFDZCxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FDekM7SUFFQztJQUNDLGNBQWMsQ0FBUSx5QkFBNEM7SUFDbEUsY0FBYyxDQUFRLFdBQW1CO0lBQ3pDLGNBQWMsQ0FBUSxnQkFBb0M7SUFDMUQsY0FBYyxDQUFRLFNBQW9CO1FBSHBCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBbUI7UUFDNUMsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBTGxDLGlCQUFZLEdBQUcs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Q0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLHdCQUF3QixFQUFFLENBQUMsUUFDNUU7d0JBQ0wsS0FBSyxFQUFFLDZCQUE2QjtxQkFDcEM7OzBCQStKQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7OzBCQUNqQyxRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsUUFBUTs7MEJBQ1IsUUFBUTs0RUEzSVYsSUFBSTtzQkFESCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFRTixNQUFNO3NCQURMLEtBQUs7Z0JBTXFCLG1CQUFtQjtzQkFBN0MsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBRTJCLFVBQVU7c0JBQTdELFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFTMUMsWUFBWTtzQkFEWCxLQUFLO2dCQTZCRixRQUFRO3NCQURYLEtBQUs7Z0JBNkJGLFdBQVc7c0JBRGQsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBV0YsUUFBUTtzQkFEWCxLQUFLO2dCQVlGLEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEluamVjdCxcblx0SW5wdXQsXG5cdE9uRGVzdHJveSxcblx0T3B0aW9uYWwsXG5cdFF1ZXJ5TGlzdCxcblx0U2VsZixcblx0Vmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0QWJzdHJhY3RDb250cm9sLFxuXHRDb250cm9sVmFsdWVBY2Nlc3Nvcixcblx0VW50eXBlZEZvcm1BcnJheSxcblx0VW50eXBlZEZvcm1Db250cm9sLFxuXHRVbnR5cGVkRm9ybUdyb3VwLFxuXHRGb3JtR3JvdXBEaXJlY3RpdmUsXG5cdE5nQ29udHJvbCxcblx0TmdGb3JtLFxuXHRWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyLCBtaXhpbkVycm9yU3RhdGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0Rm9ybUZpZWxkQ29udHJvbCwgTUFUX0ZPUk1fRklFTEQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLy8gQm9pbGVycGxhdGUgZm9yIGFwcGx5aW5nIG1peGlucyB0byBmb3JtIGZpZWxkIGNvbnRyb2wgZm9yIGVycm9yIHN0YXRlIGNoZWNraW5nLlxuLyoqIEBpZ25vcmUgKi9cbmNvbnN0IF9EaXNjcmV0ZUlucHV0QmFzZSA9IG1peGluRXJyb3JTdGF0ZShcblx0Y2xhc3Mge1xuXHRcdHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cdFx0Y29uc3RydWN0b3IoXG5cdFx0XHQvKiogQGlnbm9yZSAqLyBwdWJsaWMgX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG5cdFx0XHQvKiogQGlnbm9yZSAqLyBwdWJsaWMgX3BhcmVudEZvcm06IE5nRm9ybSxcblx0XHRcdC8qKiBAaWdub3JlICovIHB1YmxpYyBfcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG5cdFx0XHQvKiogQGlnbm9yZSAqLyBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2xcblx0XHQpIHt9XG5cdH1cbik7XG5cbi8qKlxuICogQ3VzdG9tIGBNYXRGb3JtRmllbGRDb250cm9sYCB3aXRoIGFuIGluZGl2aWR1YWwgaW5wdXQgYm94IGZvciBlYWNoIGNoYXJhY3Rlciwgc3VpdGFibGUgZm9yIGZpeGVkLWxlbmd0aCBmaWVsZHMsXG4gKiBzdWNoIGFzIHNlY29uZGFyeSBQSU4gaW5wdXRzLCBURk5zLCBvciBCU0IgY29kZSBldGMuXG4gKlxuICogQWNjZXNzaWJpbGl0eSBmZWF0dXJlcyBhcmUgbm90IHlldCBmdWxseSBpbXBsZW1lbnRlZC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtYXQtZm9ybS1maWVsZD5cbiAqICAgPGJ1aS1kaXNjcmV0ZS1pbnB1dD48L2J1aS1kaXNjcmV0ZS1pbnB1dD5cbiAqIDwvbWF0LWZvcm0tZmllbGQ+XG4gKiBgYGBcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2J1aS1kaXNjcmV0ZS1pbnB1dCcsXG5cdHRlbXBsYXRlVXJsOiAnZGlzY3JldGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnZGlzY3JldGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcblx0cHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRGlzY3JldGVJbnB1dENvbXBvbmVudCB9XSxcblx0aG9zdDoge1xuXHRcdGNsYXNzOiAnYnVpLWRpc2NyZXRlLWlucHV0IGJ1aS1ob3N0J1xuXHR9XG59KVxuZXhwb3J0IGNsYXNzIERpc2NyZXRlSW5wdXRDb21wb25lbnRcblx0ZXh0ZW5kcyBfRGlzY3JldGVJbnB1dEJhc2Vcblx0aW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPHN0cmluZz4sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3lcbntcblx0LyoqIEBpZ25vcmUgKi9cblx0c3RhdGljIG5leHRJZCA9IDA7XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0c3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0LyoqIEBpZ25vcmUgKi9cblx0c3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3JlcXVpcmVkOiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuXHQvKiogQGlnbm9yZSAqLyBwYXJ0czogVW50eXBlZEZvcm1BcnJheTtcblx0LyoqIEBpZ25vcmUgKi8gZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XG5cdC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgY29tcG9uZW50IHN0YXRlIGNoYW5nZXMuICovXG5cdHN0YXRlQ2hhbmdlczogU3ViamVjdDx2b2lkPjtcblx0LyoqIFdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZm9jdXNlZC4gKi9cblx0Zm9jdXNlZDogYm9vbGVhbjtcblxuXHQvKiogVGhlIHR5cGUgb2YgaW5wdXQgYm94ZXMgKi9cblx0QElucHV0KClcblx0dHlwZTogJ3RleHQnIHwgJ251bWJlcicgfCAncGFzc3dvcmQnID0gJ3RleHQnO1xuXG5cdC8qKiBJbnB1dCBib3hlcyBhcmUgc2VwYXJhdGVkIGluIGdyb3Vwcy4gVGhpcyBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcnMgZGlzcGxheWVkIGJldHdlZW4gdHdvIGdyb3Vwcy4gKi9cblx0QElucHV0KClcblx0c2VwYXJhdG9yID0gJyAnO1xuXG5cdC8qKlxuXHQgKiBBIGxpc3Qgb2YgY2hhcmFjdGVycyBhY2NlcHRlZCBpbiB0aGUgaW5wdXRzLCBmb3IgZXhhbXBsZSBgMC05YCwgYGEtekEtWjAtOWBcblx0ICogQGV4YW1wbGUgJzAtOSdcblx0ICovXG5cdEBJbnB1dCgpXG5cdGFjY2VwdD86IHN0cmluZztcblxuXHQvKiogQGlnbm9yZSAqLyBpZCA9IGBidWktZGlzY3JldGUtaW5wdXQtJHtEaXNjcmV0ZUlucHV0Q29tcG9uZW50Lm5leHRJZCsrfWA7XG5cblx0LyoqIFZhbHVlIG9mIGFyaWEtZGVzY3JpYmVkYnkgdGhhdCBzaG91bGQgYmUgbWVyZ2VkIHdpdGggdGhlIGRlc2NyaWJlZC1ieSBpZHMgd2hpY2ggYXJlIHNldCBieSB0aGUgZm9ybS1maWVsZC4gKi9cblx0QElucHV0KCdhcmlhLWRlc2NyaWJlZGJ5JykgdXNlckFyaWFEZXNjcmliZWRCeT86IHN0cmluZztcblxuXHRAVmlld0NoaWxkcmVuKCdwYXJ0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgaW5wdXRQYXJ0cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcblxuXHQvKipAaWdub3JlICovXG5cdF9mb3JtRmllbGQ6IE1hdEZvcm1GaWVsZDtcblxuXHQvKipAaWdub3JlICovXG5cdG5nQ29udHJvbDogTmdDb250cm9sO1xuXG5cdEBJbnB1dCgpXG5cdGF1dG9jb21wbGV0ZT86IHN0cmluZyA9ICdvZmYnO1xuXG5cdHByaXZhdGUgX3NpemVTcGVjOiBudW1iZXJbXSA9IFtdO1xuXG5cdHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cdHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cdHByaXZhdGUgX3NlcGFyYXRvclBvczogbnVtYmVyW10gPSBbXTtcblxuXHQvKiogQGlnbm9yZSAqLyBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXHQvKiogQGlnbm9yZSAqLyBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuXHQvKiogQGlnbm9yZSAqL1xuXHRnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdGdldCBlbXB0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5wYXJ0cy5jb250cm9scy5ldmVyeShjID0+ICFjLnZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBsZW5ndGggYW5kIGdyb3VwaW5nIG9mIHRoZSBpbnB1dC5cblx0ICogQGRlZmF1bHQgWzIsIDIsIDJdXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRnZXQgc2l6ZVNwZWMoKTogbnVtYmVyW10ge1xuXHRcdHJldHVybiB0aGlzLl9zaXplU3BlYztcblx0fVxuXHRzZXQgc2l6ZVNwZWMoc3BlYzogbnVtYmVyW10pIHtcblx0XHRsZXQgc2l6ZSA9IDA7XG5cdFx0dGhpcy5fc2VwYXJhdG9yUG9zID0gW107XG5cdFx0c3BlYy5mb3JFYWNoKChuLCBpKSA9PiB7XG5cdFx0XHRzaXplICs9IG47XG5cdFx0XHRpZiAoaSA8IHNwZWMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHR0aGlzLl9zZXBhcmF0b3JQb3MucHVzaChzaXplKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAoc2l6ZSAhPT0gdGhpcy5wYXJ0cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xuXHRcdFx0dGhpcy5wYXJ0cy5jbGVhcih7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuXHRcdFx0XHR0aGlzLnBhcnRzLnNldENvbnRyb2woXG5cdFx0XHRcdFx0aSxcblx0XHRcdFx0XHRuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMSldKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy52YWx1ZSA9IHY7XG5cdFx0XHR0aGlzLl9zaXplU3BlYyA9IHNwZWM7XG5cdFx0fVxuXHR9XG5cblx0LyoqIFRoZSBwbGFjZWhvbGRlciBmb3IgdGhpcyBjb250cm9sLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXIhO1xuXHR9XG5cdHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcblx0XHR0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG5cdH1cblxuXHQvKiogV2hldGhlciB0aGUgY29udHJvbCBpcyByZXF1aXJlZC4gKi9cblx0QElucHV0KClcblx0Z2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9yZXF1aXJlZDtcblx0fVxuXHRzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cdFx0dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuXHR9XG5cblx0LyoqIFdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuICovXG5cdEBJbnB1dCgpXG5cdGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG5cdH1cblx0c2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXHRcdHRoaXMuX2Rpc2FibGVkID8gdGhpcy5wYXJ0cy5kaXNhYmxlKCkgOiB0aGlzLnBhcnRzLmVuYWJsZSgpO1xuXHRcdHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcblx0fVxuXG5cdC8qKiBUaGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuICovXG5cdEBJbnB1dCgpXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnBhcnRzLmNvbnRyb2xzXG5cdFx0XHQubWFwKGMgPT4gYy52YWx1ZSlcblx0XHRcdC5maWx0ZXIoYyA9PiBjKVxuXHRcdFx0LmpvaW4oJycpO1xuXHR9XG5cdHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcblx0XHR2ID0gdiB8fCAnJztcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFydHMuY29udHJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRoaXMucGFydHMuY29udHJvbHNbaV0/LnNldFZhbHVlKHZbaV0pO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG5cdH1cblxuXHQvKiogQGlnbm9yZSAqL1xuXHRnZXQgX2NvbG9yU3VmZml4KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXJyb3JTdGF0ZSA/ICd3YXJuJyA6IHRoaXMuX2Zvcm1GaWVsZD8uY29sb3IgfHwgJ3ByaW1hcnknO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG5cdFx0cHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG5cdFx0QE9wdGlvbmFsKCkgQEluamVjdChNQVRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBNYXRGb3JtRmllbGQsXG5cdFx0QE9wdGlvbmFsKCkgQFNlbGYoKSBjb250cm9sOiBOZ0NvbnRyb2wsXG5cdFx0QE9wdGlvbmFsKCkgX3BhcmVudEZvcm06IE5nRm9ybSxcblx0XHRAT3B0aW9uYWwoKSBfcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG5cdFx0X2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXJcblx0KSB7XG5cdFx0c3VwZXIoX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciwgX3BhcmVudEZvcm0sIF9wYXJlbnRGb3JtR3JvdXAsIGNvbnRyb2wpO1xuXHRcdHRoaXMucGFydHMgPSBuZXcgVW50eXBlZEZvcm1BcnJheShbXSk7XG5cdFx0dGhpcy5ncm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHsgcGFydHM6IHRoaXMucGFydHMgfSk7XG5cdFx0dGhpcy5zaXplU3BlYyA9IFsyLCAyLCAyXTtcblx0XHR0aGlzLl9mb3JtRmllbGQgPSBmb3JtRmllbGQ7XG5cdFx0dGhpcy5mb2N1c2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG5cdFx0dGhpcy5uZ0NvbnRyb2wgPSBjb250cm9sO1xuXHRcdGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG5cdFx0XHR0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcblx0XHR9XG5cblx0XHR0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCB0cnVlKS5zdWJzY3JpYmUob3JpZ2luID0+IHtcblx0XHRcdGlmICh0aGlzLmZvY3VzZWQgJiYgIW9yaWdpbikge1xuXHRcdFx0XHR0aGlzLm9uVG91Y2hlZCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG5cdFx0XHR0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKiogQGlnbm9yZSAqLyBlcnJvclN0YXRlID0gZmFsc2U7XG5cdC8qKiBAaWdub3JlICovIGNvbnRyb2xUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHQvKiogQGlnbm9yZSAqLyBhdXRvZmlsbGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHQvKiogQGlnbm9yZSAqL1xuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuXHRcdHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKTtcblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pIHtcblx0XHRjb25zdCBjb250cm9sRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYnVpLWRpc2NyZXRlLWlucHV0LWNvbnRhaW5lcicpO1xuXHRcdGNvbnRyb2xFbGVtZW50IS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBpZHMuam9pbignICcpKTtcblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdG9uQ29udGFpbmVyQ2xpY2soKSB7XG5cdFx0Y29uc3QgbCA9IHRoaXMucGFydHMuY29udHJvbHMubGVuZ3RoO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJ0cy5jb250cm9sc1tpXS5pbnZhbGlkIHx8IGkgPT09IGwgLSAxKSB7XG5cdFx0XHRcdHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLmlucHV0UGFydHMuZ2V0KGkpISwgJ3Byb2dyYW0nKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0d3JpdGVWYWx1ZSh2OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnZhbHVlID0gdjtcblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuXHRcdHRoaXMub25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0c2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHQvKiogQGlnbm9yZSAqL1xuXHRfaGFuZGxlSW5wdXQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHRsZXQgdiA9IGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZVswXTtcblx0XHRjb25zdCByYXdWYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG5cdFx0aWYgKHJhd1ZhbHVlLmxlbmd0aCA+IDEpIHtcblx0XHRcdHRoaXMuX3JlcGxhY2VUZXh0KHJhd1ZhbHVlLCBldmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnRyb2wuc2V0VmFsdWUodik7XG5cdFx0Y29uc3QgbmV4dEVsZW1lbnQgPSB0aGlzLmlucHV0UGFydHMuZ2V0KGluZGV4ICsgMSk7XG5cdFx0aWYgKCFjb250cm9sLmVycm9ycyAmJiBuZXh0RWxlbWVudCkge1xuXHRcdFx0dGhpcy5fZm9jdXNQYXJ0KG5leHRFbGVtZW50KTtcblx0XHR9XG5cblx0XHR0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0X2hhbmRsZUJlZm9yZUlucHV0KGluZGV4OiBudW1iZXIsIGV2ZW50OiBJbnB1dEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgdiA9IGV2ZW50LmRhdGE7XG5cdFx0aWYgKHRoaXMuYWNjZXB0ICYmIHYgJiYgIW5ldyBSZWdFeHAoYFske3RoaXMuYWNjZXB0fV1gKS50ZXN0KHYpKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGlucCA9IHRoaXMuaW5wdXRQYXJ0cy5nZXQoaW5kZXgpIS5uYXRpdmVFbGVtZW50O1xuXHRcdGlmICh2ICYmIGlucC52YWx1ZSkge1xuXHRcdFx0aW5wLnZhbHVlID0gJyc7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0X2ZvY3VzUGFydChlbGVtUmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KSB7XG5cdFx0dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKGVsZW1SZWYsICdwcm9ncmFtJyk7XG5cdH1cblxuXHQvKiogQGlnbm9yZSAqL1xuXHRfY29uc3VtZUtleShldmVudDogRXZlbnQpIHtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0X2xlZnRBcnJvdyhpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpIHtcblx0XHR0aGlzLl9jb25zdW1lS2V5KGV2ZW50KTtcblx0XHRjb25zdCBwcmV2RWxlbWVudCA9IHRoaXMuaW5wdXRQYXJ0cy5nZXQoaW5kZXggLSAxKTtcblx0XHRpZiAocHJldkVsZW1lbnQpIHtcblx0XHRcdHRoaXMuX2ZvY3VzUGFydChwcmV2RWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0X3JpZ2h0QXJyb3coaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KSB7XG5cdFx0dGhpcy5fY29uc3VtZUtleShldmVudCk7XG5cdFx0Y29uc3QgbmV4dEVsZW1lbnQgPSB0aGlzLmlucHV0UGFydHMuZ2V0KGluZGV4ICsgMSk7XG5cdFx0aWYgKG5leHRFbGVtZW50KSB7XG5cdFx0XHR0aGlzLl9mb2N1c1BhcnQobmV4dEVsZW1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdF9oYW5kbGVCYWNrc3BhY2UoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3QgcHJldkVsZW1lbnQgPSBpbmRleCAmJiB0aGlzLmlucHV0UGFydHMuZ2V0KGluZGV4IC0gMSk7XG5cdFx0aWYgKCFjb250cm9sLnZhbHVlICYmIHByZXZFbGVtZW50KSB7XG5cdFx0XHR0aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEocHJldkVsZW1lbnQsICdwcm9ncmFtJyk7XG5cdFx0fSBlbHNlIGlmIChjb250cm9sLnZhbHVlKSB7XG5cdFx0XHRjb250cm9sLnNldFZhbHVlKCcnKTtcblx0XHRcdHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0X29uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG5cdFx0bGV0IHRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0Jyk7XG5cdFx0dGhpcy5fcmVwbGFjZVRleHQodGV4dCwgZXZlbnQpO1xuXHR9XG5cblx0LyoqIEBpZ25vcmUgKi9cblx0X3NlcGFyYXRvclJlcXVpcmVkKGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2VwYXJhdG9yUG9zLmluY2x1ZGVzKGluZGV4ICsgMSk7XG5cdH1cblxuXHQvKiogQGlnbm9yZSAqL1xuXHRfcGxhY2Vob2xkZXJBdChpbmRleDogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyICYmIHRoaXMuX3BsYWNlaG9sZGVyW2luZGV4XTtcblx0fVxuXG5cdC8qKiBAaWdub3JlICovXG5cdG5nRG9DaGVjaygpIHtcblx0XHRpZiAodGhpcy5uZ0NvbnRyb2wpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhpcyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLCBiZWNhdXNlIHRoZXJlIGFyZSBzb21lXG5cdFx0XHQvLyBlcnJvciB0cmlnZ2VycyB0aGF0IHdlIGNhbid0IHN1YnNjcmliZSB0byAoZS5nLiBwYXJlbnQgZm9ybSBzdWJtaXNzaW9ucykuIFRoaXMgbWVhbnNcblx0XHRcdC8vIHRoYXQgd2hhdGV2ZXIgbG9naWMgaXMgaW4gaGVyZSBoYXMgdG8gYmUgc3VwZXIgbGVhbiBvciB3ZSByaXNrIGRlc3Ryb3lpbmcgdGhlIHBlcmZvcm1hbmNlLlxuXHRcdFx0dGhpcy51cGRhdGVFcnJvclN0YXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfcmVwbGFjZVRleHQodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBldmVudDogRXZlbnQpIHtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0aWYgKHRoaXMuYWNjZXB0KSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChgW14ke3RoaXMuYWNjZXB0fV1gLCAnZ2knKSwgJycpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy52YWx1ZSA9IHRleHQ7XG5cdFx0XHR0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuXHRcdH1cblxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0dGhpcy5vbkNvbnRhaW5lckNsaWNrKCk7XG5cdH1cbn1cbiIsIjxkaXZcblx0cm9sZT1cImdyb3VwXCJcblx0Y2xhc3M9XCJidWktZGlzY3JldGUtaW5wdXQtY29udGFpbmVyXCJcblx0W2Zvcm1Hcm91cF09XCJncm91cFwiXG5cdFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJfZm9ybUZpZWxkPy5nZXRMYWJlbElkKClcIlxuPlxuXHQ8bmctY29udGFpbmVyIFtmb3JtQXJyYXlOYW1lXT1cIidwYXJ0cydcIj5cblx0XHQ8bmctdGVtcGxhdGUgbmdGb3IgW25nRm9yT2ZdPVwicGFydHMuY29udHJvbHNcIiBsZXQtcCBsZXQtaT1cImluZGV4XCI+XG5cdFx0XHQ8aW5wdXRcblx0XHRcdFx0Y2xhc3M9XCJidWktZGlzY3JldGUtaW5wdXQtZWxlbWVudCBidWktb3V0bGluZS17eyBfY29sb3JTdWZmaXggfX1cIlxuXHRcdFx0XHRbZm9ybUNvbnRyb2xOYW1lXT1cImlcIlxuXHRcdFx0XHRbYXR0ci5hcmlhLWxhYmVsXT1cIidjaGFyYWN0ZXIgJyArIChpICsgMSlcIlxuXHRcdFx0XHQoaW5wdXQpPVwiX2hhbmRsZUlucHV0KHAsIGksICRldmVudClcIlxuXHRcdFx0XHQoYmVmb3JlaW5wdXQpPVwiX2hhbmRsZUJlZm9yZUlucHV0KGksICRldmVudClcIlxuXHRcdFx0XHQoa2V5ZG93bi5iYWNrc3BhY2UpPVwiX2hhbmRsZUJhY2tzcGFjZShwLCBpKVwiXG5cdFx0XHRcdChrZXlkb3duLmFycm93dXApPVwiX2NvbnN1bWVLZXkoJGV2ZW50KVwiXG5cdFx0XHRcdChrZXlkb3duLmFycm93ZG93bik9XCJfY29uc3VtZUtleSgkZXZlbnQpXCJcblx0XHRcdFx0KGtleWRvd24uYXJyb3dsZWZ0KT1cIl9sZWZ0QXJyb3coaSwgJGV2ZW50KVwiXG5cdFx0XHRcdChrZXlkb3duLmFycm93cmlnaHQpPVwiX3JpZ2h0QXJyb3coaSwgJGV2ZW50KVwiXG5cdFx0XHRcdFthdHRyLnBsYWNlaG9sZGVyXT1cIl9wbGFjZWhvbGRlckF0KGkpXCJcblx0XHRcdFx0I3BhcnRcblx0XHRcdFx0KGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG5cdFx0XHRcdChwYXN0ZSk9XCJfb25QYXN0ZSgkZXZlbnQpXCJcblx0XHRcdFx0W3R5cGVdPVwiWyd0ZXh0JywgJ251bWJlcicsICdwYXNzd29yZCddLmluY2x1ZGVzKHR5cGUpID8gdHlwZSA6ICd0ZXh0J1wiXG5cdFx0XHRcdFthdHRyLmlucHV0bW9kZV09XCJ0eXBlID09PSAnbnVtYmVyJyA/ICdkZWNpbWFsJyA6IHVuZGVmaW5lZFwiXG5cdFx0XHRcdGF1dG9jYXBpdGFsaXplPVwibm9uZVwiXG5cdFx0XHQvPlxuXHRcdFx0PHNwYW4gKm5nSWY9XCJfc2VwYXJhdG9yUmVxdWlyZWQoaSlcIiBjbGFzcz1cImJ1aS1kaXNjcmV0ZS1pbnB1dC1zcGFjZXJcIj57eyBzZXBhcmF0b3IgfX08L3NwYW4+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0PC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
|