ng-tailwind 6.0.0 → 6.0.2

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 (165) hide show
  1. package/components/ngt-action/ngt-action.component.d.ts +1 -1
  2. package/components/ngt-button/ngt-button.component.d.ts +1 -1
  3. package/components/ngt-checkbox/ngt-checkbox.component.d.ts +1 -1
  4. package/components/ngt-content/ngt-content.component.d.ts +1 -1
  5. package/components/ngt-context-menu/ngt-context-menu.directive.d.ts +1 -1
  6. package/components/ngt-datatable/ngt-datatable.component.d.ts +1 -1
  7. package/components/ngt-datatable/ngt-td-check/ngt-td-check.component.d.ts +1 -1
  8. package/components/ngt-datatable/ngt-th/ngt-th.component.d.ts +1 -1
  9. package/components/ngt-datatable/ngt-tr/ngt-tr.component.d.ts +1 -1
  10. package/components/ngt-date/ngt-date.component.d.ts +3 -6
  11. package/components/ngt-date/ngt-date.module.d.ts +4 -5
  12. package/components/ngt-dropdown/ngt-dropdown.component.d.ts +1 -1
  13. package/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.d.ts +1 -3
  14. package/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.d.ts +1 -1
  15. package/components/ngt-dropzone/ngt-dropzone.component.d.ts +1 -1
  16. package/components/ngt-dropzone/ngt-dropzone.module.d.ts +2 -3
  17. package/components/ngt-floating-button/ngt-floating-button.component.d.ts +1 -1
  18. package/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.d.ts +1 -1
  19. package/components/ngt-form/ngt-form.component.d.ts +1 -1
  20. package/components/ngt-header-nav/ngt-header-nav.component.d.ts +1 -1
  21. package/components/ngt-helper/ngt-helper.component.d.ts +1 -1
  22. package/components/ngt-input/ngt-input.component.d.ts +1 -1
  23. package/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.d.ts +1 -1
  24. package/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.d.ts +1 -1
  25. package/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.d.ts +1 -1
  26. package/components/ngt-modal/ngt-modal.component.d.ts +1 -1
  27. package/components/ngt-multi-select/ngt-multi-select.component.d.ts +1 -1
  28. package/components/ngt-pagination/ngt-pagination.component.d.ts +1 -1
  29. package/components/ngt-popover/ngt-popover.component.d.ts +1 -1
  30. package/components/ngt-popover/ngt-popover.directive.d.ts +1 -1
  31. package/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.d.ts +1 -1
  32. package/components/ngt-portlet/ngt-portlet.component.d.ts +1 -1
  33. package/components/ngt-radio-button/ngt-radio-button.component.d.ts +1 -1
  34. package/components/ngt-section/ngt-section.component.d.ts +1 -1
  35. package/components/ngt-select/ngt-select.component.d.ts +1 -1
  36. package/components/ngt-shining/ngt-shining.component.d.ts +1 -1
  37. package/components/ngt-sidenav/ngt-sidenav.component.d.ts +1 -1
  38. package/components/ngt-slider/ngt-slider.component.d.ts +1 -1
  39. package/components/ngt-svg/ngt-svg.component.d.ts +1 -1
  40. package/components/ngt-tag/ngt-tag.component.d.ts +1 -1
  41. package/components/ngt-textarea/ngt-textarea.component.d.ts +1 -1
  42. package/components/ngt-validation/ngt-validation.component.d.ts +1 -1
  43. package/directives/ngt-stylizable/ngt-stylizable.directive.d.ts +1 -1
  44. package/{esm2020 → esm2022}/components/ngt-action/ngt-action.component.mjs +4 -4
  45. package/{esm2020 → esm2022}/components/ngt-action/ngt-action.module.mjs +9 -9
  46. package/{esm2020 → esm2022}/components/ngt-button/ngt-button.component.mjs +4 -4
  47. package/{esm2020 → esm2022}/components/ngt-button/ngt-button.module.mjs +9 -9
  48. package/esm2022/components/ngt-checkbox/ngt-checkbox.component.mjs +192 -0
  49. package/{esm2020 → esm2022}/components/ngt-checkbox/ngt-checkbox.module.mjs +9 -9
  50. package/{esm2020 → esm2022}/components/ngt-content/ngt-content.component.mjs +4 -4
  51. package/{esm2020 → esm2022}/components/ngt-content/ngt-content.module.mjs +5 -5
  52. package/{esm2020 → esm2022}/components/ngt-context-menu/ngt-context-menu.component.mjs +4 -4
  53. package/{esm2020 → esm2022}/components/ngt-context-menu/ngt-context-menu.directive.mjs +4 -4
  54. package/{esm2020 → esm2022}/components/ngt-context-menu/ngt-context-menu.module.mjs +9 -9
  55. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-datatable.component.mjs +4 -4
  56. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-datatable.module.mjs +39 -39
  57. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +4 -4
  58. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-td/ngt-td.component.mjs +4 -4
  59. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-th/ngt-th.component.mjs +4 -4
  61. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +4 -4
  63. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +5 -5
  64. package/esm2022/components/ngt-date/ngt-date.component.mjs +425 -0
  65. package/esm2022/components/ngt-date/ngt-date.module.mjs +36 -0
  66. package/{esm2020 → esm2022}/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +4 -4
  67. package/esm2022/components/ngt-dropdown/ngt-dropdown.component.mjs +205 -0
  68. package/{esm2020 → esm2022}/components/ngt-dropdown/ngt-dropdown.module.mjs +5 -5
  69. package/esm2022/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +54 -0
  70. package/esm2022/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +61 -0
  71. package/{esm2020 → esm2022}/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +4 -4
  72. package/{esm2020 → esm2022}/components/ngt-dropzone/ngt-dropzone.component.mjs +8 -8
  73. package/esm2022/components/ngt-dropzone/ngt-dropzone.module.mjs +55 -0
  74. package/esm2022/components/ngt-floating-button/ngt-floating-button.component.mjs +119 -0
  75. package/{esm2020 → esm2022}/components/ngt-floating-button/ngt-floating-button.module.mjs +9 -9
  76. package/{esm2020 → esm2022}/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +4 -4
  77. package/esm2022/components/ngt-form/ngt-form.component.mjs +207 -0
  78. package/{esm2020 → esm2022}/components/ngt-form/ngt-form.module.mjs +7 -7
  79. package/{esm2020 → esm2022}/components/ngt-header-nav/ngt-header-nav.component.mjs +4 -4
  80. package/{esm2020 → esm2022}/components/ngt-header-nav/ngt-header-nav.module.mjs +5 -5
  81. package/{esm2020 → esm2022}/components/ngt-helper/ngt-helper.component.mjs +4 -4
  82. package/{esm2020 → esm2022}/components/ngt-helper/ngt-helper.module.mjs +9 -9
  83. package/{esm2020 → esm2022}/components/ngt-input/ngt-input.component.mjs +8 -8
  84. package/{esm2020 → esm2022}/components/ngt-input/ngt-input.module.mjs +19 -19
  85. package/{esm2020 → esm2022}/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +4 -4
  86. package/{esm2020 → esm2022}/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +4 -4
  87. package/{esm2020 → esm2022}/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +5 -5
  88. package/esm2022/components/ngt-modal/ngt-modal.component.mjs +122 -0
  89. package/{esm2020 → esm2022}/components/ngt-modal/ngt-modal.module.mjs +11 -11
  90. package/{esm2020 → esm2022}/components/ngt-multi-select/ngt-multi-select.component.mjs +8 -8
  91. package/{esm2020 → esm2022}/components/ngt-multi-select/ngt-multi-select.module.mjs +19 -19
  92. package/{esm2020 → esm2022}/components/ngt-pagination/ngt-pagination.component.mjs +4 -4
  93. package/{esm2020 → esm2022}/components/ngt-pagination/ngt-pagination.module.mjs +13 -13
  94. package/esm2022/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +59 -0
  95. package/{esm2020 → esm2022}/components/ngt-popover/ngt-popover.component.mjs +4 -4
  96. package/{esm2020 → esm2022}/components/ngt-popover/ngt-popover.directive.mjs +4 -4
  97. package/{esm2020 → esm2022}/components/ngt-popover/ngt-popover.module.mjs +10 -10
  98. package/{esm2020 → esm2022}/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +4 -4
  99. package/{esm2020 → esm2022}/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +4 -4
  100. package/{esm2020 → esm2022}/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +4 -4
  101. package/esm2022/components/ngt-portlet/ngt-portlet.component.mjs +74 -0
  102. package/{esm2020 → esm2022}/components/ngt-portlet/ngt-portlet.module.mjs +15 -15
  103. package/{esm2020 → esm2022}/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +4 -4
  104. package/{esm2020 → esm2022}/components/ngt-radio-button/ngt-radio-button.component.mjs +8 -8
  105. package/{esm2020 → esm2022}/components/ngt-radio-button/ngt-radio-button.module.mjs +9 -9
  106. package/esm2022/components/ngt-section/ngt-section.component.mjs +151 -0
  107. package/{esm2020 → esm2022}/components/ngt-section/ngt-section.module.mjs +11 -11
  108. package/{esm2020 → esm2022}/components/ngt-select/ngt-select.component.mjs +8 -8
  109. package/{esm2020 → esm2022}/components/ngt-select/ngt-select.directive.mjs +10 -10
  110. package/{esm2020 → esm2022}/components/ngt-select/ngt-select.module.mjs +25 -25
  111. package/{esm2020 → esm2022}/components/ngt-shining/ngt-shining.component.mjs +5 -5
  112. package/{esm2020 → esm2022}/components/ngt-shining/ngt-shining.module.mjs +5 -5
  113. package/{esm2020 → esm2022}/components/ngt-sidenav/ngt-sidenav.component.mjs +6 -6
  114. package/{esm2020 → esm2022}/components/ngt-sidenav/ngt-sidenav.module.mjs +5 -5
  115. package/{esm2020 → esm2022}/components/ngt-slider/ngt-slider.component.mjs +9 -9
  116. package/{esm2020 → esm2022}/components/ngt-slider/ngt-slider.module.mjs +7 -7
  117. package/{esm2020 → esm2022}/components/ngt-svg/ngt-svg.component.mjs +4 -4
  118. package/{esm2020 → esm2022}/components/ngt-svg/ngt-svg.module.mjs +8 -8
  119. package/{esm2020 → esm2022}/components/ngt-tag/ngt-tag.component.mjs +4 -4
  120. package/{esm2020 → esm2022}/components/ngt-tag/ngt-tag.module.mjs +7 -7
  121. package/{esm2020 → esm2022}/components/ngt-textarea/ngt-textarea.component.mjs +8 -8
  122. package/{esm2020 → esm2022}/components/ngt-textarea/ngt-textarea.module.mjs +17 -17
  123. package/{esm2020 → esm2022}/components/ngt-validation/ngt-validation.component.mjs +4 -4
  124. package/{esm2020 → esm2022}/components/ngt-validation/ngt-validation.module.mjs +5 -5
  125. package/{esm2020 → esm2022}/directives/ngt-stylizable/ngt-stylizable.directive.mjs +4 -4
  126. package/{esm2020 → esm2022}/directives/ngt-stylizable/ngt-stylizable.module.mjs +5 -5
  127. package/{fesm2020 → fesm2022}/ng-tailwind.mjs +631 -644
  128. package/fesm2022/ng-tailwind.mjs.map +1 -0
  129. package/package.json +7 -16
  130. package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +0 -192
  131. package/esm2020/components/ngt-date/ngt-date.component.mjs +0 -435
  132. package/esm2020/components/ngt-date/ngt-date.module.mjs +0 -40
  133. package/esm2020/components/ngt-dropdown/ngt-dropdown.component.mjs +0 -205
  134. package/esm2020/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +0 -54
  135. package/esm2020/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +0 -66
  136. package/esm2020/components/ngt-dropzone/ngt-dropzone.module.mjs +0 -55
  137. package/esm2020/components/ngt-floating-button/ngt-floating-button.component.mjs +0 -119
  138. package/esm2020/components/ngt-form/ngt-form.component.mjs +0 -207
  139. package/esm2020/components/ngt-modal/ngt-modal.component.mjs +0 -122
  140. package/esm2020/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +0 -59
  141. package/esm2020/components/ngt-portlet/ngt-portlet.component.mjs +0 -74
  142. package/esm2020/components/ngt-section/ngt-section.component.mjs +0 -151
  143. package/fesm2015/ng-tailwind.mjs +0 -8913
  144. package/fesm2015/ng-tailwind.mjs.map +0 -1
  145. package/fesm2020/ng-tailwind.mjs.map +0 -1
  146. /package/{esm2020 → esm2022}/animations/ngt-angular-animations.mjs +0 -0
  147. /package/{esm2020 → esm2022}/base/ngt-base-ng-model.mjs +0 -0
  148. /package/{esm2020 → esm2022}/components/ngt-dropzone/ngt-dropzone.meta.mjs +0 -0
  149. /package/{esm2020 → esm2022}/enums/size.enum.mjs +0 -0
  150. /package/{esm2020 → esm2022}/helpers/enum/enum.mjs +0 -0
  151. /package/{esm2020 → esm2022}/helpers/form/form.mjs +0 -0
  152. /package/{esm2020 → esm2022}/helpers/input-mask/input-mask.helper.mjs +0 -0
  153. /package/{esm2020 → esm2022}/helpers/promise/promise-helper.mjs +0 -0
  154. /package/{esm2020 → esm2022}/helpers/routing/route.mjs +0 -0
  155. /package/{esm2020 → esm2022}/helpers/uuid.mjs +0 -0
  156. /package/{esm2020 → esm2022}/ng-tailwind.mjs +0 -0
  157. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  158. /package/{esm2020 → esm2022}/services/http/ngt-attachment-http.service.mjs +0 -0
  159. /package/{esm2020 → esm2022}/services/http/ngt-http-form.service.mjs +0 -0
  160. /package/{esm2020 → esm2022}/services/http/ngt-http-resource.service.mjs +0 -0
  161. /package/{esm2020 → esm2022}/services/http/ngt-http-validation.service.mjs +0 -0
  162. /package/{esm2020 → esm2022}/services/http/ngt-http.service.mjs +0 -0
  163. /package/{esm2020 → esm2022}/services/http/ngt-translate.service.mjs +0 -0
  164. /package/{esm2020 → esm2022}/services/ngt-stylizable/ngt-stylizable.service.mjs +0 -0
  165. /package/{esm2020 → esm2022}/services/validation/ngt-ability-validation.service.mjs +0 -0
package/package.json CHANGED
@@ -1,28 +1,21 @@
1
1
  {
2
2
  "name": "ng-tailwind",
3
- "version": "6.0.0",
3
+ "version": "6.0.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=15.0.0",
6
6
  "@angular/core": ">=15.0.0",
7
- "flatpickr": ">=4.6.3",
8
- "ng2-flatpickr": ">=9.0.0",
9
7
  "@ng-select/ng-select": ">=10.0.3",
10
- "ngx-dropzone": ">=2.2.2",
11
- "eloverde-doc-viewer": ">=1.1.3",
8
+ "ngx-dropzone": ">=3.1.0",
12
9
  "viewerjs": ">=1.10.5",
13
10
  "rxjs": ">=7.5.5",
14
- "angular-svg-icon": "^8.0.0"
11
+ "angular-svg-icon": ">=8.0.0"
15
12
  },
16
13
  "dependencies": {
17
14
  "moment": "^2.29.4",
18
15
  "inputmask": "^5.0.9",
19
16
  "tslib": "^2.4.0"
20
17
  },
21
- "module": "fesm2015/ng-tailwind.mjs",
22
- "es2020": "fesm2020/ng-tailwind.mjs",
23
- "esm2020": "esm2020/ng-tailwind.mjs",
24
- "fesm2020": "fesm2020/ng-tailwind.mjs",
25
- "fesm2015": "fesm2015/ng-tailwind.mjs",
18
+ "module": "fesm2022/ng-tailwind.mjs",
26
19
  "typings": "index.d.ts",
27
20
  "exports": {
28
21
  "./package.json": {
@@ -30,11 +23,9 @@
30
23
  },
31
24
  ".": {
32
25
  "types": "./index.d.ts",
33
- "esm2020": "./esm2020/ng-tailwind.mjs",
34
- "es2020": "./fesm2020/ng-tailwind.mjs",
35
- "es2015": "./fesm2015/ng-tailwind.mjs",
36
- "node": "./fesm2015/ng-tailwind.mjs",
37
- "default": "./fesm2020/ng-tailwind.mjs"
26
+ "esm2022": "./esm2022/ng-tailwind.mjs",
27
+ "esm": "./esm2022/ng-tailwind.mjs",
28
+ "default": "./fesm2022/ng-tailwind.mjs"
38
29
  }
39
30
  },
40
31
  "sideEffects": false
@@ -1,192 +0,0 @@
1
- import { animate, state, style, transition, trigger } from '@angular/animations';
2
- import { Component, Host, Input, Optional, Self, SkipSelf, ViewChild, } from '@angular/core';
3
- import { ControlContainer, NgForm } from '@angular/forms';
4
- import { NgtBaseNgModel, NgtMakeProvider } from '../../base/ngt-base-ng-model';
5
- import { getEnumFromString } from '../../helpers/enum/enum';
6
- import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/forms";
9
- import * as i2 from "../../directives/ngt-stylizable/ngt-stylizable.directive";
10
- import * as i3 from "../ngt-form/ngt-form.component";
11
- import * as i4 from "../ngt-section/ngt-section.component";
12
- import * as i5 from "../ngt-modal/ngt-modal.component";
13
- import * as i6 from "@angular/common";
14
- import * as i7 from "../ngt-shining/ngt-shining.component";
15
- import * as i8 from "../ngt-helper/ngt-helper.component";
16
- export class NgtCheckboxComponent extends NgtBaseNgModel {
17
- constructor(injector, renderer, formContainer, ngtStylizableDirective, ngtForm, ngtSection, ngtModal) {
18
- super();
19
- this.injector = injector;
20
- this.renderer = renderer;
21
- this.formContainer = formContainer;
22
- this.ngtStylizableDirective = ngtStylizableDirective;
23
- this.ngtForm = ngtForm;
24
- this.ngtSection = ngtSection;
25
- this.ngtModal = ngtModal;
26
- this.shining = false;
27
- this.isDisabled = false;
28
- this.isClickDisabled = false;
29
- this.mode = NgtCheckboxMode.DEFAULT;
30
- this.helpTextColor = 'text-green-500';
31
- this.helperAutoXReverse = true;
32
- this.subscriptions = [];
33
- if (this.ngtStylizableDirective) {
34
- this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
35
- }
36
- else {
37
- this.ngtStyle = new NgtStylizableService();
38
- }
39
- this.ngtStyle.load(this.injector, 'NgtCheckbox', {
40
- h: 'h-6',
41
- w: 'w-6',
42
- text: 'text-sm',
43
- fontCase: '',
44
- color: {
45
- bg: 'bg-gray-500',
46
- text: 'text-gray-500',
47
- border: 'border-gray-500',
48
- }
49
- });
50
- }
51
- ngAfterViewInit() {
52
- this.renderer.listen(this.element.nativeElement, 'change', (value) => {
53
- this.onNativeChange(this.element.nativeElement.checked);
54
- });
55
- }
56
- ngOnChanges(changes) {
57
- if (changes.mode) {
58
- this.mode = getEnumFromString(changes.mode.currentValue, NgtCheckboxMode);
59
- }
60
- }
61
- ngOnDestroy() {
62
- this.destroySubscriptions();
63
- }
64
- change(value) {
65
- if (this.hasChangesBetweenModels()) {
66
- this.element.nativeElement.checked = value;
67
- }
68
- }
69
- onNativeChange(value) {
70
- if (this.hasChangesBetweenModels()) {
71
- this.value = value;
72
- }
73
- }
74
- hasChangesBetweenModels() {
75
- return this.element.nativeElement.checked !== this.value;
76
- }
77
- isToggleMode() {
78
- return this.mode === NgtCheckboxMode.TOGGLE;
79
- }
80
- isSideToggleMode() {
81
- return this.mode === NgtCheckboxMode.SIDE_TOGGLE;
82
- }
83
- isDefaultMode() {
84
- return this.mode === NgtCheckboxMode.DEFAULT;
85
- }
86
- isRadioMode() {
87
- return this.mode === NgtCheckboxMode.RADIO;
88
- }
89
- disabled() {
90
- return this.isDisabled || this.isDisabledByParent();
91
- }
92
- isDisabledByParent() {
93
- return this.ngtForm?.isDisabled
94
- || this.ngtSection?.isDisabled
95
- || this.ngtModal?.isDisabled;
96
- }
97
- destroySubscriptions() {
98
- this.subscriptions.forEach(subscription => subscription.unsubscribe());
99
- this.subscriptions = [];
100
- }
101
- }
102
- NgtCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtCheckboxComponent, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i1.ControlContainer, host: true, optional: true }, { token: i2.NgtStylizableDirective, optional: true, self: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i4.NgtSectionComponent, optional: true, skipSelf: true }, { token: i5.NgtModalComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
103
- NgtCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtCheckboxComponent, selector: "ngt-checkbox", inputs: { label: "label", shining: "shining", isDisabled: "isDisabled", isClickDisabled: "isClickDisabled", name: "name", mode: "mode", helpTitle: "helpTitle", helpTextColor: "helpTextColor", helpText: "helpText", helperAutoXReverse: "helperAutoXReverse" }, providers: [
104
- NgtMakeProvider(NgtCheckboxComponent)
105
- ], viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label class=\"flex items-center {{ disabled() ? 'cursor-not-allowed opacity-50' : 'cursor-pointer' }}\"\n [class.flex-col]='isToggleMode()' style=\"max-width: max-content;\">\n <input type=\"checkbox\" [name]='name' class=\"hidden\" ([ngModel])='value' [disabled]=\"disabled() || isClickDisabled\"\n #element>\n\n <span *ngIf=\"isToggleMode() && label\" class=\"flex\">\n <span class=\"{{ ngtStyle.compile(['text', 'fontCase']) }} mb-2\">{{ label }}</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n </span>\n\n <ng-container *ngIf=\"isDefaultMode()\">\n <div style=\"transition: background-color .2s ease-out\" class=\"{{ value ? ngtStyle.compile(['color.bg']) : 'bg-white' }} {{ ngtStyle.compile(['h', 'w']) }}\n shadow rounded border border-gray-400 {{ !shining ? 'flex justify-center' : 'hidden' }}\">\n <svg class=\"fill-current self-center text-white pointer-events-none\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\">\n <path d=\"M0 11l2-2 5 5L18 3l2 2L7 18z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isRadioMode()\">\n <div style=\"transition: background-color .2s ease-out\"\n class=\"{{ value ? ngtStyle.compile(['color.border', 'color.text']) : 'border-gray-500' }}\n shadow w-6 h-6 rounded-full border-2 border-gray-400 {{ !shining ? 'flex justify-center' : 'hidden' }}\">\n <svg *ngIf=\"value\" class=\"fill-current self-center h-3\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 29.107 29.107\">\n <path\n d=\"M14.554 0C6.561 0 0 6.562 0 14.552c0 7.996 6.561 14.555 14.554 14.555 7.996 0 14.553-6.559 14.553-14.555C29.106 6.562 22.55 0 14.554 0z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isToggleMode() || isSideToggleMode()\">\n <div class=\"shadow w-14 h-7 rounded-full border border-gray-400 {{ shining ? 'hidden' : 'flex' }}\"\n [class.justify-end]=\"value\" style=\"padding: 1px;\">\n <div *ngIf=\"value\"\n class=\"flex text-sm text-white {{ ngtStyle.compile(['color.bg']) }} pointer-events-none rounded-full px-1.5 py-2\"\n @slideLeftToRight>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n <path d=\"M0 11l2-2 5 5L18 3l2 2L7 18z\" />\n </svg>\n </div>\n\n <div *ngIf=\"!value\" class=\"flex text-xl text-white bg-gray-300 pointer-events-none rounded-full px-1 py-3\"\n @slideRightToLeft>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path class=\"heroicon-ui\"\n d=\"M16.24 14.83a1 1 0 0 1-1.41 1.41L12 13.41l-2.83 2.83a1 1 0 0 1-1.41-1.41L10.59 12 7.76 9.17a1 1 0 0 1 1.41-1.41L12 10.59l2.83-2.83a1 1 0 0 1 1.41 1.41L13.41 12l2.83 2.83z\" />\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf='label && !shining && !isToggleMode()'>\n <span class=\"{{ ngtStyle.compile(['text', 'fontCase']) }} ml-2\">{{ label }}</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n </ng-container>\n</label>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"w-16 h-12\"></ngt-shining>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i8.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }], viewProviders: [
106
- { provide: ControlContainer, useExisting: NgForm }
107
- ], animations: [
108
- trigger('slideLeftToRight', [
109
- state('void', style({ transform: 'translateX(-4px) rotate(45deg)', opacity: 0 })),
110
- transition(':enter', [
111
- animate(200)
112
- ])
113
- ]),
114
- trigger('slideRightToLeft', [
115
- state('void', style({ transform: 'translateX(4px) rotate(45deg)', opacity: 0 })),
116
- transition(':enter', [
117
- animate(200)
118
- ])
119
- ])
120
- ] });
121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtCheckboxComponent, decorators: [{
122
- type: Component,
123
- args: [{ selector: 'ngt-checkbox', providers: [
124
- NgtMakeProvider(NgtCheckboxComponent)
125
- ], viewProviders: [
126
- { provide: ControlContainer, useExisting: NgForm }
127
- ], animations: [
128
- trigger('slideLeftToRight', [
129
- state('void', style({ transform: 'translateX(-4px) rotate(45deg)', opacity: 0 })),
130
- transition(':enter', [
131
- animate(200)
132
- ])
133
- ]),
134
- trigger('slideRightToLeft', [
135
- state('void', style({ transform: 'translateX(4px) rotate(45deg)', opacity: 0 })),
136
- transition(':enter', [
137
- animate(200)
138
- ])
139
- ])
140
- ], template: "<label class=\"flex items-center {{ disabled() ? 'cursor-not-allowed opacity-50' : 'cursor-pointer' }}\"\n [class.flex-col]='isToggleMode()' style=\"max-width: max-content;\">\n <input type=\"checkbox\" [name]='name' class=\"hidden\" ([ngModel])='value' [disabled]=\"disabled() || isClickDisabled\"\n #element>\n\n <span *ngIf=\"isToggleMode() && label\" class=\"flex\">\n <span class=\"{{ ngtStyle.compile(['text', 'fontCase']) }} mb-2\">{{ label }}</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n </span>\n\n <ng-container *ngIf=\"isDefaultMode()\">\n <div style=\"transition: background-color .2s ease-out\" class=\"{{ value ? ngtStyle.compile(['color.bg']) : 'bg-white' }} {{ ngtStyle.compile(['h', 'w']) }}\n shadow rounded border border-gray-400 {{ !shining ? 'flex justify-center' : 'hidden' }}\">\n <svg class=\"fill-current self-center text-white pointer-events-none\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\">\n <path d=\"M0 11l2-2 5 5L18 3l2 2L7 18z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isRadioMode()\">\n <div style=\"transition: background-color .2s ease-out\"\n class=\"{{ value ? ngtStyle.compile(['color.border', 'color.text']) : 'border-gray-500' }}\n shadow w-6 h-6 rounded-full border-2 border-gray-400 {{ !shining ? 'flex justify-center' : 'hidden' }}\">\n <svg *ngIf=\"value\" class=\"fill-current self-center h-3\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 29.107 29.107\">\n <path\n d=\"M14.554 0C6.561 0 0 6.562 0 14.552c0 7.996 6.561 14.555 14.554 14.555 7.996 0 14.553-6.559 14.553-14.555C29.106 6.562 22.55 0 14.554 0z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isToggleMode() || isSideToggleMode()\">\n <div class=\"shadow w-14 h-7 rounded-full border border-gray-400 {{ shining ? 'hidden' : 'flex' }}\"\n [class.justify-end]=\"value\" style=\"padding: 1px;\">\n <div *ngIf=\"value\"\n class=\"flex text-sm text-white {{ ngtStyle.compile(['color.bg']) }} pointer-events-none rounded-full px-1.5 py-2\"\n @slideLeftToRight>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n <path d=\"M0 11l2-2 5 5L18 3l2 2L7 18z\" />\n </svg>\n </div>\n\n <div *ngIf=\"!value\" class=\"flex text-xl text-white bg-gray-300 pointer-events-none rounded-full px-1 py-3\"\n @slideRightToLeft>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path class=\"heroicon-ui\"\n d=\"M16.24 14.83a1 1 0 0 1-1.41 1.41L12 13.41l-2.83 2.83a1 1 0 0 1-1.41-1.41L10.59 12 7.76 9.17a1 1 0 0 1 1.41-1.41L12 10.59l2.83-2.83a1 1 0 0 1 1.41 1.41L13.41 12l2.83 2.83z\" />\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf='label && !shining && !isToggleMode()'>\n <span class=\"{{ ngtStyle.compile(['text', 'fontCase']) }} ml-2\">{{ label }}</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n </ng-container>\n</label>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"w-16 h-12\"></ngt-shining>\n </div>\n</ng-container>\n" }]
141
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.Renderer2 }, { type: i1.ControlContainer, decorators: [{
142
- type: Optional
143
- }, {
144
- type: Host
145
- }] }, { type: i2.NgtStylizableDirective, decorators: [{
146
- type: Self
147
- }, {
148
- type: Optional
149
- }] }, { type: i3.NgtFormComponent, decorators: [{
150
- type: Optional
151
- }, {
152
- type: SkipSelf
153
- }] }, { type: i4.NgtSectionComponent, decorators: [{
154
- type: Optional
155
- }, {
156
- type: SkipSelf
157
- }] }, { type: i5.NgtModalComponent, decorators: [{
158
- type: Optional
159
- }, {
160
- type: SkipSelf
161
- }] }]; }, propDecorators: { element: [{
162
- type: ViewChild,
163
- args: ['element', { static: true }]
164
- }], label: [{
165
- type: Input
166
- }], shining: [{
167
- type: Input
168
- }], isDisabled: [{
169
- type: Input
170
- }], isClickDisabled: [{
171
- type: Input
172
- }], name: [{
173
- type: Input
174
- }], mode: [{
175
- type: Input
176
- }], helpTitle: [{
177
- type: Input
178
- }], helpTextColor: [{
179
- type: Input
180
- }], helpText: [{
181
- type: Input
182
- }], helperAutoXReverse: [{
183
- type: Input
184
- }] } });
185
- export var NgtCheckboxMode;
186
- (function (NgtCheckboxMode) {
187
- NgtCheckboxMode["DEFAULT"] = "DEFAULT";
188
- NgtCheckboxMode["TOGGLE"] = "TOGGLE";
189
- NgtCheckboxMode["SIDE_TOGGLE"] = "SIDE_TOGGLE";
190
- NgtCheckboxMode["RADIO"] = "RADIO";
191
- })(NgtCheckboxMode || (NgtCheckboxMode = {}));
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1jaGVja2JveC9uZ3QtY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWNoZWNrYm94L25ndC1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFFSCxTQUFTLEVBRVQsSUFBSSxFQUVKLEtBQUssRUFHTCxRQUFRLEVBRVIsSUFBSSxFQUVKLFFBQVEsRUFDUixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7QUE4QjVGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUFjO0lBa0JwRCxZQUNZLFFBQWtCLEVBQ2xCLFFBQW1CLEVBR3BCLGFBQStCLEVBRzlCLHNCQUE4QyxFQUc5QyxPQUF5QixFQUd6QixVQUErQixFQUcvQixRQUEyQjtRQUVuQyxLQUFLLEVBQUUsQ0FBQztRQWxCQSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFHcEIsa0JBQWEsR0FBYixhQUFhLENBQWtC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S0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUs7O0FBOEdWLE1BQU0sQ0FBTixJQUFZLGVBS1g7QUFMRCxXQUFZLGVBQWU7SUFDdkIsc0NBQW1CLENBQUE7SUFDbkIsb0NBQWlCLENBQUE7SUFDakIsOENBQTJCLENBQUE7SUFDM0Isa0NBQWUsQ0FBQTtBQUNuQixDQUFDLEVBTFcsZUFBZSxLQUFmLGVBQWUsUUFLMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5ndFNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9uZ3Qtc2VjdGlvbi9uZ3Qtc2VjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtbW9kYWwvbmd0LW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWNoZWNrYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWNoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgTmd0TWFrZVByb3ZpZGVyKE5ndENoZWNrYm94Q29tcG9uZW50KVxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzbGlkZUxlZnRUb1JpZ2h0JywgW1xuICAgICAgICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTRweCkgcm90YXRlKDQ1ZGVnKScsIG9wYWNpdHk6IDAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoMjAwKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSksXG5cbiAgICAgICAgdHJpZ2dlcignc2xpZGVSaWdodFRvTGVmdCcsIFtcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDRweCkgcm90YXRlKDQ1ZGVnKScsIG9wYWNpdHk6IDAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoMjAwKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5ndENoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgTmd0QmFzZU5nTW9kZWwgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnZWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHNoaW5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0NsaWNrRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtb2RlOiBOZ3RDaGVja2JveE1vZGUgPSBOZ3RDaGVja2JveE1vZGUuREVGQVVMVDtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlckF1dG9YUmV2ZXJzZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcblxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpXG4gICAgICAgIHByaXZhdGUgbmd0U3R5bGl6YWJsZURpcmVjdGl2ZTogTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndEZvcm06IE5ndEZvcm1Db21wb25lbnQsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RTZWN0aW9uOiBOZ3RTZWN0aW9uQ29tcG9uZW50LFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0TW9kYWw6IE5ndE1vZGFsQ29tcG9uZW50XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RDaGVja2JveCcsIHtcbiAgICAgICAgICAgIGg6ICdoLTYnLFxuICAgICAgICAgICAgdzogJ3ctNicsXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXG4gICAgICAgICAgICBmb250Q2FzZTogJycsXG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIGJnOiAnYmctZ3JheS01MDAnLFxuICAgICAgICAgICAgICAgIHRleHQ6ICd0ZXh0LWdyYXktNTAwJyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICdib3JkZXItZ3JheS01MDAnLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NoYW5nZScsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubW9kZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gZ2V0RW51bUZyb21TdHJpbmcoY2hhbmdlcy5tb2RlLmN1cnJlbnRWYWx1ZSwgTmd0Q2hlY2tib3hNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95U3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHMoKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQgIT09IHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVG9nZ2xlTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gTmd0Q2hlY2tib3hNb2RlLlRPR0dMRTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTaWRlVG9nZ2xlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gTmd0Q2hlY2tib3hNb2RlLlNJREVfVE9HR0xFO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0RlZmF1bHRNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBOZ3RDaGVja2JveE1vZGUuREVGQVVMVDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNSYWRpb01vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IE5ndENoZWNrYm94TW9kZS5SQURJTztcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQgfHwgdGhpcy5pc0Rpc2FibGVkQnlQYXJlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGlzYWJsZWRCeVBhcmVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmd0Rm9ybT8uaXNEaXNhYmxlZFxuICAgICAgICAgICAgfHwgdGhpcy5uZ3RTZWN0aW9uPy5pc0Rpc2FibGVkXG4gICAgICAgICAgICB8fCB0aGlzLm5ndE1vZGFsPy5pc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gTmd0Q2hlY2tib3hNb2RlIHtcbiAgICBERUZBVUxUID0gJ0RFRkFVTFQnLFxuICAgIFRPR0dMRSA9ICdUT0dHTEUnLFxuICAgIFNJREVfVE9HR0xFID0gJ1NJREVfVE9HR0xFJyxcbiAgICBSQURJTyA9ICdSQURJTydcbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHt7IGRpc2FibGVkKCkgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnIDogJ2N1cnNvci1wb2ludGVyJyB9fVwiXG4gICAgW2NsYXNzLmZsZXgtY29sXT0naXNUb2dnbGVNb2RlKCknIHN0eWxlPVwibWF4LXdpZHRoOiBtYXgtY29udGVudDtcIj5cbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW25hbWVdPSduYW1lJyBjbGFzcz1cImhpZGRlblwiIChbbmdNb2RlbF0pPSd2YWx1ZScgW2Rpc2FibGVkXT1cImRpc2FibGVkKCkgfHwgaXNDbGlja0Rpc2FibGVkXCJcbiAgICAgICAgI2VsZW1lbnQ+XG5cbiAgICA8c3BhbiAqbmdJZj1cImlzVG9nZ2xlTW9kZSgpICYmIGxhYmVsXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ3RleHQnLCAnZm9udENhc2UnXSkgfX0gbWItMlwiPnt7IGxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxuZ3QtaGVscGVyICpuZ0lmPVwiaGVscFRleHRcIiBbaGVscFRpdGxlXT1cImhlbHBUaXRsZVwiIFtpY29uQ29sb3JdPVwiaGVscFRleHRDb2xvclwiXG4gICAgICAgICAgICBbYXV0b1hSZXZlcnNlXT1cImhlbHBlckF1dG9YUmV2ZXJzZVwiIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICAgICAgPC9uZ3QtaGVscGVyPlxuICAgIDwvc3Bhbj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRNb2RlKClcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cInRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjJzIGVhc2Utb3V0XCIgY2xhc3M9XCJ7eyB2YWx1ZSA/IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5iZyddKSA6ICdiZy13aGl0ZScgfX0gIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJywgJ3cnXSkgfX1cbiAgICAgICAgICAgICAgICAgICAgc2hhZG93IHJvdW5kZWQgYm9yZGVyIGJvcmRlci1ncmF5LTQwMCB7eyAhc2hpbmluZyA/ICdmbGV4IGp1c3RpZnktY2VudGVyJyA6ICdoaWRkZW4nIH19XCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50IHNlbGYtY2VudGVyIHRleHQtd2hpdGUgcG9pbnRlci1ldmVudHMtbm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMTFsMi0yIDUgNUwxOCAzbDIgMkw3IDE4elwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSYWRpb01vZGUoKVwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwidHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZS1vdXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyB2YWx1ZSA/IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5ib3JkZXInLCAnY29sb3IudGV4dCddKSA6ICdib3JkZXItZ3JheS01MDAnIH19XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvdyB3LTYgaC02IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItZ3JheS00MDAge3sgIXNoaW5pbmcgPyAnZmxleCBqdXN0aWZ5LWNlbnRlcicgOiAnaGlkZGVuJyB9fVwiPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInZhbHVlXCIgY2xhc3M9XCJmaWxsLWN1cnJlbnQgc2VsZi1jZW50ZXIgaC0zXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyOS4xMDcgMjkuMTA3XCI+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC41NTQgMEM2LjU2MSAwIDAgNi41NjIgMCAxNC41NTJjMCA3Ljk5NiA2LjU2MSAxNC41NTUgMTQuNTU0IDE0LjU1NSA3Ljk5NiAwIDE0LjU1My02LjU1OSAxNC41NTMtMTQuNTU1QzI5LjEwNiA2LjU2MiAyMi41NSAwIDE0LjU1NCAwelwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUb2dnbGVNb2RlKCkgfHwgaXNTaWRlVG9nZ2xlTW9kZSgpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3cgdy0xNCBoLTcgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItZ3JheS00MDAge3sgc2hpbmluZyA/ICdoaWRkZW4nIDogJ2ZsZXgnIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy5qdXN0aWZ5LWVuZF09XCJ2YWx1ZVwiIHN0eWxlPVwicGFkZGluZzogMXB4O1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdGV4dC1zbSB0ZXh0LXdoaXRlIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5iZyddKSB9fSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtZnVsbCBweC0xLjUgcHktMlwiXG4gICAgICAgICAgICAgICAgQHNsaWRlTGVmdFRvUmlnaHQ+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImZpbGwtY3VycmVudCBzZWxmLWNlbnRlclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAxMWwyLTIgNSA1TDE4IDNsMiAyTDcgMTh6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXZhbHVlXCIgY2xhc3M9XCJmbGV4IHRleHQteGwgdGV4dC13aGl0ZSBiZy1ncmF5LTMwMCBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtZnVsbCBweC0xIHB5LTNcIlxuICAgICAgICAgICAgICAgIEBzbGlkZVJpZ2h0VG9MZWZ0PlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJmaWxsLWN1cnJlbnQgc2VsZi1jZW50ZXJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImhlcm9pY29uLXVpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYuMjQgMTQuODNhMSAxIDAgMCAxLTEuNDEgMS40MUwxMiAxMy40MWwtMi44MyAyLjgzYTEgMSAwIDAgMS0xLjQxLTEuNDFMMTAuNTkgMTIgNy43NiA5LjE3YTEgMSAwIDAgMSAxLjQxLTEuNDFMMTIgMTAuNTlsMi44My0yLjgzYTEgMSAwIDAgMSAxLjQxIDEuNDFMMTMuNDEgMTJsMi44MyAyLjgzelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSdsYWJlbCAmJiAhc2hpbmluZyAmJiAhaXNUb2dnbGVNb2RlKCknPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWyd0ZXh0JywgJ2ZvbnRDYXNlJ10pIH19IG1sLTJcIj57eyBsYWJlbCB9fTwvc3Bhbj5cblxuICAgICAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIlxuICAgICAgICAgICAgW2F1dG9YUmV2ZXJzZV09XCJoZWxwZXJBdXRvWFJldmVyc2VcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAgICAgIHt7IGhlbHBUZXh0IH19XG4gICAgICAgIDwvbmd0LWhlbHBlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbGFiZWw+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9J3NoaW5pbmcnPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cInctMTYgaC0xMlwiPjwvbmd0LXNoaW5pbmc+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==