@festo-ui/angular 5.1.0 → 6.0.0-dev.198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/{esm2020 → esm2022}/lib/components/accordion/accordion-header/accordion-header.component.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/components/accordion/accordion-item/accordion-item-body/accordion-item-body.component.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/accordion/accordion-item/accordion-item-header/accordion-item-header.component.mjs +4 -4
  4. package/esm2022/lib/components/accordion/accordion-item/accordion-item.component.mjs +148 -0
  5. package/esm2022/lib/components/accordion/accordion.component.mjs +59 -0
  6. package/{esm2020 → esm2022}/lib/components/breadcrumb/breadcrumb.component.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/components/buttons/button/button.component.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/components/buttons/link-button/link-button.component.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/components/chips/chip/chip.component.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/components/chips/chip-container/chip-container.component.mjs +4 -4
  11. package/esm2022/lib/components/components.module.mjs +207 -0
  12. package/{esm2020 → esm2022}/lib/components/loading-indicator/loading-indicator.component.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.mjs +6 -6
  14. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/components/pagination/pagination.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/popovers/legend/legend.component.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/components/popovers/legend/legend.directive.mjs +5 -5
  19. package/{esm2020 → esm2022}/lib/components/popovers/popover/popover.component.mjs +5 -5
  20. package/{esm2020 → esm2022}/lib/components/popovers/popover-content/popover-content.component.mjs +5 -5
  21. package/{esm2020 → esm2022}/lib/components/popovers/popover-content/popover-content.directive.mjs +5 -5
  22. package/{esm2020 → esm2022}/lib/components/popovers/popover-menu/popover-menu.component.mjs +5 -5
  23. package/{esm2020 → esm2022}/lib/components/popovers/popover.service.mjs +5 -5
  24. package/{esm2020 → esm2022}/lib/components/popovers/tooltip/tooltip.directive.mjs +5 -5
  25. package/{esm2020 → esm2022}/lib/components/progress/progress.component.mjs +4 -4
  26. package/{esm2020 → esm2022}/lib/components/scroll/scrollable.directive.mjs +5 -5
  27. package/{esm2020 → esm2022}/lib/components/search-input/search-input.component.mjs +4 -4
  28. package/esm2022/lib/components/sidebar-overlay/sidebar-overlay.component.mjs +59 -0
  29. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar-container.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar-container.directive.mjs +5 -5
  31. package/esm2022/lib/components/snackbar/snackbar.component.mjs +81 -0
  32. package/esm2022/lib/components/snackbar/snackbar.module.mjs +24 -0
  33. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar.service.mjs +5 -5
  34. package/{esm2020 → esm2022}/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/components/stepper-horizontal/stepper-horizontal.component.mjs +4 -4
  36. package/{esm2020 → esm2022}/lib/components/stepper-vertical/step-vertical/step-vertical.component.mjs +4 -4
  37. package/{esm2020 → esm2022}/lib/components/stepper-vertical/stepper-vertical.component.mjs +4 -4
  38. package/{esm2020 → esm2022}/lib/components/table-header-cell/table-header-cell.directive.mjs +4 -4
  39. package/esm2022/lib/components/tabs/tab-pane/tab-pane.component.mjs +34 -0
  40. package/esm2022/lib/components/tabs/tabs.component.mjs +459 -0
  41. package/{esm2020 → esm2022}/lib/directives/click-outside.directive.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/festo-angular.module.mjs +5 -5
  43. package/esm2022/lib/forms/checkbox/checkbox.component.mjs +154 -0
  44. package/{esm2020 → esm2022}/lib/forms/color-indicator/color-indicator.component.mjs +4 -4
  45. package/esm2022/lib/forms/color-picker/color-picker.component.mjs +292 -0
  46. package/{esm2020 → esm2022}/lib/forms/date-picker/date-picker.component.mjs +12 -12
  47. package/{esm2020 → esm2022}/lib/forms/date-range-picker/date-range-picker.component.mjs +12 -12
  48. package/{esm2020 → esm2022}/lib/forms/flatpickr/flatpickr.component.mjs +4 -4
  49. package/{esm2020 → esm2022}/lib/forms/forms.module.mjs +62 -62
  50. package/esm2022/lib/forms/radio/radio.component.mjs +350 -0
  51. package/{esm2020 → esm2022}/lib/forms/segment/segment-control/segment-control.component.mjs +4 -4
  52. package/{esm2020 → esm2022}/lib/forms/segment/segment.component.mjs +11 -11
  53. package/{esm2020 → esm2022}/lib/forms/select/chip-text.pipe.mjs +4 -4
  54. package/{esm2020 → esm2022}/lib/forms/select/select-option/select-option.component.mjs +4 -4
  55. package/esm2022/lib/forms/select/select.component.mjs +275 -0
  56. package/esm2022/lib/forms/slider/slider.component.mjs +113 -0
  57. package/esm2022/lib/forms/switch/switch.component.mjs +121 -0
  58. package/esm2022/lib/forms/text-area/text-area.component.mjs +187 -0
  59. package/esm2022/lib/forms/text-editor/text-editor.component.mjs +308 -0
  60. package/esm2022/lib/forms/text-input/text-input.component.mjs +208 -0
  61. package/{esm2020 → esm2022}/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/lib/forms/time-picker/time-picker.component.mjs +11 -11
  63. package/{esm2020 → esm2022}/lib/forms/unique-selection-dispatcher.mjs +4 -4
  64. package/{esm2020 → esm2022}/lib/forms/value-accessor-base.mjs +4 -4
  65. package/{esm2020 → esm2022}/lib/modals/alert/alert.component.mjs +4 -4
  66. package/{esm2020 → esm2022}/lib/modals/confirm/confirm.component.mjs +5 -5
  67. package/{esm2020 → esm2022}/lib/modals/custom-modal/custom-modal.component.mjs +4 -4
  68. package/{esm2020 → esm2022}/lib/modals/image-gallery/image-gallery.component.mjs +5 -5
  69. package/{esm2020 → esm2022}/lib/modals/modal.service.mjs +5 -5
  70. package/{esm2020 → esm2022}/lib/modals/modals.module.mjs +5 -5
  71. package/{esm2020 → esm2022}/lib/modals/prompt/prompt.component.mjs +5 -5
  72. package/{esm2020 → esm2022}/lib/pipes/safe-html.pipe.mjs +5 -5
  73. package/{fesm2020 → fesm2022}/festo-ui-angular.mjs +512 -520
  74. package/{fesm2020 → fesm2022}/festo-ui-angular.mjs.map +1 -1
  75. package/lib/components/accordion/accordion.component.d.ts +1 -1
  76. package/lib/components/breadcrumb/breadcrumb.component.d.ts +1 -1
  77. package/lib/components/buttons/button/button.component.d.ts +1 -1
  78. package/lib/components/buttons/link-button/link-button.component.d.ts +1 -1
  79. package/lib/components/chips/chip/chip.component.d.ts +1 -1
  80. package/lib/components/chips/chip-container/chip-container.component.d.ts +1 -1
  81. package/lib/components/loading-indicator/loading-indicator.component.d.ts +1 -1
  82. package/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.d.ts +1 -1
  83. package/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.d.ts +1 -1
  84. package/lib/components/pagination/pagination.component.d.ts +1 -1
  85. package/lib/components/popovers/legend/legend.component.d.ts +1 -1
  86. package/lib/components/popovers/popover-content/popover-content.component.d.ts +1 -1
  87. package/lib/components/popovers/popover-menu/popover-menu.component.d.ts +1 -1
  88. package/lib/components/popovers/tooltip/tooltip.directive.d.ts +1 -1
  89. package/lib/components/progress/progress.component.d.ts +1 -1
  90. package/lib/components/scroll/scrollable.directive.d.ts +1 -1
  91. package/lib/components/search-input/search-input.component.d.ts +1 -1
  92. package/lib/components/sidebar-overlay/sidebar-overlay.component.d.ts +1 -1
  93. package/lib/components/snackbar/snackbar-container.component.d.ts +1 -1
  94. package/lib/components/snackbar/snackbar-container.directive.d.ts +1 -1
  95. package/lib/components/snackbar/snackbar.component.d.ts +1 -1
  96. package/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.d.ts +1 -1
  97. package/lib/components/stepper-horizontal/stepper-horizontal.component.d.ts +1 -1
  98. package/lib/components/stepper-vertical/step-vertical/step-vertical.component.d.ts +1 -1
  99. package/lib/components/stepper-vertical/stepper-vertical.component.d.ts +1 -1
  100. package/lib/components/table-header-cell/table-header-cell.directive.d.ts +1 -1
  101. package/lib/components/tabs/tab-pane/tab-pane.component.d.ts +1 -1
  102. package/lib/components/tabs/tabs.component.d.ts +1 -1
  103. package/lib/forms/checkbox/checkbox.component.d.ts +1 -1
  104. package/lib/forms/color-indicator/color-indicator.component.d.ts +1 -1
  105. package/lib/forms/color-picker/color-picker.component.d.ts +1 -1
  106. package/lib/forms/date-picker/date-picker.component.d.ts +1 -1
  107. package/lib/forms/date-range-picker/date-range-picker.component.d.ts +1 -1
  108. package/lib/forms/flatpickr/flatpickr.component.d.ts +1 -1
  109. package/lib/forms/radio/radio.component.d.ts +6 -6
  110. package/lib/forms/segment/segment-control/segment-control.component.d.ts +1 -1
  111. package/lib/forms/segment/segment.component.d.ts +1 -1
  112. package/lib/forms/select/select-option/select-option.component.d.ts +1 -1
  113. package/lib/forms/select/select.component.d.ts +6 -5
  114. package/lib/forms/slider/slider.component.d.ts +1 -1
  115. package/lib/forms/switch/switch.component.d.ts +1 -1
  116. package/lib/forms/text-area/text-area.component.d.ts +1 -1
  117. package/lib/forms/text-editor/text-editor.component.d.ts +1 -1
  118. package/lib/forms/text-input/text-input.component.d.ts +1 -1
  119. package/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.d.ts +1 -1
  120. package/lib/forms/time-picker/time-picker.component.d.ts +1 -1
  121. package/lib/forms/value-accessor-base.d.ts +1 -1
  122. package/lib/modals/alert/alert.component.d.ts +1 -1
  123. package/lib/modals/confirm/confirm.component.d.ts +1 -1
  124. package/lib/modals/custom-modal/custom-modal.component.d.ts +1 -1
  125. package/lib/modals/image-gallery/image-gallery.component.d.ts +1 -1
  126. package/lib/modals/prompt/prompt.component.d.ts +1 -1
  127. package/package.json +17 -23
  128. package/esm2020/lib/components/accordion/accordion-item/accordion-item.component.mjs +0 -148
  129. package/esm2020/lib/components/accordion/accordion.component.mjs +0 -59
  130. package/esm2020/lib/components/components.module.mjs +0 -218
  131. package/esm2020/lib/components/sidebar-overlay/sidebar-overlay.component.mjs +0 -59
  132. package/esm2020/lib/components/snackbar/snackbar.component.mjs +0 -81
  133. package/esm2020/lib/components/snackbar/snackbar.module.mjs +0 -24
  134. package/esm2020/lib/components/tabs/tab-pane/tab-pane.component.mjs +0 -34
  135. package/esm2020/lib/components/tabs/tabs.component.mjs +0 -459
  136. package/esm2020/lib/forms/checkbox/checkbox.component.mjs +0 -154
  137. package/esm2020/lib/forms/color-picker/color-picker.component.mjs +0 -292
  138. package/esm2020/lib/forms/radio/radio.component.mjs +0 -350
  139. package/esm2020/lib/forms/select/select.component.mjs +0 -273
  140. package/esm2020/lib/forms/slider/slider.component.mjs +0 -113
  141. package/esm2020/lib/forms/switch/switch.component.mjs +0 -121
  142. package/esm2020/lib/forms/text-area/text-area.component.mjs +0 -187
  143. package/esm2020/lib/forms/text-editor/text-editor.component.mjs +0 -308
  144. package/esm2020/lib/forms/text-input/text-input.component.mjs +0 -208
  145. package/fesm2015/festo-ui-angular.mjs +0 -6504
  146. package/fesm2015/festo-ui-angular.mjs.map +0 -1
  147. /package/{esm2020 → esm2022}/festo-ui-angular.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/components/accordion/index.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/components/popovers/popover-ref.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/components/popovers/popover.defaults.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/components/popovers/popover.models.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/components/scroll/index.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/components/snackbar/snackbar.models.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/forms/color-picker/color-helper.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/modals/index.mjs +0 -0
  156. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,154 +0,0 @@
1
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { CommonModule } from '@angular/common';
3
- import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewEncapsulation, forwardRef } from '@angular/core';
4
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- let nextUniqueId = 0;
8
- export class FngCheckboxComponent {
9
- get id() {
10
- return this.innerId;
11
- }
12
- set id(value) {
13
- this.innerId = value ? `${value}-${++nextUniqueId}` : `fng-checkbox-${++nextUniqueId}`;
14
- }
15
- get inputId() {
16
- return `${this.innerId}-input`;
17
- }
18
- get checked() {
19
- return this.isChecked;
20
- }
21
- set checked(value) {
22
- if (value !== this.checked) {
23
- this.isChecked = value;
24
- this.changeDetector.markForCheck();
25
- }
26
- }
27
- get disabled() {
28
- return this.isDisabled;
29
- }
30
- set disabled(value) {
31
- const newValue = coerceBooleanProperty(value);
32
- if (newValue !== this.disabled) {
33
- this.isDisabled = newValue;
34
- this.changeDetector.markForCheck();
35
- }
36
- }
37
- get indeterminate() {
38
- return this.isIndeterminate;
39
- }
40
- set indeterminate(value) {
41
- const changed = value !== this.isIndeterminate;
42
- this.isIndeterminate = coerceBooleanProperty(value);
43
- if (changed) {
44
- this.indeterminateChange.emit(this.isIndeterminate);
45
- }
46
- this.changeDetector.markForCheck();
47
- }
48
- get required() {
49
- return this.isRequired;
50
- }
51
- set required(value) {
52
- this.isRequired = coerceBooleanProperty(value);
53
- }
54
- constructor(changeDetector) {
55
- this.changeDetector = changeDetector;
56
- this.name = '';
57
- this.large = false;
58
- this.valid = true;
59
- this.labelPosition = 'after';
60
- this.innerId = `fng-checkbox-${++nextUniqueId}`;
61
- this.isChecked = false;
62
- this.isDisabled = false;
63
- this.isIndeterminate = false;
64
- this.value = 'false';
65
- this.isRequired = false;
66
- this.indeterminateChange = new EventEmitter();
67
- this.change = new EventEmitter();
68
- this.controlValueAccessorChangeFn = () => null;
69
- this.onTouched = () => null;
70
- }
71
- writeValue(value) {
72
- this.checked = !!value;
73
- }
74
- registerOnChange(fn) {
75
- this.controlValueAccessorChangeFn = fn;
76
- }
77
- registerOnTouched(fn) {
78
- this.onTouched = fn;
79
- }
80
- setDisabledState(isDisabled) {
81
- this.disabled = isDisabled;
82
- }
83
- onInteractionEvent(event) {
84
- event.stopPropagation();
85
- }
86
- onInputClick(event) {
87
- event.stopPropagation();
88
- if (!this.disabled) {
89
- if (this.indeterminate) {
90
- Promise.resolve().then(() => {
91
- this.isIndeterminate = false;
92
- this.indeterminateChange.emit(this.isIndeterminate);
93
- });
94
- }
95
- if (!this.valid) {
96
- this.valid = true;
97
- }
98
- if (this.required) {
99
- this.required = false;
100
- }
101
- this.checked = !this.checked;
102
- if (this.controlValueAccessorChangeFn != null) {
103
- this.controlValueAccessorChangeFn(this.checked);
104
- }
105
- if (this.onTouched != null) {
106
- this.onTouched();
107
- }
108
- this.change.emit(this.checked);
109
- }
110
- }
111
- }
112
- FngCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
113
- FngCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: FngCheckboxComponent, isStandalone: true, selector: "fng-checkbox", inputs: { name: "name", large: "large", valid: "valid", labelPosition: "labelPosition", id: "id", checked: "checked", disabled: "disabled", indeterminate: "indeterminate", value: "value", required: "required" }, outputs: { indeterminateChange: "indeterminateChange", change: "change" }, providers: [
114
- {
115
- provide: NG_VALUE_ACCESSOR,
116
- useExisting: forwardRef(() => FngCheckboxComponent),
117
- multi: true
118
- }
119
- ], ngImport: i0, template: "<label\n class=\"fwe-checkbox-container\"\n [class.fng-checkbox-large]=\"large\"\n [class.fng-checkbox-invalid]=\"!valid || required\"\n [class.fwe-disabled]=\"disabled\"\n [class.fng-checkbox-indeterminate]=\"indeterminate\"\n [class.fwe-checked]=\"checked\"\n [attr.for]=\"inputId\"\n [ngClass]=\"{\n 'fwe-label-below': labelPosition == 'below',\n 'fwe-label-before': labelPosition == 'before'\n }\"\n>\n <input\n type=\"checkbox\"\n [id]=\"inputId\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.value]=\"value\"\n [attr.name]=\"name\"\n [checked]=\"checked\"\n (change)=\"onInteractionEvent($event)\"\n (click)=\"onInputClick($event)\"\n />\n <div class=\"fwe-checkbox-indicator-container\">\n <div class=\"fwe-checkbox-indicator-background\"></div>\n <ng-container *ngIf=\"!indeterminate && checked\">\n <svg *ngIf=\"large\" width=\"24px\" height=\"24px\">\n <path d=\"M17.5 7L10 14.5 7.501 12l-1.5 1.501L10 17.5l9-9z\" fill=\"#fff\" />\n </svg>\n <svg *ngIf=\"!large\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n <path d=\"M6 12L3 9l1.25-1.25L6 9.5l5.75-5.75L13 5l-7 7z\" fill=\"#fff\" />\n </svg>\n </ng-container>\n <div *ngIf=\"indeterminate && !checked\" class=\"fwe-indeterminate-indicator\"></div>\n </div>\n <div class=\"fwe-checkbox-title\">\n <ng-content></ng-content>\n </div>\n</label>\n", styles: [".fwe-checkbox-container{font-family:var(--fwe-font-family-sans-serif);-webkit-user-select:none;user-select:none;cursor:pointer;display:flex;flex-direction:row;align-items:flex-start}.fwe-checkbox-container.fwe-label-below{align-items:center;flex-direction:column}.fwe-checkbox-container.fwe-label-below .fwe-checkbox-title{text-align:center;margin:8px 0 0}.fwe-checkbox-container.fwe-label-before{flex-direction:row-reverse;justify-content:flex-end}.fwe-checkbox-container.fwe-label-before .fwe-checkbox-title{margin:0 8px 0 0}.fwe-checkbox-container .fwe-checkbox-indicator-container{margin-top:4px;position:relative}.fwe-checkbox-container input{opacity:0;cursor:pointer;height:0;width:0}.fwe-checkbox-container .fwe-checkbox-title{margin-left:8px;line-height:24px;color:var(--fwe-text);-webkit-user-select:none;user-select:none}.fwe-checkbox-container .fwe-checkbox-indicator-background{box-sizing:border-box;background:var(--fwe-white);border:1px solid var(--fwe-text-light);border-radius:2px;height:16px;width:16px;transition:border-width .2s ease-out}.fwe-checkbox-container .fwe-indeterminate-indicator{position:absolute;height:2px;width:10px;top:7px;left:3px;background:white}.fwe-checkbox-container svg{display:block;position:absolute;top:0;left:0}.fwe-checkbox-container.fng-checkbox-large .fwe-checkbox-indicator-container{margin-top:0}.fwe-checkbox-container.fng-checkbox-large .fwe-checkbox-indicator-background{height:24px;width:24px;border-radius:4px}.fwe-checkbox-container.fng-checkbox-large .fwe-indeterminate-indicator{top:11px;width:14px;left:5px}.fwe-checkbox-container.fng-checkbox-large.fwe-checked .fwe-checkbox-indicator-background,.fwe-checkbox-container.fng-checkbox-large.fng-checkbox-indeterminate .fwe-checkbox-indicator-background{border:12px solid var(--fwe-hero)}.fwe-checkbox-container:hover .fwe-checkbox-indicator-background{background-color:var(--fwe-control)}.fwe-checkbox-container:active .fwe-checkbox-indicator-background{background-color:var(--fwe-control-dark)}.fwe-checkbox-container.fwe-checked .fwe-checkbox-indicator-background,.fwe-checkbox-container.fng-checkbox-indeterminate .fwe-checkbox-indicator-background{border:8px solid var(--fwe-hero)}.fwe-checkbox-container.fwe-checked:hover .fwe-checkbox-indicator-background,.fwe-checkbox-container.fng-checkbox-indeterminate:hover .fwe-checkbox-indicator-background{border-color:var(--fwe-hero-dark)}.fwe-checkbox-container.fwe-checked:active .fwe-checkbox-indicator-background,.fwe-checkbox-container.fng-checkbox-indeterminate:active .fwe-checkbox-indicator-background{border-color:var(--fwe-hero-darker)}.fwe-checkbox-container.fng-checkbox-invalid .fwe-checkbox-indicator-background{border:1px solid var(--fwe-red);background:var(--fwe-white)}.fwe-checkbox-container.fwe-disabled{cursor:default}.fwe-checkbox-container.fwe-disabled .fwe-checkbox-indicator-background{background-color:var(--fwe-white);border:1px solid var(--fwe-control)}.fwe-checkbox-container.fwe-disabled.fwe-checked .fwe-checkbox-indicator-background,.fwe-checkbox-container.fwe-disabled.fng-checkbox-indeterminate .fwe-checkbox-indicator-background{background-color:var(--fwe-control);border:1px solid var(--fwe-control)}.fwe-checkbox-container.fwe-disabled.fng-checkbox-invalid .fwe-checkbox-indicator-background{background-color:var(--fwe-white);border:1px solid var(--fwe-control)}.fwe-checkbox-container.fwe-disabled .fwe-checkbox-title{color:var(--fwe-text-disabled)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngCheckboxComponent, decorators: [{
121
- type: Component,
122
- args: [{ standalone: true, imports: [CommonModule], selector: 'fng-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
123
- {
124
- provide: NG_VALUE_ACCESSOR,
125
- useExisting: forwardRef(() => FngCheckboxComponent),
126
- multi: true
127
- }
128
- ], template: "<label\n class=\"fwe-checkbox-container\"\n [class.fng-checkbox-large]=\"large\"\n [class.fng-checkbox-invalid]=\"!valid || required\"\n [class.fwe-disabled]=\"disabled\"\n [class.fng-checkbox-indeterminate]=\"indeterminate\"\n [class.fwe-checked]=\"checked\"\n [attr.for]=\"inputId\"\n [ngClass]=\"{\n 'fwe-label-below': labelPosition == 'below',\n 'fwe-label-before': labelPosition == 'before'\n }\"\n>\n <input\n type=\"checkbox\"\n [id]=\"inputId\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.value]=\"value\"\n [attr.name]=\"name\"\n [checked]=\"checked\"\n (change)=\"onInteractionEvent($event)\"\n (click)=\"onInputClick($event)\"\n />\n <div class=\"fwe-checkbox-indicator-container\">\n <div class=\"fwe-checkbox-indicator-background\"></div>\n <ng-container *ngIf=\"!indeterminate && checked\">\n <svg *ngIf=\"large\" width=\"24px\" height=\"24px\">\n <path d=\"M17.5 7L10 14.5 7.501 12l-1.5 1.501L10 17.5l9-9z\" fill=\"#fff\" />\n </svg>\n <svg *ngIf=\"!large\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n <path d=\"M6 12L3 9l1.25-1.25L6 9.5l5.75-5.75L13 5l-7 7z\" fill=\"#fff\" />\n </svg>\n </ng-container>\n <div *ngIf=\"indeterminate && !checked\" class=\"fwe-indeterminate-indicator\"></div>\n </div>\n <div class=\"fwe-checkbox-title\">\n <ng-content></ng-content>\n </div>\n</label>\n", styles: [".fwe-checkbox-container{font-family:var(--fwe-font-family-sans-serif);-webkit-user-select:none;user-select:none;cursor:pointer;display:flex;flex-direction:row;align-items:flex-start}.fwe-checkbox-container.fwe-label-below{align-items:center;flex-direction:column}.fwe-checkbox-container.fwe-label-below .fwe-checkbox-title{text-align:center;margin:8px 0 0}.fwe-checkbox-container.fwe-label-before{flex-direction:row-reverse;justify-content:flex-end}.fwe-checkbox-container.fwe-label-before .fwe-checkbox-title{margin:0 8px 0 0}.fwe-checkbox-container .fwe-checkbox-indicator-container{margin-top:4px;position:relative}.fwe-checkbox-container input{opacity:0;cursor:pointer;height:0;width:0}.fwe-checkbox-container .fwe-checkbox-title{margin-left:8px;line-height:24px;color:var(--fwe-text);-webkit-user-select:none;user-select:none}.fwe-checkbox-container .fwe-checkbox-indicator-background{box-sizing:border-box;background:var(--fwe-white);border:1px solid var(--fwe-text-light);border-radius:2px;height:16px;width:16px;transition:border-width .2s ease-out}.fwe-checkbox-container .fwe-indeterminate-indicator{position:absolute;height:2px;width:10px;top:7px;left:3px;background:white}.fwe-checkbox-container svg{display:block;position:absolute;top:0;left:0}.fwe-checkbox-container.fng-checkbox-large .fwe-checkbox-indicator-container{margin-top:0}.fwe-checkbox-container.fng-checkbox-large .fwe-checkbox-indicator-background{height:24px;width:24px;border-radius:4px}.fwe-checkbox-container.fng-checkbox-large .fwe-indeterminate-indicator{top:11px;width:14px;left:5px}.fwe-checkbox-container.fng-checkbox-large.fwe-checked .fwe-checkbox-indicator-background,.fwe-checkbox-container.fng-checkbox-large.fng-checkbox-indeterminate .fwe-checkbox-indicator-background{border:12px solid var(--fwe-hero)}.fwe-checkbox-container:hover .fwe-checkbox-indicator-background{background-color:var(--fwe-control)}.fwe-checkbox-container:active .fwe-checkbox-indicator-background{background-color:var(--fwe-control-dark)}.fwe-checkbox-container.fwe-checked .fwe-checkbox-indicator-background,.fwe-checkbox-container.fng-checkbox-indeterminate .fwe-checkbox-indicator-background{border:8px solid var(--fwe-hero)}.fwe-checkbox-container.fwe-checked:hover .fwe-checkbox-indicator-background,.fwe-checkbox-container.fng-checkbox-indeterminate:hover .fwe-checkbox-indicator-background{border-color:var(--fwe-hero-dark)}.fwe-checkbox-container.fwe-checked:active .fwe-checkbox-indicator-background,.fwe-checkbox-container.fng-checkbox-indeterminate:active .fwe-checkbox-indicator-background{border-color:var(--fwe-hero-darker)}.fwe-checkbox-container.fng-checkbox-invalid .fwe-checkbox-indicator-background{border:1px solid var(--fwe-red);background:var(--fwe-white)}.fwe-checkbox-container.fwe-disabled{cursor:default}.fwe-checkbox-container.fwe-disabled .fwe-checkbox-indicator-background{background-color:var(--fwe-white);border:1px solid var(--fwe-control)}.fwe-checkbox-container.fwe-disabled.fwe-checked .fwe-checkbox-indicator-background,.fwe-checkbox-container.fwe-disabled.fng-checkbox-indeterminate .fwe-checkbox-indicator-background{background-color:var(--fwe-control);border:1px solid var(--fwe-control)}.fwe-checkbox-container.fwe-disabled.fng-checkbox-invalid .fwe-checkbox-indicator-background{background-color:var(--fwe-white);border:1px solid var(--fwe-control)}.fwe-checkbox-container.fwe-disabled .fwe-checkbox-title{color:var(--fwe-text-disabled)}\n"] }]
129
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { name: [{
130
- type: Input
131
- }], large: [{
132
- type: Input
133
- }], valid: [{
134
- type: Input
135
- }], labelPosition: [{
136
- type: Input
137
- }], id: [{
138
- type: Input
139
- }], checked: [{
140
- type: Input
141
- }], disabled: [{
142
- type: Input
143
- }], indeterminate: [{
144
- type: Input
145
- }], value: [{
146
- type: Input
147
- }], required: [{
148
- type: Input
149
- }], indeterminateChange: [{
150
- type: Output
151
- }], change: [{
152
- type: Output
153
- }] } });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGliL2Zvcm1zL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7OztBQUV6RSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFrQnJCLE1BQU0sT0FBTyxvQkFBb0I7SUFPL0IsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUNJLEVBQUUsQ0FBQyxLQUFhO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUN6RixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJ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V0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7d0dBR1EsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFPRixFQUFFO3NCQURMLEtBQUs7Z0JBVUYsT0FBTztzQkFEVixLQUFLO2dCQWFGLFFBQVE7c0JBRFgsS0FBSztnQkFjRixhQUFhO3NCQURoQixLQUFLO2dCQWNHLEtBQUs7c0JBQWIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBU2EsbUJBQW1CO3NCQUFyQyxNQUFNO2dCQUNZLE1BQU07c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGZvcndhcmRSZWYsXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBzZWxlY3RvcjogJ2ZuZy1jaGVja2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZuZ0NoZWNrYm94Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZuZ0NoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbGFyZ2UgPSBmYWxzZTtcbiAgQElucHV0KCkgdmFsaWQgPSB0cnVlO1xuICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgfCAnYmVsb3cnID0gJ2FmdGVyJztcblxuICBwcml2YXRlIGlubmVySWQgPSBgZm5nLWNoZWNrYm94LSR7KytuZXh0VW5pcXVlSWR9YDtcbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJJZDtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaW5uZXJJZCA9IHZhbHVlID8gYCR7dmFsdWV9LSR7KytuZXh0VW5pcXVlSWR9YCA6IGBmbmctY2hlY2tib3gtJHsrK25leHRVbmlxdWVJZH1gO1xuICB9XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pbm5lcklkfS1pbnB1dGA7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0NoZWNrZWQ7XG4gIH1cbiAgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuY2hlY2tlZCkge1xuICAgICAgdGhpcy5pc0NoZWNrZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNDaGVja2VkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzRGlzYWJsZWQgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzSW5kZXRlcm1pbmF0ZTtcbiAgfVxuICBzZXQgaW5kZXRlcm1pbmF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB2YWx1ZSAhPT0gdGhpcy5pc0luZGV0ZXJtaW5hdGU7XG4gICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLmlzSW5kZXRlcm1pbmF0ZSk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgcHJpdmF0ZSBpc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nID0gJ2ZhbHNlJztcblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZDtcbiAgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzUmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBpbmRldGVybWluYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBjb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IG51bGw7XG5cbiAgb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiBudWxsO1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuY2hlY2tlZCA9ICEhdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuICAgIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG9uSW50ZXJhY3Rpb25FdmVudChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIG9uSW5wdXRDbGljayhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuaXNJbmRldGVybWluYXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsaWQpIHtcbiAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgaWYgKHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbiAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub25Ub3VjaGVkICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5jaGVja2VkKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsYWJlbFxuICBjbGFzcz1cImZ3ZS1jaGVja2JveC1jb250YWluZXJcIlxuICBbY2xhc3MuZm5nLWNoZWNrYm94LWxhcmdlXT1cImxhcmdlXCJcbiAgW2NsYXNzLmZuZy1jaGVja2JveC1pbnZhbGlkXT1cIiF2YWxpZCB8fCByZXF1aXJlZFwiXG4gIFtjbGFzcy5md2UtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbY2xhc3MuZm5nLWNoZWNrYm94LWluZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVwiXG4gIFtjbGFzcy5md2UtY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgW2F0dHIuZm9yXT1cImlucHV0SWRcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ2Z3ZS1sYWJlbC1iZWxvdyc6IGxhYmVsUG9zaXRpb24gPT0gJ2JlbG93JyxcbiAgICAnZndlLWxhYmVsLWJlZm9yZSc6IGxhYmVsUG9zaXRpb24gPT0gJ2JlZm9yZSdcbiAgfVwiXG4+XG4gIDxpbnB1dFxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgW2lkXT1cImlucHV0SWRcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci52YWx1ZV09XCJ2YWx1ZVwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICAoY2hhbmdlKT1cIm9uSW50ZXJhY3Rpb25FdmVudCgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwib25JbnB1dENsaWNrKCRldmVudClcIlxuICAvPlxuICA8ZGl2IGNsYXNzPVwiZndlLWNoZWNrYm94LWluZGljYXRvci1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZndlLWNoZWNrYm94LWluZGljYXRvci1iYWNrZ3JvdW5kXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmRldGVybWluYXRlICYmIGNoZWNrZWRcIj5cbiAgICAgIDxzdmcgKm5nSWY9XCJsYXJnZVwiIHdpZHRoPVwiMjRweFwiIGhlaWdodD1cIjI0cHhcIj5cbiAgICAgICAgPHBhdGggZD1cIk0xNy41IDdMMTAgMTQuNSA3LjUwMSAxMmwtMS41IDEuNTAxTDEwIDE3LjVsOS05elwiIGZpbGw9XCIjZmZmXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPHN2ZyAqbmdJZj1cIiFsYXJnZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIj5cbiAgICAgICAgPHBhdGggZD1cIk02IDEyTDMgOWwxLjI1LTEuMjVMNiA5LjVsNS43NS01Ljc1TDEzIDVsLTcgN3pcIiBmaWxsPVwiI2ZmZlwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5kZXRlcm1pbmF0ZSAmJiAhY2hlY2tlZFwiIGNsYXNzPVwiZndlLWluZGV0ZXJtaW5hdGUtaW5kaWNhdG9yXCI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZndlLWNoZWNrYm94LXRpdGxlXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbGFiZWw+XG4iXX0=
@@ -1,292 +0,0 @@
1
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { DragDropModule } from '@angular/cdk/drag-drop';
3
- import { Component, forwardRef, Input, ViewEncapsulation, Output, EventEmitter } from '@angular/core';
4
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { ColorHelper } from './color-helper';
6
- import { CommonModule } from '@angular/common';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/cdk/drag-drop";
10
- import * as i3 from "@angular/forms";
11
- export const PREDEFINED_COLORS = [
12
- '#0091dc',
13
- '#333333',
14
- '#ffffff',
15
- '#f2f3f5',
16
- '#e5e8eb',
17
- '#d8dce1',
18
- '#b6bec6',
19
- '#80ca3d',
20
- '#ffd600',
21
- '#ff9600',
22
- '#d50000'
23
- ];
24
- /**
25
- * A custom form element to pick a color.
26
- */
27
- export class FngColorPickerComponent {
28
- constructor() {
29
- this.baseSize = 184;
30
- this.inputType = 'RGB';
31
- this.isSelectOpen = false;
32
- this.useAlpha = false;
33
- this.alphaChange = new EventEmitter();
34
- /**
35
- * an array with color strings representing the palette.
36
- * Example: ['#234567, '#AA00FF']
37
- * Pass null to hide palette.
38
- */
39
- this.palette = [];
40
- /**
41
- * hide the hue and gradient picker and shot the palette only.
42
- */
43
- this.paletteOnly = false;
44
- this.innerColor = null;
45
- this.innerDisabled = true;
46
- this.innerAlpha = 1;
47
- // input controls
48
- this.hexInputColor = '#ff0000';
49
- this.redInput = 255;
50
- this.greenInput = 0;
51
- this.blueInput = 0;
52
- this.alphaInput = 100;
53
- // HSV value
54
- this.hue = 0;
55
- this.saturation = 0;
56
- this.value = 0;
57
- // poitions of the knobs in px
58
- this.hueKnobOffset = 0;
59
- this.alphaKnobOffset = 0;
60
- this.saturationKnobOffset = 0;
61
- this.valueKnobOffset = 0;
62
- // callbacks for ControlValueAccessor
63
- this.onTouched = () => null;
64
- this.onChange = () => null;
65
- }
66
- get alpha() {
67
- return this.innerAlpha;
68
- }
69
- set alpha(value) {
70
- if (value <= 100 && value >= 0 && this.innerAlpha !== Math.round(value)) {
71
- this.innerAlpha = Math.round(value);
72
- this.alphaInput = this.innerAlpha;
73
- this.updateKnobs();
74
- }
75
- }
76
- /**
77
- * The current color
78
- */
79
- get color() {
80
- return this.innerColor;
81
- }
82
- set color(value) {
83
- if (value && this.isHexColor(value)) {
84
- this.innerColor = value.toUpperCase();
85
- }
86
- else {
87
- this.innerColor = null;
88
- }
89
- this.updateColorRgb(true);
90
- }
91
- get disabled() {
92
- return this.innerDisabled;
93
- }
94
- set disabled(value) {
95
- this.innerDisabled = coerceBooleanProperty(value);
96
- }
97
- ngOnChanges(changes) {
98
- const paletteChanged = changes['palette'];
99
- if (paletteChanged['currentValue'].length > 0 && paletteChanged['currentValue'].indexOf('FESTO_COLORS') !== -1) {
100
- this.palette = PREDEFINED_COLORS;
101
- }
102
- }
103
- // ControlValueAccessor
104
- writeValue(color) {
105
- if (this.isHexColor(color)) {
106
- this.innerColor = color.toUpperCase();
107
- }
108
- else {
109
- this.innerColor = null;
110
- }
111
- this.updateColorRgb(false);
112
- }
113
- registerOnChange(fn) {
114
- this.onChange = fn;
115
- }
116
- registerOnTouched(fn) {
117
- this.onTouched = fn;
118
- }
119
- setDisabledState(isDisabled) {
120
- this.innerDisabled = isDisabled;
121
- }
122
- // update method for changes of the rgb value
123
- updateColorRgb(emitChange) {
124
- const currentColor = this.innerColor || '#FFFFFF';
125
- this.updateInputs(currentColor);
126
- const rgb = ColorHelper.hexToRgb(currentColor);
127
- const hsv = ColorHelper.rgbToHsv(rgb);
128
- this.hue = hsv.h;
129
- this.saturation = hsv.s;
130
- this.value = hsv.v;
131
- this.updateKnobs();
132
- if (emitChange) {
133
- if (this.onChange != null) {
134
- this.onChange(this.innerColor);
135
- }
136
- if (this.onTouched != null) {
137
- this.onTouched();
138
- }
139
- }
140
- }
141
- // update method for changes of the hsv value
142
- updateColorHsv() {
143
- const rgb = ColorHelper.hsvToRgb({ h: this.hue, s: this.saturation, v: this.value });
144
- this.innerColor = ColorHelper.rgbToHex(rgb);
145
- this.updateInputs(this.innerColor);
146
- if (this.onChange != null) {
147
- this.onChange(this.innerColor);
148
- }
149
- if (this.onTouched != null) {
150
- this.onTouched();
151
- }
152
- }
153
- // event handler for inputs
154
- onHexBlur() {
155
- if (this.hexInputColor && this.isHexColor(this.hexInputColor)) {
156
- this.color = this.hexInputColor.toUpperCase();
157
- }
158
- else {
159
- this.hexInputColor = this.color;
160
- }
161
- }
162
- onHexInput() {
163
- if (this.hexInputColor && this.isHexColor(this.hexInputColor)) {
164
- this.color = this.hexInputColor.toUpperCase();
165
- }
166
- }
167
- onRgbBlur() {
168
- if (this.hexInputColor && this.isHexColor(this.hexInputColor)) {
169
- this.color = this.hexInputColor.toUpperCase();
170
- }
171
- else {
172
- this.hexInputColor = this.color;
173
- }
174
- }
175
- onRgbInput(value, channel) {
176
- if (value > 255 || value < 0) {
177
- this.updateInputs(this.innerColor);
178
- }
179
- else {
180
- const rgb = ColorHelper.hexToRgb(this.innerColor);
181
- rgb[channel] = value;
182
- this.innerColor = ColorHelper.rgbToHex(rgb);
183
- this.updateColorRgb(true);
184
- }
185
- }
186
- onAlphaInput(value) {
187
- if (value > 100 || value < 0) {
188
- this.alphaInput = this.innerAlpha;
189
- }
190
- else {
191
- this.alpha = value;
192
- this.alphaChange.emit(this.alpha);
193
- }
194
- }
195
- onGradientClick(event) {
196
- this.saturation = event.offsetX / this.baseSize;
197
- this.value = (this.baseSize - event.offsetY) / this.baseSize;
198
- this.updateColorHsv();
199
- this.updateKnobs();
200
- }
201
- onGradientDrag(event) {
202
- const position = event.source.getFreeDragPosition();
203
- this.saturation = Math.floor(position.x) / this.baseSize;
204
- this.value = (this.baseSize - position.y) / this.baseSize;
205
- this.updateColorHsv();
206
- }
207
- onHueClick(event) {
208
- this.hue = event.offsetY / this.baseSize;
209
- this.updateColorHsv();
210
- this.updateKnobs();
211
- }
212
- onAlphaClick(event) {
213
- this.alpha = 100 - Math.round((event.offsetY / this.baseSize) * 100);
214
- this.alphaChange.emit(this.alpha);
215
- }
216
- onHueDrag(event) {
217
- const position = event.source.getFreeDragPosition();
218
- this.hue = (position.y + this.baseSize + 14) / this.baseSize;
219
- this.updateColorHsv();
220
- }
221
- onAlphaDrag(event) {
222
- const position = event.source.getFreeDragPosition();
223
- this.innerAlpha = 100 - Math.round((position.y / this.baseSize) * 100);
224
- this.alphaInput = this.innerAlpha;
225
- this.alphaChange.emit(this.innerAlpha);
226
- }
227
- onRemoveColor() {
228
- if (this.useAlpha) {
229
- this.alpha = 0;
230
- this.alphaChange.emit(this.alpha);
231
- }
232
- else {
233
- this.color = null;
234
- }
235
- }
236
- isHexColor(value) {
237
- return /^#[0-9A-F]{6}$/i.test(value);
238
- }
239
- getSaturationGradient() {
240
- return 'linear-gradient(to right, white, hsl(' + this.hue * 360 + ', 100%, 50%) )';
241
- }
242
- updateInputs(hexColor) {
243
- this.hexInputColor = hexColor;
244
- const rgb = ColorHelper.hexToRgb(hexColor);
245
- this.redInput = rgb.r;
246
- this.greenInput = rgb.g;
247
- this.blueInput = rgb.b;
248
- }
249
- updateKnobs() {
250
- this.alphaKnobOffset = ((100 - this.alpha) / 100) * this.baseSize;
251
- this.hueKnobOffset = this.hue * this.baseSize - (this.baseSize + 14);
252
- this.saturationKnobOffset = this.saturation * this.baseSize;
253
- this.valueKnobOffset = (1 - this.value) * this.baseSize;
254
- }
255
- onChangeType(type) {
256
- this.inputType = type;
257
- this.isSelectOpen = false;
258
- }
259
- }
260
- FngColorPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
261
- FngColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: FngColorPickerComponent, isStandalone: true, selector: "fng-color-picker", inputs: { useAlpha: "useAlpha", alpha: "alpha", color: "color", disabled: "disabled", palette: "palette", paletteOnly: "paletteOnly" }, outputs: { alphaChange: "alphaChange" }, providers: [
262
- {
263
- provide: NG_VALUE_ACCESSOR,
264
- useExisting: forwardRef(() => FngColorPickerComponent),
265
- multi: true
266
- }
267
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"fwe-color-picker\" [class.fwe-alpha-active]=\"useAlpha\">\n <div class=\"fwe-d-flex\" *ngIf=\"!paletteOnly\">\n <div class=\"fwe-gradient-picker\">\n <div class=\"fwe-saturation-gradient\" [ngStyle]=\"{ 'background-image': getSaturationGradient() }\"></div>\n <div class=\"fwe-brightness-gradient\" (click)=\"onGradientClick($event)\"></div>\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-gradient-picker\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: saturationKnobOffset, y: valueKnobOffset }\"\n (cdkDragMoved)=\"onGradientDrag($event)\"\n [style.background]=\"color\"\n ></div>\n </div>\n\n <div class=\"fwe-hue-picker\">\n <div class=\"fwe-picker-background\" (click)=\"onHueClick($event)\"></div>\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-hue-picker\"\n cdkDragLockAxis=\"y\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: 3, y: hueKnobOffset }\"\n (cdkDragMoved)=\"onHueDrag($event)\"\n [style.background]=\"'hsl(' + hue * 360 + ', 100%, 50%)'\"\n ></div>\n </div>\n\n <div class=\"fwe-alpha-picker\" *ngIf=\"useAlpha\">\n <svg\n class=\"fwe-no-color-pattern\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n id=\"canvas1\"\n width=\"8\"\n height=\"184\"\n >\n <defs>\n <pattern id=\"bwsquare2px\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n <rect x=\"2\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e5e8eb\" />\n <rect x=\"0\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e5e8eb\" />\n <rect x=\"2\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\" rx=\"4\" ry=\"4\" width=\"8\" height=\"184\" fill=\"url(#bwsquare2px)\" stroke-width=\"0\" />\n </svg>\n <div\n class=\"fwe-picker-background\"\n (click)=\"onAlphaClick($event)\"\n [ngStyle]=\"{ 'background-image': 'linear-gradient( ' + color + ' , transparent)' }\"\n ></div>\n\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-alpha-picker\"\n cdkDragLockAxis=\"y\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: 3, y: alphaKnobOffset }\"\n (cdkDragMoved)=\"onAlphaDrag($event)\"\n [style.background]=\"color\"\n ></div>\n </div>\n </div>\n\n <div class=\"fwe-mt-s\" *ngIf=\"!paletteOnly\">\n <div class=\"fwe-type-select\">\n <div class=\"fwe-type-indicator\" (click)=\"isSelectOpen = !isSelectOpen\">\n <span class=\"fwe-input-type\">{{ inputType }}</span>\n <i class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </div>\n <div class=\"fwe-popover\" *ngIf=\"isSelectOpen\">\n <div class=\"fwe-type-item\" (click)=\"onChangeType('HEX')\" [class.fwe-selected]=\"inputType === 'HEX'\">\n <i class=\"fwe-icon fwe-icon-menu-check\"></i> HEX\n </div>\n <div class=\"fwe-type-item\" (click)=\"onChangeType('RGB')\" [class.fwe-selected]=\"inputType === 'RGB'\">\n <i class=\"fwe-icon fwe-icon-menu-check\"></i> RGB\n </div>\n </div>\n </div>\n\n <div class=\"fwe-d-flex\">\n <ng-container *ngIf=\"inputType === 'HEX'\">\n <label class=\"fwe-input-text fwe-hex-input\">\n <input type=\"text\" [(ngModel)]=\"hexInputColor\" (blur)=\"onHexBlur()\" (input)=\"onHexInput()\" />\n </label>\n </ng-container>\n <ng-container *ngIf=\"inputType === 'RGB'\">\n <label class=\"fwe-input-text fwe-red-input\">\n <input type=\"number\" [(ngModel)]=\"redInput\" (input)=\"onRgbInput(redInput, 'r')\" />\n </label>\n <label class=\"fwe-input-text fwe-green-input\">\n <input type=\"number\" [(ngModel)]=\"greenInput\" (input)=\"onRgbInput(greenInput, 'g')\" />\n </label>\n <label class=\"fwe-input-text fwe-blue-input\">\n <input type=\"number\" min=\"0\" max=\"255\" [(ngModel)]=\"blueInput\" (input)=\"onRgbInput(blueInput, 'b')\" />\n </label>\n </ng-container>\n\n <label class=\"fwe-input-text fwe-alpha-input fwe-ml-auto\" *ngIf=\"useAlpha\">\n <span>\n <input type=\"number\" min=\"0\" max=\"100\" [(ngModel)]=\"alphaInput\" (input)=\"onAlphaInput(alphaInput)\" />\n <span class=\"fwe-percent-char\">%</span>\n </span>\n </label>\n </div>\n </div>\n\n <div class=\"fwe-mt-xs fwe-color-grid\" *ngIf=\"palette && palette.length\">\n <div class=\"fwe-remove-color-button\" (click)=\"onRemoveColor()\">\n <svg\n class=\"fwe-no-color-pattern\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n id=\"canvas1\"\n width=\"18\"\n height=\"18\"\n >\n <defs>\n <pattern id=\"bwsquare2px\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n <rect x=\"2\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e5e8eb\" />\n <rect x=\"0\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e5e8eb\" />\n <rect x=\"2\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\" rx=\"0\" ry=\"0\" width=\"18\" height=\"18\" fill=\"url(#bwsquare2px)\" stroke-width=\"0\" />\n </svg>\n <i class=\"fwe-icon fwe-icon-menu-check\" [class.fwe-color-text]=\"!color\"></i>\n </div>\n <ng-container *ngFor=\"let colorItem of palette\">\n <div\n class=\"fwe-color-item\"\n [class.fwe-white-item]=\"colorItem.toUpperCase() === '#FFFFFF'\"\n [style.background]=\"colorItem\"\n (click)=\"color = colorItem\"\n >\n <i class=\"fwe-icon fwe-icon-menu-check\" *ngIf=\"colorItem.toUpperCase() === color\"></i>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".fwe-triangle.fwe-triangle-right,.fwe-triangle.fwe-triangle-left,.fwe-triangle.fwe-triangle-bottom,.fwe-triangle.fwe-triangle-top{width:17px;height:17px;position:absolute;overflow:hidden}.fwe-triangle.fwe-triangle-right:after,.fwe-triangle.fwe-triangle-left:after,.fwe-triangle.fwe-triangle-bottom:after,.fwe-triangle.fwe-triangle-top:after{content:\"\";position:absolute;width:12px;height:12px;background:var(--fwe-white);transform:rotate(45deg);box-shadow:0 1px 4px #3333}.fwe-popover.fwe-popover-menu,.fwe-popover{background-color:var(--fwe-white);box-shadow:0 1px 4px #3333;border-radius:4px}.fwe-popover{padding:8px;font-size:var(--fwe-font-size-md);line-height:1rem}.fwe-popover-container{position:relative;display:inline-block}.fwe-triangle.fwe-triangle-top{left:50%;top:-17px;transform:translate(-8px)}.fwe-triangle.fwe-triangle-top:after{top:11px;left:3px}.fwe-triangle.fwe-triangle-bottom{left:50%;top:100%;transform:translate(-8px)}.fwe-triangle.fwe-triangle-bottom:after{top:-6px;left:3px}.fwe-triangle.fwe-triangle-left{left:-17px;top:50%;transform:translateY(-8px)}.fwe-triangle.fwe-triangle-left:after{top:2px;left:11px}.fwe-triangle.fwe-triangle-right{left:100%;top:50%;transform:translateY(-8px)}.fwe-triangle.fwe-triangle-right:after{top:2px;left:-6px}.fwe-popover.fwe-popover-menu{font-size:var(--fwe-font-size-base);line-height:1.5rem;padding:16px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item{border-bottom:none;min-height:36px;padding:0}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button{width:100%;margin-left:inherit;padding:0 8px 0 0;text-align:left;height:32px;max-height:32px;display:inline-flex;justify-content:unset}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button:hover{color:var(--fwe-black)}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button i{display:inline-flex;align-items:center;justify-content:center;flex-wrap:nowrap;height:24px;width:32px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button i:before{display:inline-flex}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button span{display:inline-flex;height:24px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button [class*=\" fwe-icon-\"]{margin-left:inherit}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item:hover{color:var(--fwe-black);background-color:#3333331a}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item:active{background-color:#3333}.fwe-popover .fwe-popover-legend{display:table;margin:16px;line-height:24px}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content{display:table-row}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content dt{display:table-cell;margin:0;padding-right:8px}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content dd{display:table-cell;margin:0}.fwe-color-picker{width:216px}.fwe-color-picker.fwe-alpha-active{width:245px}.fwe-color-picker .fwe-gradient-picker{position:relative;width:198px;height:198px;margin:-7px}.fwe-color-picker .fwe-gradient-picker .fwe-brightness-gradient{position:absolute;inset:7px;background-image:linear-gradient(transparent,black)}.fwe-color-picker .fwe-gradient-picker .fwe-saturation-gradient{position:absolute;inset:7px}.fwe-color-picker .fwe-vertical-picker,.fwe-color-picker .fwe-alpha-picker,.fwe-color-picker .fwe-hue-picker{position:relative;height:198px;width:14px;margin:-7px -3px -7px 18px}.fwe-color-picker .fwe-vertical-picker .fwe-picker-background,.fwe-color-picker .fwe-alpha-picker .fwe-picker-background,.fwe-color-picker .fwe-hue-picker .fwe-picker-background{margin:7px 3px;height:184px;width:8px;border-radius:4px}.fwe-color-picker .fwe-vertical-picker .fwe-knob,.fwe-color-picker .fwe-alpha-picker .fwe-knob,.fwe-color-picker .fwe-hue-picker .fwe-knob{left:-3px}.fwe-color-picker .fwe-hue-picker .fwe-picker-background{background-image:linear-gradient(#ff0000,#ffff00,#00ff00,#00ffff,#0000ff,#ff00ff,#ff0000)}.fwe-color-picker .fwe-alpha-picker .fwe-no-color-pattern{margin:7px 3px;position:absolute}.fwe-color-picker .fwe-alpha-picker .fwe-picker-background{position:absolute}.fwe-color-picker .fwe-type-select{position:relative;display:flex}.fwe-color-picker .fwe-type-select .fwe-type-indicator{flex-shrink:1;cursor:pointer;display:flex}.fwe-color-picker .fwe-type-select .fwe-type-indicator .fwe-input-type{font-size:var(--fwe-font-size-small);line-height:calc(var(--fwe-font-size-small) + 5px);font-weight:var(--fwe-font-weight-bold)}.fwe-color-picker .fwe-type-select .fwe-type-indicator:hover{color:var(--fwe-hero)}.fwe-color-picker .fwe-type-select .fwe-icon-arrows-collapse{margin-left:16px;line-height:16px}.fwe-color-picker .fwe-type-select .fwe-popover{position:absolute;z-index:1;top:24px;left:0}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item{cursor:pointer;display:flex;padding:8px}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item:hover{color:var(--fwe-hero)}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item .fwe-icon-menu-check{opacity:0;margin-right:8px}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item.fwe-selected{cursor:default}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item.fwe-selected .fwe-icon-menu-check{opacity:1}.fwe-color-picker input::-webkit-outer-spin-button,.fwe-color-picker input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.fwe-color-picker input[type=number]{-moz-appearance:textfield}.fwe-color-picker input{padding-right:0!important;text-align:center}.fwe-color-picker .fwe-hex-input{width:75px;margin-right:16px}.fwe-color-picker .fwe-red-input,.fwe-color-picker .fwe-green-input{width:32px;margin-right:8px}.fwe-color-picker .fwe-blue-input{width:32px}.fwe-color-picker .fwe-alpha-input span input{width:48px;padding-right:16px!important}.fwe-color-picker .fwe-alpha-input .fwe-percent-char{margin-left:-16px}.fwe-color-picker .fwe-color-grid{display:flex;flex-wrap:wrap;margin-right:-8px;margin-bottom:-8px}.fwe-color-picker .fwe-color-grid .fwe-color-item{align-items:center;display:flex;justify-content:center;color:#fff;height:24px;width:24px;border-radius:4px;margin-right:8px;margin-bottom:8px}.fwe-color-picker .fwe-color-grid .fwe-color-item.fwe-white-item{border:1px solid var(--fwe-control-border);color:#000}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button{align-items:center;display:flex;justify-content:center;height:24px;width:24px;border-radius:4px;border:1px solid var(--fwe-control-border);color:var(--fwe-control);margin-right:8px;margin-bottom:8px}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button .fwe-no-color-pattern{margin:2px}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button i{color:transparent;position:absolute}.fwe-color-picker .fwe-knob{position:absolute;z-index:1;height:14px;width:14px;border-radius:50%;border:2px solid white;box-shadow:0 0 4px #00000026}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None });
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngColorPickerComponent, decorators: [{
269
- type: Component,
270
- args: [{ standalone: true, imports: [CommonModule, DragDropModule, FormsModule], selector: 'fng-color-picker', providers: [
271
- {
272
- provide: NG_VALUE_ACCESSOR,
273
- useExisting: forwardRef(() => FngColorPickerComponent),
274
- multi: true
275
- }
276
- ], encapsulation: ViewEncapsulation.None, template: "<div class=\"fwe-color-picker\" [class.fwe-alpha-active]=\"useAlpha\">\n <div class=\"fwe-d-flex\" *ngIf=\"!paletteOnly\">\n <div class=\"fwe-gradient-picker\">\n <div class=\"fwe-saturation-gradient\" [ngStyle]=\"{ 'background-image': getSaturationGradient() }\"></div>\n <div class=\"fwe-brightness-gradient\" (click)=\"onGradientClick($event)\"></div>\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-gradient-picker\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: saturationKnobOffset, y: valueKnobOffset }\"\n (cdkDragMoved)=\"onGradientDrag($event)\"\n [style.background]=\"color\"\n ></div>\n </div>\n\n <div class=\"fwe-hue-picker\">\n <div class=\"fwe-picker-background\" (click)=\"onHueClick($event)\"></div>\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-hue-picker\"\n cdkDragLockAxis=\"y\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: 3, y: hueKnobOffset }\"\n (cdkDragMoved)=\"onHueDrag($event)\"\n [style.background]=\"'hsl(' + hue * 360 + ', 100%, 50%)'\"\n ></div>\n </div>\n\n <div class=\"fwe-alpha-picker\" *ngIf=\"useAlpha\">\n <svg\n class=\"fwe-no-color-pattern\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n id=\"canvas1\"\n width=\"8\"\n height=\"184\"\n >\n <defs>\n <pattern id=\"bwsquare2px\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n <rect x=\"2\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e5e8eb\" />\n <rect x=\"0\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e5e8eb\" />\n <rect x=\"2\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\" rx=\"4\" ry=\"4\" width=\"8\" height=\"184\" fill=\"url(#bwsquare2px)\" stroke-width=\"0\" />\n </svg>\n <div\n class=\"fwe-picker-background\"\n (click)=\"onAlphaClick($event)\"\n [ngStyle]=\"{ 'background-image': 'linear-gradient( ' + color + ' , transparent)' }\"\n ></div>\n\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-alpha-picker\"\n cdkDragLockAxis=\"y\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: 3, y: alphaKnobOffset }\"\n (cdkDragMoved)=\"onAlphaDrag($event)\"\n [style.background]=\"color\"\n ></div>\n </div>\n </div>\n\n <div class=\"fwe-mt-s\" *ngIf=\"!paletteOnly\">\n <div class=\"fwe-type-select\">\n <div class=\"fwe-type-indicator\" (click)=\"isSelectOpen = !isSelectOpen\">\n <span class=\"fwe-input-type\">{{ inputType }}</span>\n <i class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </div>\n <div class=\"fwe-popover\" *ngIf=\"isSelectOpen\">\n <div class=\"fwe-type-item\" (click)=\"onChangeType('HEX')\" [class.fwe-selected]=\"inputType === 'HEX'\">\n <i class=\"fwe-icon fwe-icon-menu-check\"></i> HEX\n </div>\n <div class=\"fwe-type-item\" (click)=\"onChangeType('RGB')\" [class.fwe-selected]=\"inputType === 'RGB'\">\n <i class=\"fwe-icon fwe-icon-menu-check\"></i> RGB\n </div>\n </div>\n </div>\n\n <div class=\"fwe-d-flex\">\n <ng-container *ngIf=\"inputType === 'HEX'\">\n <label class=\"fwe-input-text fwe-hex-input\">\n <input type=\"text\" [(ngModel)]=\"hexInputColor\" (blur)=\"onHexBlur()\" (input)=\"onHexInput()\" />\n </label>\n </ng-container>\n <ng-container *ngIf=\"inputType === 'RGB'\">\n <label class=\"fwe-input-text fwe-red-input\">\n <input type=\"number\" [(ngModel)]=\"redInput\" (input)=\"onRgbInput(redInput, 'r')\" />\n </label>\n <label class=\"fwe-input-text fwe-green-input\">\n <input type=\"number\" [(ngModel)]=\"greenInput\" (input)=\"onRgbInput(greenInput, 'g')\" />\n </label>\n <label class=\"fwe-input-text fwe-blue-input\">\n <input type=\"number\" min=\"0\" max=\"255\" [(ngModel)]=\"blueInput\" (input)=\"onRgbInput(blueInput, 'b')\" />\n </label>\n </ng-container>\n\n <label class=\"fwe-input-text fwe-alpha-input fwe-ml-auto\" *ngIf=\"useAlpha\">\n <span>\n <input type=\"number\" min=\"0\" max=\"100\" [(ngModel)]=\"alphaInput\" (input)=\"onAlphaInput(alphaInput)\" />\n <span class=\"fwe-percent-char\">%</span>\n </span>\n </label>\n </div>\n </div>\n\n <div class=\"fwe-mt-xs fwe-color-grid\" *ngIf=\"palette && palette.length\">\n <div class=\"fwe-remove-color-button\" (click)=\"onRemoveColor()\">\n <svg\n class=\"fwe-no-color-pattern\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n id=\"canvas1\"\n width=\"18\"\n height=\"18\"\n >\n <defs>\n <pattern id=\"bwsquare2px\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n <rect x=\"2\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e5e8eb\" />\n <rect x=\"0\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e5e8eb\" />\n <rect x=\"2\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\" rx=\"0\" ry=\"0\" width=\"18\" height=\"18\" fill=\"url(#bwsquare2px)\" stroke-width=\"0\" />\n </svg>\n <i class=\"fwe-icon fwe-icon-menu-check\" [class.fwe-color-text]=\"!color\"></i>\n </div>\n <ng-container *ngFor=\"let colorItem of palette\">\n <div\n class=\"fwe-color-item\"\n [class.fwe-white-item]=\"colorItem.toUpperCase() === '#FFFFFF'\"\n [style.background]=\"colorItem\"\n (click)=\"color = colorItem\"\n >\n <i class=\"fwe-icon fwe-icon-menu-check\" *ngIf=\"colorItem.toUpperCase() === color\"></i>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".fwe-triangle.fwe-triangle-right,.fwe-triangle.fwe-triangle-left,.fwe-triangle.fwe-triangle-bottom,.fwe-triangle.fwe-triangle-top{width:17px;height:17px;position:absolute;overflow:hidden}.fwe-triangle.fwe-triangle-right:after,.fwe-triangle.fwe-triangle-left:after,.fwe-triangle.fwe-triangle-bottom:after,.fwe-triangle.fwe-triangle-top:after{content:\"\";position:absolute;width:12px;height:12px;background:var(--fwe-white);transform:rotate(45deg);box-shadow:0 1px 4px #3333}.fwe-popover.fwe-popover-menu,.fwe-popover{background-color:var(--fwe-white);box-shadow:0 1px 4px #3333;border-radius:4px}.fwe-popover{padding:8px;font-size:var(--fwe-font-size-md);line-height:1rem}.fwe-popover-container{position:relative;display:inline-block}.fwe-triangle.fwe-triangle-top{left:50%;top:-17px;transform:translate(-8px)}.fwe-triangle.fwe-triangle-top:after{top:11px;left:3px}.fwe-triangle.fwe-triangle-bottom{left:50%;top:100%;transform:translate(-8px)}.fwe-triangle.fwe-triangle-bottom:after{top:-6px;left:3px}.fwe-triangle.fwe-triangle-left{left:-17px;top:50%;transform:translateY(-8px)}.fwe-triangle.fwe-triangle-left:after{top:2px;left:11px}.fwe-triangle.fwe-triangle-right{left:100%;top:50%;transform:translateY(-8px)}.fwe-triangle.fwe-triangle-right:after{top:2px;left:-6px}.fwe-popover.fwe-popover-menu{font-size:var(--fwe-font-size-base);line-height:1.5rem;padding:16px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item{border-bottom:none;min-height:36px;padding:0}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button{width:100%;margin-left:inherit;padding:0 8px 0 0;text-align:left;height:32px;max-height:32px;display:inline-flex;justify-content:unset}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button:hover{color:var(--fwe-black)}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button i{display:inline-flex;align-items:center;justify-content:center;flex-wrap:nowrap;height:24px;width:32px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button i:before{display:inline-flex}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button span{display:inline-flex;height:24px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button [class*=\" fwe-icon-\"]{margin-left:inherit}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item:hover{color:var(--fwe-black);background-color:#3333331a}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item:active{background-color:#3333}.fwe-popover .fwe-popover-legend{display:table;margin:16px;line-height:24px}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content{display:table-row}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content dt{display:table-cell;margin:0;padding-right:8px}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content dd{display:table-cell;margin:0}.fwe-color-picker{width:216px}.fwe-color-picker.fwe-alpha-active{width:245px}.fwe-color-picker .fwe-gradient-picker{position:relative;width:198px;height:198px;margin:-7px}.fwe-color-picker .fwe-gradient-picker .fwe-brightness-gradient{position:absolute;inset:7px;background-image:linear-gradient(transparent,black)}.fwe-color-picker .fwe-gradient-picker .fwe-saturation-gradient{position:absolute;inset:7px}.fwe-color-picker .fwe-vertical-picker,.fwe-color-picker .fwe-alpha-picker,.fwe-color-picker .fwe-hue-picker{position:relative;height:198px;width:14px;margin:-7px -3px -7px 18px}.fwe-color-picker .fwe-vertical-picker .fwe-picker-background,.fwe-color-picker .fwe-alpha-picker .fwe-picker-background,.fwe-color-picker .fwe-hue-picker .fwe-picker-background{margin:7px 3px;height:184px;width:8px;border-radius:4px}.fwe-color-picker .fwe-vertical-picker .fwe-knob,.fwe-color-picker .fwe-alpha-picker .fwe-knob,.fwe-color-picker .fwe-hue-picker .fwe-knob{left:-3px}.fwe-color-picker .fwe-hue-picker .fwe-picker-background{background-image:linear-gradient(#ff0000,#ffff00,#00ff00,#00ffff,#0000ff,#ff00ff,#ff0000)}.fwe-color-picker .fwe-alpha-picker .fwe-no-color-pattern{margin:7px 3px;position:absolute}.fwe-color-picker .fwe-alpha-picker .fwe-picker-background{position:absolute}.fwe-color-picker .fwe-type-select{position:relative;display:flex}.fwe-color-picker .fwe-type-select .fwe-type-indicator{flex-shrink:1;cursor:pointer;display:flex}.fwe-color-picker .fwe-type-select .fwe-type-indicator .fwe-input-type{font-size:var(--fwe-font-size-small);line-height:calc(var(--fwe-font-size-small) + 5px);font-weight:var(--fwe-font-weight-bold)}.fwe-color-picker .fwe-type-select .fwe-type-indicator:hover{color:var(--fwe-hero)}.fwe-color-picker .fwe-type-select .fwe-icon-arrows-collapse{margin-left:16px;line-height:16px}.fwe-color-picker .fwe-type-select .fwe-popover{position:absolute;z-index:1;top:24px;left:0}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item{cursor:pointer;display:flex;padding:8px}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item:hover{color:var(--fwe-hero)}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item .fwe-icon-menu-check{opacity:0;margin-right:8px}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item.fwe-selected{cursor:default}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item.fwe-selected .fwe-icon-menu-check{opacity:1}.fwe-color-picker input::-webkit-outer-spin-button,.fwe-color-picker input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.fwe-color-picker input[type=number]{-moz-appearance:textfield}.fwe-color-picker input{padding-right:0!important;text-align:center}.fwe-color-picker .fwe-hex-input{width:75px;margin-right:16px}.fwe-color-picker .fwe-red-input,.fwe-color-picker .fwe-green-input{width:32px;margin-right:8px}.fwe-color-picker .fwe-blue-input{width:32px}.fwe-color-picker .fwe-alpha-input span input{width:48px;padding-right:16px!important}.fwe-color-picker .fwe-alpha-input .fwe-percent-char{margin-left:-16px}.fwe-color-picker .fwe-color-grid{display:flex;flex-wrap:wrap;margin-right:-8px;margin-bottom:-8px}.fwe-color-picker .fwe-color-grid .fwe-color-item{align-items:center;display:flex;justify-content:center;color:#fff;height:24px;width:24px;border-radius:4px;margin-right:8px;margin-bottom:8px}.fwe-color-picker .fwe-color-grid .fwe-color-item.fwe-white-item{border:1px solid var(--fwe-control-border);color:#000}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button{align-items:center;display:flex;justify-content:center;height:24px;width:24px;border-radius:4px;border:1px solid var(--fwe-control-border);color:var(--fwe-control);margin-right:8px;margin-bottom:8px}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button .fwe-no-color-pattern{margin:2px}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button i{color:transparent;position:absolute}.fwe-color-picker .fwe-knob{position:absolute;z-index:1;height:14px;width:14px;border-radius:50%;border:2px solid white;box-shadow:0 0 4px #00000026}\n"] }]
277
- }], propDecorators: { useAlpha: [{
278
- type: Input
279
- }], alpha: [{
280
- type: Input
281
- }], alphaChange: [{
282
- type: Output
283
- }], color: [{
284
- type: Input
285
- }], disabled: [{
286
- type: Input
287
- }], palette: [{
288
- type: Input
289
- }], paletteOnly: [{
290
- type: Input
291
- }] } });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBZSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQTRCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQXVCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFFL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWE7SUFDekMsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7Q0FDVixDQUFDO0FBRUY7O0dBRUc7QUFpQkgsTUFBTSxPQUFPLHVCQUF1QjtJQWhCcEM7UUFpQkUsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUVmLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFWixhQUFRLEdBQUcsS0FB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SFksWUFBWSxvVkFBRSxjQUFjLGdlQUFFLFdBQVc7MkZBY3hDLHVCQUF1QjtrQkFoQm5DLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsWUFDMUMsa0JBQWtCLGFBSWpCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOzhCQVM1QixRQUFRO3NCQUFoQixLQUFLO2dCQUdGLEtBQUs7c0JBRFIsS0FBSztnQkFZSSxXQUFXO3NCQUFwQixNQUFNO2dCQVNILEtBQUs7c0JBRFIsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBYUcsT0FBTztzQkFBZixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2RrRHJhZ01vdmUsIERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbG9ySGVscGVyIH0gZnJvbSAnLi9jb2xvci1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IFBSRURFRklORURfQ09MT1JTOiBzdHJpbmdbXSA9IFtcbiAgJyMwMDkxZGMnLFxuICAnIzMzMzMzMycsXG4gICcjZmZmZmZmJyxcbiAgJyNmMmYzZjUnLFxuICAnI2U1ZThlYicsXG4gICcjZDhkY2UxJyxcbiAgJyNiNmJlYzYnLFxuICAnIzgwY2EzZCcsXG4gICcjZmZkNjAwJyxcbiAgJyNmZjk2MDAnLFxuICAnI2Q1MDAwMCdcbl07XG5cbi8qKlxuICogQSBjdXN0b20gZm9ybSBlbGVtZW50IHRvIHBpY2sgYSBjb2xvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERyYWdEcm9wTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHNlbGVjdG9yOiAnZm5nLWNvbG9yLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb2xvci1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcblxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZuZ0NvbG9yUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEZuZ0NvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIGJhc2VTaXplID0gMTg0O1xuXG4gIGlucHV0VHlwZSA9ICdSR0InO1xuXG4gIGlzU2VsZWN0T3BlbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHVzZUFscGhhID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGFscGhhKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJBbHBoYTtcbiAgfVxuICBzZXQgYWxwaGEodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSA8PSAxMDAgJiYgdmFsdWUgPj0gMCAmJiB0aGlzLmlubmVyQWxwaGEgIT09IE1hdGgucm91bmQodmFsdWUpKSB7XG4gICAgICB0aGlzLmlubmVyQWxwaGEgPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICAgIHRoaXMuYWxwaGFJbnB1dCA9IHRoaXMuaW5uZXJBbHBoYTtcbiAgICAgIHRoaXMudXBkYXRlS25vYnMoKTtcbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCkgYWxwaGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgY29sb3JcbiAgICovXG4gIGdldCBjb2xvcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lckNvbG9yO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBjb2xvcih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLmlzSGV4Q29sb3IodmFsdWUpKSB7XG4gICAgICB0aGlzLmlubmVyQ29sb3IgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlubmVyQ29sb3IgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbG9yUmdiKHRydWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlubmVyRGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pbm5lckRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbiBhcnJheSB3aXRoIGNvbG9yIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBwYWxldHRlLlxuICAgKiBFeGFtcGxlOiBbJyMyMzQ1NjcsICcjQUEwMEZGJ11cbiAgICogUGFzcyBudWxsIHRvIGhpZGUgcGFsZXR0ZS5cbiAgICovXG4gIEBJbnB1dCgpIHBhbGV0dGU6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIGhpZGUgdGhlIGh1ZSBhbmQgZ3JhZGllbnQgcGlja2VyIGFuZCBzaG90IHRoZSBwYWxldHRlIG9ubHkuXG4gICAqL1xuICBASW5wdXQoKSBwYWxldHRlT25seSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaW5uZXJDb2xvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaW5uZXJEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgaW5uZXJBbHBoYTogbnVtYmVyID0gMTtcblxuICAvLyBpbnB1dCBjb250cm9sc1xuICBoZXhJbnB1dENvbG9yOiBzdHJpbmcgfCBudWxsID0gJyNmZjAwMDAnO1xuICByZWRJbnB1dCA9IDI1NTtcbiAgZ3JlZW5JbnB1dCA9IDA7XG4gIGJsdWVJbnB1dCA9IDA7XG4gIGFscGhhSW5wdXQgPSAxMDA7XG5cbiAgLy8gSFNWIHZhbHVlXG4gIGh1ZTogbnVtYmVyID0gMDtcbiAgc2F0dXJhdGlvbjogbnVtYmVyID0gMDtcbiAgdmFsdWU6IG51bWJlciA9IDA7XG5cbiAgLy8gcG9pdGlvbnMgb2YgdGhlIGtub2JzIGluIHB4XG4gIGh1ZUtub2JPZmZzZXQgPSAwO1xuICBhbHBoYUtub2JPZmZzZXQgPSAwO1xuICBzYXR1cmF0aW9uS25vYk9mZnNldCA9IDA7XG4gIHZhbHVlS25vYk9mZnNldCA9IDA7XG5cbiAgLy8gY2FsbGJhY2tzIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvclxuICBvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IG51bGw7XG4gIG9uQ2hhbmdlOiAoY29sb3I6IHN0cmluZyB8IG51bGwpID0+IGFueSA9ICgpID0+IG51bGw7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHBhbGV0dGVDaGFuZ2VkID0gY2hhbmdlc1sncGFsZXR0ZSddO1xuICAgIGlmIChwYWxldHRlQ2hhbmdlZFsnY3VycmVudFZhbHVlJ10ubGVuZ3RoID4gMCAmJiBwYWxldHRlQ2hhbmdlZFsnY3VycmVudFZhbHVlJ10uaW5kZXhPZignRkVTVE9fQ09MT1JTJykgIT09IC0xKSB7XG4gICAgICB0aGlzLnBhbGV0dGUgPSBQUkVERUZJTkVEX0NPTE9SUztcbiAgICB9XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICB3cml0ZVZhbHVlKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0hleENvbG9yKGNvbG9yKSkge1xuICAgICAgdGhpcy5pbm5lckNvbG9yID0gY29sb3IudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbm5lckNvbG9yID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb2xvclJnYihmYWxzZSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlubmVyRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLy8gdXBkYXRlIG1ldGhvZCBmb3IgY2hhbmdlcyBvZiB0aGUgcmdiIHZhbHVlXG4gIHVwZGF0ZUNvbG9yUmdiKGVtaXRDaGFuZ2U6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjdXJyZW50Q29sb3IgPSB0aGlzLmlubmVyQ29sb3IgfHwgJyNGRkZGRkYnO1xuICAgIHRoaXMudXBkYXRlSW5wdXRzKGN1cnJlbnRDb2xvcik7XG4gICAgY29uc3QgcmdiID0gQ29sb3JIZWxwZXIuaGV4VG9SZ2IoY3VycmVudENvbG9yKTtcbiAgICBjb25zdCBoc3YgPSBDb2xvckhlbHBlci5yZ2JUb0hzdihyZ2IpO1xuICAgIHRoaXMuaHVlID0gaHN2Lmg7XG4gICAgdGhpcy5zYXR1cmF0aW9uID0gaHN2LnM7XG4gICAgdGhpcy52YWx1ZSA9IGhzdi52O1xuICAgIHRoaXMudXBkYXRlS25vYnMoKTtcbiAgICBpZiAoZW1pdENoYW5nZSkge1xuICAgICAgaWYgKHRoaXMub25DaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5uZXJDb2xvcik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vblRvdWNoZWQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHVwZGF0ZSBtZXRob2QgZm9yIGNoYW5nZXMgb2YgdGhlIGhzdiB2YWx1ZVxuICB1cGRhdGVDb2xvckhzdigpIHtcbiAgICBjb25zdCByZ2IgPSBDb2xvckhlbHBlci5oc3ZUb1JnYih7IGg6IHRoaXMuaHVlLCBzOiB0aGlzLnNhdHVyYXRpb24sIHY6IHRoaXMudmFsdWUgfSk7XG4gICAgdGhpcy5pbm5lckNvbG9yID0gQ29sb3JIZWxwZXIucmdiVG9IZXgocmdiKTtcbiAgICB0aGlzLnVwZGF0ZUlucHV0cyh0aGlzLmlubmVyQ29sb3IpO1xuICAgIGlmICh0aGlzLm9uQ2hhbmdlICE9IG51bGwpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5pbm5lckNvbG9yKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25Ub3VjaGVkICE9IG51bGwpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXZlbnQgaGFuZGxlciBmb3IgaW5wdXRzXG4gIG9uSGV4Qmx1cigpIHtcbiAgICBpZiAodGhpcy5oZXhJbnB1dENvbG9yICYmIHRoaXMuaXNIZXhDb2xvcih0aGlzLmhleElucHV0Q29sb3IpKSB7XG4gICAgICB0aGlzLmNvbG9yID0gdGhpcy5oZXhJbnB1dENvbG9yLnRvVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGV4SW5wdXRDb2xvciA9IHRoaXMuY29sb3I7XG4gICAgfVxuICB9XG5cbiAgb25IZXhJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5oZXhJbnB1dENvbG9yICYmIHRoaXMuaXNIZXhDb2xvcih0aGlzLmhleElucHV0Q29sb3IpKSB7XG4gICAgICB0aGlzLmNvbG9yID0gdGhpcy5oZXhJbnB1dENvbG9yLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgb25SZ2JCbHVyKCkge1xuICAgIGlmICh0aGlzLmhleElucHV0Q29sb3IgJiYgdGhpcy5pc0hleENvbG9yKHRoaXMuaGV4SW5wdXRDb2xvcikpIHtcbiAgICAgIHRoaXMuY29sb3IgPSB0aGlzLmhleElucHV0Q29sb3IudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZXhJbnB1dENvbG9yID0gdGhpcy5jb2xvcjtcbiAgICB9XG4gIH1cblxuICBvblJnYklucHV0KHZhbHVlOiBudW1iZXIsIGNoYW5uZWw6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA+IDI1NSB8fCB2YWx1ZSA8IDApIHtcbiAgICAgIHRoaXMudXBkYXRlSW5wdXRzKHRoaXMuaW5uZXJDb2xvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJnYiA9IENvbG9ySGVscGVyLmhleFRvUmdiKHRoaXMuaW5uZXJDb2xvcik7XG4gICAgICByZ2JbY2hhbm5lbCBhcyBrZXlvZiB0eXBlb2YgcmdiXSA9IHZhbHVlO1xuICAgICAgdGhpcy5pbm5lckNvbG9yID0gQ29sb3JIZWxwZXIucmdiVG9IZXgocmdiKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JSZ2IodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25BbHBoYUlucHV0KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPiAxMDAgfHwgdmFsdWUgPCAwKSB7XG4gICAgICB0aGlzLmFscGhhSW5wdXQgPSB0aGlzLmlubmVyQWxwaGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWxwaGEgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYWxwaGFDaGFuZ2UuZW1pdCh0aGlzLmFscGhhKTtcbiAgICB9XG4gIH1cblxuICBvbkdyYWRpZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLnNhdHVyYXRpb24gPSBldmVudC5vZmZzZXRYIC8gdGhpcy5iYXNlU2l6ZTtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuYmFzZVNpemUgLSBldmVudC5vZmZzZXRZKSAvIHRoaXMuYmFzZVNpemU7XG4gICAgdGhpcy51cGRhdGVDb2xvckhzdigpO1xuICAgIHRoaXMudXBkYXRlS25vYnMoKTtcbiAgfVxuXG4gIG9uR3JhZGllbnREcmFnKGV2ZW50OiBDZGtEcmFnTW92ZSkge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZXZlbnQuc291cmNlLmdldEZyZWVEcmFnUG9zaXRpb24oKTtcbiAgICB0aGlzLnNhdHVyYXRpb24gPSBNYXRoLmZsb29yKHBvc2l0aW9uLngpIC8gdGhpcy5iYXNlU2l6ZTtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuYmFzZVNpemUgLSBwb3NpdGlvbi55KSAvIHRoaXMuYmFzZVNpemU7XG4gICAgdGhpcy51cGRhdGVDb2xvckhzdigpO1xuICB9XG5cbiAgb25IdWVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaHVlID0gZXZlbnQub2Zmc2V0WSAvIHRoaXMuYmFzZVNpemU7XG4gICAgdGhpcy51cGRhdGVDb2xvckhzdigpO1xuICAgIHRoaXMudXBkYXRlS25vYnMoKTtcbiAgfVxuXG4gIG9uQWxwaGFDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuYWxwaGEgPSAxMDAgLSBNYXRoLnJvdW5kKChldmVudC5vZmZzZXRZIC8gdGhpcy5iYXNlU2l6ZSkgKiAxMDApO1xuICAgIHRoaXMuYWxwaGFDaGFuZ2UuZW1pdCh0aGlzLmFscGhhKTtcbiAgfVxuXG4gIG9uSHVlRHJhZyhldmVudDogQ2RrRHJhZ01vdmUpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IGV2ZW50LnNvdXJjZS5nZXRGcmVlRHJhZ1Bvc2l0aW9uKCk7XG4gICAgdGhpcy5odWUgPSAocG9zaXRpb24ueSArIHRoaXMuYmFzZVNpemUgKyAxNCkgLyB0aGlzLmJhc2VTaXplO1xuICAgIHRoaXMudXBkYXRlQ29sb3JIc3YoKTtcbiAgfVxuXG4gIG9uQWxwaGFEcmFnKGV2ZW50OiBDZGtEcmFnTW92ZSkge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZXZlbnQuc291cmNlLmdldEZyZWVEcmFnUG9zaXRpb24oKTtcbiAgICB0aGlzLmlubmVyQWxwaGEgPSAxMDAgLSBNYXRoLnJvdW5kKChwb3NpdGlvbi55IC8gdGhpcy5iYXNlU2l6ZSkgKiAxMDApO1xuICAgIHRoaXMuYWxwaGFJbnB1dCA9IHRoaXMuaW5uZXJBbHBoYTtcbiAgICB0aGlzLmFscGhhQ2hhbmdlLmVtaXQodGhpcy5pbm5lckFscGhhKTtcbiAgfVxuXG4gIG9uUmVtb3ZlQ29sb3IoKSB7XG4gICAgaWYgKHRoaXMudXNlQWxwaGEpIHtcbiAgICAgIHRoaXMuYWxwaGEgPSAwO1xuICAgICAgdGhpcy5hbHBoYUNoYW5nZS5lbWl0KHRoaXMuYWxwaGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBpc0hleENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gL14jWzAtOUEtRl17Nn0kL2kudGVzdCh2YWx1ZSk7XG4gIH1cblxuICBnZXRTYXR1cmF0aW9uR3JhZGllbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwgd2hpdGUsICBoc2woJyArIHRoaXMuaHVlICogMzYwICsgJywgMTAwJSwgNTAlKSApJztcbiAgfVxuXG4gIHVwZGF0ZUlucHV0cyhoZXhDb2xvcjogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuaGV4SW5wdXRDb2xvciA9IGhleENvbG9yO1xuICAgIGNvbnN0IHJnYiA9IENvbG9ySGVscGVyLmhleFRvUmdiKGhleENvbG9yKTtcbiAgICB0aGlzLnJlZElucHV0ID0gcmdiLnI7XG4gICAgdGhpcy5ncmVlbklucHV0ID0gcmdiLmc7XG4gICAgdGhpcy5ibHVlSW5wdXQgPSByZ2IuYjtcbiAgfVxuXG4gIHVwZGF0ZUtub2JzKCkge1xuICAgIHRoaXMuYWxwaGFLbm9iT2Zmc2V0ID0gKCgxMDAgLSB0aGlzLmFscGhhKSAvIDEwMCkgKiB0aGlzLmJhc2VTaXplO1xuICAgIHRoaXMuaHVlS25vYk9mZnNldCA9IHRoaXMuaHVlICogdGhpcy5iYXNlU2l6ZSAtICh0aGlzLmJhc2VTaXplICsgMTQpO1xuICAgIHRoaXMuc2F0dXJhdGlvbktub2JPZmZzZXQgPSB0aGlzLnNhdHVyYXRpb24gKiB0aGlzLmJhc2VTaXplO1xuICAgIHRoaXMudmFsdWVLbm9iT2Zmc2V0ID0gKDEgLSB0aGlzLnZhbHVlKSAqIHRoaXMuYmFzZVNpemU7XG4gIH1cblxuICBvbkNoYW5nZVR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dFR5cGUgPSB0eXBlO1xuICAgIHRoaXMuaXNTZWxlY3RPcGVuID0gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmd2UtY29sb3ItcGlja2VyXCIgW2NsYXNzLmZ3ZS1hbHBoYS1hY3RpdmVdPVwidXNlQWxwaGFcIj5cbiAgPGRpdiBjbGFzcz1cImZ3ZS1kLWZsZXhcIiAqbmdJZj1cIiFwYWxldHRlT25seVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmd2UtZ3JhZGllbnQtcGlja2VyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZndlLXNhdHVyYXRpb24tZ3JhZGllbnRcIiBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWltYWdlJzogZ2V0U2F0dXJhdGlvbkdyYWRpZW50KCkgfVwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZ3ZS1icmlnaHRuZXNzLWdyYWRpZW50XCIgKGNsaWNrKT1cIm9uR3JhZGllbnRDbGljaygkZXZlbnQpXCI+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZndlLWtub2JcIlxuICAgICAgICBjZGtEcmFnQm91bmRhcnk9XCIuZndlLWdyYWRpZW50LXBpY2tlclwiXG4gICAgICAgIGNka0RyYWdcbiAgICAgICAgW2Nka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cInsgeDogc2F0dXJhdGlvbktub2JPZmZzZXQsIHk6IHZhbHVlS25vYk9mZnNldCB9XCJcbiAgICAgICAgKGNka0RyYWdNb3ZlZCk9XCJvbkdyYWRpZW50RHJhZygkZXZlbnQpXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiY29sb3JcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZ3ZS1odWUtcGlja2VyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZndlLXBpY2tlci1iYWNrZ3JvdW5kXCIgKGNsaWNrKT1cIm9uSHVlQ2xpY2soJGV2ZW50KVwiPjwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZ3ZS1rbm9iXCJcbiAgICAgICAgY2RrRHJhZ0JvdW5kYXJ5PVwiLmZ3ZS1odWUtcGlja2VyXCJcbiAgICAgICAgY2RrRHJhZ0xvY2tBeGlzPVwieVwiXG4gICAgICAgIGNka0RyYWdcbiAgICAgICAgW2Nka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cInsgeDogMywgeTogaHVlS25vYk9mZnNldCB9XCJcbiAgICAgICAgKGNka0RyYWdNb3ZlZCk9XCJvbkh1ZURyYWcoJGV2ZW50KVwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIidoc2woJyArIGh1ZSAqIDM2MCArICcsIDEwMCUsIDUwJSknXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmd2UtYWxwaGEtcGlja2VyXCIgKm5nSWY9XCJ1c2VBbHBoYVwiPlxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzcz1cImZ3ZS1uby1jb2xvci1wYXR0ZXJuXCJcbiAgICAgICAgdmVyc2lvbj1cIjEuMVwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICBpZD1cImNhbnZhczFcIlxuICAgICAgICB3aWR0aD1cIjhcIlxuICAgICAgICBoZWlnaHQ9XCIxODRcIlxuICAgICAgPlxuICAgICAgICA8ZGVmcz5cbiAgICAgICAgICA8cGF0dGVybiBpZD1cImJ3c3F1YXJlMnB4XCIgd2lkdGg9XCI0XCIgaGVpZ2h0PVwiNFwiIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHN0cm9rZT1cIm5vbmVcIiBmaWxsPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIwXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHN0cm9rZT1cIm5vbmVcIiBmaWxsPVwiI2U1ZThlYlwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIyXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHN0cm9rZT1cIm5vbmVcIiBmaWxsPVwiI2U1ZThlYlwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIyXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHN0cm9rZT1cIm5vbmVcIiBmaWxsPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgPC9wYXR0ZXJuPlxuICAgICAgICA8L2RlZnM+XG4gICAgICAgIDxyZWN0IHg9XCIwXCIgeT1cIjBcIiByeD1cIjRcIiByeT1cIjRcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIxODRcIiBmaWxsPVwidXJsKCNid3NxdWFyZTJweClcIiBzdHJva2Utd2lkdGg9XCIwXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZ3ZS1waWNrZXItYmFja2dyb3VuZFwiXG4gICAgICAgIChjbGljayk9XCJvbkFscGhhQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtaW1hZ2UnOiAnbGluZWFyLWdyYWRpZW50KCAnICsgY29sb3IgKyAnICwgdHJhbnNwYXJlbnQpJyB9XCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZ3ZS1rbm9iXCJcbiAgICAgICAgY2RrRHJhZ0JvdW5kYXJ5PVwiLmZ3ZS1hbHBoYS1waWNrZXJcIlxuICAgICAgICBjZGtEcmFnTG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgY2RrRHJhZ1xuICAgICAgICBbY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb25dPVwieyB4OiAzLCB5OiBhbHBoYUtub2JPZmZzZXQgfVwiXG4gICAgICAgIChjZGtEcmFnTW92ZWQpPVwib25BbHBoYURyYWcoJGV2ZW50KVwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImNvbG9yXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZ3ZS1tdC1zXCIgKm5nSWY9XCIhcGFsZXR0ZU9ubHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZndlLXR5cGUtc2VsZWN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZndlLXR5cGUtaW5kaWNhdG9yXCIgKGNsaWNrKT1cImlzU2VsZWN0T3BlbiA9ICFpc1NlbGVjdE9wZW5cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmd2UtaW5wdXQtdHlwZVwiPnt7IGlucHV0VHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJmd2UtaWNvbiBmd2UtaWNvbi1hcnJvd3MtY29sbGFwc2VcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmd2UtcG9wb3ZlclwiICpuZ0lmPVwiaXNTZWxlY3RPcGVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmd2UtdHlwZS1pdGVtXCIgKGNsaWNrKT1cIm9uQ2hhbmdlVHlwZSgnSEVYJylcIiBbY2xhc3MuZndlLXNlbGVjdGVkXT1cImlucHV0VHlwZSA9PT0gJ0hFWCdcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZ3ZS1pY29uIGZ3ZS1pY29uLW1lbnUtY2hlY2tcIj48L2k+IEhFWFxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3ZS10eXBlLWl0ZW1cIiAoY2xpY2spPVwib25DaGFuZ2VUeXBlKCdSR0InKVwiIFtjbGFzcy5md2Utc2VsZWN0ZWRdPVwiaW5wdXRUeXBlID09PSAnUkdCJ1wiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZndlLWljb24gZndlLWljb24tbWVudS1jaGVja1wiPjwvaT4gUkdCXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZndlLWQtZmxleFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlucHV0VHlwZSA9PT0gJ0hFWCdcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZndlLWlucHV0LXRleHQgZndlLWhleC1pbnB1dFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaGV4SW5wdXRDb2xvclwiIChibHVyKT1cIm9uSGV4Qmx1cigpXCIgKGlucHV0KT1cIm9uSGV4SW5wdXQoKVwiIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdSR0InXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0IGZ3ZS1yZWQtaW5wdXRcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwicmVkSW5wdXRcIiAoaW5wdXQpPVwib25SZ2JJbnB1dChyZWRJbnB1dCwgJ3InKVwiIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0IGZ3ZS1ncmVlbi1pbnB1dFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgWyhuZ01vZGVsKV09XCJncmVlbklucHV0XCIgKGlucHV0KT1cIm9uUmdiSW5wdXQoZ3JlZW5JbnB1dCwgJ2cnKVwiIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0IGZ3ZS1ibHVlLWlucHV0XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgbWF4PVwiMjU1XCIgWyhuZ01vZGVsKV09XCJibHVlSW5wdXRcIiAoaW5wdXQpPVwib25SZ2JJbnB1dChibHVlSW5wdXQsICdiJylcIiAvPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0IGZ3ZS1hbHBoYS1pbnB1dCBmd2UtbWwtYXV0b1wiICpuZ0lmPVwidXNlQWxwaGFcIj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgbWF4PVwiMTAwXCIgWyhuZ01vZGVsKV09XCJhbHBoYUlucHV0XCIgKGlucHV0KT1cIm9uQWxwaGFJbnB1dChhbHBoYUlucHV0KVwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmd2UtcGVyY2VudC1jaGFyXCI+JTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZ3ZS1tdC14cyBmd2UtY29sb3ItZ3JpZFwiICpuZ0lmPVwicGFsZXR0ZSAmJiBwYWxldHRlLmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmd2UtcmVtb3ZlLWNvbG9yLWJ1dHRvblwiIChjbGljayk9XCJvblJlbW92ZUNvbG9yKClcIj5cbiAgICAgIDxzdmdcbiAgICAgICAgY2xhc3M9XCJmd2Utbm8tY29sb3ItcGF0dGVyblwiXG4gICAgICAgIHZlcnNpb249XCIxLjFcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgICAgICAgaWQ9XCJjYW52YXMxXCJcbiAgICAgICAgd2lkdGg9XCIxOFwiXG4gICAgICAgIGhlaWdodD1cIjE4XCJcbiAgICAgID5cbiAgICAgICAgPGRlZnM+XG4gICAgICAgICAgPHBhdHRlcm4gaWQ9XCJid3NxdWFyZTJweFwiIHdpZHRoPVwiNFwiIGhlaWdodD1cIjRcIiBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiBzdHJva2U9XCJub25lXCIgZmlsbD1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiBzdHJva2U9XCJub25lXCIgZmlsbD1cIiNlNWU4ZWJcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMlwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiBzdHJva2U9XCJub25lXCIgZmlsbD1cIiNlNWU4ZWJcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMlwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiBzdHJva2U9XCJub25lXCIgZmlsbD1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgIDwvcGF0dGVybj5cbiAgICAgICAgPC9kZWZzPlxuICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgcng9XCIwXCIgcnk9XCIwXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cInVybCgjYndzcXVhcmUycHgpXCIgc3Ryb2tlLXdpZHRoPVwiMFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIDxpIGNsYXNzPVwiZndlLWljb24gZndlLWljb24tbWVudS1jaGVja1wiIFtjbGFzcy5md2UtY29sb3ItdGV4dF09XCIhY29sb3JcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sb3JJdGVtIG9mIHBhbGV0dGVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmd2UtY29sb3ItaXRlbVwiXG4gICAgICAgIFtjbGFzcy5md2Utd2hpdGUtaXRlbV09XCJjb2xvckl0ZW0udG9VcHBlckNhc2UoKSA9PT0gJyNGRkZGRkYnXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiY29sb3JJdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cImNvbG9yID0gY29sb3JJdGVtXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJmd2UtaWNvbiBmd2UtaWNvbi1tZW51LWNoZWNrXCIgKm5nSWY9XCJjb2xvckl0ZW0udG9VcHBlckNhc2UoKSA9PT0gY29sb3JcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==