@ng-matero/extensions 12.5.3 → 12.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_all-theme.scss +2 -0
- package/_index.scss +2 -0
- package/_theming.scss +2 -0
- package/bundles/extensions.umd.js +7 -7
- package/bundles/extensions.umd.js.map +1 -1
- package/bundles/mtxColorpicker.umd.js +1106 -0
- package/bundles/mtxColorpicker.umd.js.map +1 -0
- package/bundles/mtxDatetimepicker.umd.js +603 -148
- package/bundles/mtxDatetimepicker.umd.js.map +1 -1
- package/bundles/mtxDialog.umd.js +0 -2
- package/bundles/mtxDialog.umd.js.map +1 -1
- package/bundles/mtxFormGroup.umd.js +2 -9
- package/bundles/mtxFormGroup.umd.js.map +1 -1
- package/bundles/mtxSplit.umd.js +0 -13
- package/bundles/mtxSplit.umd.js.map +1 -1
- package/bundles/mtxText3d.umd.js +0 -8
- package/bundles/mtxText3d.umd.js.map +1 -1
- package/bundles/mtxTooltip.umd.js +2 -0
- package/bundles/mtxTooltip.umd.js.map +1 -1
- package/colorpicker/_colorpicker-theme.import.scss +2 -0
- package/colorpicker/_colorpicker-theme.scss +43 -0
- package/colorpicker/colorpicker-animations.d.ts +8 -0
- package/colorpicker/colorpicker-content.scss +4 -0
- package/colorpicker/colorpicker-input.d.ts +86 -0
- package/colorpicker/colorpicker-module.d.ts +2 -0
- package/colorpicker/colorpicker-toggle.d.ts +34 -0
- package/colorpicker/colorpicker-toggle.scss +23 -0
- package/colorpicker/colorpicker.d.ts +122 -0
- package/{color-picker/mtxColorPicker.d.ts → colorpicker/mtxColorpicker.d.ts} +0 -0
- package/colorpicker/mtxColorpicker.metadata.json +1 -0
- package/colorpicker/package.json +11 -0
- package/colorpicker/public-api.d.ts +5 -0
- package/datetimepicker/_datetimepicker-theme.scss +12 -0
- package/datetimepicker/calendar.d.ts +2 -10
- package/datetimepicker/clock.d.ts +10 -9
- package/datetimepicker/datetimepicker-animations.d.ts +7 -5
- package/datetimepicker/datetimepicker-input.d.ts +4 -2
- package/datetimepicker/{datetimepicker.module.d.ts → datetimepicker-module.d.ts} +0 -0
- package/datetimepicker/datetimepicker-toggle.d.ts +15 -2
- package/datetimepicker/datetimepicker-toggle.scss +23 -0
- package/datetimepicker/datetimepicker.d.ts +67 -24
- package/datetimepicker/month-view.d.ts +3 -3
- package/datetimepicker/mtxDatetimepicker.d.ts +0 -2
- package/datetimepicker/mtxDatetimepicker.metadata.json +1 -1
- package/datetimepicker/multi-year-view.d.ts +3 -3
- package/datetimepicker/public-api.d.ts +3 -1
- package/datetimepicker/year-view.d.ts +3 -3
- package/dialog/{dialog.config.d.ts → dialog-config.d.ts} +0 -0
- package/dialog/dialog.component.d.ts +1 -1
- package/dialog/dialog.d.ts +1 -1
- package/dialog/mtxDialog.metadata.json +1 -1
- package/dialog/public-api.d.ts +2 -2
- package/esm2015/colorpicker/colorpicker-animations.js +16 -0
- package/esm2015/colorpicker/colorpicker-input.js +225 -0
- package/esm2015/colorpicker/colorpicker-module.js +41 -0
- package/esm2015/colorpicker/colorpicker-toggle.js +98 -0
- package/esm2015/colorpicker/colorpicker.js +361 -0
- package/esm2015/colorpicker/mtxColorpicker.js +5 -0
- package/esm2015/colorpicker/public-api.js +6 -0
- package/esm2015/datetimepicker/calendar-body.js +2 -1
- package/esm2015/datetimepicker/calendar.js +14 -29
- package/esm2015/datetimepicker/clock.js +7 -7
- package/esm2015/datetimepicker/datetimepicker-animations.js +38 -24
- package/esm2015/datetimepicker/datetimepicker-input.js +6 -3
- package/esm2015/datetimepicker/datetimepicker-module.js +52 -0
- package/esm2015/datetimepicker/datetimepicker-toggle.js +30 -8
- package/esm2015/datetimepicker/datetimepicker.js +150 -71
- package/esm2015/datetimepicker/month-view.js +8 -7
- package/esm2015/datetimepicker/mtxDatetimepicker.js +1 -3
- package/esm2015/datetimepicker/multi-year-view.js +8 -7
- package/esm2015/datetimepicker/public-api.js +4 -2
- package/esm2015/datetimepicker/year-view.js +8 -7
- package/esm2015/dialog/{dialog.config.js → dialog-config.js} +1 -1
- package/esm2015/dialog/dialog.component.js +1 -1
- package/esm2015/dialog/dialog.js +1 -1
- package/esm2015/dialog/public-api.js +3 -3
- package/esm2015/extensions.module.js +3 -3
- package/esm2015/form-group/form-group.component.js +4 -11
- package/esm2015/public-api.js +2 -2
- package/esm2015/split/split.component.js +1 -9
- package/esm2015/split/utils.js +1 -6
- package/esm2015/text3d/text3d.component.js +1 -9
- package/esm2015/tooltip/tooltip.js +3 -1
- package/extensions.metadata.json +1 -1
- package/fesm2015/extensions.js +3 -3
- package/fesm2015/extensions.js.map +1 -1
- package/fesm2015/mtxColorpicker.js +730 -0
- package/fesm2015/mtxColorpicker.js.map +1 -0
- package/fesm2015/mtxDatetimepicker.js +259 -146
- package/fesm2015/mtxDatetimepicker.js.map +1 -1
- package/fesm2015/mtxDialog.js +1 -1
- package/fesm2015/mtxDialog.js.map +1 -1
- package/fesm2015/mtxFormGroup.js +3 -10
- package/fesm2015/mtxFormGroup.js.map +1 -1
- package/fesm2015/mtxSplit.js +0 -13
- package/fesm2015/mtxSplit.js.map +1 -1
- package/fesm2015/mtxText3d.js +0 -8
- package/fesm2015/mtxText3d.js.map +1 -1
- package/fesm2015/mtxTooltip.js +2 -0
- package/fesm2015/mtxTooltip.js.map +1 -1
- package/form-group/form-group.component.d.ts +2 -4
- package/form-group/mtxFormGroup.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/split/mtxSplit.metadata.json +1 -1
- package/text3d/mtxText3d.metadata.json +1 -1
- package/text3d/text3d.component.d.ts +0 -1
- package/tooltip/mtxTooltip.metadata.json +1 -1
- package/bundles/mtxColorPicker.umd.js +0 -337
- package/bundles/mtxColorPicker.umd.js.map +0 -1
- package/color-picker/color-picker.component.d.ts +0 -120
- package/color-picker/color-picker.module.d.ts +0 -2
- package/color-picker/mtxColorPicker.metadata.json +0 -1
- package/color-picker/package.json +0 -11
- package/color-picker/public-api.d.ts +0 -2
- package/esm2015/color-picker/color-picker.component.js +0 -268
- package/esm2015/color-picker/color-picker.module.js +0 -26
- package/esm2015/color-picker/mtxColorPicker.js +0 -5
- package/esm2015/color-picker/public-api.js +0 -3
- package/esm2015/datetimepicker/datetimepicker.module.js +0 -49
- package/fesm2015/mtxColorPicker.js +0 -295
- package/fesm2015/mtxColorPicker.js.map +0 -1
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, NgZone, Optional, Self, Host, Inject, Input, Output, ViewChild, NgModule } from '@angular/core';
|
|
2
|
-
import { DOCUMENT, CommonModule } from '@angular/common';
|
|
3
|
-
import { NgControl, FormsModule } from '@angular/forms';
|
|
4
|
-
import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
|
|
5
|
-
import { MatFormFieldControl, MatFormField, MatFormFieldModule } from '@angular/material/form-field';
|
|
6
|
-
import { MatInputModule } from '@angular/material/input';
|
|
7
|
-
import { ColorChromeModule } from 'ngx-color/chrome';
|
|
8
|
-
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
9
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
10
|
-
import { _supportsShadowDom } from '@angular/cdk/platform';
|
|
11
|
-
import { Subject, merge, fromEvent } from 'rxjs';
|
|
12
|
-
import { filter } from 'rxjs/operators';
|
|
13
|
-
|
|
14
|
-
let nextUniqueId = 0;
|
|
15
|
-
class MtxColorPickerComponent {
|
|
16
|
-
constructor(_focusMonitor, _elementRef, _changeDetectorRef, _zone, ngControl, _formField, _document) {
|
|
17
|
-
this._focusMonitor = _focusMonitor;
|
|
18
|
-
this._elementRef = _elementRef;
|
|
19
|
-
this._changeDetectorRef = _changeDetectorRef;
|
|
20
|
-
this._zone = _zone;
|
|
21
|
-
this.ngControl = ngControl;
|
|
22
|
-
this._formField = _formField;
|
|
23
|
-
this._document = _document;
|
|
24
|
-
this._value = '';
|
|
25
|
-
/** Implemented as part of MatFormFieldControl. */
|
|
26
|
-
this.stateChanges = new Subject();
|
|
27
|
-
/** Unique id for this input. */
|
|
28
|
-
this._uid = `mtx-color-picker-${nextUniqueId++}`;
|
|
29
|
-
this._focused = false;
|
|
30
|
-
this._required = false;
|
|
31
|
-
this._disabled = false;
|
|
32
|
-
this._readonly = false;
|
|
33
|
-
this.errorState = false;
|
|
34
|
-
/** A name for this control that can be used by `mat-form-field`. */
|
|
35
|
-
this.controlType = 'mtx-color-picker';
|
|
36
|
-
/** `View -> model callback called when value changes` */
|
|
37
|
-
this._onChange = () => { };
|
|
38
|
-
/** `View -> model callback called when color picker has been touched` */
|
|
39
|
-
this._onTouched = () => { };
|
|
40
|
-
/** Event emitted when the color changed */
|
|
41
|
-
this.colorChange = new EventEmitter();
|
|
42
|
-
/** Whether or not the overlay panel is open. */
|
|
43
|
-
this._panelOpen = false;
|
|
44
|
-
/**
|
|
45
|
-
* Whether the color picker can open the next time it is focused. Used to prevent a focused,
|
|
46
|
-
* closed color picker from being reopened if the user switches to another browser tab and then
|
|
47
|
-
* comes back.
|
|
48
|
-
*/
|
|
49
|
-
this._canOpenOnNextFocus = true;
|
|
50
|
-
/**
|
|
51
|
-
* Event handler for when the window is blurred. Needs to be an
|
|
52
|
-
* arrow function in order to preserve the context.
|
|
53
|
-
*/
|
|
54
|
-
this._windowBlurHandler = () => {
|
|
55
|
-
// If the user blurred the window while the color picker is focused, it means that it'll be
|
|
56
|
-
// refocused when they come back. In this case we want to skip the first focus event, if the
|
|
57
|
-
// pane was closed, in order to avoid reopening it unintentionally.
|
|
58
|
-
this._canOpenOnNextFocus =
|
|
59
|
-
this._document.activeElement !== this._elementRef.nativeElement || this._panelOpen;
|
|
60
|
-
};
|
|
61
|
-
_focusMonitor.monitor(_elementRef, true).subscribe(origin => {
|
|
62
|
-
if (this._focused && !origin) {
|
|
63
|
-
this._onTouched();
|
|
64
|
-
}
|
|
65
|
-
this._focused = !!origin;
|
|
66
|
-
this.stateChanges.next();
|
|
67
|
-
});
|
|
68
|
-
if (this.ngControl != null) {
|
|
69
|
-
this.ngControl.valueAccessor = this;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/** Value of the color picker control. */
|
|
73
|
-
get value() {
|
|
74
|
-
return this._value;
|
|
75
|
-
}
|
|
76
|
-
set value(newValue) {
|
|
77
|
-
this._value = newValue;
|
|
78
|
-
this._onChange(newValue);
|
|
79
|
-
this.stateChanges.next();
|
|
80
|
-
}
|
|
81
|
-
/** Unique id of the element. */
|
|
82
|
-
get id() {
|
|
83
|
-
return this._id;
|
|
84
|
-
}
|
|
85
|
-
set id(value) {
|
|
86
|
-
this._id = value || this._uid;
|
|
87
|
-
this.stateChanges.next();
|
|
88
|
-
}
|
|
89
|
-
/** Placeholder to be shown if value is empty. */
|
|
90
|
-
get placeholder() {
|
|
91
|
-
return this._placeholder;
|
|
92
|
-
}
|
|
93
|
-
set placeholder(value) {
|
|
94
|
-
this._placeholder = value;
|
|
95
|
-
this.stateChanges.next();
|
|
96
|
-
}
|
|
97
|
-
/** Whether the input is focused. */
|
|
98
|
-
get focused() {
|
|
99
|
-
return this._focused || this._panelOpen;
|
|
100
|
-
}
|
|
101
|
-
get empty() {
|
|
102
|
-
return !this.value;
|
|
103
|
-
}
|
|
104
|
-
get shouldLabelFloat() {
|
|
105
|
-
return this.focused || !this.empty;
|
|
106
|
-
}
|
|
107
|
-
get required() {
|
|
108
|
-
return this._required;
|
|
109
|
-
}
|
|
110
|
-
set required(value) {
|
|
111
|
-
this._required = coerceBooleanProperty(value);
|
|
112
|
-
this.stateChanges.next();
|
|
113
|
-
}
|
|
114
|
-
get disabled() {
|
|
115
|
-
return this._disabled;
|
|
116
|
-
}
|
|
117
|
-
set disabled(value) {
|
|
118
|
-
this._disabled = coerceBooleanProperty(value);
|
|
119
|
-
this.stateChanges.next();
|
|
120
|
-
}
|
|
121
|
-
/** Whether the element is readonly. */
|
|
122
|
-
get readonly() {
|
|
123
|
-
return this._readonly;
|
|
124
|
-
}
|
|
125
|
-
set readonly(value) {
|
|
126
|
-
this._readonly = coerceBooleanProperty(value);
|
|
127
|
-
}
|
|
128
|
-
ngDoCheck() {
|
|
129
|
-
if (this.ngControl) {
|
|
130
|
-
this.errorState = (this.ngControl.invalid && this.ngControl.touched);
|
|
131
|
-
this.stateChanges.next();
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
ngAfterViewInit() {
|
|
135
|
-
if (typeof window !== 'undefined') {
|
|
136
|
-
this._zone.runOutsideAngular(() => {
|
|
137
|
-
window.addEventListener('blur', this._windowBlurHandler);
|
|
138
|
-
});
|
|
139
|
-
if (_supportsShadowDom()) {
|
|
140
|
-
const element = this._elementRef.nativeElement;
|
|
141
|
-
const rootNode = element.getRootNode ? element.getRootNode() : null;
|
|
142
|
-
// We need to take the `ShadowRoot` off of `window`, because the built-in types are
|
|
143
|
-
// incorrect. See https://github.com/Microsoft/TypeScript/issues/27929.
|
|
144
|
-
this._isInsideShadowRoot = rootNode instanceof window.ShadowRoot;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
ngOnDestroy() {
|
|
149
|
-
this.stateChanges.complete();
|
|
150
|
-
this._focusMonitor.stopMonitoring(this._elementRef);
|
|
151
|
-
}
|
|
152
|
-
/** Implemented as part of MatFormFieldControl. */
|
|
153
|
-
setDescribedByIds(ids) {
|
|
154
|
-
this._ariaDescribedby = ids.join(' ');
|
|
155
|
-
}
|
|
156
|
-
/** Implemented as part of MatFormFieldControl. */
|
|
157
|
-
onContainerClick() {
|
|
158
|
-
this._handleFocus();
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Sets the model value. Implemented as part of ControlValueAccessor.
|
|
162
|
-
* @param value New value to be written to the model.
|
|
163
|
-
*/
|
|
164
|
-
writeValue(value) {
|
|
165
|
-
this.value = value || '';
|
|
166
|
-
this._changeDetectorRef.markForCheck();
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Registers a callback to be triggered when the model value changes.
|
|
170
|
-
* Implemented as part of ControlValueAccessor.
|
|
171
|
-
* @param fn Callback to be registered.
|
|
172
|
-
*/
|
|
173
|
-
registerOnChange(fn) {
|
|
174
|
-
this._onChange = fn;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Registers a callback to be triggered when the control is touched.
|
|
178
|
-
* Implemented as part of ControlValueAccessor.
|
|
179
|
-
* @param fn Callback to be registered.
|
|
180
|
-
*/
|
|
181
|
-
registerOnTouched(fn) {
|
|
182
|
-
this._onTouched = fn;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.
|
|
186
|
-
* @param isDisabled Whether the control should be disabled.
|
|
187
|
-
*/
|
|
188
|
-
setDisabledState(isDisabled) {
|
|
189
|
-
this.disabled = isDisabled;
|
|
190
|
-
}
|
|
191
|
-
/** Open panel with input focus event. */
|
|
192
|
-
_handleFocus() {
|
|
193
|
-
this.trigger.openMenu();
|
|
194
|
-
this._closingActionsSubscription = merge(this._getOutsideClickStream())
|
|
195
|
-
.pipe()
|
|
196
|
-
.subscribe(event => {
|
|
197
|
-
this.trigger.closeMenu();
|
|
198
|
-
this._closingActionsSubscription.unsubscribe();
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
/** Opens the overlay panel. */
|
|
202
|
-
_openPanel() {
|
|
203
|
-
if (this._focused) {
|
|
204
|
-
this._panelOpen = true;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
/** Closes the overlay panel and focuses the host element. */
|
|
208
|
-
_closePanel() {
|
|
209
|
-
if (this._panelOpen) {
|
|
210
|
-
this._panelOpen = false;
|
|
211
|
-
this._changeDetectorRef.markForCheck();
|
|
212
|
-
this._onTouched();
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/** The callback of color changed. */
|
|
216
|
-
_onColorChanged(model) {
|
|
217
|
-
this.value = model.color.hex;
|
|
218
|
-
this.colorChange.emit(model);
|
|
219
|
-
}
|
|
220
|
-
/** Stream of clicks outside of the color picker panel. */
|
|
221
|
-
_getOutsideClickStream() {
|
|
222
|
-
return merge(fromEvent(this._document, 'click'), fromEvent(this._document, 'touchend')).pipe(filter(event => {
|
|
223
|
-
// If we're in the Shadow DOM, the event target will be the shadow root, so we have to
|
|
224
|
-
// fall back to check the first element in the path of the click event.
|
|
225
|
-
const clickTarget = (this._isInsideShadowRoot && event.composedPath ? event.composedPath()[0] : event.target);
|
|
226
|
-
const formField = this._formField ? this._formField._elementRef.nativeElement : null;
|
|
227
|
-
return (clickTarget !== this._elementRef.nativeElement &&
|
|
228
|
-
(!formField || !formField.contains(clickTarget)));
|
|
229
|
-
}));
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
233
|
-
MtxColorPickerComponent.decorators = [
|
|
234
|
-
{ type: Component, args: [{
|
|
235
|
-
selector: 'mtx-color-picker',
|
|
236
|
-
exportAs: 'mtxColorPicker',
|
|
237
|
-
template: "<input matInput\n [(ngModel)]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n (focus)=\"_handleFocus()\"\n autocomplete=\"off\">\n\n<div #colorPickerTrigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"colorPickerPopover\"\n (menuOpened)=\"_openPanel()\"\n (menuClosed)=\"_closePanel()\">\n</div>\n\n<mat-menu #colorPickerPopover=\"matMenu\" class=\"mtx-color-picker-panel\" [hasBackdrop]=\"false\">\n <div class=\"mtx-color-picker\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\">\n <color-chrome [color]=\"value!\" (onChangeComplete)=\"_onColorChanged($event)\"></color-chrome>\n </div>\n</mat-menu>\n",
|
|
238
|
-
encapsulation: ViewEncapsulation.None,
|
|
239
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
240
|
-
providers: [{ provide: MatFormFieldControl, useExisting: MtxColorPickerComponent }],
|
|
241
|
-
styles: [".mtx-color-picker-panel .mat-menu-content:not(:empty){padding:0}.mtx-color-picker-panel .mtx-color-picker{padding:8px}.mtx-color-picker-panel .mtx-color-picker .chrome-picker{box-shadow:none;border-radius:0}.mtx-color-picker-panel .mtx-color-picker .chrome-picker .saturation{border-radius:0}\n"]
|
|
242
|
-
},] }
|
|
243
|
-
];
|
|
244
|
-
/**
|
|
245
|
-
* @type {function(): !Array<(null|{
|
|
246
|
-
* type: ?,
|
|
247
|
-
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
|
|
248
|
-
* })>}
|
|
249
|
-
* @nocollapse
|
|
250
|
-
*/
|
|
251
|
-
MtxColorPickerComponent.ctorParameters = () => [
|
|
252
|
-
{ type: FocusMonitor },
|
|
253
|
-
{ type: ElementRef },
|
|
254
|
-
{ type: ChangeDetectorRef },
|
|
255
|
-
{ type: NgZone },
|
|
256
|
-
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }] },
|
|
257
|
-
{ type: MatFormField, decorators: [{ type: Optional }, { type: Host }] },
|
|
258
|
-
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] }
|
|
259
|
-
];
|
|
260
|
-
/** @type {!Object<string, !Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
|
|
261
|
-
MtxColorPickerComponent.propDecorators = {
|
|
262
|
-
value: [{ type: Input }],
|
|
263
|
-
id: [{ type: Input }],
|
|
264
|
-
placeholder: [{ type: Input }],
|
|
265
|
-
required: [{ type: Input }],
|
|
266
|
-
disabled: [{ type: Input }],
|
|
267
|
-
readonly: [{ type: Input }],
|
|
268
|
-
colorChange: [{ type: Output }],
|
|
269
|
-
trigger: [{ type: ViewChild, args: [MatMenuTrigger, { static: true },] }]
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
class MtxColorPickerModule {
|
|
273
|
-
}
|
|
274
|
-
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
275
|
-
MtxColorPickerModule.decorators = [
|
|
276
|
-
{ type: NgModule, args: [{
|
|
277
|
-
imports: [
|
|
278
|
-
CommonModule,
|
|
279
|
-
FormsModule,
|
|
280
|
-
MatMenuModule,
|
|
281
|
-
MatFormFieldModule,
|
|
282
|
-
MatInputModule,
|
|
283
|
-
ColorChromeModule,
|
|
284
|
-
],
|
|
285
|
-
exports: [MtxColorPickerComponent],
|
|
286
|
-
declarations: [MtxColorPickerComponent],
|
|
287
|
-
},] }
|
|
288
|
-
];
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* Generated bundle index. Do not edit.
|
|
292
|
-
*/
|
|
293
|
-
|
|
294
|
-
export { MtxColorPickerComponent, MtxColorPickerModule };
|
|
295
|
-
//# sourceMappingURL=mtxColorPicker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mtxColorPicker.js","sources":["../../../projects/extensions/color-picker/color-picker.component.ts","../../../projects/extensions/color-picker/color-picker.module.ts","../../../projects/extensions/color-picker/mtxColorPicker.ts"],"sourcesContent":["import {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnDestroy,\n Optional,\n Self,\n ElementRef,\n Input,\n Output,\n EventEmitter,\n Inject,\n DoCheck,\n ViewChild,\n Host,\n AfterViewInit,\n NgZone,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { _supportsShadowDom } from '@angular/cdk/platform';\nimport { MatFormFieldControl, MatFormField } from '@angular/material/form-field';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { Subject, Observable, merge, fromEvent, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { ColorEvent } from 'ngx-color';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'mtx-color-picker',\n exportAs: 'mtxColorPicker',\n templateUrl: './color-picker.component.html',\n styleUrls: ['./color-picker.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: MatFormFieldControl, useExisting: MtxColorPickerComponent }],\n})\nexport class MtxColorPickerComponent\n implements OnDestroy, DoCheck, AfterViewInit, ControlValueAccessor, MatFormFieldControl<any>\n{\n /** Value of the color picker control. */\n @Input()\n get value(): string | null {\n return this._value;\n }\n set value(newValue: string | null) {\n this._value = newValue;\n this._onChange(newValue);\n this.stateChanges.next();\n }\n private _value: string | null = '';\n\n /** Implemented as part of MatFormFieldControl. */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n /** Unique id for this input. */\n private _uid = `mtx-color-picker-${nextUniqueId++}`;\n\n /** Unique id of the element. */\n @Input()\n get id(): string {\n return this._id;\n }\n set id(value: string) {\n this._id = value || this._uid;\n this.stateChanges.next();\n }\n private _id!: string;\n\n /** Placeholder to be shown if value is empty. */\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n private _placeholder!: string;\n\n /** Whether the input is focused. */\n get focused(): boolean {\n return this._focused || this._panelOpen;\n }\n private _focused = false;\n\n get empty(): boolean {\n return !this.value;\n }\n\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _disabled = false;\n\n /** Whether the element is readonly. */\n @Input()\n get readonly(): boolean {\n return this._readonly;\n }\n set readonly(value: boolean) {\n this._readonly = coerceBooleanProperty(value);\n }\n private _readonly = false;\n\n errorState = false;\n\n /** A name for this control that can be used by `mat-form-field`. */\n controlType = 'mtx-color-picker';\n\n /** The aria-describedby attribute on the color picker for improved a11y. */\n _ariaDescribedby!: string;\n\n /** `View -> model callback called when value changes` */\n _onChange: (value: any) => void = () => {};\n\n /** `View -> model callback called when color picker has been touched` */\n _onTouched = () => {};\n\n /** Event emitted when the color changed */\n @Output() readonly colorChange = new EventEmitter<ColorEvent>();\n\n @ViewChild(MatMenuTrigger, { static: true }) trigger!: MatMenuTrigger;\n\n /** Whether or not the overlay panel is open. */\n _panelOpen = false;\n\n /** The subscription for closing actions (some are bound to document). */\n private _closingActionsSubscription!: Subscription;\n\n /** Whether the element is inside of a ShadowRoot component. */\n private _isInsideShadowRoot!: boolean;\n\n /**\n * Whether the color picker can open the next time it is focused. Used to prevent a focused,\n * closed color picker from being reopened if the user switches to another browser tab and then\n * comes back.\n */\n private _canOpenOnNextFocus = true;\n\n /**\n * Event handler for when the window is blurred. Needs to be an\n * arrow function in order to preserve the context.\n */\n private _windowBlurHandler = () => {\n // If the user blurred the window while the color picker is focused, it means that it'll be\n // refocused when they come back. In this case we want to skip the first focus event, if the\n // pane was closed, in order to avoid reopening it unintentionally.\n this._canOpenOnNextFocus =\n this._document.activeElement !== this._elementRef.nativeElement || this._panelOpen;\n };\n\n constructor(\n private _focusMonitor: FocusMonitor,\n private _elementRef: ElementRef<HTMLElement>,\n private _changeDetectorRef: ChangeDetectorRef,\n private _zone: NgZone,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() @Host() private _formField: MatFormField,\n @Optional() @Inject(DOCUMENT) private _document: any\n ) {\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this._focused && !origin) {\n this._onTouched();\n }\n this._focused = !!origin;\n this.stateChanges.next();\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngDoCheck(): void {\n if (this.ngControl) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) as boolean;\n this.stateChanges.next();\n }\n }\n\n ngAfterViewInit() {\n if (typeof window !== 'undefined') {\n this._zone.runOutsideAngular(() => {\n window.addEventListener('blur', this._windowBlurHandler);\n });\n\n if (_supportsShadowDom()) {\n const element = this._elementRef.nativeElement;\n const rootNode = element.getRootNode ? element.getRootNode() : null;\n\n // We need to take the `ShadowRoot` off of `window`, because the built-in types are\n // incorrect. See https://github.com/Microsoft/TypeScript/issues/27929.\n this._isInsideShadowRoot = rootNode instanceof (window as any).ShadowRoot;\n }\n }\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /** Implemented as part of MatFormFieldControl. */\n setDescribedByIds(ids: string[]) {\n this._ariaDescribedby = ids.join(' ');\n }\n\n /** Implemented as part of MatFormFieldControl. */\n onContainerClick() {\n this._handleFocus();\n }\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value New value to be written to the model.\n */\n writeValue(value: string | null): void {\n this.value = value || '';\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n /** Open panel with input focus event. */\n _handleFocus() {\n this.trigger.openMenu();\n\n this._closingActionsSubscription = merge(this._getOutsideClickStream())\n .pipe()\n .subscribe(event => {\n this.trigger.closeMenu();\n this._closingActionsSubscription.unsubscribe();\n });\n }\n\n /** Opens the overlay panel. */\n _openPanel() {\n if (this._focused) {\n this._panelOpen = true;\n }\n }\n\n /** Closes the overlay panel and focuses the host element. */\n _closePanel() {\n if (this._panelOpen) {\n this._panelOpen = false;\n this._changeDetectorRef.markForCheck();\n this._onTouched();\n }\n }\n\n /** The callback of color changed. */\n _onColorChanged(model: ColorEvent) {\n this.value = model.color.hex;\n this.colorChange.emit(model);\n }\n\n /** Stream of clicks outside of the color picker panel. */\n private _getOutsideClickStream(): Observable<any> {\n return merge(\n fromEvent(this._document, 'click') as Observable<MouseEvent>,\n fromEvent(this._document, 'touchend') as Observable<TouchEvent>\n ).pipe(\n filter(event => {\n // If we're in the Shadow DOM, the event target will be the shadow root, so we have to\n // fall back to check the first element in the path of the click event.\n const clickTarget = (\n this._isInsideShadowRoot && event.composedPath ? event.composedPath()[0] : event.target\n ) as HTMLElement;\n const formField = this._formField ? this._formField._elementRef.nativeElement : null;\n\n return (\n clickTarget !== this._elementRef.nativeElement &&\n (!formField || !formField.contains(clickTarget))\n );\n })\n );\n }\n\n static ngAcceptInputType_required: BooleanInput;\n static ngAcceptInputType_readonly: BooleanInput;\n static ngAcceptInputType_disabled: BooleanInput;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { ColorChromeModule } from 'ngx-color/chrome';\n\nimport { MtxColorPickerComponent } from './color-picker.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n MatMenuModule,\n MatFormFieldModule,\n MatInputModule,\n ColorChromeModule,\n ],\n exports: [MtxColorPickerComponent],\n declarations: [MtxColorPickerComponent],\n})\nexport class MtxColorPickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|