@entake/particle 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +396 -0
  3. package/app/modules/accordion/accordion.component.d.ts +26 -0
  4. package/app/modules/accordion/accordion.module.d.ts +11 -0
  5. package/app/modules/accordion/directives/accordion-content.directive.d.ts +8 -0
  6. package/app/modules/accordion/directives/accordion-header.directive.d.ts +8 -0
  7. package/app/modules/accordion/directives/accordion-item.directive.d.ts +13 -0
  8. package/app/modules/background-carousel/background-carousel.directive.d.ts +42 -0
  9. package/app/modules/background-carousel/carousel-options.model.d.ts +30 -0
  10. package/app/modules/background-carousel/particle-background-carousel.module.d.ts +8 -0
  11. package/app/modules/checkbox/checkbox.component.d.ts +43 -0
  12. package/app/modules/checkbox/checkbox.module.d.ts +9 -0
  13. package/app/modules/color-picker/color-picker.component.d.ts +149 -0
  14. package/app/modules/color-picker/color-picker.module.d.ts +9 -0
  15. package/app/modules/date-picker/components/calendar/calendar.component.d.ts +211 -0
  16. package/app/modules/date-picker/components/date-range-picker/date-range-picker.component.d.ts +95 -0
  17. package/app/modules/date-picker/date-picker.component.d.ts +259 -0
  18. package/app/modules/date-picker/date-picker.module.d.ts +15 -0
  19. package/app/modules/dialog/dialog.component.d.ts +87 -0
  20. package/app/modules/dialog/dialog.module.d.ts +9 -0
  21. package/app/modules/dropdown/dropdown.component.d.ts +288 -0
  22. package/app/modules/dropdown/dropdown.module.d.ts +9 -0
  23. package/app/modules/dropdown/models/dropdown-option-group.model.d.ts +16 -0
  24. package/app/modules/dropdown/models/dropdown-option.model.d.ts +25 -0
  25. package/app/modules/endpoint-state/components/endpoint-state.component.d.ts +46 -0
  26. package/app/modules/endpoint-state/endpoint-state.module.d.ts +8 -0
  27. package/app/modules/icons/components/icon-select.component.d.ts +229 -0
  28. package/app/modules/icons/models/fontawesome-icons-brands.model.d.ts +13 -0
  29. package/app/modules/icons/models/fontawesome-icons-regular.model.d.ts +13 -0
  30. package/app/modules/icons/models/fontawesome-icons-solid.model.d.ts +13 -0
  31. package/app/modules/icons/models/particle-icons-light.model.d.ts +197 -0
  32. package/app/modules/icons/models/particle-icons-regular.model.d.ts +205 -0
  33. package/app/modules/icons/models/particle-icons-solid.model.d.ts +365 -0
  34. package/app/modules/icons/particle-icons.module.d.ts +13 -0
  35. package/app/modules/icons/services/icons.service.d.ts +44 -0
  36. package/app/modules/idle-timeout/idle-timeout.component.d.ts +35 -0
  37. package/app/modules/idle-timeout/idle-timer.d.ts +14 -0
  38. package/app/modules/idle-timeout/particle-idle-timeout.module.d.ts +9 -0
  39. package/app/modules/input-mask/input-mask.component.d.ts +86 -0
  40. package/app/modules/input-mask/input-mask.module.d.ts +8 -0
  41. package/app/modules/keyfilter/keyfilter.directive.d.ts +60 -0
  42. package/app/modules/keyfilter/keyfilter.module.d.ts +8 -0
  43. package/app/modules/layout/components/layout-full-framing/layout-full-framing.component.d.ts +27 -0
  44. package/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.d.ts +23 -0
  45. package/app/modules/layout/layout.module.d.ts +10 -0
  46. package/app/modules/loader/components/loader.component.d.ts +11 -0
  47. package/app/modules/loader/loader.module.d.ts +8 -0
  48. package/app/modules/multi-select/models/multi-select-option-group.model.d.ts +16 -0
  49. package/app/modules/multi-select/models/multi-select-option.model.d.ts +25 -0
  50. package/app/modules/multi-select/multi-select.component.d.ts +279 -0
  51. package/app/modules/multi-select/multi-select.module.d.ts +8 -0
  52. package/app/modules/notification/models/notification.model.d.ts +21 -0
  53. package/app/modules/notification/notification.component.d.ts +46 -0
  54. package/app/modules/notification/notification.module.d.ts +8 -0
  55. package/app/modules/notification/services/notification.service.d.ts +54 -0
  56. package/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.d.ts +8 -0
  57. package/app/modules/ordinal-number-pipe/ordinal-number.pipe.d.ts +15 -0
  58. package/app/modules/paginator/pagination-event.model.d.ts +24 -0
  59. package/app/modules/paginator/paginator.component.d.ts +103 -0
  60. package/app/modules/paginator/particle-paginator.module.d.ts +13 -0
  61. package/app/modules/popover/popover.component.d.ts +140 -0
  62. package/app/modules/popover/popover.module.d.ts +9 -0
  63. package/app/modules/profile-pic/particle-profile-pic.module.d.ts +9 -0
  64. package/app/modules/profile-pic/profile-pic.component.d.ts +32 -0
  65. package/app/modules/progress-bar/progress-bar.component.d.ts +16 -0
  66. package/app/modules/progress-bar/progress-bar.module.d.ts +8 -0
  67. package/app/modules/push-container/particle-push-container.module.d.ts +9 -0
  68. package/app/modules/push-container/push-container-state.model.d.ts +7 -0
  69. package/app/modules/push-container/push-container.component.d.ts +137 -0
  70. package/app/modules/rich-text/particle-rich-text.module.d.ts +15 -0
  71. package/app/modules/rich-text/render-rich-text.component.d.ts +6 -0
  72. package/app/modules/rich-text/rich-text-capabilities.model.d.ts +7 -0
  73. package/app/modules/rich-text/rich-text.component.d.ts +48 -0
  74. package/app/modules/scroll-to-top/particle-scroll-to-top.module.d.ts +8 -0
  75. package/app/modules/scroll-to-top/scroll-to-top.component.d.ts +19 -0
  76. package/app/modules/slideover/particle-slideover.module.d.ts +8 -0
  77. package/app/modules/slideover/slideover.component.d.ts +35 -0
  78. package/app/modules/slider/slider.component.d.ts +143 -0
  79. package/app/modules/slider/slider.module.d.ts +9 -0
  80. package/app/modules/theming/components/theming.component.d.ts +43 -0
  81. package/app/modules/theming/models/theme.model.d.ts +88 -0
  82. package/app/modules/theming/services/theme-change-detection.service.d.ts +26 -0
  83. package/app/modules/theming/services/theming.service.d.ts +142 -0
  84. package/app/modules/theming/theming.module.d.ts +12 -0
  85. package/app/modules/toggle-switch/models/toggle-options.model.d.ts +11 -0
  86. package/app/modules/toggle-switch/toggle-switch.component.d.ts +43 -0
  87. package/app/modules/toggle-switch/toggle-switch.module.d.ts +8 -0
  88. package/app/modules/tooltip/tooltip.directive.d.ts +157 -0
  89. package/app/modules/tooltip/tooltip.module.d.ts +8 -0
  90. package/app/modules/week-picker/week-picker.component.d.ts +289 -0
  91. package/app/modules/week-picker/week-picker.module.d.ts +13 -0
  92. package/app/shared/enums/endpoint-status.enum.d.ts +9 -0
  93. package/app/shared/interceptors/json.interceptor.d.ts +17 -0
  94. package/app/shared/models/auditable.model.d.ts +21 -0
  95. package/app/shared/models/data-list.model.d.ts +9 -0
  96. package/app/shared/models/id.model.d.ts +9 -0
  97. package/app/shared/models/observable-container.d.ts +8 -0
  98. package/app/shared/models/particle-component-text.model.d.ts +211 -0
  99. package/app/shared/services/base-data.service.d.ts +130 -0
  100. package/app/shared/services/dialog.service.d.ts +10 -0
  101. package/app/shared/services/local-storage.service.d.ts +41 -0
  102. package/esm2022/app/modules/accordion/accordion.component.mjs +101 -0
  103. package/esm2022/app/modules/accordion/accordion.module.mjs +37 -0
  104. package/esm2022/app/modules/accordion/directives/accordion-content.directive.mjs +17 -0
  105. package/esm2022/app/modules/accordion/directives/accordion-header.directive.mjs +17 -0
  106. package/esm2022/app/modules/accordion/directives/accordion-item.directive.mjs +36 -0
  107. package/esm2022/app/modules/background-carousel/background-carousel.directive.mjs +91 -0
  108. package/esm2022/app/modules/background-carousel/carousel-options.model.mjs +36 -0
  109. package/esm2022/app/modules/background-carousel/particle-background-carousel.module.mjs +24 -0
  110. package/esm2022/app/modules/checkbox/checkbox.component.mjs +108 -0
  111. package/esm2022/app/modules/checkbox/checkbox.module.mjs +28 -0
  112. package/esm2022/app/modules/color-picker/color-picker.component.mjs +306 -0
  113. package/esm2022/app/modules/color-picker/color-picker.module.mjs +19 -0
  114. package/esm2022/app/modules/date-picker/components/calendar/calendar.component.mjs +496 -0
  115. package/esm2022/app/modules/date-picker/components/date-range-picker/date-range-picker.component.mjs +250 -0
  116. package/esm2022/app/modules/date-picker/date-picker.component.mjs +538 -0
  117. package/esm2022/app/modules/date-picker/date-picker.module.mjs +56 -0
  118. package/esm2022/app/modules/dialog/dialog.component.mjs +177 -0
  119. package/esm2022/app/modules/dialog/dialog.module.mjs +28 -0
  120. package/esm2022/app/modules/dropdown/dropdown.component.mjs +682 -0
  121. package/esm2022/app/modules/dropdown/dropdown.module.mjs +28 -0
  122. package/esm2022/app/modules/dropdown/models/dropdown-option-group.model.mjs +2 -0
  123. package/esm2022/app/modules/dropdown/models/dropdown-option.model.mjs +2 -0
  124. package/esm2022/app/modules/endpoint-state/components/endpoint-state.component.mjs +75 -0
  125. package/esm2022/app/modules/endpoint-state/endpoint-state.module.mjs +22 -0
  126. package/esm2022/app/modules/icons/components/icon-select.component.mjs +377 -0
  127. package/esm2022/app/modules/icons/models/fontawesome-icons-brands.model.mjs +471 -0
  128. package/esm2022/app/modules/icons/models/fontawesome-icons-regular.model.mjs +166 -0
  129. package/esm2022/app/modules/icons/models/fontawesome-icons-solid.model.mjs +1016 -0
  130. package/esm2022/app/modules/icons/models/particle-icons-light.model.mjs +310 -0
  131. package/esm2022/app/modules/icons/models/particle-icons-regular.model.mjs +324 -0
  132. package/esm2022/app/modules/icons/models/particle-icons-solid.model.mjs +581 -0
  133. package/esm2022/app/modules/icons/particle-icons.module.mjs +66 -0
  134. package/esm2022/app/modules/icons/services/icons.service.mjs +86 -0
  135. package/esm2022/app/modules/idle-timeout/idle-timeout.component.mjs +85 -0
  136. package/esm2022/app/modules/idle-timeout/idle-timer.mjs +66 -0
  137. package/esm2022/app/modules/idle-timeout/particle-idle-timeout.module.mjs +28 -0
  138. package/esm2022/app/modules/input-mask/input-mask.component.mjs +594 -0
  139. package/esm2022/app/modules/input-mask/input-mask.module.mjs +18 -0
  140. package/esm2022/app/modules/keyfilter/keyfilter.directive.mjs +158 -0
  141. package/esm2022/app/modules/keyfilter/keyfilter.module.mjs +18 -0
  142. package/esm2022/app/modules/layout/components/layout-full-framing/layout-full-framing.component.mjs +79 -0
  143. package/esm2022/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.mjs +65 -0
  144. package/esm2022/app/modules/layout/layout.module.mjs +33 -0
  145. package/esm2022/app/modules/loader/components/loader.component.mjs +30 -0
  146. package/esm2022/app/modules/loader/loader.module.mjs +24 -0
  147. package/esm2022/app/modules/multi-select/models/multi-select-option-group.model.mjs +2 -0
  148. package/esm2022/app/modules/multi-select/models/multi-select-option.model.mjs +2 -0
  149. package/esm2022/app/modules/multi-select/multi-select.component.mjs +665 -0
  150. package/esm2022/app/modules/multi-select/multi-select.module.mjs +18 -0
  151. package/esm2022/app/modules/notification/models/notification.model.mjs +2 -0
  152. package/esm2022/app/modules/notification/notification.component.mjs +122 -0
  153. package/esm2022/app/modules/notification/notification.module.mjs +18 -0
  154. package/esm2022/app/modules/notification/services/notification.service.mjs +84 -0
  155. package/esm2022/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.mjs +20 -0
  156. package/esm2022/app/modules/ordinal-number-pipe/ordinal-number.pipe.mjs +49 -0
  157. package/esm2022/app/modules/paginator/pagination-event.model.mjs +29 -0
  158. package/esm2022/app/modules/paginator/paginator.component.mjs +207 -0
  159. package/esm2022/app/modules/paginator/particle-paginator.module.mjs +48 -0
  160. package/esm2022/app/modules/popover/popover.component.mjs +352 -0
  161. package/esm2022/app/modules/popover/popover.module.mjs +24 -0
  162. package/esm2022/app/modules/profile-pic/particle-profile-pic.module.mjs +28 -0
  163. package/esm2022/app/modules/profile-pic/profile-pic.component.mjs +74 -0
  164. package/esm2022/app/modules/progress-bar/progress-bar.component.mjs +43 -0
  165. package/esm2022/app/modules/progress-bar/progress-bar.module.mjs +24 -0
  166. package/esm2022/app/modules/push-container/particle-push-container.module.mjs +26 -0
  167. package/esm2022/app/modules/push-container/push-container-state.model.mjs +2 -0
  168. package/esm2022/app/modules/push-container/push-container.component.mjs +363 -0
  169. package/esm2022/app/modules/rich-text/particle-rich-text.module.mjs +64 -0
  170. package/esm2022/app/modules/rich-text/render-rich-text.component.mjs +18 -0
  171. package/esm2022/app/modules/rich-text/rich-text-capabilities.model.mjs +2 -0
  172. package/esm2022/app/modules/rich-text/rich-text.component.mjs +187 -0
  173. package/esm2022/app/modules/scroll-to-top/particle-scroll-to-top.module.mjs +24 -0
  174. package/esm2022/app/modules/scroll-to-top/scroll-to-top.component.mjs +49 -0
  175. package/esm2022/app/modules/slideover/particle-slideover.module.mjs +24 -0
  176. package/esm2022/app/modules/slideover/slideover.component.mjs +115 -0
  177. package/esm2022/app/modules/slider/slider.component.mjs +243 -0
  178. package/esm2022/app/modules/slider/slider.module.mjs +26 -0
  179. package/esm2022/app/modules/theming/components/theming.component.mjs +86 -0
  180. package/esm2022/app/modules/theming/models/theme.model.mjs +9 -0
  181. package/esm2022/app/modules/theming/services/theme-change-detection.service.mjs +38 -0
  182. package/esm2022/app/modules/theming/services/theming.service.mjs +507 -0
  183. package/esm2022/app/modules/theming/theming.module.mjs +55 -0
  184. package/esm2022/app/modules/toggle-switch/models/toggle-options.model.mjs +2 -0
  185. package/esm2022/app/modules/toggle-switch/toggle-switch.component.mjs +107 -0
  186. package/esm2022/app/modules/toggle-switch/toggle-switch.module.mjs +24 -0
  187. package/esm2022/app/modules/tooltip/tooltip.directive.mjs +381 -0
  188. package/esm2022/app/modules/tooltip/tooltip.module.mjs +18 -0
  189. package/esm2022/app/modules/week-picker/week-picker.component.mjs +511 -0
  190. package/esm2022/app/modules/week-picker/week-picker.module.mjs +40 -0
  191. package/esm2022/app/shared/enums/endpoint-status.enum.mjs +11 -0
  192. package/esm2022/app/shared/interceptors/json.interceptor.mjs +23 -0
  193. package/esm2022/app/shared/models/auditable.model.mjs +2 -0
  194. package/esm2022/app/shared/models/data-list.model.mjs +2 -0
  195. package/esm2022/app/shared/models/id.model.mjs +2 -0
  196. package/esm2022/app/shared/models/observable-container.mjs +15 -0
  197. package/esm2022/app/shared/models/particle-component-text.model.mjs +2 -0
  198. package/esm2022/app/shared/services/base-data.service.mjs +190 -0
  199. package/esm2022/app/shared/services/dialog.service.mjs +50 -0
  200. package/esm2022/app/shared/services/local-storage.service.mjs +60 -0
  201. package/esm2022/entake-particle.mjs +5 -0
  202. package/esm2022/public_api.mjs +98 -0
  203. package/fesm2022/entake-particle.mjs +12477 -0
  204. package/fesm2022/entake-particle.mjs.map +1 -0
  205. package/index.d.ts +5 -0
  206. package/package.json +65 -0
  207. package/particle.css +1 -0
  208. package/public_api.d.ts +97 -0
@@ -0,0 +1,306 @@
1
+ import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ /**
7
+ * Component that wraps the native HTML5 color picker for supported browsers
8
+ */
9
+ export class ColorPickerComponent {
10
+ renderer;
11
+ changeDetectorRef;
12
+ /**
13
+ * Regex to match a hexadecimal string (000000)
14
+ * @private
15
+ */
16
+ static FULL_HEX_REGEX = new RegExp('^[0-9A-Fa-f]{6}$');
17
+ /**
18
+ * Regex to match a short hexadecimal string (000)
19
+ * @private
20
+ */
21
+ static SHORT_HEX_REGEX = new RegExp('^[0-9A-Fa-f]{3}$');
22
+ /**
23
+ * Regex to match a valid hex character (A-F, a-f, 0-9)
24
+ * @private
25
+ */
26
+ static HEX_CHARACTER_REGEX = new RegExp('^[0-9A-Fa-f]$');
27
+ /**
28
+ * Navigation keys
29
+ * @private
30
+ */
31
+ static NAVIGATION_KEYS = [
32
+ 'Enter', 'Esc', 'Escape', 'Tab', 'Shift',
33
+ 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown',
34
+ 'Backspace', 'Delete'
35
+ ];
36
+ /**
37
+ * Set the value of the color picker
38
+ * @param value the value to set
39
+ */
40
+ set value(value) {
41
+ let hexString = value ?? '';
42
+ if (hexString) {
43
+ ColorPickerComponent.FULL_HEX_REGEX.lastIndex = 0;
44
+ ColorPickerComponent.SHORT_HEX_REGEX.lastIndex = 0;
45
+ hexString = hexString.replace('#', '').toLowerCase();
46
+ if (ColorPickerComponent.SHORT_HEX_REGEX.test(hexString)) {
47
+ hexString = ColorPickerComponent.expandShortHexString(hexString);
48
+ }
49
+ if (!ColorPickerComponent.FULL_HEX_REGEX.test(hexString)) {
50
+ hexString = '';
51
+ }
52
+ }
53
+ this._value = hexString;
54
+ if (this.colorInput) {
55
+ this.colorInput.nativeElement.value = this._value;
56
+ }
57
+ }
58
+ /**
59
+ * Set disabled
60
+ * @param disabled whether or not the control should be disabled
61
+ */
62
+ set disabled(disabled) {
63
+ this._disabled = disabled;
64
+ }
65
+ /**
66
+ * Class list to apply to the hex string input
67
+ */
68
+ classList = null;
69
+ text = {
70
+ chooseColor: 'Choose a Color',
71
+ enterHexCode: 'Enter a Hex Code'
72
+ };
73
+ /**
74
+ * Event emitted on hex string input event. Emits the current value of the input
75
+ */
76
+ // eslint-disable-next-line @angular-eslint/no-output-native
77
+ input = new EventEmitter();
78
+ /**
79
+ * Event emitted on color selection from color picker (color picker widget dismissed)
80
+ * or valid hex string typed in input. Emits the current value of the input
81
+ */
82
+ colorSelected = new EventEmitter();
83
+ /**
84
+ * ViewChild of the color input element
85
+ */
86
+ colorInput = null;
87
+ /**
88
+ * Whether to render the component
89
+ */
90
+ render = false;
91
+ /**
92
+ * Whether the native HTML5 color picker is supported
93
+ */
94
+ colorPickerSupported = false;
95
+ /**
96
+ * The value of the color picker
97
+ */
98
+ _value = '';
99
+ /**
100
+ * Whether the color picker is disabled
101
+ * @private
102
+ */
103
+ _disabled = false;
104
+ /**
105
+ * Expand a short hex string (#abc) into its full form (#aabbcc)
106
+ * @param hexString the short hex string to expand
107
+ * @private
108
+ */
109
+ static expandShortHexString(hexString) {
110
+ let fullHexString = '';
111
+ for (let i = 0; i <= 2; i++) {
112
+ fullHexString += `${hexString[i]}${hexString[i]}`;
113
+ }
114
+ return fullHexString;
115
+ }
116
+ /**
117
+ * Function to call on change
118
+ */
119
+ onChange = () => { };
120
+ /**
121
+ * Function to call on touch
122
+ */
123
+ onTouched = () => { };
124
+ /**
125
+ * Dependency injection site
126
+ * @param renderer the Angular renderer
127
+ * @param changeDetectorRef the Angular ChangeDetectorRef
128
+ */
129
+ constructor(renderer, changeDetectorRef) {
130
+ this.renderer = renderer;
131
+ this.changeDetectorRef = changeDetectorRef;
132
+ }
133
+ /**
134
+ * Init component, check for color picker browser support
135
+ */
136
+ ngOnInit() {
137
+ this.colorPickerSupported = this.isColorPickerSupported();
138
+ this.render = true;
139
+ }
140
+ /**
141
+ * Write value
142
+ * @param value the value to write
143
+ */
144
+ writeValue(value) {
145
+ this.value = value;
146
+ this.changeDetectorRef.markForCheck();
147
+ }
148
+ /**
149
+ * Register on change function
150
+ * @param fn the function to register
151
+ */
152
+ registerOnChange(fn) {
153
+ this.onChange = fn;
154
+ }
155
+ /**
156
+ * Register on touched function
157
+ * @param fn the function to register
158
+ */
159
+ registerOnTouched(fn) {
160
+ this.onTouched = fn;
161
+ }
162
+ /**
163
+ * Set whether the control should be disabled
164
+ * @param isDisabled disabled or not
165
+ */
166
+ setDisabledState(isDisabled) {
167
+ this.disabled = isDisabled;
168
+ this.changeDetectorRef.markForCheck();
169
+ }
170
+ /**
171
+ * Prevent illegal input
172
+ * @param event the keydown KeyboardEvent
173
+ */
174
+ handleKeyDown(event) {
175
+ const { key } = event;
176
+ const { selectionStart, selectionEnd, value } = event.target;
177
+ if (!ColorPickerComponent.NAVIGATION_KEYS.includes(key) && !event.ctrlKey) {
178
+ ColorPickerComponent.HEX_CHARACTER_REGEX.lastIndex = 0;
179
+ const preventDefault = !ColorPickerComponent.HEX_CHARACTER_REGEX.test(key) ||
180
+ (value.length >= 6 && (selectionStart === selectionEnd));
181
+ if (preventDefault) {
182
+ event.preventDefault();
183
+ }
184
+ }
185
+ }
186
+ /**
187
+ * Update model
188
+ * @param value the new value of the model
189
+ * @param emitColorSelected whether or not emit the color selected event
190
+ * @private
191
+ */
192
+ updateModel(value, emitColorSelected = false) {
193
+ ColorPickerComponent.FULL_HEX_REGEX.lastIndex = 0;
194
+ let updateValue = value;
195
+ if (updateValue) {
196
+ updateValue = updateValue.replace('#', '');
197
+ }
198
+ if (!this._disabled && ColorPickerComponent.FULL_HEX_REGEX.test(updateValue)) {
199
+ const valueBeforeUpdate = this._value;
200
+ this.value = updateValue;
201
+ if (valueBeforeUpdate !== this._value) {
202
+ this.onChange(`#${updateValue}`);
203
+ if (emitColorSelected) {
204
+ this.colorSelected.emit(`#${updateValue}`);
205
+ }
206
+ }
207
+ }
208
+ else if (!value) {
209
+ this.value = null;
210
+ this.onChange(null);
211
+ }
212
+ }
213
+ /**
214
+ * Null out value on blur if not valid hex string, otherwise update model
215
+ * @param value the value to check
216
+ */
217
+ handleBlur(value) {
218
+ ColorPickerComponent.SHORT_HEX_REGEX.lastIndex = 0;
219
+ ColorPickerComponent.FULL_HEX_REGEX.lastIndex = 0;
220
+ if (ColorPickerComponent.SHORT_HEX_REGEX.test(value)) {
221
+ this.updateModel(ColorPickerComponent.expandShortHexString(value), true);
222
+ }
223
+ else if (ColorPickerComponent.FULL_HEX_REGEX.test(value)) {
224
+ this.updateModel(value, true);
225
+ }
226
+ else {
227
+ this.value = null;
228
+ this.onChange(null);
229
+ }
230
+ }
231
+ /**
232
+ * Prevent pasting a non-hex string
233
+ * @param event the paste ClipboardEvent
234
+ */
235
+ handlePaste(event) {
236
+ event.preventDefault();
237
+ if (!this._disabled) {
238
+ let clipboardData = null;
239
+ if (event.clipboardData) {
240
+ clipboardData = event.clipboardData;
241
+ }
242
+ else if ('clipboardData' in window) {
243
+ clipboardData = window.clipboardData.getData('text');
244
+ }
245
+ if (clipboardData) {
246
+ ColorPickerComponent.FULL_HEX_REGEX.lastIndex = 0;
247
+ const pastedText = clipboardData.getData('text')
248
+ .replace('#', '');
249
+ if (ColorPickerComponent.FULL_HEX_REGEX.test(pastedText)) {
250
+ this.updateModel(pastedText);
251
+ }
252
+ }
253
+ }
254
+ }
255
+ /**
256
+ * Determine if the browser supports the HTML5 color picker
257
+ * @private
258
+ */
259
+ isColorPickerSupported() {
260
+ let colorPickerSupported = false;
261
+ try {
262
+ const inputElement = this.renderer.createElement('input');
263
+ inputElement.type = 'color';
264
+ inputElement.value = '!';
265
+ colorPickerSupported = inputElement.type === 'color' && inputElement.value !== '!';
266
+ }
267
+ catch (e) { }
268
+ return colorPickerSupported;
269
+ }
270
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
271
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: ColorPickerComponent, selector: "particle-color-picker", inputs: { value: "value", disabled: "disabled", classList: "classList", text: "text" }, outputs: { input: "input", colorSelected: "colorSelected" }, providers: [
272
+ {
273
+ provide: NG_VALUE_ACCESSOR,
274
+ useExisting: forwardRef(() => ColorPickerComponent),
275
+ multi: true
276
+ }
277
+ ], viewQueries: [{ propertyName: "colorInput", first: true, predicate: ["colorInput"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"render\" [style.filter]=\"_disabled ? 'brightness(.95)' : ''\"\r\n class=\"cp_container\"\r\n [ngClass]=\"classList ? classList : 'input md bg_overlay brdr content_color'\">\r\n <ng-container *ngIf=\"colorPickerSupported else colorSwatch\">\r\n <input #colorPicker\r\n type=\"color\"\r\n class=\"access cp_color\"\r\n [value]=\"'#' + _value\"\r\n [disabled]=\"_disabled\"\r\n [attr.aria-label]=\"text.chooseColor\"\r\n (input)=\"updateModel(colorPicker.value)\"\r\n (change)=\"updateModel(colorPicker.value); colorSelected.emit(colorPicker.value)\" />\r\n <i class=\"fas fa-caret-down cp_caret\"></i>\r\n </ng-container>\r\n <ng-template #colorSwatch>\r\n <div class=\"cp_swatch\">\r\n <div class=\"width100 height100 bg_overlay brdr\" style=\"border-radius:inherit;\"\r\n [style.background-color]=\"'#' + (_value || '000000')\"></div>\r\n </div>\r\n </ng-template>\r\n <div class=\"bg_overlay brdr vr cp_divider\"></div>\r\n <div class=\"cp_hashtag\">#</div>\r\n <input #colorInput\r\n type=\"text\"\r\n class=\"access cp_input\"\r\n placeholder=\"000000\"\r\n maxlength=\"6\"\r\n [attr.aria-label]=\"text.enterHexCode\"\r\n [ngModel]=\"_value\"\r\n [disabled]=\"_disabled\"\r\n (input)=\"input.emit(colorInput.value)\"\r\n (paste)=\"handlePaste($event)\"\r\n (keydown)=\"handleKeyDown($event)\"\r\n (ngModelChange)=\"updateModel($event, true)\"\r\n (blur)=\"handleBlur(colorInput.value)\" />\r\n</div>\r\n", styles: [":host{width:100%}.cp_container{width:100%;min-width:120px;position:relative}.cp_container:after{content:\"#\";opacity:0;pointer-events:none}.cp_color{width:4em;padding:3px 1.5em 3px 3px;height:inherit;cursor:pointer;position:absolute;inset:0;border:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;font-size:inherit;outline:none;background-color:transparent;color:inherit}.cp_color:disabled{cursor:not-allowed}.cp_caret{position:absolute;left:2.75em;top:50%;margin-top:-.5em;pointer-events:none;opacity:.8}.cp_swatch{width:4em;padding:5px;height:inherit;border-radius:inherit;position:absolute;inset:0;border:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;outline:none}.cp_divider{position:absolute;left:4em;top:0;width:1px;height:100%}.cp_hashtag{position:absolute;left:4.8em}.cp_input{position:absolute;inset:0 0 0 4em;padding:inherit;padding-left:1.8em;border:none;width:calc(100% - 4em);-moz-appearance:none;-webkit-appearance:none;appearance:none;font-size:inherit;outline:none;background-color:transparent;color:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
278
+ }
279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ColorPickerComponent, decorators: [{
280
+ type: Component,
281
+ args: [{ selector: 'particle-color-picker', providers: [
282
+ {
283
+ provide: NG_VALUE_ACCESSOR,
284
+ useExisting: forwardRef(() => ColorPickerComponent),
285
+ multi: true
286
+ }
287
+ ], template: "<div *ngIf=\"render\" [style.filter]=\"_disabled ? 'brightness(.95)' : ''\"\r\n class=\"cp_container\"\r\n [ngClass]=\"classList ? classList : 'input md bg_overlay brdr content_color'\">\r\n <ng-container *ngIf=\"colorPickerSupported else colorSwatch\">\r\n <input #colorPicker\r\n type=\"color\"\r\n class=\"access cp_color\"\r\n [value]=\"'#' + _value\"\r\n [disabled]=\"_disabled\"\r\n [attr.aria-label]=\"text.chooseColor\"\r\n (input)=\"updateModel(colorPicker.value)\"\r\n (change)=\"updateModel(colorPicker.value); colorSelected.emit(colorPicker.value)\" />\r\n <i class=\"fas fa-caret-down cp_caret\"></i>\r\n </ng-container>\r\n <ng-template #colorSwatch>\r\n <div class=\"cp_swatch\">\r\n <div class=\"width100 height100 bg_overlay brdr\" style=\"border-radius:inherit;\"\r\n [style.background-color]=\"'#' + (_value || '000000')\"></div>\r\n </div>\r\n </ng-template>\r\n <div class=\"bg_overlay brdr vr cp_divider\"></div>\r\n <div class=\"cp_hashtag\">#</div>\r\n <input #colorInput\r\n type=\"text\"\r\n class=\"access cp_input\"\r\n placeholder=\"000000\"\r\n maxlength=\"6\"\r\n [attr.aria-label]=\"text.enterHexCode\"\r\n [ngModel]=\"_value\"\r\n [disabled]=\"_disabled\"\r\n (input)=\"input.emit(colorInput.value)\"\r\n (paste)=\"handlePaste($event)\"\r\n (keydown)=\"handleKeyDown($event)\"\r\n (ngModelChange)=\"updateModel($event, true)\"\r\n (blur)=\"handleBlur(colorInput.value)\" />\r\n</div>\r\n", styles: [":host{width:100%}.cp_container{width:100%;min-width:120px;position:relative}.cp_container:after{content:\"#\";opacity:0;pointer-events:none}.cp_color{width:4em;padding:3px 1.5em 3px 3px;height:inherit;cursor:pointer;position:absolute;inset:0;border:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;font-size:inherit;outline:none;background-color:transparent;color:inherit}.cp_color:disabled{cursor:not-allowed}.cp_caret{position:absolute;left:2.75em;top:50%;margin-top:-.5em;pointer-events:none;opacity:.8}.cp_swatch{width:4em;padding:5px;height:inherit;border-radius:inherit;position:absolute;inset:0;border:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;outline:none}.cp_divider{position:absolute;left:4em;top:0;width:1px;height:100%}.cp_hashtag{position:absolute;left:4.8em}.cp_input{position:absolute;inset:0 0 0 4em;padding:inherit;padding-left:1.8em;border:none;width:calc(100% - 4em);-moz-appearance:none;-webkit-appearance:none;appearance:none;font-size:inherit;outline:none;background-color:transparent;color:inherit}\n"] }]
288
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { value: [{
289
+ type: Input
290
+ }], disabled: [{
291
+ type: Input
292
+ }], classList: [{
293
+ type: Input
294
+ }], text: [{
295
+ type: Input
296
+ }],
297
+ // eslint-disable-next-line @angular-eslint/no-output-native
298
+ input: [{
299
+ type: Output
300
+ }], colorSelected: [{
301
+ type: Output
302
+ }], colorInput: [{
303
+ type: ViewChild,
304
+ args: ['colorInput']
305
+ }] } });
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHekU7O0dBRUc7QUFhSCxNQUFNLE9BQU8sb0JBQW9CO0lBd0pYO0lBQTZCO0lBdEpqRDs7O09BR0c7SUFDSyxNQUFNLENBQVUsY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFeEU7OztPQUdHO0lBQ0ssTUFBTSxDQUFVLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRXpFOzs7T0FHRztJQUNLLE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUUxRTs7O09BR0c7SUFDSyxNQUFNLENBQVUsZUFBZSxHQUFHO1FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPO1FBQ3hDLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVc7UUFDakQsV0FBVyxFQUFFLFFBQVE7S0FDdEIsQ0FBQztJQUVGOzs7T0FHRztJQUNILElBQ0ksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxTQUFTLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUU1QixJQUFJLFNBQVMsRUFB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c0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NvbG9yUGlja2VyVGV4dH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9wYXJ0aWNsZS1jb21wb25lbnQtdGV4dC5tb2RlbCc7XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50IHRoYXQgd3JhcHMgdGhlIG5hdGl2ZSBIVE1MNSBjb2xvciBwaWNrZXIgZm9yIHN1cHBvcnRlZCBicm93c2Vyc1xyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYXJ0aWNsZS1jb2xvci1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb2xvclBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sb3JQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVnZXggdG8gbWF0Y2ggYSBoZXhhZGVjaW1hbCBzdHJpbmcgKDAwMDAwMClcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZVTExfSEVYX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlswLTlBLUZhLWZdezZ9JCcpO1xyXG5cclxuICAvKipcclxuICAgKiBSZWdleCB0byBtYXRjaCBhIHNob3J0IGhleGFkZWNpbWFsIHN0cmluZyAoMDAwKVxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU0hPUlRfSEVYX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlswLTlBLUZhLWZdezN9JCcpO1xyXG5cclxuICAvKipcclxuICAgKiBSZWdleCB0byBtYXRjaCBhIHZhbGlkIGhleCBjaGFyYWN0ZXIgKEEtRiwgYS1mLCAwLTkpXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBIRVhfQ0hBUkFDVEVSX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlswLTlBLUZhLWZdJCcpO1xyXG5cclxuICAvKipcclxuICAgKiBOYXZpZ2F0aW9uIGtleXNcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE5BVklHQVRJT05fS0VZUyA9IFtcclxuICAgICdFbnRlcicsICdFc2MnLCAnRXNjYXBlJywgJ1RhYicsICdTaGlmdCcsXHJcbiAgICAnQXJyb3dMZWZ0JywgJ0Fycm93VXAnLCAnQXJyb3dSaWdodCcsICdBcnJvd0Rvd24nLFxyXG4gICAgJ0JhY2tzcGFjZScsICdEZWxldGUnXHJcbiAgXTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29sb3IgcGlja2VyXHJcbiAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBzZXRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgaGV4U3RyaW5nID0gdmFsdWUgPz8gJyc7XHJcblxyXG4gICAgaWYgKGhleFN0cmluZykge1xyXG4gICAgICBDb2xvclBpY2tlckNvbXBvbmVudC5GVUxMX0hFWF9SRUdFWC5sYXN0SW5kZXggPSAwO1xyXG4gICAgICBDb2xvclBpY2tlckNvbXBvbmVudC5TSE9SVF9IRVhfUkVHRVgubGFzdEluZGV4ID0gMDtcclxuXHJcbiAgICAgIGhleFN0cmluZyA9IGhleFN0cmluZy5yZXBsYWNlKCcjJywgJycpLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICBpZiAoQ29sb3JQaWNrZXJDb21wb25lbnQuU0hPUlRfSEVYX1JFR0VYLnRlc3QoaGV4U3RyaW5nKSkge1xyXG4gICAgICAgIGhleFN0cmluZyA9IENvbG9yUGlja2VyQ29tcG9uZW50LmV4cGFuZFNob3J0SGV4U3RyaW5nKGhleFN0cmluZyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghQ29sb3JQaWNrZXJDb21wb25lbnQuRlVMTF9IRVhfUkVHRVgudGVzdChoZXhTdHJpbmcpKSB7XHJcbiAgICAgICAgaGV4U3RyaW5nID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl92YWx1ZSA9IGhleFN0cmluZztcclxuXHJcbiAgICBpZiAodGhpcy5jb2xvcklucHV0KSB7XHJcbiAgICAgIHRoaXMuY29sb3JJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGlzYWJsZWRcclxuICAgKiBAcGFyYW0gZGlzYWJsZWQgd2hldGhlciBvciBub3QgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGRpc2FibGVkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGFzcyBsaXN0IHRvIGFwcGx5IHRvIHRoZSBoZXggc3RyaW5nIGlucHV0XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBjbGFzc0xpc3Q6IHN0cmluZyA9IG51bGwgYXMgYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRleHQ6IENvbG9yUGlja2VyVGV4dCA9IHtcclxuICAgIGNob29zZUNvbG9yOiAnQ2hvb3NlIGEgQ29sb3InLFxyXG4gICAgZW50ZXJIZXhDb2RlOiAnRW50ZXIgYSBIZXggQ29kZSdcclxuICB9IGFzIENvbG9yUGlja2VyVGV4dDtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCBvbiBoZXggc3RyaW5nIGlucHV0IGV2ZW50LiBFbWl0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5wdXRcclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxyXG4gIGlucHV0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgb24gY29sb3Igc2VsZWN0aW9uIGZyb20gY29sb3IgcGlja2VyIChjb2xvciBwaWNrZXIgd2lkZ2V0IGRpc21pc3NlZClcclxuICAgKiBvciB2YWxpZCBoZXggc3RyaW5nIHR5cGVkIGluIGlucHV0LiBFbWl0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5wdXRcclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBjb2xvclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFZpZXdDaGlsZCBvZiB0aGUgY29sb3IgaW5wdXQgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbG9ySW5wdXQnKVxyXG4gIGNvbG9ySW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gPSBudWxsIGFzIGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHJlbmRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBuYXRpdmUgSFRNTDUgY29sb3IgcGlja2VyIGlzIHN1cHBvcnRlZFxyXG4gICAqL1xyXG4gIGNvbG9yUGlja2VyU3VwcG9ydGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29sb3IgcGlja2VyXHJcbiAgICovXHJcbiAgX3ZhbHVlID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGNvbG9yIHBpY2tlciBpcyBkaXNhYmxlZFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX2Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGFuZCBhIHNob3J0IGhleCBzdHJpbmcgKCNhYmMpIGludG8gaXRzIGZ1bGwgZm9ybSAoI2FhYmJjYylcclxuICAgKiBAcGFyYW0gaGV4U3RyaW5nIHRoZSBzaG9ydCBoZXggc3RyaW5nIHRvIGV4cGFuZFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZXhwYW5kU2hvcnRIZXhTdHJpbmcoaGV4U3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZ1bGxIZXhTdHJpbmcgPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAyOyBpKyspIHtcclxuICAgICAgZnVsbEhleFN0cmluZyArPSBgJHtoZXhTdHJpbmdbaV19JHtoZXhTdHJpbmdbaV19YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVsbEhleFN0cmluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRvIGNhbGwgb24gY2hhbmdlXHJcbiAgICovXHJcbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRvIGNhbGwgb24gdG91Y2hcclxuICAgKi9cclxuICBvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXBlbmRlbmN5IGluamVjdGlvbiBzaXRlXHJcbiAgICogQHBhcmFtIHJlbmRlcmVyIHRoZSBBbmd1bGFyIHJlbmRlcmVyXHJcbiAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIHRoZSBBbmd1bGFyIENoYW5nZURldGVjdG9yUmVmXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXQgY29tcG9uZW50LCBjaGVjayBmb3IgY29sb3IgcGlja2VyIGJyb3dzZXIgc3VwcG9ydFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb2xvclBpY2tlclN1cHBvcnRlZCA9IHRoaXMuaXNDb2xvclBpY2tlclN1cHBvcnRlZCgpO1xyXG4gICAgdGhpcy5yZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV3JpdGUgdmFsdWVcclxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHdyaXRlXHJcbiAgICovXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgb24gY2hhbmdlIGZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIGZuIHRoZSBmdW5jdGlvbiB0byByZWdpc3RlclxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXIgb24gdG91Y2hlZCBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSBmbiB0aGUgZnVuY3Rpb24gdG8gcmVnaXN0ZXJcclxuICAgKi9cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHdoZXRoZXIgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGRpc2FibGVkXHJcbiAgICogQHBhcmFtIGlzRGlzYWJsZWQgZGlzYWJsZWQgb3Igbm90XHJcbiAgICovXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IGlsbGVnYWwgaW5wdXRcclxuICAgKiBAcGFyYW0gZXZlbnQgdGhlIGtleWRvd24gS2V5Ym9hcmRFdmVudFxyXG4gICAqL1xyXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcclxuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgdmFsdWUgfSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuICAgIGlmICghQ29sb3JQaWNrZXJDb21wb25lbnQuTkFWSUdBVElPTl9LRVlTLmluY2x1ZGVzKGtleSkgJiYgIWV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgQ29sb3JQaWNrZXJDb21wb25lbnQuSEVYX0NIQVJBQ1RFUl9SRUdFWC5sYXN0SW5kZXggPSAwO1xyXG5cclxuICAgICAgY29uc3QgcHJldmVudERlZmF1bHQgPSAhQ29sb3JQaWNrZXJDb21wb25lbnQuSEVYX0NIQVJBQ1RFUl9SRUdFWC50ZXN0KGtleSkgfHxcclxuICAgICAgICAodmFsdWUubGVuZ3RoID49IDYgJiYgKHNlbGVjdGlvblN0YXJ0ID09PSBzZWxlY3Rpb25FbmQpKTtcclxuXHJcbiAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBtb2RlbFxyXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBtb2RlbFxyXG4gICAqIEBwYXJhbSBlbWl0Q29sb3JTZWxlY3RlZCB3aGV0aGVyIG9yIG5vdCBlbWl0IHRoZSBjb2xvciBzZWxlY3RlZCBldmVudFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgdXBkYXRlTW9kZWwodmFsdWU6IHN0cmluZywgZW1pdENvbG9yU2VsZWN0ZWQgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgQ29sb3JQaWNrZXJDb21wb25lbnQuRlVMTF9IRVhfUkVHRVgubGFzdEluZGV4ID0gMDtcclxuICAgIGxldCB1cGRhdGVWYWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh1cGRhdGVWYWx1ZSkge1xyXG4gICAgICB1cGRhdGVWYWx1ZSA9IHVwZGF0ZVZhbHVlLnJlcGxhY2UoJyMnLCAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiBDb2xvclBpY2tlckNvbXBvbmVudC5GVUxMX0hFWF9SRUdFWC50ZXN0KHVwZGF0ZVZhbHVlKSkge1xyXG4gICAgICBjb25zdCB2YWx1ZUJlZm9yZVVwZGF0ZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICB0aGlzLnZhbHVlID0gdXBkYXRlVmFsdWU7XHJcblxyXG4gICAgICBpZiAodmFsdWVCZWZvcmVVcGRhdGUgIT09IHRoaXMuX3ZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZShgIyR7dXBkYXRlVmFsdWV9YCk7XHJcblxyXG4gICAgICAgIGlmIChlbWl0Q29sb3JTZWxlY3RlZCkge1xyXG4gICAgICAgICAgdGhpcy5jb2xvclNlbGVjdGVkLmVtaXQoYCMke3VwZGF0ZVZhbHVlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghdmFsdWUpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IG51bGwgYXMgYW55O1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTnVsbCBvdXQgdmFsdWUgb24gYmx1ciBpZiBub3QgdmFsaWQgaGV4IHN0cmluZywgb3RoZXJ3aXNlIHVwZGF0ZSBtb2RlbFxyXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gY2hlY2tcclxuICAgKi9cclxuICBoYW5kbGVCbHVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIENvbG9yUGlja2VyQ29tcG9uZW50LlNIT1JUX0hFWF9SRUdFWC5sYXN0SW5kZXggPSAwO1xyXG4gICAgQ29sb3JQaWNrZXJDb21wb25lbnQuRlVMTF9IRVhfUkVHRVgubGFzdEluZGV4ID0gMDtcclxuXHJcbiAgICBpZiAoQ29sb3JQaWNrZXJDb21wb25lbnQuU0hPUlRfSEVYX1JFR0VYLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoQ29sb3JQaWNrZXJDb21wb25lbnQuZXhwYW5kU2hvcnRIZXhTdHJpbmcodmFsdWUpLCB0cnVlKTtcclxuICAgIH0gZWxzZSBpZiAoQ29sb3JQaWNrZXJDb21wb25lbnQuRlVMTF9IRVhfUkVHRVgudGVzdCh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCh2YWx1ZSwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbCBhcyBhbnk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50IHBhc3RpbmcgYSBub24taGV4IHN0cmluZ1xyXG4gICAqIEBwYXJhbSBldmVudCB0aGUgcGFzdGUgQ2xpcGJvYXJkRXZlbnRcclxuICAgKi9cclxuICBoYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCkge1xyXG4gICAgICBsZXQgY2xpcGJvYXJkRGF0YTogRGF0YVRyYW5zZmVyID0gbnVsbCBhcyBhbnk7XHJcblxyXG4gICAgICBpZiAoZXZlbnQuY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgIGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhO1xyXG4gICAgICB9IGVsc2UgaWYgKCdjbGlwYm9hcmREYXRhJyBpbiB3aW5kb3cpIHtcclxuICAgICAgICBjbGlwYm9hcmREYXRhID0gKHdpbmRvdyBhcyBhbnkpLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgIENvbG9yUGlja2VyQ29tcG9uZW50LkZVTExfSEVYX1JFR0VYLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgnIycsICcnKTtcclxuXHJcbiAgICAgICAgaWYgKENvbG9yUGlja2VyQ29tcG9uZW50LkZVTExfSEVYX1JFR0VYLnRlc3QocGFzdGVkVGV4dCkpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwocGFzdGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEhUTUw1IGNvbG9yIHBpY2tlclxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpc0NvbG9yUGlja2VyU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvbG9yUGlja2VyU3VwcG9ydGVkID0gZmFsc2U7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICBpbnB1dEVsZW1lbnQudHlwZSA9ICdjb2xvcic7XHJcbiAgICAgIGlucHV0RWxlbWVudC52YWx1ZSA9ICchJztcclxuXHJcbiAgICAgIGNvbG9yUGlja2VyU3VwcG9ydGVkID0gaW5wdXRFbGVtZW50LnR5cGUgPT09ICdjb2xvcicgJiYgaW5wdXRFbGVtZW50LnZhbHVlICE9PSAnISc7XHJcbiAgICB9IGNhdGNoIChlKSB7IH1cclxuXHJcbiAgICByZXR1cm4gY29sb3JQaWNrZXJTdXBwb3J0ZWQ7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJyZW5kZXJcIiBbc3R5bGUuZmlsdGVyXT1cIl9kaXNhYmxlZCA/ICdicmlnaHRuZXNzKC45NSknIDogJydcIlxyXG4gICAgIGNsYXNzPVwiY3BfY29udGFpbmVyXCJcclxuICAgICBbbmdDbGFzc109XCJjbGFzc0xpc3QgPyBjbGFzc0xpc3QgOiAnaW5wdXQgbWQgYmdfb3ZlcmxheSBicmRyIGNvbnRlbnRfY29sb3InXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbG9yUGlja2VyU3VwcG9ydGVkIGVsc2UgY29sb3JTd2F0Y2hcIj5cclxuICAgIDxpbnB1dCAjY29sb3JQaWNrZXJcclxuICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxyXG4gICAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGNwX2NvbG9yXCJcclxuICAgICAgICAgICBbdmFsdWVdPVwiJyMnICsgX3ZhbHVlXCJcclxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2Rpc2FibGVkXCJcclxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHQuY2hvb3NlQ29sb3JcIlxyXG4gICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVNb2RlbChjb2xvclBpY2tlci52YWx1ZSlcIlxyXG4gICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlTW9kZWwoY29sb3JQaWNrZXIudmFsdWUpOyBjb2xvclNlbGVjdGVkLmVtaXQoY29sb3JQaWNrZXIudmFsdWUpXCIgLz5cclxuICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNhcmV0LWRvd24gY3BfY2FyZXRcIj48L2k+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLXRlbXBsYXRlICNjb2xvclN3YXRjaD5cclxuICAgIDxkaXYgY2xhc3M9XCJjcF9zd2F0Y2hcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpZHRoMTAwIGhlaWdodDEwMCBiZ19vdmVybGF5IGJyZHJcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6aW5oZXJpdDtcIlxyXG4gICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIicjJyArIChfdmFsdWUgfHwgJzAwMDAwMCcpXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJiZ19vdmVybGF5IGJyZHIgdnIgY3BfZGl2aWRlclwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjcF9oYXNodGFnXCI+IzwvZGl2PlxyXG4gIDxpbnB1dCAjY29sb3JJbnB1dFxyXG4gICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGNwX2lucHV0XCJcclxuICAgICAgICAgcGxhY2Vob2xkZXI9XCIwMDAwMDBcIlxyXG4gICAgICAgICBtYXhsZW5ndGg9XCI2XCJcclxuICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0LmVudGVySGV4Q29kZVwiXHJcbiAgICAgICAgIFtuZ01vZGVsXT1cIl92YWx1ZVwiXHJcbiAgICAgICAgIFtkaXNhYmxlZF09XCJfZGlzYWJsZWRcIlxyXG4gICAgICAgICAoaW5wdXQpPVwiaW5wdXQuZW1pdChjb2xvcklucHV0LnZhbHVlKVwiXHJcbiAgICAgICAgIChwYXN0ZSk9XCJoYW5kbGVQYXN0ZSgkZXZlbnQpXCJcclxuICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTW9kZWwoJGV2ZW50LCB0cnVlKVwiXHJcbiAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoY29sb3JJbnB1dC52YWx1ZSlcIiAvPlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,19 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { ColorPickerComponent } from './color-picker.component';
5
+ import * as i0 from "@angular/core";
6
+ export class ParticleColorPickerModule {
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticleColorPickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: ParticleColorPickerModule, declarations: [ColorPickerComponent], imports: [CommonModule, FormsModule], exports: [ColorPickerComponent] });
9
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticleColorPickerModule, imports: [CommonModule, FormsModule] });
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: ParticleColorPickerModule, decorators: [{
12
+ type: NgModule,
13
+ args: [{
14
+ declarations: [ColorPickerComponent],
15
+ imports: [CommonModule, FormsModule],
16
+ exports: [ColorPickerComponent]
17
+ }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBT2hFLE1BQU0sT0FBTyx5QkFBeUI7dUdBQXpCLHlCQUF5Qjt3R0FBekIseUJBQXlCLGlCQUpyQixvQkFBb0IsYUFDekIsWUFBWSxFQUFFLFdBQVcsYUFDekIsb0JBQW9CO3dHQUVuQix5QkFBeUIsWUFIMUIsWUFBWSxFQUFFLFdBQVc7OzJGQUd4Qix5QkFBeUI7a0JBTHJDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsb0JBQW9CLENBQUM7b0JBQ3BDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7b0JBQ3BDLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO2lCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2xvclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NvbG9yUGlja2VyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICBleHBvcnRzOiBbQ29sb3JQaWNrZXJDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFBhcnRpY2xlQ29sb3JQaWNrZXJNb2R1bGUgeyB9XG4iXX0=