@mxtommy/kip 3.9.0-beta.2 → 3.9.0-beta.21
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/.github/copilot-instructions.md +1 -1
- package/.github/instructions/angular.instructions.md +46 -0
- package/README.md +49 -12
- package/package.json +2 -4
- package/public/3rdpartylicenses.txt +77 -77
- package/public/app-help.component.css.map +7 -0
- package/public/app.component.css.map +7 -0
- package/public/assets/help-docs/configuration.md +4 -4
- package/public/assets/help-docs/dashboards.md +4 -2
- package/public/assets/svg/icons.svg +1 -1
- package/public/boolean-control-config.component.css.map +7 -0
- package/public/boolean-multicontrol-options.component.css.map +7 -0
- package/public/chunk-3EWIS24B.js +5237 -0
- package/public/chunk-3EWIS24B.js.map +1 -0
- package/public/chunk-3VR3EA35.js +1022 -0
- package/public/chunk-3VR3EA35.js.map +1 -0
- package/public/chunk-63ILPRXC.js +2091 -0
- package/public/chunk-63ILPRXC.js.map +1 -0
- package/public/chunk-65ZWQBS6.js +3102 -0
- package/public/chunk-65ZWQBS6.js.map +1 -0
- package/public/chunk-B3LKEWZP.js +4950 -0
- package/public/chunk-B3LKEWZP.js.map +1 -0
- package/public/chunk-BIBIW64D.js +16773 -0
- package/public/chunk-BIBIW64D.js.map +1 -0
- package/public/chunk-BM53SC5N.js +77 -0
- package/public/chunk-BM53SC5N.js.map +7 -0
- package/public/chunk-D7ILNFDM.js +3059 -0
- package/public/chunk-D7ILNFDM.js.map +1 -0
- package/public/chunk-E24UNLSJ.js +2228 -0
- package/public/chunk-E24UNLSJ.js.map +1 -0
- package/public/chunk-J42S2ELC.js +5927 -0
- package/public/chunk-J42S2ELC.js.map +1 -0
- package/public/chunk-KC22A6VH.js +17 -0
- package/public/chunk-KC22A6VH.js.map +7 -0
- package/public/chunk-MCEJWZB2.js +116 -0
- package/public/chunk-MCEJWZB2.js.map +1 -0
- package/public/chunk-NBF6SE6O.js +89 -0
- package/public/chunk-NBF6SE6O.js.map +7 -0
- package/public/chunk-QC7VGVAR.js +343 -0
- package/public/chunk-QC7VGVAR.js.map +7 -0
- package/public/chunk-SDOP6T56.js +42377 -0
- package/public/chunk-SDOP6T56.js.map +1 -0
- package/public/chunk-U2DCSTRY.js +159 -0
- package/public/chunk-U2DCSTRY.js.map +7 -0
- package/public/chunk-UHVNAEXC.js +4752 -0
- package/public/chunk-UHVNAEXC.js.map +1 -0
- package/public/chunk-UQYTD5AC.js +2723 -0
- package/public/chunk-UQYTD5AC.js.map +1 -0
- package/public/chunk-XSABJ5NZ.js +272 -0
- package/public/chunk-XSABJ5NZ.js.map +7 -0
- package/public/chunk-Y6N6O2IP.js +19852 -0
- package/public/chunk-Y6N6O2IP.js.map +1 -0
- package/public/chunk-YGJLBLOX.js +2708 -0
- package/public/chunk-YGJLBLOX.js.map +1 -0
- package/public/chunk-YT33DHC3.js +591 -0
- package/public/chunk-YT33DHC3.js.map +7 -0
- package/public/chunk-YZXYVP72.js +4934 -0
- package/public/chunk-YZXYVP72.js.map +1 -0
- package/public/chunk-ZEHRDSTB.js +13727 -0
- package/public/chunk-ZEHRDSTB.js.map +1 -0
- package/public/config.component.css.map +7 -0
- package/public/dashboard-scroller.component.css.map +7 -0
- package/public/dashboard.component.css.map +7 -0
- package/public/dashboards-editor.component.css.map +7 -0
- package/public/data-inspector-row.component.css.map +7 -0
- package/public/data-inspector.component.css.map +7 -0
- package/public/dataset-chart-options.component.css.map +7 -0
- package/public/datasets.component.css.map +7 -0
- package/public/dialog-confirmation.component.css.map +7 -0
- package/public/dialog-dashboard-page-editor.component.css.map +7 -0
- package/public/dialog-frame.component.css.map +7 -0
- package/public/dialog-name.component.css.map +7 -0
- package/public/display-chart-options.component.css.map +7 -0
- package/public/display.component.css.map +7 -0
- package/public/gauge-steel.component.css.map +7 -0
- package/public/home.component.css.map +7 -0
- package/public/index.html +19 -17
- package/public/main.js +36423 -0
- package/public/main.js.map +1 -0
- package/public/menu-actions.component.css.map +7 -0
- package/public/menu-notifications.component.css.map +7 -0
- package/public/minichart.component.css.map +7 -0
- package/public/modal-user-credential.component.css.map +7 -0
- package/public/modal-widget-config.component.css.map +7 -0
- package/public/notification-badge.component.css.map +7 -0
- package/public/page-header.component.css.map +7 -0
- package/public/path-control-config.component.css.map +7 -0
- package/public/paths-options.component.css.map +7 -0
- package/public/polyfills.js +4422 -0
- package/public/polyfills.js.map +1 -0
- package/public/select-autopilot.component.css.map +7 -0
- package/public/select-icon.component.css.map +7 -0
- package/public/settings.component.css.map +7 -0
- package/public/signalk.component.css.map +7 -0
- package/public/styles.css +1651 -0
- package/public/styles.css.map +7 -0
- package/public/svg-autopilot.component.css.map +7 -0
- package/public/svg-racesteer.component.css.map +7 -0
- package/public/svg-simple-linear-gauge.component.css.map +7 -0
- package/public/svg-windsteer.component.css.map +7 -0
- package/public/tile-large-icon.component.css.map +7 -0
- package/public/units.component.css.map +7 -0
- package/public/upgrade-config.component.css.map +7 -0
- package/public/widget-autopilot.component.css.map +7 -0
- package/public/widget-boolean-switch.component.css.map +7 -0
- package/public/widget-datetime.component.css.map +7 -0
- package/public/widget-freeboardsk.component.css.map +7 -0
- package/public/widget-gauge-ng-compass.component.css.map +7 -0
- package/public/widget-gauge-ng-linear.component.css.map +7 -0
- package/public/widget-gauge-ng-radial.component.css.map +7 -0
- package/public/widget-gauge-steel.component.css.map +7 -0
- package/public/widget-horizon.component.css.map +7 -0
- package/public/widget-host.component.css.map +7 -0
- package/public/widget-iframe.component.css.map +7 -0
- package/public/widget-label.component.css.map +7 -0
- package/public/widget-list-card.component.css.map +7 -0
- package/public/widget-numeric.component.css.map +7 -0
- package/public/widget-position.component.css.map +7 -0
- package/public/widget-race-timer.component.css.map +7 -0
- package/public/widget-racer-line.component.css.map +7 -0
- package/public/widget-racer-timer.component.css.map +7 -0
- package/public/widget-simple-linear.component.css.map +7 -0
- package/public/widget-slider.component.css.map +7 -0
- package/public/widget-text.component.css.map +7 -0
- package/public/widget-title.component.css.map +7 -0
- package/public/widget-tutorial.component.css.map +7 -0
- package/public/widgets-list.component.css.map +7 -0
- package/public/assets/hammer.min.js +0 -7
- package/public/chunk-2YVW3TBK.js +0 -2
- package/public/chunk-35L7BBBD.js +0 -15
- package/public/chunk-3LEMFOCV.js +0 -3
- package/public/chunk-3LJAKLLW.js +0 -1
- package/public/chunk-4JJLPUET.js +0 -60
- package/public/chunk-CBUY7NMR.js +0 -2
- package/public/chunk-CQXWGD3T.js +0 -2
- package/public/chunk-EUFDL4TJ.js +0 -6
- package/public/chunk-FBFTGVZ6.js +0 -1
- package/public/chunk-HCXH72CD.js +0 -5
- package/public/chunk-JY3WVS7C.js +0 -2
- package/public/chunk-KTDDP73O.js +0 -2
- package/public/chunk-NMEZOCU2.js +0 -1
- package/public/chunk-NS2FPVWM.js +0 -4
- package/public/chunk-OSYHJB4F.js +0 -11
- package/public/chunk-PKNLASTF.js +0 -4
- package/public/chunk-Q2Y75POI.js +0 -1
- package/public/chunk-RRTCHHRC.js +0 -3
- package/public/chunk-TA4GACKT.js +0 -4
- package/public/chunk-TXPLRBW5.js +0 -2
- package/public/chunk-VHFBF47T.js +0 -1
- package/public/chunk-VYUMZVH2.js +0 -2
- package/public/chunk-XRGAX4LS.js +0 -2
- package/public/chunk-YNJRIFUM.js +0 -1
- package/public/chunk-ZBCOJLI4.js +0 -6
- package/public/main-XM5EHMUE.js +0 -50
- package/public/polyfills-KH22MU6U.js +0 -2
- package/public/styles-RECKN66R.css +0 -1
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP-ILKS6RVC.woff2 → KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ-MJ3CERJ6.woff2 → KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP-UW3XWY7P.woff2 → KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP-U3JTBV4H.woff2 → KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP-36ULTGLY.woff2 → KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP-5NJLO2HW.woff2 → KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP-2EL65J2O.woff2 → KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP-XWLWMQVU.woff2 → KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ-PWGJWDFE.woff2 → KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP-ITB7NUJC.woff2 → KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP-32PLHKPQ.woff2 → KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP-QPSNQEDD.woff2 → KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP-JKBSJZY3.woff2 → KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP-OG5AHRIX.woff2 → KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz-PPTELUJT.woff2 → KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu4mxKKTU1Kg-SNGEW7FX.woff2 → KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz-DRL4U32S.woff2 → KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu72xKKTU1Kvnz-PRJ7OQMU.woff2 → KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz-HW6RMPJ3.woff2 → KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz-KZD6JQRT.woff2 → KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz-Z72STTMG.woff2 → KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2} +0 -0
- /package/public/media/{flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-CN2J7AYH.woff2 → flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2} +0 -0
|
@@ -0,0 +1,2723 @@
|
|
|
1
|
+
import {
|
|
2
|
+
APP_ID,
|
|
3
|
+
ApplicationModule,
|
|
4
|
+
CSP_NONCE,
|
|
5
|
+
ChangeDetectionStrategy,
|
|
6
|
+
CommonModule,
|
|
7
|
+
Component,
|
|
8
|
+
Console,
|
|
9
|
+
DOCUMENT,
|
|
10
|
+
DomAdapter,
|
|
11
|
+
ElementRef,
|
|
12
|
+
ErrorHandler,
|
|
13
|
+
HostAttributeToken,
|
|
14
|
+
HttpClient,
|
|
15
|
+
INJECTOR_SCOPE,
|
|
16
|
+
Inject,
|
|
17
|
+
Injectable,
|
|
18
|
+
InjectionToken,
|
|
19
|
+
Injector,
|
|
20
|
+
Input,
|
|
21
|
+
MatCommonModule,
|
|
22
|
+
NgModule,
|
|
23
|
+
NgZone,
|
|
24
|
+
Optional,
|
|
25
|
+
PLATFORM_BROWSER_ID,
|
|
26
|
+
PLATFORM_ID,
|
|
27
|
+
PLATFORM_INITIALIZER,
|
|
28
|
+
RendererFactory2,
|
|
29
|
+
RendererStyleFlags2,
|
|
30
|
+
RuntimeError,
|
|
31
|
+
SecurityContext,
|
|
32
|
+
SkipSelf,
|
|
33
|
+
Subscription,
|
|
34
|
+
TESTABILITY,
|
|
35
|
+
TESTABILITY_GETTER,
|
|
36
|
+
Testability,
|
|
37
|
+
TestabilityRegistry,
|
|
38
|
+
TracingService,
|
|
39
|
+
Version,
|
|
40
|
+
ViewEncapsulation,
|
|
41
|
+
XSS_SECURITY_URL,
|
|
42
|
+
XhrFactory,
|
|
43
|
+
__spreadValues,
|
|
44
|
+
_global,
|
|
45
|
+
_sanitizeHtml,
|
|
46
|
+
_sanitizeUrl,
|
|
47
|
+
allowSanitizationBypassAndThrow,
|
|
48
|
+
booleanAttribute,
|
|
49
|
+
bypassSanitizationTrustHtml,
|
|
50
|
+
bypassSanitizationTrustResourceUrl,
|
|
51
|
+
bypassSanitizationTrustScript,
|
|
52
|
+
bypassSanitizationTrustStyle,
|
|
53
|
+
bypassSanitizationTrustUrl,
|
|
54
|
+
catchError,
|
|
55
|
+
createPlatformFactory,
|
|
56
|
+
finalize,
|
|
57
|
+
forkJoin,
|
|
58
|
+
forwardRef,
|
|
59
|
+
getDOM,
|
|
60
|
+
inject,
|
|
61
|
+
internalCreateApplication,
|
|
62
|
+
map,
|
|
63
|
+
of,
|
|
64
|
+
parseCookieValue,
|
|
65
|
+
platformCore,
|
|
66
|
+
setClassMetadata,
|
|
67
|
+
setDocument,
|
|
68
|
+
setRootDomAdapter,
|
|
69
|
+
share,
|
|
70
|
+
take,
|
|
71
|
+
tap,
|
|
72
|
+
throwError,
|
|
73
|
+
unwrapSafeValue,
|
|
74
|
+
ɵɵattribute,
|
|
75
|
+
ɵɵclassMap,
|
|
76
|
+
ɵɵclassProp,
|
|
77
|
+
ɵɵdefineComponent,
|
|
78
|
+
ɵɵdefineInjectable,
|
|
79
|
+
ɵɵdefineInjector,
|
|
80
|
+
ɵɵdefineNgModule,
|
|
81
|
+
ɵɵinject,
|
|
82
|
+
ɵɵprojection,
|
|
83
|
+
ɵɵprojectionDef
|
|
84
|
+
} from "./chunk-SDOP6T56.js";
|
|
85
|
+
|
|
86
|
+
// node_modules/@angular/platform-browser/fesm2022/dom_renderer.mjs
|
|
87
|
+
var EVENT_MANAGER_PLUGINS = new InjectionToken(ngDevMode ? "EventManagerPlugins" : "");
|
|
88
|
+
var EventManager = class _EventManager {
|
|
89
|
+
_zone;
|
|
90
|
+
_plugins;
|
|
91
|
+
_eventNameToPlugin = /* @__PURE__ */ new Map();
|
|
92
|
+
/**
|
|
93
|
+
* Initializes an instance of the event-manager service.
|
|
94
|
+
*/
|
|
95
|
+
constructor(plugins, _zone) {
|
|
96
|
+
this._zone = _zone;
|
|
97
|
+
plugins.forEach((plugin) => {
|
|
98
|
+
plugin.manager = this;
|
|
99
|
+
});
|
|
100
|
+
this._plugins = plugins.slice().reverse();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Registers a handler for a specific element and event.
|
|
104
|
+
*
|
|
105
|
+
* @param element The HTML element to receive event notifications.
|
|
106
|
+
* @param eventName The name of the event to listen for.
|
|
107
|
+
* @param handler A function to call when the notification occurs. Receives the
|
|
108
|
+
* event object as an argument.
|
|
109
|
+
* @param options Options that configure how the event listener is bound.
|
|
110
|
+
* @returns A callback function that can be used to remove the handler.
|
|
111
|
+
*/
|
|
112
|
+
addEventListener(element, eventName, handler, options) {
|
|
113
|
+
const plugin = this._findPluginFor(eventName);
|
|
114
|
+
return plugin.addEventListener(element, eventName, handler, options);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Retrieves the compilation zone in which event listeners are registered.
|
|
118
|
+
*/
|
|
119
|
+
getZone() {
|
|
120
|
+
return this._zone;
|
|
121
|
+
}
|
|
122
|
+
/** @internal */
|
|
123
|
+
_findPluginFor(eventName) {
|
|
124
|
+
let plugin = this._eventNameToPlugin.get(eventName);
|
|
125
|
+
if (plugin) {
|
|
126
|
+
return plugin;
|
|
127
|
+
}
|
|
128
|
+
const plugins = this._plugins;
|
|
129
|
+
plugin = plugins.find((plugin2) => plugin2.supports(eventName));
|
|
130
|
+
if (!plugin) {
|
|
131
|
+
throw new RuntimeError(5101, (typeof ngDevMode === "undefined" || ngDevMode) && `No event manager plugin found for event ${eventName}`);
|
|
132
|
+
}
|
|
133
|
+
this._eventNameToPlugin.set(eventName, plugin);
|
|
134
|
+
return plugin;
|
|
135
|
+
}
|
|
136
|
+
static \u0275fac = function EventManager_Factory(__ngFactoryType__) {
|
|
137
|
+
return new (__ngFactoryType__ || _EventManager)(\u0275\u0275inject(EVENT_MANAGER_PLUGINS), \u0275\u0275inject(NgZone));
|
|
138
|
+
};
|
|
139
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
140
|
+
token: _EventManager,
|
|
141
|
+
factory: _EventManager.\u0275fac
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
(() => {
|
|
145
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(EventManager, [{
|
|
146
|
+
type: Injectable
|
|
147
|
+
}], () => [{
|
|
148
|
+
type: void 0,
|
|
149
|
+
decorators: [{
|
|
150
|
+
type: Inject,
|
|
151
|
+
args: [EVENT_MANAGER_PLUGINS]
|
|
152
|
+
}]
|
|
153
|
+
}, {
|
|
154
|
+
type: NgZone
|
|
155
|
+
}], null);
|
|
156
|
+
})();
|
|
157
|
+
var EventManagerPlugin = class {
|
|
158
|
+
_doc;
|
|
159
|
+
// TODO: remove (has some usage in G3)
|
|
160
|
+
constructor(_doc) {
|
|
161
|
+
this._doc = _doc;
|
|
162
|
+
}
|
|
163
|
+
// Using non-null assertion because it's set by EventManager's constructor
|
|
164
|
+
manager;
|
|
165
|
+
};
|
|
166
|
+
var APP_ID_ATTRIBUTE_NAME = "ng-app-id";
|
|
167
|
+
function removeElements(elements) {
|
|
168
|
+
for (const element of elements) {
|
|
169
|
+
element.remove();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function createStyleElement(style, doc) {
|
|
173
|
+
const styleElement = doc.createElement("style");
|
|
174
|
+
styleElement.textContent = style;
|
|
175
|
+
return styleElement;
|
|
176
|
+
}
|
|
177
|
+
function addServerStyles(doc, appId, inline, external) {
|
|
178
|
+
const elements = doc.head?.querySelectorAll(`style[${APP_ID_ATTRIBUTE_NAME}="${appId}"],link[${APP_ID_ATTRIBUTE_NAME}="${appId}"]`);
|
|
179
|
+
if (elements) {
|
|
180
|
+
for (const styleElement of elements) {
|
|
181
|
+
styleElement.removeAttribute(APP_ID_ATTRIBUTE_NAME);
|
|
182
|
+
if (styleElement instanceof HTMLLinkElement) {
|
|
183
|
+
external.set(styleElement.href.slice(styleElement.href.lastIndexOf("/") + 1), {
|
|
184
|
+
usage: 0,
|
|
185
|
+
elements: [styleElement]
|
|
186
|
+
});
|
|
187
|
+
} else if (styleElement.textContent) {
|
|
188
|
+
inline.set(styleElement.textContent, {
|
|
189
|
+
usage: 0,
|
|
190
|
+
elements: [styleElement]
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function createLinkElement(url, doc) {
|
|
197
|
+
const linkElement = doc.createElement("link");
|
|
198
|
+
linkElement.setAttribute("rel", "stylesheet");
|
|
199
|
+
linkElement.setAttribute("href", url);
|
|
200
|
+
return linkElement;
|
|
201
|
+
}
|
|
202
|
+
var SharedStylesHost = class _SharedStylesHost {
|
|
203
|
+
doc;
|
|
204
|
+
appId;
|
|
205
|
+
nonce;
|
|
206
|
+
/**
|
|
207
|
+
* Provides usage information for active inline style content and associated HTML <style> elements.
|
|
208
|
+
* Embedded styles typically originate from the `styles` metadata of a rendered component.
|
|
209
|
+
*/
|
|
210
|
+
inline = /* @__PURE__ */ new Map();
|
|
211
|
+
/**
|
|
212
|
+
* Provides usage information for active external style URLs and the associated HTML <link> elements.
|
|
213
|
+
* External styles typically originate from the `ɵɵExternalStylesFeature` of a rendered component.
|
|
214
|
+
*/
|
|
215
|
+
external = /* @__PURE__ */ new Map();
|
|
216
|
+
/**
|
|
217
|
+
* Set of host DOM nodes that will have styles attached.
|
|
218
|
+
*/
|
|
219
|
+
hosts = /* @__PURE__ */ new Set();
|
|
220
|
+
constructor(doc, appId, nonce, platformId = {}) {
|
|
221
|
+
this.doc = doc;
|
|
222
|
+
this.appId = appId;
|
|
223
|
+
this.nonce = nonce;
|
|
224
|
+
addServerStyles(doc, appId, this.inline, this.external);
|
|
225
|
+
this.hosts.add(doc.head);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Adds embedded styles to the DOM via HTML `style` elements.
|
|
229
|
+
* @param styles An array of style content strings.
|
|
230
|
+
*/
|
|
231
|
+
addStyles(styles, urls) {
|
|
232
|
+
for (const value of styles) {
|
|
233
|
+
this.addUsage(value, this.inline, createStyleElement);
|
|
234
|
+
}
|
|
235
|
+
urls?.forEach((value) => this.addUsage(value, this.external, createLinkElement));
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Removes embedded styles from the DOM that were added as HTML `style` elements.
|
|
239
|
+
* @param styles An array of style content strings.
|
|
240
|
+
*/
|
|
241
|
+
removeStyles(styles, urls) {
|
|
242
|
+
for (const value of styles) {
|
|
243
|
+
this.removeUsage(value, this.inline);
|
|
244
|
+
}
|
|
245
|
+
urls?.forEach((value) => this.removeUsage(value, this.external));
|
|
246
|
+
}
|
|
247
|
+
addUsage(value, usages, creator) {
|
|
248
|
+
const record = usages.get(value);
|
|
249
|
+
if (record) {
|
|
250
|
+
if ((typeof ngDevMode === "undefined" || ngDevMode) && record.usage === 0) {
|
|
251
|
+
record.elements.forEach((element) => element.setAttribute("ng-style-reused", ""));
|
|
252
|
+
}
|
|
253
|
+
record.usage++;
|
|
254
|
+
} else {
|
|
255
|
+
usages.set(value, {
|
|
256
|
+
usage: 1,
|
|
257
|
+
elements: [...this.hosts].map((host) => this.addElement(host, creator(value, this.doc)))
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
removeUsage(value, usages) {
|
|
262
|
+
const record = usages.get(value);
|
|
263
|
+
if (record) {
|
|
264
|
+
record.usage--;
|
|
265
|
+
if (record.usage <= 0) {
|
|
266
|
+
removeElements(record.elements);
|
|
267
|
+
usages.delete(value);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
ngOnDestroy() {
|
|
272
|
+
for (const [, {
|
|
273
|
+
elements
|
|
274
|
+
}] of [...this.inline, ...this.external]) {
|
|
275
|
+
removeElements(elements);
|
|
276
|
+
}
|
|
277
|
+
this.hosts.clear();
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Adds a host node to the set of style hosts and adds all existing style usage to
|
|
281
|
+
* the newly added host node.
|
|
282
|
+
*
|
|
283
|
+
* This is currently only used for Shadow DOM encapsulation mode.
|
|
284
|
+
*/
|
|
285
|
+
addHost(hostNode) {
|
|
286
|
+
this.hosts.add(hostNode);
|
|
287
|
+
for (const [style, {
|
|
288
|
+
elements
|
|
289
|
+
}] of this.inline) {
|
|
290
|
+
elements.push(this.addElement(hostNode, createStyleElement(style, this.doc)));
|
|
291
|
+
}
|
|
292
|
+
for (const [url, {
|
|
293
|
+
elements
|
|
294
|
+
}] of this.external) {
|
|
295
|
+
elements.push(this.addElement(hostNode, createLinkElement(url, this.doc)));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
removeHost(hostNode) {
|
|
299
|
+
this.hosts.delete(hostNode);
|
|
300
|
+
}
|
|
301
|
+
addElement(host, element) {
|
|
302
|
+
if (this.nonce) {
|
|
303
|
+
element.setAttribute("nonce", this.nonce);
|
|
304
|
+
}
|
|
305
|
+
if (false) {
|
|
306
|
+
element.setAttribute(APP_ID_ATTRIBUTE_NAME, this.appId);
|
|
307
|
+
}
|
|
308
|
+
return host.appendChild(element);
|
|
309
|
+
}
|
|
310
|
+
static \u0275fac = function SharedStylesHost_Factory(__ngFactoryType__) {
|
|
311
|
+
return new (__ngFactoryType__ || _SharedStylesHost)(\u0275\u0275inject(DOCUMENT), \u0275\u0275inject(APP_ID), \u0275\u0275inject(CSP_NONCE, 8), \u0275\u0275inject(PLATFORM_ID));
|
|
312
|
+
};
|
|
313
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
314
|
+
token: _SharedStylesHost,
|
|
315
|
+
factory: _SharedStylesHost.\u0275fac
|
|
316
|
+
});
|
|
317
|
+
};
|
|
318
|
+
(() => {
|
|
319
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SharedStylesHost, [{
|
|
320
|
+
type: Injectable
|
|
321
|
+
}], () => [{
|
|
322
|
+
type: Document,
|
|
323
|
+
decorators: [{
|
|
324
|
+
type: Inject,
|
|
325
|
+
args: [DOCUMENT]
|
|
326
|
+
}]
|
|
327
|
+
}, {
|
|
328
|
+
type: void 0,
|
|
329
|
+
decorators: [{
|
|
330
|
+
type: Inject,
|
|
331
|
+
args: [APP_ID]
|
|
332
|
+
}]
|
|
333
|
+
}, {
|
|
334
|
+
type: void 0,
|
|
335
|
+
decorators: [{
|
|
336
|
+
type: Inject,
|
|
337
|
+
args: [CSP_NONCE]
|
|
338
|
+
}, {
|
|
339
|
+
type: Optional
|
|
340
|
+
}]
|
|
341
|
+
}, {
|
|
342
|
+
type: void 0,
|
|
343
|
+
decorators: [{
|
|
344
|
+
type: Inject,
|
|
345
|
+
args: [PLATFORM_ID]
|
|
346
|
+
}]
|
|
347
|
+
}], null);
|
|
348
|
+
})();
|
|
349
|
+
var NAMESPACE_URIS = {
|
|
350
|
+
"svg": "http://www.w3.org/2000/svg",
|
|
351
|
+
"xhtml": "http://www.w3.org/1999/xhtml",
|
|
352
|
+
"xlink": "http://www.w3.org/1999/xlink",
|
|
353
|
+
"xml": "http://www.w3.org/XML/1998/namespace",
|
|
354
|
+
"xmlns": "http://www.w3.org/2000/xmlns/",
|
|
355
|
+
"math": "http://www.w3.org/1998/Math/MathML"
|
|
356
|
+
};
|
|
357
|
+
var COMPONENT_REGEX = /%COMP%/g;
|
|
358
|
+
var SOURCEMAP_URL_REGEXP = /\/\*#\s*sourceMappingURL=(.+?)\s*\*\//;
|
|
359
|
+
var PROTOCOL_REGEXP = /^https?:/;
|
|
360
|
+
var COMPONENT_VARIABLE = "%COMP%";
|
|
361
|
+
var HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;
|
|
362
|
+
var CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;
|
|
363
|
+
var REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT = true;
|
|
364
|
+
var REMOVE_STYLES_ON_COMPONENT_DESTROY = new InjectionToken(ngDevMode ? "RemoveStylesOnCompDestroy" : "", {
|
|
365
|
+
providedIn: "root",
|
|
366
|
+
factory: () => REMOVE_STYLES_ON_COMPONENT_DESTROY_DEFAULT
|
|
367
|
+
});
|
|
368
|
+
function shimContentAttribute(componentShortId) {
|
|
369
|
+
return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);
|
|
370
|
+
}
|
|
371
|
+
function shimHostAttribute(componentShortId) {
|
|
372
|
+
return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);
|
|
373
|
+
}
|
|
374
|
+
function shimStylesContent(compId, styles) {
|
|
375
|
+
return styles.map((s) => s.replace(COMPONENT_REGEX, compId));
|
|
376
|
+
}
|
|
377
|
+
function addBaseHrefToCssSourceMap(baseHref, styles) {
|
|
378
|
+
if (!baseHref) {
|
|
379
|
+
return styles;
|
|
380
|
+
}
|
|
381
|
+
const absoluteBaseHrefUrl = new URL(baseHref, "http://localhost");
|
|
382
|
+
return styles.map((cssContent) => {
|
|
383
|
+
if (!cssContent.includes("sourceMappingURL=")) {
|
|
384
|
+
return cssContent;
|
|
385
|
+
}
|
|
386
|
+
return cssContent.replace(SOURCEMAP_URL_REGEXP, (_, sourceMapUrl) => {
|
|
387
|
+
if (sourceMapUrl[0] === "/" || sourceMapUrl.startsWith("data:") || PROTOCOL_REGEXP.test(sourceMapUrl)) {
|
|
388
|
+
return `/*# sourceMappingURL=${sourceMapUrl} */`;
|
|
389
|
+
}
|
|
390
|
+
const {
|
|
391
|
+
pathname: resolvedSourceMapUrl
|
|
392
|
+
} = new URL(sourceMapUrl, absoluteBaseHrefUrl);
|
|
393
|
+
return `/*# sourceMappingURL=${resolvedSourceMapUrl} */`;
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
var DomRendererFactory2 = class _DomRendererFactory2 {
|
|
398
|
+
eventManager;
|
|
399
|
+
sharedStylesHost;
|
|
400
|
+
appId;
|
|
401
|
+
removeStylesOnCompDestroy;
|
|
402
|
+
doc;
|
|
403
|
+
platformId;
|
|
404
|
+
ngZone;
|
|
405
|
+
nonce;
|
|
406
|
+
tracingService;
|
|
407
|
+
rendererByCompId = /* @__PURE__ */ new Map();
|
|
408
|
+
defaultRenderer;
|
|
409
|
+
platformIsServer;
|
|
410
|
+
constructor(eventManager, sharedStylesHost, appId, removeStylesOnCompDestroy, doc, platformId, ngZone, nonce = null, tracingService = null) {
|
|
411
|
+
this.eventManager = eventManager;
|
|
412
|
+
this.sharedStylesHost = sharedStylesHost;
|
|
413
|
+
this.appId = appId;
|
|
414
|
+
this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;
|
|
415
|
+
this.doc = doc;
|
|
416
|
+
this.platformId = platformId;
|
|
417
|
+
this.ngZone = ngZone;
|
|
418
|
+
this.nonce = nonce;
|
|
419
|
+
this.tracingService = tracingService;
|
|
420
|
+
this.platformIsServer = false;
|
|
421
|
+
this.defaultRenderer = new DefaultDomRenderer2(eventManager, doc, ngZone, this.platformIsServer, this.tracingService);
|
|
422
|
+
}
|
|
423
|
+
createRenderer(element, type) {
|
|
424
|
+
if (!element || !type) {
|
|
425
|
+
return this.defaultRenderer;
|
|
426
|
+
}
|
|
427
|
+
if (false) {
|
|
428
|
+
type = __spreadProps(__spreadValues({}, type), {
|
|
429
|
+
encapsulation: ViewEncapsulation.Emulated
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
const renderer = this.getOrCreateRenderer(element, type);
|
|
433
|
+
if (renderer instanceof EmulatedEncapsulationDomRenderer2) {
|
|
434
|
+
renderer.applyToHost(element);
|
|
435
|
+
} else if (renderer instanceof NoneEncapsulationDomRenderer) {
|
|
436
|
+
renderer.applyStyles();
|
|
437
|
+
}
|
|
438
|
+
return renderer;
|
|
439
|
+
}
|
|
440
|
+
getOrCreateRenderer(element, type) {
|
|
441
|
+
const rendererByCompId = this.rendererByCompId;
|
|
442
|
+
let renderer = rendererByCompId.get(type.id);
|
|
443
|
+
if (!renderer) {
|
|
444
|
+
const doc = this.doc;
|
|
445
|
+
const ngZone = this.ngZone;
|
|
446
|
+
const eventManager = this.eventManager;
|
|
447
|
+
const sharedStylesHost = this.sharedStylesHost;
|
|
448
|
+
const removeStylesOnCompDestroy = this.removeStylesOnCompDestroy;
|
|
449
|
+
const platformIsServer = this.platformIsServer;
|
|
450
|
+
const tracingService = this.tracingService;
|
|
451
|
+
switch (type.encapsulation) {
|
|
452
|
+
case ViewEncapsulation.Emulated:
|
|
453
|
+
renderer = new EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, type, this.appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, tracingService);
|
|
454
|
+
break;
|
|
455
|
+
case ViewEncapsulation.ShadowDom:
|
|
456
|
+
return new ShadowDomRenderer(eventManager, sharedStylesHost, element, type, doc, ngZone, this.nonce, platformIsServer, tracingService);
|
|
457
|
+
default:
|
|
458
|
+
renderer = new NoneEncapsulationDomRenderer(eventManager, sharedStylesHost, type, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, tracingService);
|
|
459
|
+
break;
|
|
460
|
+
}
|
|
461
|
+
rendererByCompId.set(type.id, renderer);
|
|
462
|
+
}
|
|
463
|
+
return renderer;
|
|
464
|
+
}
|
|
465
|
+
ngOnDestroy() {
|
|
466
|
+
this.rendererByCompId.clear();
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Used during HMR to clear any cached data about a component.
|
|
470
|
+
* @param componentId ID of the component that is being replaced.
|
|
471
|
+
*/
|
|
472
|
+
componentReplaced(componentId) {
|
|
473
|
+
this.rendererByCompId.delete(componentId);
|
|
474
|
+
}
|
|
475
|
+
static \u0275fac = function DomRendererFactory2_Factory(__ngFactoryType__) {
|
|
476
|
+
return new (__ngFactoryType__ || _DomRendererFactory2)(\u0275\u0275inject(EventManager), \u0275\u0275inject(SharedStylesHost), \u0275\u0275inject(APP_ID), \u0275\u0275inject(REMOVE_STYLES_ON_COMPONENT_DESTROY), \u0275\u0275inject(DOCUMENT), \u0275\u0275inject(PLATFORM_ID), \u0275\u0275inject(NgZone), \u0275\u0275inject(CSP_NONCE), \u0275\u0275inject(TracingService, 8));
|
|
477
|
+
};
|
|
478
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
479
|
+
token: _DomRendererFactory2,
|
|
480
|
+
factory: _DomRendererFactory2.\u0275fac
|
|
481
|
+
});
|
|
482
|
+
};
|
|
483
|
+
(() => {
|
|
484
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomRendererFactory2, [{
|
|
485
|
+
type: Injectable
|
|
486
|
+
}], () => [{
|
|
487
|
+
type: EventManager
|
|
488
|
+
}, {
|
|
489
|
+
type: SharedStylesHost
|
|
490
|
+
}, {
|
|
491
|
+
type: void 0,
|
|
492
|
+
decorators: [{
|
|
493
|
+
type: Inject,
|
|
494
|
+
args: [APP_ID]
|
|
495
|
+
}]
|
|
496
|
+
}, {
|
|
497
|
+
type: void 0,
|
|
498
|
+
decorators: [{
|
|
499
|
+
type: Inject,
|
|
500
|
+
args: [REMOVE_STYLES_ON_COMPONENT_DESTROY]
|
|
501
|
+
}]
|
|
502
|
+
}, {
|
|
503
|
+
type: Document,
|
|
504
|
+
decorators: [{
|
|
505
|
+
type: Inject,
|
|
506
|
+
args: [DOCUMENT]
|
|
507
|
+
}]
|
|
508
|
+
}, {
|
|
509
|
+
type: Object,
|
|
510
|
+
decorators: [{
|
|
511
|
+
type: Inject,
|
|
512
|
+
args: [PLATFORM_ID]
|
|
513
|
+
}]
|
|
514
|
+
}, {
|
|
515
|
+
type: NgZone
|
|
516
|
+
}, {
|
|
517
|
+
type: void 0,
|
|
518
|
+
decorators: [{
|
|
519
|
+
type: Inject,
|
|
520
|
+
args: [CSP_NONCE]
|
|
521
|
+
}]
|
|
522
|
+
}, {
|
|
523
|
+
type: TracingService,
|
|
524
|
+
decorators: [{
|
|
525
|
+
type: Inject,
|
|
526
|
+
args: [TracingService]
|
|
527
|
+
}, {
|
|
528
|
+
type: Optional
|
|
529
|
+
}]
|
|
530
|
+
}], null);
|
|
531
|
+
})();
|
|
532
|
+
var DefaultDomRenderer2 = class {
|
|
533
|
+
eventManager;
|
|
534
|
+
doc;
|
|
535
|
+
ngZone;
|
|
536
|
+
platformIsServer;
|
|
537
|
+
tracingService;
|
|
538
|
+
data = /* @__PURE__ */ Object.create(null);
|
|
539
|
+
/**
|
|
540
|
+
* By default this renderer throws when encountering synthetic properties
|
|
541
|
+
* This can be disabled for example by the AsyncAnimationRendererFactory
|
|
542
|
+
*/
|
|
543
|
+
throwOnSyntheticProps = true;
|
|
544
|
+
constructor(eventManager, doc, ngZone, platformIsServer, tracingService) {
|
|
545
|
+
this.eventManager = eventManager;
|
|
546
|
+
this.doc = doc;
|
|
547
|
+
this.ngZone = ngZone;
|
|
548
|
+
this.platformIsServer = platformIsServer;
|
|
549
|
+
this.tracingService = tracingService;
|
|
550
|
+
}
|
|
551
|
+
destroy() {
|
|
552
|
+
}
|
|
553
|
+
destroyNode = null;
|
|
554
|
+
createElement(name, namespace) {
|
|
555
|
+
if (namespace) {
|
|
556
|
+
return this.doc.createElementNS(NAMESPACE_URIS[namespace] || namespace, name);
|
|
557
|
+
}
|
|
558
|
+
return this.doc.createElement(name);
|
|
559
|
+
}
|
|
560
|
+
createComment(value) {
|
|
561
|
+
return this.doc.createComment(value);
|
|
562
|
+
}
|
|
563
|
+
createText(value) {
|
|
564
|
+
return this.doc.createTextNode(value);
|
|
565
|
+
}
|
|
566
|
+
appendChild(parent, newChild) {
|
|
567
|
+
const targetParent = isTemplateNode(parent) ? parent.content : parent;
|
|
568
|
+
targetParent.appendChild(newChild);
|
|
569
|
+
}
|
|
570
|
+
insertBefore(parent, newChild, refChild) {
|
|
571
|
+
if (parent) {
|
|
572
|
+
const targetParent = isTemplateNode(parent) ? parent.content : parent;
|
|
573
|
+
targetParent.insertBefore(newChild, refChild);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
removeChild(_parent, oldChild) {
|
|
577
|
+
oldChild.remove();
|
|
578
|
+
}
|
|
579
|
+
selectRootElement(selectorOrNode, preserveContent) {
|
|
580
|
+
let el = typeof selectorOrNode === "string" ? this.doc.querySelector(selectorOrNode) : selectorOrNode;
|
|
581
|
+
if (!el) {
|
|
582
|
+
throw new RuntimeError(-5104, (typeof ngDevMode === "undefined" || ngDevMode) && `The selector "${selectorOrNode}" did not match any elements`);
|
|
583
|
+
}
|
|
584
|
+
if (!preserveContent) {
|
|
585
|
+
el.textContent = "";
|
|
586
|
+
}
|
|
587
|
+
return el;
|
|
588
|
+
}
|
|
589
|
+
parentNode(node) {
|
|
590
|
+
return node.parentNode;
|
|
591
|
+
}
|
|
592
|
+
nextSibling(node) {
|
|
593
|
+
return node.nextSibling;
|
|
594
|
+
}
|
|
595
|
+
setAttribute(el, name, value, namespace) {
|
|
596
|
+
if (namespace) {
|
|
597
|
+
name = namespace + ":" + name;
|
|
598
|
+
const namespaceUri = NAMESPACE_URIS[namespace];
|
|
599
|
+
if (namespaceUri) {
|
|
600
|
+
el.setAttributeNS(namespaceUri, name, value);
|
|
601
|
+
} else {
|
|
602
|
+
el.setAttribute(name, value);
|
|
603
|
+
}
|
|
604
|
+
} else {
|
|
605
|
+
el.setAttribute(name, value);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
removeAttribute(el, name, namespace) {
|
|
609
|
+
if (namespace) {
|
|
610
|
+
const namespaceUri = NAMESPACE_URIS[namespace];
|
|
611
|
+
if (namespaceUri) {
|
|
612
|
+
el.removeAttributeNS(namespaceUri, name);
|
|
613
|
+
} else {
|
|
614
|
+
el.removeAttribute(`${namespace}:${name}`);
|
|
615
|
+
}
|
|
616
|
+
} else {
|
|
617
|
+
el.removeAttribute(name);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
addClass(el, name) {
|
|
621
|
+
el.classList.add(name);
|
|
622
|
+
}
|
|
623
|
+
removeClass(el, name) {
|
|
624
|
+
el.classList.remove(name);
|
|
625
|
+
}
|
|
626
|
+
setStyle(el, style, value, flags) {
|
|
627
|
+
if (flags & (RendererStyleFlags2.DashCase | RendererStyleFlags2.Important)) {
|
|
628
|
+
el.style.setProperty(style, value, flags & RendererStyleFlags2.Important ? "important" : "");
|
|
629
|
+
} else {
|
|
630
|
+
el.style[style] = value;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
removeStyle(el, style, flags) {
|
|
634
|
+
if (flags & RendererStyleFlags2.DashCase) {
|
|
635
|
+
el.style.removeProperty(style);
|
|
636
|
+
} else {
|
|
637
|
+
el.style[style] = "";
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
setProperty(el, name, value) {
|
|
641
|
+
if (el == null) {
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(name, "property");
|
|
645
|
+
el[name] = value;
|
|
646
|
+
}
|
|
647
|
+
setValue(node, value) {
|
|
648
|
+
node.nodeValue = value;
|
|
649
|
+
}
|
|
650
|
+
listen(target, event, callback, options) {
|
|
651
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && this.throwOnSyntheticProps && checkNoSyntheticProp(event, "listener");
|
|
652
|
+
if (typeof target === "string") {
|
|
653
|
+
target = getDOM().getGlobalEventTarget(this.doc, target);
|
|
654
|
+
if (!target) {
|
|
655
|
+
throw new RuntimeError(5102, (typeof ngDevMode === "undefined" || ngDevMode) && `Unsupported event target ${target} for event ${event}`);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
let wrappedCallback = this.decoratePreventDefault(callback);
|
|
659
|
+
if (this.tracingService?.wrapEventListener) {
|
|
660
|
+
wrappedCallback = this.tracingService.wrapEventListener(target, event, wrappedCallback);
|
|
661
|
+
}
|
|
662
|
+
return this.eventManager.addEventListener(target, event, wrappedCallback, options);
|
|
663
|
+
}
|
|
664
|
+
decoratePreventDefault(eventHandler) {
|
|
665
|
+
return (event) => {
|
|
666
|
+
if (event === "__ngUnwrap__") {
|
|
667
|
+
return eventHandler;
|
|
668
|
+
}
|
|
669
|
+
const allowDefaultBehavior = false ? this.ngZone.runGuarded(() => eventHandler(event)) : eventHandler(event);
|
|
670
|
+
if (allowDefaultBehavior === false) {
|
|
671
|
+
event.preventDefault();
|
|
672
|
+
}
|
|
673
|
+
return void 0;
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
};
|
|
677
|
+
var AT_CHARCODE = (() => "@".charCodeAt(0))();
|
|
678
|
+
function checkNoSyntheticProp(name, nameKind) {
|
|
679
|
+
if (name.charCodeAt(0) === AT_CHARCODE) {
|
|
680
|
+
throw new RuntimeError(5105, `Unexpected synthetic ${nameKind} ${name} found. Please make sure that:
|
|
681
|
+
- Make sure \`provideAnimationsAsync()\`, \`provideAnimations()\` or \`provideNoopAnimations()\` call was added to a list of providers used to bootstrap an application.
|
|
682
|
+
- There is a corresponding animation configuration named \`${name}\` defined in the \`animations\` field of the \`@Component\` decorator (see https://angular.dev/api/core/Component#animations).`);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
function isTemplateNode(node) {
|
|
686
|
+
return node.tagName === "TEMPLATE" && node.content !== void 0;
|
|
687
|
+
}
|
|
688
|
+
var ShadowDomRenderer = class extends DefaultDomRenderer2 {
|
|
689
|
+
sharedStylesHost;
|
|
690
|
+
hostEl;
|
|
691
|
+
shadowRoot;
|
|
692
|
+
constructor(eventManager, sharedStylesHost, hostEl, component, doc, ngZone, nonce, platformIsServer, tracingService) {
|
|
693
|
+
super(eventManager, doc, ngZone, platformIsServer, tracingService);
|
|
694
|
+
this.sharedStylesHost = sharedStylesHost;
|
|
695
|
+
this.hostEl = hostEl;
|
|
696
|
+
this.shadowRoot = hostEl.attachShadow({
|
|
697
|
+
mode: "open"
|
|
698
|
+
});
|
|
699
|
+
this.sharedStylesHost.addHost(this.shadowRoot);
|
|
700
|
+
let styles = component.styles;
|
|
701
|
+
if (ngDevMode) {
|
|
702
|
+
const baseHref = getDOM().getBaseHref(doc) ?? "";
|
|
703
|
+
styles = addBaseHrefToCssSourceMap(baseHref, styles);
|
|
704
|
+
}
|
|
705
|
+
styles = shimStylesContent(component.id, styles);
|
|
706
|
+
for (const style of styles) {
|
|
707
|
+
const styleEl = document.createElement("style");
|
|
708
|
+
if (nonce) {
|
|
709
|
+
styleEl.setAttribute("nonce", nonce);
|
|
710
|
+
}
|
|
711
|
+
styleEl.textContent = style;
|
|
712
|
+
this.shadowRoot.appendChild(styleEl);
|
|
713
|
+
}
|
|
714
|
+
const styleUrls = component.getExternalStyles?.();
|
|
715
|
+
if (styleUrls) {
|
|
716
|
+
for (const styleUrl of styleUrls) {
|
|
717
|
+
const linkEl = createLinkElement(styleUrl, doc);
|
|
718
|
+
if (nonce) {
|
|
719
|
+
linkEl.setAttribute("nonce", nonce);
|
|
720
|
+
}
|
|
721
|
+
this.shadowRoot.appendChild(linkEl);
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
nodeOrShadowRoot(node) {
|
|
726
|
+
return node === this.hostEl ? this.shadowRoot : node;
|
|
727
|
+
}
|
|
728
|
+
appendChild(parent, newChild) {
|
|
729
|
+
return super.appendChild(this.nodeOrShadowRoot(parent), newChild);
|
|
730
|
+
}
|
|
731
|
+
insertBefore(parent, newChild, refChild) {
|
|
732
|
+
return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);
|
|
733
|
+
}
|
|
734
|
+
removeChild(_parent, oldChild) {
|
|
735
|
+
return super.removeChild(null, oldChild);
|
|
736
|
+
}
|
|
737
|
+
parentNode(node) {
|
|
738
|
+
return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));
|
|
739
|
+
}
|
|
740
|
+
destroy() {
|
|
741
|
+
this.sharedStylesHost.removeHost(this.shadowRoot);
|
|
742
|
+
}
|
|
743
|
+
};
|
|
744
|
+
var NoneEncapsulationDomRenderer = class extends DefaultDomRenderer2 {
|
|
745
|
+
sharedStylesHost;
|
|
746
|
+
removeStylesOnCompDestroy;
|
|
747
|
+
styles;
|
|
748
|
+
styleUrls;
|
|
749
|
+
constructor(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, tracingService, compId) {
|
|
750
|
+
super(eventManager, doc, ngZone, platformIsServer, tracingService);
|
|
751
|
+
this.sharedStylesHost = sharedStylesHost;
|
|
752
|
+
this.removeStylesOnCompDestroy = removeStylesOnCompDestroy;
|
|
753
|
+
let styles = component.styles;
|
|
754
|
+
if (ngDevMode) {
|
|
755
|
+
const baseHref = getDOM().getBaseHref(doc) ?? "";
|
|
756
|
+
styles = addBaseHrefToCssSourceMap(baseHref, styles);
|
|
757
|
+
}
|
|
758
|
+
this.styles = compId ? shimStylesContent(compId, styles) : styles;
|
|
759
|
+
this.styleUrls = component.getExternalStyles?.(compId);
|
|
760
|
+
}
|
|
761
|
+
applyStyles() {
|
|
762
|
+
this.sharedStylesHost.addStyles(this.styles, this.styleUrls);
|
|
763
|
+
}
|
|
764
|
+
destroy() {
|
|
765
|
+
if (!this.removeStylesOnCompDestroy) {
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
this.sharedStylesHost.removeStyles(this.styles, this.styleUrls);
|
|
769
|
+
}
|
|
770
|
+
};
|
|
771
|
+
var EmulatedEncapsulationDomRenderer2 = class extends NoneEncapsulationDomRenderer {
|
|
772
|
+
contentAttr;
|
|
773
|
+
hostAttr;
|
|
774
|
+
constructor(eventManager, sharedStylesHost, component, appId, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, tracingService) {
|
|
775
|
+
const compId = appId + "-" + component.id;
|
|
776
|
+
super(eventManager, sharedStylesHost, component, removeStylesOnCompDestroy, doc, ngZone, platformIsServer, tracingService, compId);
|
|
777
|
+
this.contentAttr = shimContentAttribute(compId);
|
|
778
|
+
this.hostAttr = shimHostAttribute(compId);
|
|
779
|
+
}
|
|
780
|
+
applyToHost(element) {
|
|
781
|
+
this.applyStyles();
|
|
782
|
+
this.setAttribute(element, this.hostAttr, "");
|
|
783
|
+
}
|
|
784
|
+
createElement(parent, name) {
|
|
785
|
+
const el = super.createElement(parent, name);
|
|
786
|
+
super.setAttribute(el, this.contentAttr, "");
|
|
787
|
+
return el;
|
|
788
|
+
}
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
// node_modules/@angular/platform-browser/fesm2022/browser.mjs
|
|
792
|
+
var BrowserDomAdapter = class _BrowserDomAdapter extends DomAdapter {
|
|
793
|
+
supportsDOMEvents = true;
|
|
794
|
+
static makeCurrent() {
|
|
795
|
+
setRootDomAdapter(new _BrowserDomAdapter());
|
|
796
|
+
}
|
|
797
|
+
onAndCancel(el, evt, listener, options) {
|
|
798
|
+
el.addEventListener(evt, listener, options);
|
|
799
|
+
return () => {
|
|
800
|
+
el.removeEventListener(evt, listener, options);
|
|
801
|
+
};
|
|
802
|
+
}
|
|
803
|
+
dispatchEvent(el, evt) {
|
|
804
|
+
el.dispatchEvent(evt);
|
|
805
|
+
}
|
|
806
|
+
remove(node) {
|
|
807
|
+
node.remove();
|
|
808
|
+
}
|
|
809
|
+
createElement(tagName, doc) {
|
|
810
|
+
doc = doc || this.getDefaultDocument();
|
|
811
|
+
return doc.createElement(tagName);
|
|
812
|
+
}
|
|
813
|
+
createHtmlDocument() {
|
|
814
|
+
return document.implementation.createHTMLDocument("fakeTitle");
|
|
815
|
+
}
|
|
816
|
+
getDefaultDocument() {
|
|
817
|
+
return document;
|
|
818
|
+
}
|
|
819
|
+
isElementNode(node) {
|
|
820
|
+
return node.nodeType === Node.ELEMENT_NODE;
|
|
821
|
+
}
|
|
822
|
+
isShadowRoot(node) {
|
|
823
|
+
return node instanceof DocumentFragment;
|
|
824
|
+
}
|
|
825
|
+
/** @deprecated No longer being used in Ivy code. To be removed in version 14. */
|
|
826
|
+
getGlobalEventTarget(doc, target) {
|
|
827
|
+
if (target === "window") {
|
|
828
|
+
return window;
|
|
829
|
+
}
|
|
830
|
+
if (target === "document") {
|
|
831
|
+
return doc;
|
|
832
|
+
}
|
|
833
|
+
if (target === "body") {
|
|
834
|
+
return doc.body;
|
|
835
|
+
}
|
|
836
|
+
return null;
|
|
837
|
+
}
|
|
838
|
+
getBaseHref(doc) {
|
|
839
|
+
const href = getBaseElementHref();
|
|
840
|
+
return href == null ? null : relativePath(href);
|
|
841
|
+
}
|
|
842
|
+
resetBaseElement() {
|
|
843
|
+
baseElement = null;
|
|
844
|
+
}
|
|
845
|
+
getUserAgent() {
|
|
846
|
+
return window.navigator.userAgent;
|
|
847
|
+
}
|
|
848
|
+
getCookie(name) {
|
|
849
|
+
return parseCookieValue(document.cookie, name);
|
|
850
|
+
}
|
|
851
|
+
};
|
|
852
|
+
var baseElement = null;
|
|
853
|
+
function getBaseElementHref() {
|
|
854
|
+
baseElement = baseElement || document.head.querySelector("base");
|
|
855
|
+
return baseElement ? baseElement.getAttribute("href") : null;
|
|
856
|
+
}
|
|
857
|
+
function relativePath(url) {
|
|
858
|
+
return new URL(url, document.baseURI).pathname;
|
|
859
|
+
}
|
|
860
|
+
var BrowserGetTestability = class {
|
|
861
|
+
addToWindow(registry) {
|
|
862
|
+
_global["getAngularTestability"] = (elem, findInAncestors = true) => {
|
|
863
|
+
const testability = registry.findTestabilityInTree(elem, findInAncestors);
|
|
864
|
+
if (testability == null) {
|
|
865
|
+
throw new RuntimeError(5103, (typeof ngDevMode === "undefined" || ngDevMode) && "Could not find testability for element.");
|
|
866
|
+
}
|
|
867
|
+
return testability;
|
|
868
|
+
};
|
|
869
|
+
_global["getAllAngularTestabilities"] = () => registry.getAllTestabilities();
|
|
870
|
+
_global["getAllAngularRootElements"] = () => registry.getAllRootElements();
|
|
871
|
+
const whenAllStable = (callback) => {
|
|
872
|
+
const testabilities = _global["getAllAngularTestabilities"]();
|
|
873
|
+
let count = testabilities.length;
|
|
874
|
+
const decrement = function() {
|
|
875
|
+
count--;
|
|
876
|
+
if (count == 0) {
|
|
877
|
+
callback();
|
|
878
|
+
}
|
|
879
|
+
};
|
|
880
|
+
testabilities.forEach((testability) => {
|
|
881
|
+
testability.whenStable(decrement);
|
|
882
|
+
});
|
|
883
|
+
};
|
|
884
|
+
if (!_global["frameworkStabilizers"]) {
|
|
885
|
+
_global["frameworkStabilizers"] = [];
|
|
886
|
+
}
|
|
887
|
+
_global["frameworkStabilizers"].push(whenAllStable);
|
|
888
|
+
}
|
|
889
|
+
findTestabilityInTree(registry, elem, findInAncestors) {
|
|
890
|
+
if (elem == null) {
|
|
891
|
+
return null;
|
|
892
|
+
}
|
|
893
|
+
const t = registry.getTestability(elem);
|
|
894
|
+
if (t != null) {
|
|
895
|
+
return t;
|
|
896
|
+
} else if (!findInAncestors) {
|
|
897
|
+
return null;
|
|
898
|
+
}
|
|
899
|
+
if (getDOM().isShadowRoot(elem)) {
|
|
900
|
+
return this.findTestabilityInTree(registry, elem.host, true);
|
|
901
|
+
}
|
|
902
|
+
return this.findTestabilityInTree(registry, elem.parentElement, true);
|
|
903
|
+
}
|
|
904
|
+
};
|
|
905
|
+
var BrowserXhr = class _BrowserXhr {
|
|
906
|
+
build() {
|
|
907
|
+
return new XMLHttpRequest();
|
|
908
|
+
}
|
|
909
|
+
static \u0275fac = function BrowserXhr_Factory(__ngFactoryType__) {
|
|
910
|
+
return new (__ngFactoryType__ || _BrowserXhr)();
|
|
911
|
+
};
|
|
912
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
913
|
+
token: _BrowserXhr,
|
|
914
|
+
factory: _BrowserXhr.\u0275fac
|
|
915
|
+
});
|
|
916
|
+
};
|
|
917
|
+
(() => {
|
|
918
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserXhr, [{
|
|
919
|
+
type: Injectable
|
|
920
|
+
}], null, null);
|
|
921
|
+
})();
|
|
922
|
+
var DomEventsPlugin = class _DomEventsPlugin extends EventManagerPlugin {
|
|
923
|
+
constructor(doc) {
|
|
924
|
+
super(doc);
|
|
925
|
+
}
|
|
926
|
+
// This plugin should come last in the list of plugins, because it accepts all
|
|
927
|
+
// events.
|
|
928
|
+
supports(eventName) {
|
|
929
|
+
return true;
|
|
930
|
+
}
|
|
931
|
+
addEventListener(element, eventName, handler, options) {
|
|
932
|
+
element.addEventListener(eventName, handler, options);
|
|
933
|
+
return () => this.removeEventListener(element, eventName, handler, options);
|
|
934
|
+
}
|
|
935
|
+
removeEventListener(target, eventName, callback, options) {
|
|
936
|
+
return target.removeEventListener(eventName, callback, options);
|
|
937
|
+
}
|
|
938
|
+
static \u0275fac = function DomEventsPlugin_Factory(__ngFactoryType__) {
|
|
939
|
+
return new (__ngFactoryType__ || _DomEventsPlugin)(\u0275\u0275inject(DOCUMENT));
|
|
940
|
+
};
|
|
941
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
942
|
+
token: _DomEventsPlugin,
|
|
943
|
+
factory: _DomEventsPlugin.\u0275fac
|
|
944
|
+
});
|
|
945
|
+
};
|
|
946
|
+
(() => {
|
|
947
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomEventsPlugin, [{
|
|
948
|
+
type: Injectable
|
|
949
|
+
}], () => [{
|
|
950
|
+
type: void 0,
|
|
951
|
+
decorators: [{
|
|
952
|
+
type: Inject,
|
|
953
|
+
args: [DOCUMENT]
|
|
954
|
+
}]
|
|
955
|
+
}], null);
|
|
956
|
+
})();
|
|
957
|
+
var MODIFIER_KEYS = ["alt", "control", "meta", "shift"];
|
|
958
|
+
var _keyMap = {
|
|
959
|
+
"\b": "Backspace",
|
|
960
|
+
" ": "Tab",
|
|
961
|
+
"\x7F": "Delete",
|
|
962
|
+
"\x1B": "Escape",
|
|
963
|
+
"Del": "Delete",
|
|
964
|
+
"Esc": "Escape",
|
|
965
|
+
"Left": "ArrowLeft",
|
|
966
|
+
"Right": "ArrowRight",
|
|
967
|
+
"Up": "ArrowUp",
|
|
968
|
+
"Down": "ArrowDown",
|
|
969
|
+
"Menu": "ContextMenu",
|
|
970
|
+
"Scroll": "ScrollLock",
|
|
971
|
+
"Win": "OS"
|
|
972
|
+
};
|
|
973
|
+
var MODIFIER_KEY_GETTERS = {
|
|
974
|
+
"alt": (event) => event.altKey,
|
|
975
|
+
"control": (event) => event.ctrlKey,
|
|
976
|
+
"meta": (event) => event.metaKey,
|
|
977
|
+
"shift": (event) => event.shiftKey
|
|
978
|
+
};
|
|
979
|
+
var KeyEventsPlugin = class _KeyEventsPlugin extends EventManagerPlugin {
|
|
980
|
+
/**
|
|
981
|
+
* Initializes an instance of the browser plug-in.
|
|
982
|
+
* @param doc The document in which key events will be detected.
|
|
983
|
+
*/
|
|
984
|
+
constructor(doc) {
|
|
985
|
+
super(doc);
|
|
986
|
+
}
|
|
987
|
+
/**
|
|
988
|
+
* Reports whether a named key event is supported.
|
|
989
|
+
* @param eventName The event name to query.
|
|
990
|
+
* @return True if the named key event is supported.
|
|
991
|
+
*/
|
|
992
|
+
supports(eventName) {
|
|
993
|
+
return _KeyEventsPlugin.parseEventName(eventName) != null;
|
|
994
|
+
}
|
|
995
|
+
/**
|
|
996
|
+
* Registers a handler for a specific element and key event.
|
|
997
|
+
* @param element The HTML element to receive event notifications.
|
|
998
|
+
* @param eventName The name of the key event to listen for.
|
|
999
|
+
* @param handler A function to call when the notification occurs. Receives the
|
|
1000
|
+
* event object as an argument.
|
|
1001
|
+
* @returns The key event that was registered.
|
|
1002
|
+
*/
|
|
1003
|
+
addEventListener(element, eventName, handler, options) {
|
|
1004
|
+
const parsedEvent = _KeyEventsPlugin.parseEventName(eventName);
|
|
1005
|
+
const outsideHandler = _KeyEventsPlugin.eventCallback(parsedEvent["fullKey"], handler, this.manager.getZone());
|
|
1006
|
+
return this.manager.getZone().runOutsideAngular(() => {
|
|
1007
|
+
return getDOM().onAndCancel(element, parsedEvent["domEventName"], outsideHandler, options);
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
1010
|
+
/**
|
|
1011
|
+
* Parses the user provided full keyboard event definition and normalizes it for
|
|
1012
|
+
* later internal use. It ensures the string is all lowercase, converts special
|
|
1013
|
+
* characters to a standard spelling, and orders all the values consistently.
|
|
1014
|
+
*
|
|
1015
|
+
* @param eventName The name of the key event to listen for.
|
|
1016
|
+
* @returns an object with the full, normalized string, and the dom event name
|
|
1017
|
+
* or null in the case when the event doesn't match a keyboard event.
|
|
1018
|
+
*/
|
|
1019
|
+
static parseEventName(eventName) {
|
|
1020
|
+
const parts = eventName.toLowerCase().split(".");
|
|
1021
|
+
const domEventName = parts.shift();
|
|
1022
|
+
if (parts.length === 0 || !(domEventName === "keydown" || domEventName === "keyup")) {
|
|
1023
|
+
return null;
|
|
1024
|
+
}
|
|
1025
|
+
const key = _KeyEventsPlugin._normalizeKey(parts.pop());
|
|
1026
|
+
let fullKey = "";
|
|
1027
|
+
let codeIX = parts.indexOf("code");
|
|
1028
|
+
if (codeIX > -1) {
|
|
1029
|
+
parts.splice(codeIX, 1);
|
|
1030
|
+
fullKey = "code.";
|
|
1031
|
+
}
|
|
1032
|
+
MODIFIER_KEYS.forEach((modifierName) => {
|
|
1033
|
+
const index = parts.indexOf(modifierName);
|
|
1034
|
+
if (index > -1) {
|
|
1035
|
+
parts.splice(index, 1);
|
|
1036
|
+
fullKey += modifierName + ".";
|
|
1037
|
+
}
|
|
1038
|
+
});
|
|
1039
|
+
fullKey += key;
|
|
1040
|
+
if (parts.length != 0 || key.length === 0) {
|
|
1041
|
+
return null;
|
|
1042
|
+
}
|
|
1043
|
+
const result = {};
|
|
1044
|
+
result["domEventName"] = domEventName;
|
|
1045
|
+
result["fullKey"] = fullKey;
|
|
1046
|
+
return result;
|
|
1047
|
+
}
|
|
1048
|
+
/**
|
|
1049
|
+
* Determines whether the actual keys pressed match the configured key code string.
|
|
1050
|
+
* The `fullKeyCode` event is normalized in the `parseEventName` method when the
|
|
1051
|
+
* event is attached to the DOM during the `addEventListener` call. This is unseen
|
|
1052
|
+
* by the end user and is normalized for internal consistency and parsing.
|
|
1053
|
+
*
|
|
1054
|
+
* @param event The keyboard event.
|
|
1055
|
+
* @param fullKeyCode The normalized user defined expected key event string
|
|
1056
|
+
* @returns boolean.
|
|
1057
|
+
*/
|
|
1058
|
+
static matchEventFullKeyCode(event, fullKeyCode) {
|
|
1059
|
+
let keycode = _keyMap[event.key] || event.key;
|
|
1060
|
+
let key = "";
|
|
1061
|
+
if (fullKeyCode.indexOf("code.") > -1) {
|
|
1062
|
+
keycode = event.code;
|
|
1063
|
+
key = "code.";
|
|
1064
|
+
}
|
|
1065
|
+
if (keycode == null || !keycode) return false;
|
|
1066
|
+
keycode = keycode.toLowerCase();
|
|
1067
|
+
if (keycode === " ") {
|
|
1068
|
+
keycode = "space";
|
|
1069
|
+
} else if (keycode === ".") {
|
|
1070
|
+
keycode = "dot";
|
|
1071
|
+
}
|
|
1072
|
+
MODIFIER_KEYS.forEach((modifierName) => {
|
|
1073
|
+
if (modifierName !== keycode) {
|
|
1074
|
+
const modifierGetter = MODIFIER_KEY_GETTERS[modifierName];
|
|
1075
|
+
if (modifierGetter(event)) {
|
|
1076
|
+
key += modifierName + ".";
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
});
|
|
1080
|
+
key += keycode;
|
|
1081
|
+
return key === fullKeyCode;
|
|
1082
|
+
}
|
|
1083
|
+
/**
|
|
1084
|
+
* Configures a handler callback for a key event.
|
|
1085
|
+
* @param fullKey The event name that combines all simultaneous keystrokes.
|
|
1086
|
+
* @param handler The function that responds to the key event.
|
|
1087
|
+
* @param zone The zone in which the event occurred.
|
|
1088
|
+
* @returns A callback function.
|
|
1089
|
+
*/
|
|
1090
|
+
static eventCallback(fullKey, handler, zone) {
|
|
1091
|
+
return (event) => {
|
|
1092
|
+
if (_KeyEventsPlugin.matchEventFullKeyCode(event, fullKey)) {
|
|
1093
|
+
zone.runGuarded(() => handler(event));
|
|
1094
|
+
}
|
|
1095
|
+
};
|
|
1096
|
+
}
|
|
1097
|
+
/** @internal */
|
|
1098
|
+
static _normalizeKey(keyName) {
|
|
1099
|
+
return keyName === "esc" ? "escape" : keyName;
|
|
1100
|
+
}
|
|
1101
|
+
static \u0275fac = function KeyEventsPlugin_Factory(__ngFactoryType__) {
|
|
1102
|
+
return new (__ngFactoryType__ || _KeyEventsPlugin)(\u0275\u0275inject(DOCUMENT));
|
|
1103
|
+
};
|
|
1104
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
1105
|
+
token: _KeyEventsPlugin,
|
|
1106
|
+
factory: _KeyEventsPlugin.\u0275fac
|
|
1107
|
+
});
|
|
1108
|
+
};
|
|
1109
|
+
(() => {
|
|
1110
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(KeyEventsPlugin, [{
|
|
1111
|
+
type: Injectable
|
|
1112
|
+
}], () => [{
|
|
1113
|
+
type: void 0,
|
|
1114
|
+
decorators: [{
|
|
1115
|
+
type: Inject,
|
|
1116
|
+
args: [DOCUMENT]
|
|
1117
|
+
}]
|
|
1118
|
+
}], null);
|
|
1119
|
+
})();
|
|
1120
|
+
function bootstrapApplication(rootComponent, options) {
|
|
1121
|
+
const config = __spreadValues({
|
|
1122
|
+
rootComponent
|
|
1123
|
+
}, createProvidersConfig(options));
|
|
1124
|
+
if (false) {
|
|
1125
|
+
return resolveComponentResources(fetch).catch((error) => {
|
|
1126
|
+
console.error(error);
|
|
1127
|
+
return Promise.resolve();
|
|
1128
|
+
}).then(() => internalCreateApplication(config));
|
|
1129
|
+
}
|
|
1130
|
+
return internalCreateApplication(config);
|
|
1131
|
+
}
|
|
1132
|
+
function createProvidersConfig(options) {
|
|
1133
|
+
return {
|
|
1134
|
+
appProviders: [...BROWSER_MODULE_PROVIDERS, ...options?.providers ?? []],
|
|
1135
|
+
platformProviders: INTERNAL_BROWSER_PLATFORM_PROVIDERS
|
|
1136
|
+
};
|
|
1137
|
+
}
|
|
1138
|
+
function initDomAdapter() {
|
|
1139
|
+
BrowserDomAdapter.makeCurrent();
|
|
1140
|
+
}
|
|
1141
|
+
function errorHandler() {
|
|
1142
|
+
return new ErrorHandler();
|
|
1143
|
+
}
|
|
1144
|
+
function _document() {
|
|
1145
|
+
setDocument(document);
|
|
1146
|
+
return document;
|
|
1147
|
+
}
|
|
1148
|
+
var INTERNAL_BROWSER_PLATFORM_PROVIDERS = [{
|
|
1149
|
+
provide: PLATFORM_ID,
|
|
1150
|
+
useValue: PLATFORM_BROWSER_ID
|
|
1151
|
+
}, {
|
|
1152
|
+
provide: PLATFORM_INITIALIZER,
|
|
1153
|
+
useValue: initDomAdapter,
|
|
1154
|
+
multi: true
|
|
1155
|
+
}, {
|
|
1156
|
+
provide: DOCUMENT,
|
|
1157
|
+
useFactory: _document
|
|
1158
|
+
}];
|
|
1159
|
+
var platformBrowser = createPlatformFactory(platformCore, "browser", INTERNAL_BROWSER_PLATFORM_PROVIDERS);
|
|
1160
|
+
var BROWSER_MODULE_PROVIDERS_MARKER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "BrowserModule Providers Marker" : "");
|
|
1161
|
+
var TESTABILITY_PROVIDERS = [{
|
|
1162
|
+
provide: TESTABILITY_GETTER,
|
|
1163
|
+
useClass: BrowserGetTestability
|
|
1164
|
+
}, {
|
|
1165
|
+
provide: TESTABILITY,
|
|
1166
|
+
useClass: Testability,
|
|
1167
|
+
deps: [NgZone, TestabilityRegistry, TESTABILITY_GETTER]
|
|
1168
|
+
}, {
|
|
1169
|
+
provide: Testability,
|
|
1170
|
+
// Also provide as `Testability` for backwards-compatibility.
|
|
1171
|
+
useClass: Testability,
|
|
1172
|
+
deps: [NgZone, TestabilityRegistry, TESTABILITY_GETTER]
|
|
1173
|
+
}];
|
|
1174
|
+
var BROWSER_MODULE_PROVIDERS = [{
|
|
1175
|
+
provide: INJECTOR_SCOPE,
|
|
1176
|
+
useValue: "root"
|
|
1177
|
+
}, {
|
|
1178
|
+
provide: ErrorHandler,
|
|
1179
|
+
useFactory: errorHandler
|
|
1180
|
+
}, {
|
|
1181
|
+
provide: EVENT_MANAGER_PLUGINS,
|
|
1182
|
+
useClass: DomEventsPlugin,
|
|
1183
|
+
multi: true,
|
|
1184
|
+
deps: [DOCUMENT]
|
|
1185
|
+
}, {
|
|
1186
|
+
provide: EVENT_MANAGER_PLUGINS,
|
|
1187
|
+
useClass: KeyEventsPlugin,
|
|
1188
|
+
multi: true,
|
|
1189
|
+
deps: [DOCUMENT]
|
|
1190
|
+
}, DomRendererFactory2, SharedStylesHost, EventManager, {
|
|
1191
|
+
provide: RendererFactory2,
|
|
1192
|
+
useExisting: DomRendererFactory2
|
|
1193
|
+
}, {
|
|
1194
|
+
provide: XhrFactory,
|
|
1195
|
+
useClass: BrowserXhr
|
|
1196
|
+
}, typeof ngDevMode === "undefined" || ngDevMode ? {
|
|
1197
|
+
provide: BROWSER_MODULE_PROVIDERS_MARKER,
|
|
1198
|
+
useValue: true
|
|
1199
|
+
} : []];
|
|
1200
|
+
var BrowserModule = class _BrowserModule {
|
|
1201
|
+
constructor() {
|
|
1202
|
+
if (typeof ngDevMode === "undefined" || ngDevMode) {
|
|
1203
|
+
const providersAlreadyPresent = inject(BROWSER_MODULE_PROVIDERS_MARKER, {
|
|
1204
|
+
optional: true,
|
|
1205
|
+
skipSelf: true
|
|
1206
|
+
});
|
|
1207
|
+
if (providersAlreadyPresent) {
|
|
1208
|
+
throw new RuntimeError(5100, `Providers from the \`BrowserModule\` have already been loaded. If you need access to common directives such as NgIf and NgFor, import the \`CommonModule\` instead.`);
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
}
|
|
1212
|
+
static \u0275fac = function BrowserModule_Factory(__ngFactoryType__) {
|
|
1213
|
+
return new (__ngFactoryType__ || _BrowserModule)();
|
|
1214
|
+
};
|
|
1215
|
+
static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
|
|
1216
|
+
type: _BrowserModule,
|
|
1217
|
+
exports: [CommonModule, ApplicationModule]
|
|
1218
|
+
});
|
|
1219
|
+
static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
|
|
1220
|
+
providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],
|
|
1221
|
+
imports: [CommonModule, ApplicationModule]
|
|
1222
|
+
});
|
|
1223
|
+
};
|
|
1224
|
+
(() => {
|
|
1225
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BrowserModule, [{
|
|
1226
|
+
type: NgModule,
|
|
1227
|
+
args: [{
|
|
1228
|
+
providers: [...BROWSER_MODULE_PROVIDERS, ...TESTABILITY_PROVIDERS],
|
|
1229
|
+
exports: [CommonModule, ApplicationModule]
|
|
1230
|
+
}]
|
|
1231
|
+
}], () => [], null);
|
|
1232
|
+
})();
|
|
1233
|
+
|
|
1234
|
+
// node_modules/@angular/platform-browser/fesm2022/platform-browser.mjs
|
|
1235
|
+
var Meta = class _Meta {
|
|
1236
|
+
_doc;
|
|
1237
|
+
_dom;
|
|
1238
|
+
constructor(_doc) {
|
|
1239
|
+
this._doc = _doc;
|
|
1240
|
+
this._dom = getDOM();
|
|
1241
|
+
}
|
|
1242
|
+
/**
|
|
1243
|
+
* Retrieves or creates a specific `<meta>` tag element in the current HTML document.
|
|
1244
|
+
* In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
|
|
1245
|
+
* values in the provided tag definition, and verifies that all other attribute values are equal.
|
|
1246
|
+
* If an existing element is found, it is returned and is not modified in any way.
|
|
1247
|
+
* @param tag The definition of a `<meta>` element to match or create.
|
|
1248
|
+
* @param forceCreation True to create a new element without checking whether one already exists.
|
|
1249
|
+
* @returns The existing element with the same attributes and values if found,
|
|
1250
|
+
* the new element if no match is found, or `null` if the tag parameter is not defined.
|
|
1251
|
+
*/
|
|
1252
|
+
addTag(tag, forceCreation = false) {
|
|
1253
|
+
if (!tag) return null;
|
|
1254
|
+
return this._getOrCreateElement(tag, forceCreation);
|
|
1255
|
+
}
|
|
1256
|
+
/**
|
|
1257
|
+
* Retrieves or creates a set of `<meta>` tag elements in the current HTML document.
|
|
1258
|
+
* In searching for an existing tag, Angular attempts to match the `name` or `property` attribute
|
|
1259
|
+
* values in the provided tag definition, and verifies that all other attribute values are equal.
|
|
1260
|
+
* @param tags An array of tag definitions to match or create.
|
|
1261
|
+
* @param forceCreation True to create new elements without checking whether they already exist.
|
|
1262
|
+
* @returns The matching elements if found, or the new elements.
|
|
1263
|
+
*/
|
|
1264
|
+
addTags(tags, forceCreation = false) {
|
|
1265
|
+
if (!tags) return [];
|
|
1266
|
+
return tags.reduce((result, tag) => {
|
|
1267
|
+
if (tag) {
|
|
1268
|
+
result.push(this._getOrCreateElement(tag, forceCreation));
|
|
1269
|
+
}
|
|
1270
|
+
return result;
|
|
1271
|
+
}, []);
|
|
1272
|
+
}
|
|
1273
|
+
/**
|
|
1274
|
+
* Retrieves a `<meta>` tag element in the current HTML document.
|
|
1275
|
+
* @param attrSelector The tag attribute and value to match against, in the format
|
|
1276
|
+
* `"tag_attribute='value string'"`.
|
|
1277
|
+
* @returns The matching element, if any.
|
|
1278
|
+
*/
|
|
1279
|
+
getTag(attrSelector) {
|
|
1280
|
+
if (!attrSelector) return null;
|
|
1281
|
+
return this._doc.querySelector(`meta[${attrSelector}]`) || null;
|
|
1282
|
+
}
|
|
1283
|
+
/**
|
|
1284
|
+
* Retrieves a set of `<meta>` tag elements in the current HTML document.
|
|
1285
|
+
* @param attrSelector The tag attribute and value to match against, in the format
|
|
1286
|
+
* `"tag_attribute='value string'"`.
|
|
1287
|
+
* @returns The matching elements, if any.
|
|
1288
|
+
*/
|
|
1289
|
+
getTags(attrSelector) {
|
|
1290
|
+
if (!attrSelector) return [];
|
|
1291
|
+
const list = this._doc.querySelectorAll(`meta[${attrSelector}]`);
|
|
1292
|
+
return list ? [].slice.call(list) : [];
|
|
1293
|
+
}
|
|
1294
|
+
/**
|
|
1295
|
+
* Modifies an existing `<meta>` tag element in the current HTML document.
|
|
1296
|
+
* @param tag The tag description with which to replace the existing tag content.
|
|
1297
|
+
* @param selector A tag attribute and value to match against, to identify
|
|
1298
|
+
* an existing tag. A string in the format `"tag_attribute=`value string`"`.
|
|
1299
|
+
* If not supplied, matches a tag with the same `name` or `property` attribute value as the
|
|
1300
|
+
* replacement tag.
|
|
1301
|
+
* @return The modified element.
|
|
1302
|
+
*/
|
|
1303
|
+
updateTag(tag, selector) {
|
|
1304
|
+
if (!tag) return null;
|
|
1305
|
+
selector = selector || this._parseSelector(tag);
|
|
1306
|
+
const meta = this.getTag(selector);
|
|
1307
|
+
if (meta) {
|
|
1308
|
+
return this._setMetaElementAttributes(tag, meta);
|
|
1309
|
+
}
|
|
1310
|
+
return this._getOrCreateElement(tag, true);
|
|
1311
|
+
}
|
|
1312
|
+
/**
|
|
1313
|
+
* Removes an existing `<meta>` tag element from the current HTML document.
|
|
1314
|
+
* @param attrSelector A tag attribute and value to match against, to identify
|
|
1315
|
+
* an existing tag. A string in the format `"tag_attribute=`value string`"`.
|
|
1316
|
+
*/
|
|
1317
|
+
removeTag(attrSelector) {
|
|
1318
|
+
this.removeTagElement(this.getTag(attrSelector));
|
|
1319
|
+
}
|
|
1320
|
+
/**
|
|
1321
|
+
* Removes an existing `<meta>` tag element from the current HTML document.
|
|
1322
|
+
* @param meta The tag definition to match against to identify an existing tag.
|
|
1323
|
+
*/
|
|
1324
|
+
removeTagElement(meta) {
|
|
1325
|
+
if (meta) {
|
|
1326
|
+
this._dom.remove(meta);
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
_getOrCreateElement(meta, forceCreation = false) {
|
|
1330
|
+
if (!forceCreation) {
|
|
1331
|
+
const selector = this._parseSelector(meta);
|
|
1332
|
+
const elem = this.getTags(selector).filter((elem2) => this._containsAttributes(meta, elem2))[0];
|
|
1333
|
+
if (elem !== void 0) return elem;
|
|
1334
|
+
}
|
|
1335
|
+
const element = this._dom.createElement("meta");
|
|
1336
|
+
this._setMetaElementAttributes(meta, element);
|
|
1337
|
+
const head = this._doc.getElementsByTagName("head")[0];
|
|
1338
|
+
head.appendChild(element);
|
|
1339
|
+
return element;
|
|
1340
|
+
}
|
|
1341
|
+
_setMetaElementAttributes(tag, el) {
|
|
1342
|
+
Object.keys(tag).forEach((prop) => el.setAttribute(this._getMetaKeyMap(prop), tag[prop]));
|
|
1343
|
+
return el;
|
|
1344
|
+
}
|
|
1345
|
+
_parseSelector(tag) {
|
|
1346
|
+
const attr = tag.name ? "name" : "property";
|
|
1347
|
+
return `${attr}="${tag[attr]}"`;
|
|
1348
|
+
}
|
|
1349
|
+
_containsAttributes(tag, elem) {
|
|
1350
|
+
return Object.keys(tag).every((key) => elem.getAttribute(this._getMetaKeyMap(key)) === tag[key]);
|
|
1351
|
+
}
|
|
1352
|
+
_getMetaKeyMap(prop) {
|
|
1353
|
+
return META_KEYS_MAP[prop] || prop;
|
|
1354
|
+
}
|
|
1355
|
+
static \u0275fac = function Meta_Factory(__ngFactoryType__) {
|
|
1356
|
+
return new (__ngFactoryType__ || _Meta)(\u0275\u0275inject(DOCUMENT));
|
|
1357
|
+
};
|
|
1358
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
1359
|
+
token: _Meta,
|
|
1360
|
+
factory: _Meta.\u0275fac,
|
|
1361
|
+
providedIn: "root"
|
|
1362
|
+
});
|
|
1363
|
+
};
|
|
1364
|
+
(() => {
|
|
1365
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Meta, [{
|
|
1366
|
+
type: Injectable,
|
|
1367
|
+
args: [{
|
|
1368
|
+
providedIn: "root"
|
|
1369
|
+
}]
|
|
1370
|
+
}], () => [{
|
|
1371
|
+
type: void 0,
|
|
1372
|
+
decorators: [{
|
|
1373
|
+
type: Inject,
|
|
1374
|
+
args: [DOCUMENT]
|
|
1375
|
+
}]
|
|
1376
|
+
}], null);
|
|
1377
|
+
})();
|
|
1378
|
+
var META_KEYS_MAP = {
|
|
1379
|
+
httpEquiv: "http-equiv"
|
|
1380
|
+
};
|
|
1381
|
+
var Title = class _Title {
|
|
1382
|
+
_doc;
|
|
1383
|
+
constructor(_doc) {
|
|
1384
|
+
this._doc = _doc;
|
|
1385
|
+
}
|
|
1386
|
+
/**
|
|
1387
|
+
* Get the title of the current HTML document.
|
|
1388
|
+
*/
|
|
1389
|
+
getTitle() {
|
|
1390
|
+
return this._doc.title;
|
|
1391
|
+
}
|
|
1392
|
+
/**
|
|
1393
|
+
* Set the title of the current HTML document.
|
|
1394
|
+
* @param newTitle
|
|
1395
|
+
*/
|
|
1396
|
+
setTitle(newTitle) {
|
|
1397
|
+
this._doc.title = newTitle || "";
|
|
1398
|
+
}
|
|
1399
|
+
static \u0275fac = function Title_Factory(__ngFactoryType__) {
|
|
1400
|
+
return new (__ngFactoryType__ || _Title)(\u0275\u0275inject(DOCUMENT));
|
|
1401
|
+
};
|
|
1402
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
1403
|
+
token: _Title,
|
|
1404
|
+
factory: _Title.\u0275fac,
|
|
1405
|
+
providedIn: "root"
|
|
1406
|
+
});
|
|
1407
|
+
};
|
|
1408
|
+
(() => {
|
|
1409
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Title, [{
|
|
1410
|
+
type: Injectable,
|
|
1411
|
+
args: [{
|
|
1412
|
+
providedIn: "root"
|
|
1413
|
+
}]
|
|
1414
|
+
}], () => [{
|
|
1415
|
+
type: void 0,
|
|
1416
|
+
decorators: [{
|
|
1417
|
+
type: Inject,
|
|
1418
|
+
args: [DOCUMENT]
|
|
1419
|
+
}]
|
|
1420
|
+
}], null);
|
|
1421
|
+
})();
|
|
1422
|
+
var EVENT_NAMES = {
|
|
1423
|
+
// pan
|
|
1424
|
+
"pan": true,
|
|
1425
|
+
"panstart": true,
|
|
1426
|
+
"panmove": true,
|
|
1427
|
+
"panend": true,
|
|
1428
|
+
"pancancel": true,
|
|
1429
|
+
"panleft": true,
|
|
1430
|
+
"panright": true,
|
|
1431
|
+
"panup": true,
|
|
1432
|
+
"pandown": true,
|
|
1433
|
+
// pinch
|
|
1434
|
+
"pinch": true,
|
|
1435
|
+
"pinchstart": true,
|
|
1436
|
+
"pinchmove": true,
|
|
1437
|
+
"pinchend": true,
|
|
1438
|
+
"pinchcancel": true,
|
|
1439
|
+
"pinchin": true,
|
|
1440
|
+
"pinchout": true,
|
|
1441
|
+
// press
|
|
1442
|
+
"press": true,
|
|
1443
|
+
"pressup": true,
|
|
1444
|
+
// rotate
|
|
1445
|
+
"rotate": true,
|
|
1446
|
+
"rotatestart": true,
|
|
1447
|
+
"rotatemove": true,
|
|
1448
|
+
"rotateend": true,
|
|
1449
|
+
"rotatecancel": true,
|
|
1450
|
+
// swipe
|
|
1451
|
+
"swipe": true,
|
|
1452
|
+
"swipeleft": true,
|
|
1453
|
+
"swiperight": true,
|
|
1454
|
+
"swipeup": true,
|
|
1455
|
+
"swipedown": true,
|
|
1456
|
+
// tap
|
|
1457
|
+
"tap": true,
|
|
1458
|
+
"doubletap": true
|
|
1459
|
+
};
|
|
1460
|
+
var HAMMER_GESTURE_CONFIG = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "HammerGestureConfig" : "");
|
|
1461
|
+
var HAMMER_LOADER = new InjectionToken(typeof ngDevMode === "undefined" || ngDevMode ? "HammerLoader" : "");
|
|
1462
|
+
var HammerGestureConfig = class _HammerGestureConfig {
|
|
1463
|
+
/**
|
|
1464
|
+
* A set of supported event names for gestures to be used in Angular.
|
|
1465
|
+
* Angular supports all built-in recognizers, as listed in
|
|
1466
|
+
* [HammerJS documentation](https://hammerjs.github.io/).
|
|
1467
|
+
*/
|
|
1468
|
+
events = [];
|
|
1469
|
+
/**
|
|
1470
|
+
* Maps gesture event names to a set of configuration options
|
|
1471
|
+
* that specify overrides to the default values for specific properties.
|
|
1472
|
+
*
|
|
1473
|
+
* The key is a supported event name to be configured,
|
|
1474
|
+
* and the options object contains a set of properties, with override values
|
|
1475
|
+
* to be applied to the named recognizer event.
|
|
1476
|
+
* For example, to disable recognition of the rotate event, specify
|
|
1477
|
+
* `{"rotate": {"enable": false}}`.
|
|
1478
|
+
*
|
|
1479
|
+
* Properties that are not present take the HammerJS default values.
|
|
1480
|
+
* For information about which properties are supported for which events,
|
|
1481
|
+
* and their allowed and default values, see
|
|
1482
|
+
* [HammerJS documentation](https://hammerjs.github.io/).
|
|
1483
|
+
*
|
|
1484
|
+
*/
|
|
1485
|
+
overrides = {};
|
|
1486
|
+
/**
|
|
1487
|
+
* Properties whose default values can be overridden for a given event.
|
|
1488
|
+
* Different sets of properties apply to different events.
|
|
1489
|
+
* For information about which properties are supported for which events,
|
|
1490
|
+
* and their allowed and default values, see
|
|
1491
|
+
* [HammerJS documentation](https://hammerjs.github.io/).
|
|
1492
|
+
*/
|
|
1493
|
+
options;
|
|
1494
|
+
/**
|
|
1495
|
+
* Creates a [HammerJS Manager](https://hammerjs.github.io/api/#hammermanager)
|
|
1496
|
+
* and attaches it to a given HTML element.
|
|
1497
|
+
* @param element The element that will recognize gestures.
|
|
1498
|
+
* @returns A HammerJS event-manager object.
|
|
1499
|
+
*/
|
|
1500
|
+
buildHammer(element) {
|
|
1501
|
+
const mc = new Hammer(element, this.options);
|
|
1502
|
+
mc.get("pinch").set({
|
|
1503
|
+
enable: true
|
|
1504
|
+
});
|
|
1505
|
+
mc.get("rotate").set({
|
|
1506
|
+
enable: true
|
|
1507
|
+
});
|
|
1508
|
+
for (const eventName in this.overrides) {
|
|
1509
|
+
mc.get(eventName).set(this.overrides[eventName]);
|
|
1510
|
+
}
|
|
1511
|
+
return mc;
|
|
1512
|
+
}
|
|
1513
|
+
static \u0275fac = function HammerGestureConfig_Factory(__ngFactoryType__) {
|
|
1514
|
+
return new (__ngFactoryType__ || _HammerGestureConfig)();
|
|
1515
|
+
};
|
|
1516
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
1517
|
+
token: _HammerGestureConfig,
|
|
1518
|
+
factory: _HammerGestureConfig.\u0275fac
|
|
1519
|
+
});
|
|
1520
|
+
};
|
|
1521
|
+
(() => {
|
|
1522
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerGestureConfig, [{
|
|
1523
|
+
type: Injectable
|
|
1524
|
+
}], null, null);
|
|
1525
|
+
})();
|
|
1526
|
+
var HammerGesturesPlugin = class _HammerGesturesPlugin extends EventManagerPlugin {
|
|
1527
|
+
_config;
|
|
1528
|
+
_injector;
|
|
1529
|
+
loader;
|
|
1530
|
+
_loaderPromise = null;
|
|
1531
|
+
constructor(doc, _config, _injector, loader) {
|
|
1532
|
+
super(doc);
|
|
1533
|
+
this._config = _config;
|
|
1534
|
+
this._injector = _injector;
|
|
1535
|
+
this.loader = loader;
|
|
1536
|
+
}
|
|
1537
|
+
supports(eventName) {
|
|
1538
|
+
if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {
|
|
1539
|
+
return false;
|
|
1540
|
+
}
|
|
1541
|
+
if (!window.Hammer && !this.loader) {
|
|
1542
|
+
if (typeof ngDevMode === "undefined" || ngDevMode) {
|
|
1543
|
+
const _console = this._injector.get(Console);
|
|
1544
|
+
_console.warn(`The "${eventName}" event cannot be bound because Hammer.JS is not loaded and no custom loader has been specified.`);
|
|
1545
|
+
}
|
|
1546
|
+
return false;
|
|
1547
|
+
}
|
|
1548
|
+
return true;
|
|
1549
|
+
}
|
|
1550
|
+
addEventListener(element, eventName, handler) {
|
|
1551
|
+
const zone = this.manager.getZone();
|
|
1552
|
+
eventName = eventName.toLowerCase();
|
|
1553
|
+
if (!window.Hammer && this.loader) {
|
|
1554
|
+
this._loaderPromise = this._loaderPromise || zone.runOutsideAngular(() => this.loader());
|
|
1555
|
+
let cancelRegistration = false;
|
|
1556
|
+
let deregister = () => {
|
|
1557
|
+
cancelRegistration = true;
|
|
1558
|
+
};
|
|
1559
|
+
zone.runOutsideAngular(() => this._loaderPromise.then(() => {
|
|
1560
|
+
if (!window.Hammer) {
|
|
1561
|
+
if (typeof ngDevMode === "undefined" || ngDevMode) {
|
|
1562
|
+
const _console = this._injector.get(Console);
|
|
1563
|
+
_console.warn(`The custom HAMMER_LOADER completed, but Hammer.JS is not present.`);
|
|
1564
|
+
}
|
|
1565
|
+
deregister = () => {
|
|
1566
|
+
};
|
|
1567
|
+
return;
|
|
1568
|
+
}
|
|
1569
|
+
if (!cancelRegistration) {
|
|
1570
|
+
deregister = this.addEventListener(element, eventName, handler);
|
|
1571
|
+
}
|
|
1572
|
+
}).catch(() => {
|
|
1573
|
+
if (typeof ngDevMode === "undefined" || ngDevMode) {
|
|
1574
|
+
const _console = this._injector.get(Console);
|
|
1575
|
+
_console.warn(`The "${eventName}" event cannot be bound because the custom Hammer.JS loader failed.`);
|
|
1576
|
+
}
|
|
1577
|
+
deregister = () => {
|
|
1578
|
+
};
|
|
1579
|
+
}));
|
|
1580
|
+
return () => {
|
|
1581
|
+
deregister();
|
|
1582
|
+
};
|
|
1583
|
+
}
|
|
1584
|
+
return zone.runOutsideAngular(() => {
|
|
1585
|
+
const mc = this._config.buildHammer(element);
|
|
1586
|
+
const callback = function(eventObj) {
|
|
1587
|
+
zone.runGuarded(function() {
|
|
1588
|
+
handler(eventObj);
|
|
1589
|
+
});
|
|
1590
|
+
};
|
|
1591
|
+
mc.on(eventName, callback);
|
|
1592
|
+
return () => {
|
|
1593
|
+
mc.off(eventName, callback);
|
|
1594
|
+
if (typeof mc.destroy === "function") {
|
|
1595
|
+
mc.destroy();
|
|
1596
|
+
}
|
|
1597
|
+
};
|
|
1598
|
+
});
|
|
1599
|
+
}
|
|
1600
|
+
isCustomEvent(eventName) {
|
|
1601
|
+
return this._config.events.indexOf(eventName) > -1;
|
|
1602
|
+
}
|
|
1603
|
+
static \u0275fac = function HammerGesturesPlugin_Factory(__ngFactoryType__) {
|
|
1604
|
+
return new (__ngFactoryType__ || _HammerGesturesPlugin)(\u0275\u0275inject(DOCUMENT), \u0275\u0275inject(HAMMER_GESTURE_CONFIG), \u0275\u0275inject(Injector), \u0275\u0275inject(HAMMER_LOADER, 8));
|
|
1605
|
+
};
|
|
1606
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
1607
|
+
token: _HammerGesturesPlugin,
|
|
1608
|
+
factory: _HammerGesturesPlugin.\u0275fac
|
|
1609
|
+
});
|
|
1610
|
+
};
|
|
1611
|
+
(() => {
|
|
1612
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerGesturesPlugin, [{
|
|
1613
|
+
type: Injectable
|
|
1614
|
+
}], () => [{
|
|
1615
|
+
type: void 0,
|
|
1616
|
+
decorators: [{
|
|
1617
|
+
type: Inject,
|
|
1618
|
+
args: [DOCUMENT]
|
|
1619
|
+
}]
|
|
1620
|
+
}, {
|
|
1621
|
+
type: HammerGestureConfig,
|
|
1622
|
+
decorators: [{
|
|
1623
|
+
type: Inject,
|
|
1624
|
+
args: [HAMMER_GESTURE_CONFIG]
|
|
1625
|
+
}]
|
|
1626
|
+
}, {
|
|
1627
|
+
type: Injector
|
|
1628
|
+
}, {
|
|
1629
|
+
type: void 0,
|
|
1630
|
+
decorators: [{
|
|
1631
|
+
type: Optional
|
|
1632
|
+
}, {
|
|
1633
|
+
type: Inject,
|
|
1634
|
+
args: [HAMMER_LOADER]
|
|
1635
|
+
}]
|
|
1636
|
+
}], null);
|
|
1637
|
+
})();
|
|
1638
|
+
var HammerModule = class _HammerModule {
|
|
1639
|
+
static \u0275fac = function HammerModule_Factory(__ngFactoryType__) {
|
|
1640
|
+
return new (__ngFactoryType__ || _HammerModule)();
|
|
1641
|
+
};
|
|
1642
|
+
static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
|
|
1643
|
+
type: _HammerModule
|
|
1644
|
+
});
|
|
1645
|
+
static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
|
|
1646
|
+
providers: [{
|
|
1647
|
+
provide: EVENT_MANAGER_PLUGINS,
|
|
1648
|
+
useClass: HammerGesturesPlugin,
|
|
1649
|
+
multi: true,
|
|
1650
|
+
deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Injector, [new Optional(), HAMMER_LOADER]]
|
|
1651
|
+
}, {
|
|
1652
|
+
provide: HAMMER_GESTURE_CONFIG,
|
|
1653
|
+
useClass: HammerGestureConfig
|
|
1654
|
+
}]
|
|
1655
|
+
});
|
|
1656
|
+
};
|
|
1657
|
+
(() => {
|
|
1658
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(HammerModule, [{
|
|
1659
|
+
type: NgModule,
|
|
1660
|
+
args: [{
|
|
1661
|
+
providers: [{
|
|
1662
|
+
provide: EVENT_MANAGER_PLUGINS,
|
|
1663
|
+
useClass: HammerGesturesPlugin,
|
|
1664
|
+
multi: true,
|
|
1665
|
+
deps: [DOCUMENT, HAMMER_GESTURE_CONFIG, Injector, [new Optional(), HAMMER_LOADER]]
|
|
1666
|
+
}, {
|
|
1667
|
+
provide: HAMMER_GESTURE_CONFIG,
|
|
1668
|
+
useClass: HammerGestureConfig
|
|
1669
|
+
}]
|
|
1670
|
+
}]
|
|
1671
|
+
}], null, null);
|
|
1672
|
+
})();
|
|
1673
|
+
var DomSanitizer = class _DomSanitizer {
|
|
1674
|
+
static \u0275fac = function DomSanitizer_Factory(__ngFactoryType__) {
|
|
1675
|
+
return new (__ngFactoryType__ || _DomSanitizer)();
|
|
1676
|
+
};
|
|
1677
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
1678
|
+
token: _DomSanitizer,
|
|
1679
|
+
factory: function DomSanitizer_Factory(__ngFactoryType__) {
|
|
1680
|
+
let __ngConditionalFactory__ = null;
|
|
1681
|
+
if (__ngFactoryType__) {
|
|
1682
|
+
__ngConditionalFactory__ = new (__ngFactoryType__ || _DomSanitizer)();
|
|
1683
|
+
} else {
|
|
1684
|
+
__ngConditionalFactory__ = \u0275\u0275inject(DomSanitizerImpl);
|
|
1685
|
+
}
|
|
1686
|
+
return __ngConditionalFactory__;
|
|
1687
|
+
},
|
|
1688
|
+
providedIn: "root"
|
|
1689
|
+
});
|
|
1690
|
+
};
|
|
1691
|
+
(() => {
|
|
1692
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomSanitizer, [{
|
|
1693
|
+
type: Injectable,
|
|
1694
|
+
args: [{
|
|
1695
|
+
providedIn: "root",
|
|
1696
|
+
useExisting: forwardRef(() => DomSanitizerImpl)
|
|
1697
|
+
}]
|
|
1698
|
+
}], null, null);
|
|
1699
|
+
})();
|
|
1700
|
+
var DomSanitizerImpl = class _DomSanitizerImpl extends DomSanitizer {
|
|
1701
|
+
_doc;
|
|
1702
|
+
constructor(_doc) {
|
|
1703
|
+
super();
|
|
1704
|
+
this._doc = _doc;
|
|
1705
|
+
}
|
|
1706
|
+
sanitize(ctx, value) {
|
|
1707
|
+
if (value == null) return null;
|
|
1708
|
+
switch (ctx) {
|
|
1709
|
+
case SecurityContext.NONE:
|
|
1710
|
+
return value;
|
|
1711
|
+
case SecurityContext.HTML:
|
|
1712
|
+
if (allowSanitizationBypassAndThrow(
|
|
1713
|
+
value,
|
|
1714
|
+
"HTML"
|
|
1715
|
+
/* BypassType.Html */
|
|
1716
|
+
)) {
|
|
1717
|
+
return unwrapSafeValue(value);
|
|
1718
|
+
}
|
|
1719
|
+
return _sanitizeHtml(this._doc, String(value)).toString();
|
|
1720
|
+
case SecurityContext.STYLE:
|
|
1721
|
+
if (allowSanitizationBypassAndThrow(
|
|
1722
|
+
value,
|
|
1723
|
+
"Style"
|
|
1724
|
+
/* BypassType.Style */
|
|
1725
|
+
)) {
|
|
1726
|
+
return unwrapSafeValue(value);
|
|
1727
|
+
}
|
|
1728
|
+
return value;
|
|
1729
|
+
case SecurityContext.SCRIPT:
|
|
1730
|
+
if (allowSanitizationBypassAndThrow(
|
|
1731
|
+
value,
|
|
1732
|
+
"Script"
|
|
1733
|
+
/* BypassType.Script */
|
|
1734
|
+
)) {
|
|
1735
|
+
return unwrapSafeValue(value);
|
|
1736
|
+
}
|
|
1737
|
+
throw new RuntimeError(5200, (typeof ngDevMode === "undefined" || ngDevMode) && "unsafe value used in a script context");
|
|
1738
|
+
case SecurityContext.URL:
|
|
1739
|
+
if (allowSanitizationBypassAndThrow(
|
|
1740
|
+
value,
|
|
1741
|
+
"URL"
|
|
1742
|
+
/* BypassType.Url */
|
|
1743
|
+
)) {
|
|
1744
|
+
return unwrapSafeValue(value);
|
|
1745
|
+
}
|
|
1746
|
+
return _sanitizeUrl(String(value));
|
|
1747
|
+
case SecurityContext.RESOURCE_URL:
|
|
1748
|
+
if (allowSanitizationBypassAndThrow(
|
|
1749
|
+
value,
|
|
1750
|
+
"ResourceURL"
|
|
1751
|
+
/* BypassType.ResourceUrl */
|
|
1752
|
+
)) {
|
|
1753
|
+
return unwrapSafeValue(value);
|
|
1754
|
+
}
|
|
1755
|
+
throw new RuntimeError(5201, (typeof ngDevMode === "undefined" || ngDevMode) && `unsafe value used in a resource URL context (see ${XSS_SECURITY_URL})`);
|
|
1756
|
+
default:
|
|
1757
|
+
throw new RuntimeError(5202, (typeof ngDevMode === "undefined" || ngDevMode) && `Unexpected SecurityContext ${ctx} (see ${XSS_SECURITY_URL})`);
|
|
1758
|
+
}
|
|
1759
|
+
}
|
|
1760
|
+
bypassSecurityTrustHtml(value) {
|
|
1761
|
+
return bypassSanitizationTrustHtml(value);
|
|
1762
|
+
}
|
|
1763
|
+
bypassSecurityTrustStyle(value) {
|
|
1764
|
+
return bypassSanitizationTrustStyle(value);
|
|
1765
|
+
}
|
|
1766
|
+
bypassSecurityTrustScript(value) {
|
|
1767
|
+
return bypassSanitizationTrustScript(value);
|
|
1768
|
+
}
|
|
1769
|
+
bypassSecurityTrustUrl(value) {
|
|
1770
|
+
return bypassSanitizationTrustUrl(value);
|
|
1771
|
+
}
|
|
1772
|
+
bypassSecurityTrustResourceUrl(value) {
|
|
1773
|
+
return bypassSanitizationTrustResourceUrl(value);
|
|
1774
|
+
}
|
|
1775
|
+
static \u0275fac = function DomSanitizerImpl_Factory(__ngFactoryType__) {
|
|
1776
|
+
return new (__ngFactoryType__ || _DomSanitizerImpl)(\u0275\u0275inject(DOCUMENT));
|
|
1777
|
+
};
|
|
1778
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
1779
|
+
token: _DomSanitizerImpl,
|
|
1780
|
+
factory: _DomSanitizerImpl.\u0275fac,
|
|
1781
|
+
providedIn: "root"
|
|
1782
|
+
});
|
|
1783
|
+
};
|
|
1784
|
+
(() => {
|
|
1785
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DomSanitizerImpl, [{
|
|
1786
|
+
type: Injectable,
|
|
1787
|
+
args: [{
|
|
1788
|
+
providedIn: "root"
|
|
1789
|
+
}]
|
|
1790
|
+
}], () => [{
|
|
1791
|
+
type: void 0,
|
|
1792
|
+
decorators: [{
|
|
1793
|
+
type: Inject,
|
|
1794
|
+
args: [DOCUMENT]
|
|
1795
|
+
}]
|
|
1796
|
+
}], null);
|
|
1797
|
+
})();
|
|
1798
|
+
var HydrationFeatureKind;
|
|
1799
|
+
(function(HydrationFeatureKind2) {
|
|
1800
|
+
HydrationFeatureKind2[HydrationFeatureKind2["NoHttpTransferCache"] = 0] = "NoHttpTransferCache";
|
|
1801
|
+
HydrationFeatureKind2[HydrationFeatureKind2["HttpTransferCacheOptions"] = 1] = "HttpTransferCacheOptions";
|
|
1802
|
+
HydrationFeatureKind2[HydrationFeatureKind2["I18nSupport"] = 2] = "I18nSupport";
|
|
1803
|
+
HydrationFeatureKind2[HydrationFeatureKind2["EventReplay"] = 3] = "EventReplay";
|
|
1804
|
+
HydrationFeatureKind2[HydrationFeatureKind2["IncrementalHydration"] = 4] = "IncrementalHydration";
|
|
1805
|
+
})(HydrationFeatureKind || (HydrationFeatureKind = {}));
|
|
1806
|
+
var VERSION = new Version("20.1.7");
|
|
1807
|
+
|
|
1808
|
+
// node_modules/@angular/material/fesm2022/icon-registry-CwOTJ7YM.mjs
|
|
1809
|
+
var policy;
|
|
1810
|
+
function getPolicy() {
|
|
1811
|
+
if (policy === void 0) {
|
|
1812
|
+
policy = null;
|
|
1813
|
+
if (typeof window !== "undefined") {
|
|
1814
|
+
const ttWindow = window;
|
|
1815
|
+
if (ttWindow.trustedTypes !== void 0) {
|
|
1816
|
+
policy = ttWindow.trustedTypes.createPolicy("angular#components", {
|
|
1817
|
+
createHTML: (s) => s
|
|
1818
|
+
});
|
|
1819
|
+
}
|
|
1820
|
+
}
|
|
1821
|
+
}
|
|
1822
|
+
return policy;
|
|
1823
|
+
}
|
|
1824
|
+
function trustedHTMLFromString(html) {
|
|
1825
|
+
return getPolicy()?.createHTML(html) || html;
|
|
1826
|
+
}
|
|
1827
|
+
function getMatIconNameNotFoundError(iconName) {
|
|
1828
|
+
return Error(`Unable to find icon with the name "${iconName}"`);
|
|
1829
|
+
}
|
|
1830
|
+
function getMatIconNoHttpProviderError() {
|
|
1831
|
+
return Error("Could not find HttpClient for use with Angular Material icons. Please add provideHttpClient() to your providers.");
|
|
1832
|
+
}
|
|
1833
|
+
function getMatIconFailedToSanitizeUrlError(url) {
|
|
1834
|
+
return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was "${url}".`);
|
|
1835
|
+
}
|
|
1836
|
+
function getMatIconFailedToSanitizeLiteralError(literal) {
|
|
1837
|
+
return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was "${literal}".`);
|
|
1838
|
+
}
|
|
1839
|
+
var SvgIconConfig = class {
|
|
1840
|
+
url;
|
|
1841
|
+
svgText;
|
|
1842
|
+
options;
|
|
1843
|
+
svgElement;
|
|
1844
|
+
constructor(url, svgText, options) {
|
|
1845
|
+
this.url = url;
|
|
1846
|
+
this.svgText = svgText;
|
|
1847
|
+
this.options = options;
|
|
1848
|
+
}
|
|
1849
|
+
};
|
|
1850
|
+
var MatIconRegistry = class _MatIconRegistry {
|
|
1851
|
+
_httpClient;
|
|
1852
|
+
_sanitizer;
|
|
1853
|
+
_errorHandler;
|
|
1854
|
+
_document;
|
|
1855
|
+
/**
|
|
1856
|
+
* URLs and cached SVG elements for individual icons. Keys are of the format "[namespace]:[icon]".
|
|
1857
|
+
*/
|
|
1858
|
+
_svgIconConfigs = /* @__PURE__ */ new Map();
|
|
1859
|
+
/**
|
|
1860
|
+
* SvgIconConfig objects and cached SVG elements for icon sets, keyed by namespace.
|
|
1861
|
+
* Multiple icon sets can be registered under the same namespace.
|
|
1862
|
+
*/
|
|
1863
|
+
_iconSetConfigs = /* @__PURE__ */ new Map();
|
|
1864
|
+
/** Cache for icons loaded by direct URLs. */
|
|
1865
|
+
_cachedIconsByUrl = /* @__PURE__ */ new Map();
|
|
1866
|
+
/** In-progress icon fetches. Used to coalesce multiple requests to the same URL. */
|
|
1867
|
+
_inProgressUrlFetches = /* @__PURE__ */ new Map();
|
|
1868
|
+
/** Map from font identifiers to their CSS class names. Used for icon fonts. */
|
|
1869
|
+
_fontCssClassesByAlias = /* @__PURE__ */ new Map();
|
|
1870
|
+
/** Registered icon resolver functions. */
|
|
1871
|
+
_resolvers = [];
|
|
1872
|
+
/**
|
|
1873
|
+
* The CSS classes to apply when an `<mat-icon>` component has no icon name, url, or font
|
|
1874
|
+
* specified. The default 'material-icons' value assumes that the material icon font has been
|
|
1875
|
+
* loaded as described at https://google.github.io/material-design-icons/#icon-font-for-the-web
|
|
1876
|
+
*/
|
|
1877
|
+
_defaultFontSetClass = ["material-icons", "mat-ligature-font"];
|
|
1878
|
+
constructor(_httpClient, _sanitizer, document2, _errorHandler) {
|
|
1879
|
+
this._httpClient = _httpClient;
|
|
1880
|
+
this._sanitizer = _sanitizer;
|
|
1881
|
+
this._errorHandler = _errorHandler;
|
|
1882
|
+
this._document = document2;
|
|
1883
|
+
}
|
|
1884
|
+
/**
|
|
1885
|
+
* Registers an icon by URL in the default namespace.
|
|
1886
|
+
* @param iconName Name under which the icon should be registered.
|
|
1887
|
+
* @param url
|
|
1888
|
+
*/
|
|
1889
|
+
addSvgIcon(iconName, url, options) {
|
|
1890
|
+
return this.addSvgIconInNamespace("", iconName, url, options);
|
|
1891
|
+
}
|
|
1892
|
+
/**
|
|
1893
|
+
* Registers an icon using an HTML string in the default namespace.
|
|
1894
|
+
* @param iconName Name under which the icon should be registered.
|
|
1895
|
+
* @param literal SVG source of the icon.
|
|
1896
|
+
*/
|
|
1897
|
+
addSvgIconLiteral(iconName, literal, options) {
|
|
1898
|
+
return this.addSvgIconLiteralInNamespace("", iconName, literal, options);
|
|
1899
|
+
}
|
|
1900
|
+
/**
|
|
1901
|
+
* Registers an icon by URL in the specified namespace.
|
|
1902
|
+
* @param namespace Namespace in which the icon should be registered.
|
|
1903
|
+
* @param iconName Name under which the icon should be registered.
|
|
1904
|
+
* @param url
|
|
1905
|
+
*/
|
|
1906
|
+
addSvgIconInNamespace(namespace, iconName, url, options) {
|
|
1907
|
+
return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig(url, null, options));
|
|
1908
|
+
}
|
|
1909
|
+
/**
|
|
1910
|
+
* Registers an icon resolver function with the registry. The function will be invoked with the
|
|
1911
|
+
* name and namespace of an icon when the registry tries to resolve the URL from which to fetch
|
|
1912
|
+
* the icon. The resolver is expected to return a `SafeResourceUrl` that points to the icon,
|
|
1913
|
+
* an object with the icon URL and icon options, or `null` if the icon is not supported. Resolvers
|
|
1914
|
+
* will be invoked in the order in which they have been registered.
|
|
1915
|
+
* @param resolver Resolver function to be registered.
|
|
1916
|
+
*/
|
|
1917
|
+
addSvgIconResolver(resolver) {
|
|
1918
|
+
this._resolvers.push(resolver);
|
|
1919
|
+
return this;
|
|
1920
|
+
}
|
|
1921
|
+
/**
|
|
1922
|
+
* Registers an icon using an HTML string in the specified namespace.
|
|
1923
|
+
* @param namespace Namespace in which the icon should be registered.
|
|
1924
|
+
* @param iconName Name under which the icon should be registered.
|
|
1925
|
+
* @param literal SVG source of the icon.
|
|
1926
|
+
*/
|
|
1927
|
+
addSvgIconLiteralInNamespace(namespace, iconName, literal, options) {
|
|
1928
|
+
const cleanLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);
|
|
1929
|
+
if (!cleanLiteral) {
|
|
1930
|
+
throw getMatIconFailedToSanitizeLiteralError(literal);
|
|
1931
|
+
}
|
|
1932
|
+
const trustedLiteral = trustedHTMLFromString(cleanLiteral);
|
|
1933
|
+
return this._addSvgIconConfig(namespace, iconName, new SvgIconConfig("", trustedLiteral, options));
|
|
1934
|
+
}
|
|
1935
|
+
/**
|
|
1936
|
+
* Registers an icon set by URL in the default namespace.
|
|
1937
|
+
* @param url
|
|
1938
|
+
*/
|
|
1939
|
+
addSvgIconSet(url, options) {
|
|
1940
|
+
return this.addSvgIconSetInNamespace("", url, options);
|
|
1941
|
+
}
|
|
1942
|
+
/**
|
|
1943
|
+
* Registers an icon set using an HTML string in the default namespace.
|
|
1944
|
+
* @param literal SVG source of the icon set.
|
|
1945
|
+
*/
|
|
1946
|
+
addSvgIconSetLiteral(literal, options) {
|
|
1947
|
+
return this.addSvgIconSetLiteralInNamespace("", literal, options);
|
|
1948
|
+
}
|
|
1949
|
+
/**
|
|
1950
|
+
* Registers an icon set by URL in the specified namespace.
|
|
1951
|
+
* @param namespace Namespace in which to register the icon set.
|
|
1952
|
+
* @param url
|
|
1953
|
+
*/
|
|
1954
|
+
addSvgIconSetInNamespace(namespace, url, options) {
|
|
1955
|
+
return this._addSvgIconSetConfig(namespace, new SvgIconConfig(url, null, options));
|
|
1956
|
+
}
|
|
1957
|
+
/**
|
|
1958
|
+
* Registers an icon set using an HTML string in the specified namespace.
|
|
1959
|
+
* @param namespace Namespace in which to register the icon set.
|
|
1960
|
+
* @param literal SVG source of the icon set.
|
|
1961
|
+
*/
|
|
1962
|
+
addSvgIconSetLiteralInNamespace(namespace, literal, options) {
|
|
1963
|
+
const cleanLiteral = this._sanitizer.sanitize(SecurityContext.HTML, literal);
|
|
1964
|
+
if (!cleanLiteral) {
|
|
1965
|
+
throw getMatIconFailedToSanitizeLiteralError(literal);
|
|
1966
|
+
}
|
|
1967
|
+
const trustedLiteral = trustedHTMLFromString(cleanLiteral);
|
|
1968
|
+
return this._addSvgIconSetConfig(namespace, new SvgIconConfig("", trustedLiteral, options));
|
|
1969
|
+
}
|
|
1970
|
+
/**
|
|
1971
|
+
* Defines an alias for CSS class names to be used for icon fonts. Creating an matIcon
|
|
1972
|
+
* component with the alias as the fontSet input will cause the class name to be applied
|
|
1973
|
+
* to the `<mat-icon>` element.
|
|
1974
|
+
*
|
|
1975
|
+
* If the registered font is a ligature font, then don't forget to also include the special
|
|
1976
|
+
* class `mat-ligature-font` to allow the usage via attribute. So register like this:
|
|
1977
|
+
*
|
|
1978
|
+
* ```ts
|
|
1979
|
+
* iconRegistry.registerFontClassAlias('f1', 'font1 mat-ligature-font');
|
|
1980
|
+
* ```
|
|
1981
|
+
*
|
|
1982
|
+
* And use like this:
|
|
1983
|
+
*
|
|
1984
|
+
* ```html
|
|
1985
|
+
* <mat-icon fontSet="f1" fontIcon="home"></mat-icon>
|
|
1986
|
+
* ```
|
|
1987
|
+
*
|
|
1988
|
+
* @param alias Alias for the font.
|
|
1989
|
+
* @param classNames Class names override to be used instead of the alias.
|
|
1990
|
+
*/
|
|
1991
|
+
registerFontClassAlias(alias, classNames = alias) {
|
|
1992
|
+
this._fontCssClassesByAlias.set(alias, classNames);
|
|
1993
|
+
return this;
|
|
1994
|
+
}
|
|
1995
|
+
/**
|
|
1996
|
+
* Returns the CSS class name associated with the alias by a previous call to
|
|
1997
|
+
* registerFontClassAlias. If no CSS class has been associated, returns the alias unmodified.
|
|
1998
|
+
*/
|
|
1999
|
+
classNameForFontAlias(alias) {
|
|
2000
|
+
return this._fontCssClassesByAlias.get(alias) || alias;
|
|
2001
|
+
}
|
|
2002
|
+
/**
|
|
2003
|
+
* Sets the CSS classes to be used for icon fonts when an `<mat-icon>` component does not
|
|
2004
|
+
* have a fontSet input value, and is not loading an icon by name or URL.
|
|
2005
|
+
*/
|
|
2006
|
+
setDefaultFontSetClass(...classNames) {
|
|
2007
|
+
this._defaultFontSetClass = classNames;
|
|
2008
|
+
return this;
|
|
2009
|
+
}
|
|
2010
|
+
/**
|
|
2011
|
+
* Returns the CSS classes to be used for icon fonts when an `<mat-icon>` component does not
|
|
2012
|
+
* have a fontSet input value, and is not loading an icon by name or URL.
|
|
2013
|
+
*/
|
|
2014
|
+
getDefaultFontSetClass() {
|
|
2015
|
+
return this._defaultFontSetClass;
|
|
2016
|
+
}
|
|
2017
|
+
/**
|
|
2018
|
+
* Returns an Observable that produces the icon (as an `<svg>` DOM element) from the given URL.
|
|
2019
|
+
* The response from the URL may be cached so this will not always cause an HTTP request, but
|
|
2020
|
+
* the produced element will always be a new copy of the originally fetched icon. (That is,
|
|
2021
|
+
* it will not contain any modifications made to elements previously returned).
|
|
2022
|
+
*
|
|
2023
|
+
* @param safeUrl URL from which to fetch the SVG icon.
|
|
2024
|
+
*/
|
|
2025
|
+
getSvgIconFromUrl(safeUrl) {
|
|
2026
|
+
const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);
|
|
2027
|
+
if (!url) {
|
|
2028
|
+
throw getMatIconFailedToSanitizeUrlError(safeUrl);
|
|
2029
|
+
}
|
|
2030
|
+
const cachedIcon = this._cachedIconsByUrl.get(url);
|
|
2031
|
+
if (cachedIcon) {
|
|
2032
|
+
return of(cloneSvg(cachedIcon));
|
|
2033
|
+
}
|
|
2034
|
+
return this._loadSvgIconFromConfig(new SvgIconConfig(safeUrl, null)).pipe(tap((svg) => this._cachedIconsByUrl.set(url, svg)), map((svg) => cloneSvg(svg)));
|
|
2035
|
+
}
|
|
2036
|
+
/**
|
|
2037
|
+
* Returns an Observable that produces the icon (as an `<svg>` DOM element) with the given name
|
|
2038
|
+
* and namespace. The icon must have been previously registered with addIcon or addIconSet;
|
|
2039
|
+
* if not, the Observable will throw an error.
|
|
2040
|
+
*
|
|
2041
|
+
* @param name Name of the icon to be retrieved.
|
|
2042
|
+
* @param namespace Namespace in which to look for the icon.
|
|
2043
|
+
*/
|
|
2044
|
+
getNamedSvgIcon(name, namespace = "") {
|
|
2045
|
+
const key = iconKey(namespace, name);
|
|
2046
|
+
let config = this._svgIconConfigs.get(key);
|
|
2047
|
+
if (config) {
|
|
2048
|
+
return this._getSvgFromConfig(config);
|
|
2049
|
+
}
|
|
2050
|
+
config = this._getIconConfigFromResolvers(namespace, name);
|
|
2051
|
+
if (config) {
|
|
2052
|
+
this._svgIconConfigs.set(key, config);
|
|
2053
|
+
return this._getSvgFromConfig(config);
|
|
2054
|
+
}
|
|
2055
|
+
const iconSetConfigs = this._iconSetConfigs.get(namespace);
|
|
2056
|
+
if (iconSetConfigs) {
|
|
2057
|
+
return this._getSvgFromIconSetConfigs(name, iconSetConfigs);
|
|
2058
|
+
}
|
|
2059
|
+
return throwError(getMatIconNameNotFoundError(key));
|
|
2060
|
+
}
|
|
2061
|
+
ngOnDestroy() {
|
|
2062
|
+
this._resolvers = [];
|
|
2063
|
+
this._svgIconConfigs.clear();
|
|
2064
|
+
this._iconSetConfigs.clear();
|
|
2065
|
+
this._cachedIconsByUrl.clear();
|
|
2066
|
+
}
|
|
2067
|
+
/**
|
|
2068
|
+
* Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not.
|
|
2069
|
+
*/
|
|
2070
|
+
_getSvgFromConfig(config) {
|
|
2071
|
+
if (config.svgText) {
|
|
2072
|
+
return of(cloneSvg(this._svgElementFromConfig(config)));
|
|
2073
|
+
} else {
|
|
2074
|
+
return this._loadSvgIconFromConfig(config).pipe(map((svg) => cloneSvg(svg)));
|
|
2075
|
+
}
|
|
2076
|
+
}
|
|
2077
|
+
/**
|
|
2078
|
+
* Attempts to find an icon with the specified name in any of the SVG icon sets.
|
|
2079
|
+
* First searches the available cached icons for a nested element with a matching name, and
|
|
2080
|
+
* if found copies the element to a new `<svg>` element. If not found, fetches all icon sets
|
|
2081
|
+
* that have not been cached, and searches again after all fetches are completed.
|
|
2082
|
+
* The returned Observable produces the SVG element if possible, and throws
|
|
2083
|
+
* an error if no icon with the specified name can be found.
|
|
2084
|
+
*/
|
|
2085
|
+
_getSvgFromIconSetConfigs(name, iconSetConfigs) {
|
|
2086
|
+
const namedIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);
|
|
2087
|
+
if (namedIcon) {
|
|
2088
|
+
return of(namedIcon);
|
|
2089
|
+
}
|
|
2090
|
+
const iconSetFetchRequests = iconSetConfigs.filter((iconSetConfig) => !iconSetConfig.svgText).map((iconSetConfig) => {
|
|
2091
|
+
return this._loadSvgIconSetFromConfig(iconSetConfig).pipe(catchError((err) => {
|
|
2092
|
+
const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, iconSetConfig.url);
|
|
2093
|
+
const errorMessage = `Loading icon set URL: ${url} failed: ${err.message}`;
|
|
2094
|
+
this._errorHandler.handleError(new Error(errorMessage));
|
|
2095
|
+
return of(null);
|
|
2096
|
+
}));
|
|
2097
|
+
});
|
|
2098
|
+
return forkJoin(iconSetFetchRequests).pipe(map(() => {
|
|
2099
|
+
const foundIcon = this._extractIconWithNameFromAnySet(name, iconSetConfigs);
|
|
2100
|
+
if (!foundIcon) {
|
|
2101
|
+
throw getMatIconNameNotFoundError(name);
|
|
2102
|
+
}
|
|
2103
|
+
return foundIcon;
|
|
2104
|
+
}));
|
|
2105
|
+
}
|
|
2106
|
+
/**
|
|
2107
|
+
* Searches the cached SVG elements for the given icon sets for a nested icon element whose "id"
|
|
2108
|
+
* tag matches the specified name. If found, copies the nested element to a new SVG element and
|
|
2109
|
+
* returns it. Returns null if no matching element is found.
|
|
2110
|
+
*/
|
|
2111
|
+
_extractIconWithNameFromAnySet(iconName, iconSetConfigs) {
|
|
2112
|
+
for (let i = iconSetConfigs.length - 1; i >= 0; i--) {
|
|
2113
|
+
const config = iconSetConfigs[i];
|
|
2114
|
+
if (config.svgText && config.svgText.toString().indexOf(iconName) > -1) {
|
|
2115
|
+
const svg = this._svgElementFromConfig(config);
|
|
2116
|
+
const foundIcon = this._extractSvgIconFromSet(svg, iconName, config.options);
|
|
2117
|
+
if (foundIcon) {
|
|
2118
|
+
return foundIcon;
|
|
2119
|
+
}
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
2122
|
+
return null;
|
|
2123
|
+
}
|
|
2124
|
+
/**
|
|
2125
|
+
* Loads the content of the icon URL specified in the SvgIconConfig and creates an SVG element
|
|
2126
|
+
* from it.
|
|
2127
|
+
*/
|
|
2128
|
+
_loadSvgIconFromConfig(config) {
|
|
2129
|
+
return this._fetchIcon(config).pipe(tap((svgText) => config.svgText = svgText), map(() => this._svgElementFromConfig(config)));
|
|
2130
|
+
}
|
|
2131
|
+
/**
|
|
2132
|
+
* Loads the content of the icon set URL specified in the
|
|
2133
|
+
* SvgIconConfig and attaches it to the config.
|
|
2134
|
+
*/
|
|
2135
|
+
_loadSvgIconSetFromConfig(config) {
|
|
2136
|
+
if (config.svgText) {
|
|
2137
|
+
return of(null);
|
|
2138
|
+
}
|
|
2139
|
+
return this._fetchIcon(config).pipe(tap((svgText) => config.svgText = svgText));
|
|
2140
|
+
}
|
|
2141
|
+
/**
|
|
2142
|
+
* Searches the cached element of the given SvgIconConfig for a nested icon element whose "id"
|
|
2143
|
+
* tag matches the specified name. If found, copies the nested element to a new SVG element and
|
|
2144
|
+
* returns it. Returns null if no matching element is found.
|
|
2145
|
+
*/
|
|
2146
|
+
_extractSvgIconFromSet(iconSet, iconName, options) {
|
|
2147
|
+
const iconSource = iconSet.querySelector(`[id="${iconName}"]`);
|
|
2148
|
+
if (!iconSource) {
|
|
2149
|
+
return null;
|
|
2150
|
+
}
|
|
2151
|
+
const iconElement = iconSource.cloneNode(true);
|
|
2152
|
+
iconElement.removeAttribute("id");
|
|
2153
|
+
if (iconElement.nodeName.toLowerCase() === "svg") {
|
|
2154
|
+
return this._setSvgAttributes(iconElement, options);
|
|
2155
|
+
}
|
|
2156
|
+
if (iconElement.nodeName.toLowerCase() === "symbol") {
|
|
2157
|
+
return this._setSvgAttributes(this._toSvgElement(iconElement), options);
|
|
2158
|
+
}
|
|
2159
|
+
const svg = this._svgElementFromString(trustedHTMLFromString("<svg></svg>"));
|
|
2160
|
+
svg.appendChild(iconElement);
|
|
2161
|
+
return this._setSvgAttributes(svg, options);
|
|
2162
|
+
}
|
|
2163
|
+
/**
|
|
2164
|
+
* Creates a DOM element from the given SVG string.
|
|
2165
|
+
*/
|
|
2166
|
+
_svgElementFromString(str) {
|
|
2167
|
+
const div = this._document.createElement("DIV");
|
|
2168
|
+
div.innerHTML = str;
|
|
2169
|
+
const svg = div.querySelector("svg");
|
|
2170
|
+
if (!svg) {
|
|
2171
|
+
throw Error("<svg> tag not found");
|
|
2172
|
+
}
|
|
2173
|
+
return svg;
|
|
2174
|
+
}
|
|
2175
|
+
/**
|
|
2176
|
+
* Converts an element into an SVG node by cloning all of its children.
|
|
2177
|
+
*/
|
|
2178
|
+
_toSvgElement(element) {
|
|
2179
|
+
const svg = this._svgElementFromString(trustedHTMLFromString("<svg></svg>"));
|
|
2180
|
+
const attributes = element.attributes;
|
|
2181
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
2182
|
+
const {
|
|
2183
|
+
name,
|
|
2184
|
+
value
|
|
2185
|
+
} = attributes[i];
|
|
2186
|
+
if (name !== "id") {
|
|
2187
|
+
svg.setAttribute(name, value);
|
|
2188
|
+
}
|
|
2189
|
+
}
|
|
2190
|
+
for (let i = 0; i < element.childNodes.length; i++) {
|
|
2191
|
+
if (element.childNodes[i].nodeType === this._document.ELEMENT_NODE) {
|
|
2192
|
+
svg.appendChild(element.childNodes[i].cloneNode(true));
|
|
2193
|
+
}
|
|
2194
|
+
}
|
|
2195
|
+
return svg;
|
|
2196
|
+
}
|
|
2197
|
+
/**
|
|
2198
|
+
* Sets the default attributes for an SVG element to be used as an icon.
|
|
2199
|
+
*/
|
|
2200
|
+
_setSvgAttributes(svg, options) {
|
|
2201
|
+
svg.setAttribute("fit", "");
|
|
2202
|
+
svg.setAttribute("height", "100%");
|
|
2203
|
+
svg.setAttribute("width", "100%");
|
|
2204
|
+
svg.setAttribute("preserveAspectRatio", "xMidYMid meet");
|
|
2205
|
+
svg.setAttribute("focusable", "false");
|
|
2206
|
+
if (options && options.viewBox) {
|
|
2207
|
+
svg.setAttribute("viewBox", options.viewBox);
|
|
2208
|
+
}
|
|
2209
|
+
return svg;
|
|
2210
|
+
}
|
|
2211
|
+
/**
|
|
2212
|
+
* Returns an Observable which produces the string contents of the given icon. Results may be
|
|
2213
|
+
* cached, so future calls with the same URL may not cause another HTTP request.
|
|
2214
|
+
*/
|
|
2215
|
+
_fetchIcon(iconConfig) {
|
|
2216
|
+
const {
|
|
2217
|
+
url: safeUrl,
|
|
2218
|
+
options
|
|
2219
|
+
} = iconConfig;
|
|
2220
|
+
const withCredentials = options?.withCredentials ?? false;
|
|
2221
|
+
if (!this._httpClient) {
|
|
2222
|
+
throw getMatIconNoHttpProviderError();
|
|
2223
|
+
}
|
|
2224
|
+
if (safeUrl == null) {
|
|
2225
|
+
throw Error(`Cannot fetch icon from URL "${safeUrl}".`);
|
|
2226
|
+
}
|
|
2227
|
+
const url = this._sanitizer.sanitize(SecurityContext.RESOURCE_URL, safeUrl);
|
|
2228
|
+
if (!url) {
|
|
2229
|
+
throw getMatIconFailedToSanitizeUrlError(safeUrl);
|
|
2230
|
+
}
|
|
2231
|
+
const inProgressFetch = this._inProgressUrlFetches.get(url);
|
|
2232
|
+
if (inProgressFetch) {
|
|
2233
|
+
return inProgressFetch;
|
|
2234
|
+
}
|
|
2235
|
+
const req = this._httpClient.get(url, {
|
|
2236
|
+
responseType: "text",
|
|
2237
|
+
withCredentials
|
|
2238
|
+
}).pipe(map((svg) => {
|
|
2239
|
+
return trustedHTMLFromString(svg);
|
|
2240
|
+
}), finalize(() => this._inProgressUrlFetches.delete(url)), share());
|
|
2241
|
+
this._inProgressUrlFetches.set(url, req);
|
|
2242
|
+
return req;
|
|
2243
|
+
}
|
|
2244
|
+
/**
|
|
2245
|
+
* Registers an icon config by name in the specified namespace.
|
|
2246
|
+
* @param namespace Namespace in which to register the icon config.
|
|
2247
|
+
* @param iconName Name under which to register the config.
|
|
2248
|
+
* @param config Config to be registered.
|
|
2249
|
+
*/
|
|
2250
|
+
_addSvgIconConfig(namespace, iconName, config) {
|
|
2251
|
+
this._svgIconConfigs.set(iconKey(namespace, iconName), config);
|
|
2252
|
+
return this;
|
|
2253
|
+
}
|
|
2254
|
+
/**
|
|
2255
|
+
* Registers an icon set config in the specified namespace.
|
|
2256
|
+
* @param namespace Namespace in which to register the icon config.
|
|
2257
|
+
* @param config Config to be registered.
|
|
2258
|
+
*/
|
|
2259
|
+
_addSvgIconSetConfig(namespace, config) {
|
|
2260
|
+
const configNamespace = this._iconSetConfigs.get(namespace);
|
|
2261
|
+
if (configNamespace) {
|
|
2262
|
+
configNamespace.push(config);
|
|
2263
|
+
} else {
|
|
2264
|
+
this._iconSetConfigs.set(namespace, [config]);
|
|
2265
|
+
}
|
|
2266
|
+
return this;
|
|
2267
|
+
}
|
|
2268
|
+
/** Parses a config's text into an SVG element. */
|
|
2269
|
+
_svgElementFromConfig(config) {
|
|
2270
|
+
if (!config.svgElement) {
|
|
2271
|
+
const svg = this._svgElementFromString(config.svgText);
|
|
2272
|
+
this._setSvgAttributes(svg, config.options);
|
|
2273
|
+
config.svgElement = svg;
|
|
2274
|
+
}
|
|
2275
|
+
return config.svgElement;
|
|
2276
|
+
}
|
|
2277
|
+
/** Tries to create an icon config through the registered resolver functions. */
|
|
2278
|
+
_getIconConfigFromResolvers(namespace, name) {
|
|
2279
|
+
for (let i = 0; i < this._resolvers.length; i++) {
|
|
2280
|
+
const result = this._resolvers[i](name, namespace);
|
|
2281
|
+
if (result) {
|
|
2282
|
+
return isSafeUrlWithOptions(result) ? new SvgIconConfig(result.url, null, result.options) : new SvgIconConfig(result, null);
|
|
2283
|
+
}
|
|
2284
|
+
}
|
|
2285
|
+
return void 0;
|
|
2286
|
+
}
|
|
2287
|
+
static \u0275fac = function MatIconRegistry_Factory(__ngFactoryType__) {
|
|
2288
|
+
return new (__ngFactoryType__ || _MatIconRegistry)(\u0275\u0275inject(HttpClient, 8), \u0275\u0275inject(DomSanitizer), \u0275\u0275inject(DOCUMENT, 8), \u0275\u0275inject(ErrorHandler));
|
|
2289
|
+
};
|
|
2290
|
+
static \u0275prov = /* @__PURE__ */ \u0275\u0275defineInjectable({
|
|
2291
|
+
token: _MatIconRegistry,
|
|
2292
|
+
factory: _MatIconRegistry.\u0275fac,
|
|
2293
|
+
providedIn: "root"
|
|
2294
|
+
});
|
|
2295
|
+
};
|
|
2296
|
+
(() => {
|
|
2297
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatIconRegistry, [{
|
|
2298
|
+
type: Injectable,
|
|
2299
|
+
args: [{
|
|
2300
|
+
providedIn: "root"
|
|
2301
|
+
}]
|
|
2302
|
+
}], () => [{
|
|
2303
|
+
type: HttpClient,
|
|
2304
|
+
decorators: [{
|
|
2305
|
+
type: Optional
|
|
2306
|
+
}]
|
|
2307
|
+
}, {
|
|
2308
|
+
type: DomSanitizer
|
|
2309
|
+
}, {
|
|
2310
|
+
type: void 0,
|
|
2311
|
+
decorators: [{
|
|
2312
|
+
type: Optional
|
|
2313
|
+
}, {
|
|
2314
|
+
type: Inject,
|
|
2315
|
+
args: [DOCUMENT]
|
|
2316
|
+
}]
|
|
2317
|
+
}, {
|
|
2318
|
+
type: ErrorHandler
|
|
2319
|
+
}], null);
|
|
2320
|
+
})();
|
|
2321
|
+
function ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, httpClient, sanitizer, errorHandler2, document2) {
|
|
2322
|
+
return parentRegistry || new MatIconRegistry(httpClient, sanitizer, document2, errorHandler2);
|
|
2323
|
+
}
|
|
2324
|
+
var ICON_REGISTRY_PROVIDER = {
|
|
2325
|
+
// If there is already an MatIconRegistry available, use that. Otherwise, provide a new one.
|
|
2326
|
+
provide: MatIconRegistry,
|
|
2327
|
+
deps: [[new Optional(), new SkipSelf(), MatIconRegistry], [new Optional(), HttpClient], DomSanitizer, ErrorHandler, [new Optional(), DOCUMENT]],
|
|
2328
|
+
useFactory: ICON_REGISTRY_PROVIDER_FACTORY
|
|
2329
|
+
};
|
|
2330
|
+
function cloneSvg(svg) {
|
|
2331
|
+
return svg.cloneNode(true);
|
|
2332
|
+
}
|
|
2333
|
+
function iconKey(namespace, name) {
|
|
2334
|
+
return namespace + ":" + name;
|
|
2335
|
+
}
|
|
2336
|
+
function isSafeUrlWithOptions(value) {
|
|
2337
|
+
return !!(value.url && value.options);
|
|
2338
|
+
}
|
|
2339
|
+
|
|
2340
|
+
// node_modules/@angular/material/fesm2022/icon.mjs
|
|
2341
|
+
var _c0 = ["*"];
|
|
2342
|
+
var MAT_ICON_DEFAULT_OPTIONS = new InjectionToken("MAT_ICON_DEFAULT_OPTIONS");
|
|
2343
|
+
var MAT_ICON_LOCATION = new InjectionToken("mat-icon-location", {
|
|
2344
|
+
providedIn: "root",
|
|
2345
|
+
factory: MAT_ICON_LOCATION_FACTORY
|
|
2346
|
+
});
|
|
2347
|
+
function MAT_ICON_LOCATION_FACTORY() {
|
|
2348
|
+
const _document2 = inject(DOCUMENT);
|
|
2349
|
+
const _location = _document2 ? _document2.location : null;
|
|
2350
|
+
return {
|
|
2351
|
+
// Note that this needs to be a function, rather than a property, because Angular
|
|
2352
|
+
// will only resolve it once, but we want the current path on each call.
|
|
2353
|
+
getPathname: () => _location ? _location.pathname + _location.search : ""
|
|
2354
|
+
};
|
|
2355
|
+
}
|
|
2356
|
+
var funcIriAttributes = ["clip-path", "color-profile", "src", "cursor", "fill", "filter", "marker", "marker-start", "marker-mid", "marker-end", "mask", "stroke"];
|
|
2357
|
+
var funcIriAttributeSelector = funcIriAttributes.map((attr) => `[${attr}]`).join(", ");
|
|
2358
|
+
var funcIriPattern = /^url\(['"]?#(.*?)['"]?\)$/;
|
|
2359
|
+
var MatIcon = class _MatIcon {
|
|
2360
|
+
_elementRef = inject(ElementRef);
|
|
2361
|
+
_iconRegistry = inject(MatIconRegistry);
|
|
2362
|
+
_location = inject(MAT_ICON_LOCATION);
|
|
2363
|
+
_errorHandler = inject(ErrorHandler);
|
|
2364
|
+
_defaultColor;
|
|
2365
|
+
/**
|
|
2366
|
+
* Theme color of the icon. This API is supported in M2 themes only, it
|
|
2367
|
+
* has no effect in M3 themes. For color customization in M3, see https://material.angular.dev/components/icon/styling.
|
|
2368
|
+
*
|
|
2369
|
+
* For information on applying color variants in M3, see
|
|
2370
|
+
* https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants
|
|
2371
|
+
*/
|
|
2372
|
+
get color() {
|
|
2373
|
+
return this._color || this._defaultColor;
|
|
2374
|
+
}
|
|
2375
|
+
set color(value) {
|
|
2376
|
+
this._color = value;
|
|
2377
|
+
}
|
|
2378
|
+
_color;
|
|
2379
|
+
/**
|
|
2380
|
+
* Whether the icon should be inlined, automatically sizing the icon to match the font size of
|
|
2381
|
+
* the element the icon is contained in.
|
|
2382
|
+
*/
|
|
2383
|
+
inline = false;
|
|
2384
|
+
/** Name of the icon in the SVG icon set. */
|
|
2385
|
+
get svgIcon() {
|
|
2386
|
+
return this._svgIcon;
|
|
2387
|
+
}
|
|
2388
|
+
set svgIcon(value) {
|
|
2389
|
+
if (value !== this._svgIcon) {
|
|
2390
|
+
if (value) {
|
|
2391
|
+
this._updateSvgIcon(value);
|
|
2392
|
+
} else if (this._svgIcon) {
|
|
2393
|
+
this._clearSvgElement();
|
|
2394
|
+
}
|
|
2395
|
+
this._svgIcon = value;
|
|
2396
|
+
}
|
|
2397
|
+
}
|
|
2398
|
+
_svgIcon;
|
|
2399
|
+
/** Font set that the icon is a part of. */
|
|
2400
|
+
get fontSet() {
|
|
2401
|
+
return this._fontSet;
|
|
2402
|
+
}
|
|
2403
|
+
set fontSet(value) {
|
|
2404
|
+
const newValue = this._cleanupFontValue(value);
|
|
2405
|
+
if (newValue !== this._fontSet) {
|
|
2406
|
+
this._fontSet = newValue;
|
|
2407
|
+
this._updateFontIconClasses();
|
|
2408
|
+
}
|
|
2409
|
+
}
|
|
2410
|
+
_fontSet;
|
|
2411
|
+
/** Name of an icon within a font set. */
|
|
2412
|
+
get fontIcon() {
|
|
2413
|
+
return this._fontIcon;
|
|
2414
|
+
}
|
|
2415
|
+
set fontIcon(value) {
|
|
2416
|
+
const newValue = this._cleanupFontValue(value);
|
|
2417
|
+
if (newValue !== this._fontIcon) {
|
|
2418
|
+
this._fontIcon = newValue;
|
|
2419
|
+
this._updateFontIconClasses();
|
|
2420
|
+
}
|
|
2421
|
+
}
|
|
2422
|
+
_fontIcon;
|
|
2423
|
+
_previousFontSetClass = [];
|
|
2424
|
+
_previousFontIconClass;
|
|
2425
|
+
_svgName;
|
|
2426
|
+
_svgNamespace;
|
|
2427
|
+
/** Keeps track of the current page path. */
|
|
2428
|
+
_previousPath;
|
|
2429
|
+
/** Keeps track of the elements and attributes that we've prefixed with the current path. */
|
|
2430
|
+
_elementsWithExternalReferences;
|
|
2431
|
+
/** Subscription to the current in-progress SVG icon request. */
|
|
2432
|
+
_currentIconFetch = Subscription.EMPTY;
|
|
2433
|
+
constructor() {
|
|
2434
|
+
const ariaHidden = inject(new HostAttributeToken("aria-hidden"), {
|
|
2435
|
+
optional: true
|
|
2436
|
+
});
|
|
2437
|
+
const defaults = inject(MAT_ICON_DEFAULT_OPTIONS, {
|
|
2438
|
+
optional: true
|
|
2439
|
+
});
|
|
2440
|
+
if (defaults) {
|
|
2441
|
+
if (defaults.color) {
|
|
2442
|
+
this.color = this._defaultColor = defaults.color;
|
|
2443
|
+
}
|
|
2444
|
+
if (defaults.fontSet) {
|
|
2445
|
+
this.fontSet = defaults.fontSet;
|
|
2446
|
+
}
|
|
2447
|
+
}
|
|
2448
|
+
if (!ariaHidden) {
|
|
2449
|
+
this._elementRef.nativeElement.setAttribute("aria-hidden", "true");
|
|
2450
|
+
}
|
|
2451
|
+
}
|
|
2452
|
+
/**
|
|
2453
|
+
* Splits an svgIcon binding value into its icon set and icon name components.
|
|
2454
|
+
* Returns a 2-element array of [(icon set), (icon name)].
|
|
2455
|
+
* The separator for the two fields is ':'. If there is no separator, an empty
|
|
2456
|
+
* string is returned for the icon set and the entire value is returned for
|
|
2457
|
+
* the icon name. If the argument is falsy, returns an array of two empty strings.
|
|
2458
|
+
* Throws an error if the name contains two or more ':' separators.
|
|
2459
|
+
* Examples:
|
|
2460
|
+
* `'social:cake' -> ['social', 'cake']
|
|
2461
|
+
* 'penguin' -> ['', 'penguin']
|
|
2462
|
+
* null -> ['', '']
|
|
2463
|
+
* 'a:b:c' -> (throws Error)`
|
|
2464
|
+
*/
|
|
2465
|
+
_splitIconName(iconName) {
|
|
2466
|
+
if (!iconName) {
|
|
2467
|
+
return ["", ""];
|
|
2468
|
+
}
|
|
2469
|
+
const parts = iconName.split(":");
|
|
2470
|
+
switch (parts.length) {
|
|
2471
|
+
case 1:
|
|
2472
|
+
return ["", parts[0]];
|
|
2473
|
+
// Use default namespace.
|
|
2474
|
+
case 2:
|
|
2475
|
+
return parts;
|
|
2476
|
+
default:
|
|
2477
|
+
throw Error(`Invalid icon name: "${iconName}"`);
|
|
2478
|
+
}
|
|
2479
|
+
}
|
|
2480
|
+
ngOnInit() {
|
|
2481
|
+
this._updateFontIconClasses();
|
|
2482
|
+
}
|
|
2483
|
+
ngAfterViewChecked() {
|
|
2484
|
+
const cachedElements = this._elementsWithExternalReferences;
|
|
2485
|
+
if (cachedElements && cachedElements.size) {
|
|
2486
|
+
const newPath = this._location.getPathname();
|
|
2487
|
+
if (newPath !== this._previousPath) {
|
|
2488
|
+
this._previousPath = newPath;
|
|
2489
|
+
this._prependPathToReferences(newPath);
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2492
|
+
}
|
|
2493
|
+
ngOnDestroy() {
|
|
2494
|
+
this._currentIconFetch.unsubscribe();
|
|
2495
|
+
if (this._elementsWithExternalReferences) {
|
|
2496
|
+
this._elementsWithExternalReferences.clear();
|
|
2497
|
+
}
|
|
2498
|
+
}
|
|
2499
|
+
_usingFontIcon() {
|
|
2500
|
+
return !this.svgIcon;
|
|
2501
|
+
}
|
|
2502
|
+
_setSvgElement(svg) {
|
|
2503
|
+
this._clearSvgElement();
|
|
2504
|
+
const path = this._location.getPathname();
|
|
2505
|
+
this._previousPath = path;
|
|
2506
|
+
this._cacheChildrenWithExternalReferences(svg);
|
|
2507
|
+
this._prependPathToReferences(path);
|
|
2508
|
+
this._elementRef.nativeElement.appendChild(svg);
|
|
2509
|
+
}
|
|
2510
|
+
_clearSvgElement() {
|
|
2511
|
+
const layoutElement = this._elementRef.nativeElement;
|
|
2512
|
+
let childCount = layoutElement.childNodes.length;
|
|
2513
|
+
if (this._elementsWithExternalReferences) {
|
|
2514
|
+
this._elementsWithExternalReferences.clear();
|
|
2515
|
+
}
|
|
2516
|
+
while (childCount--) {
|
|
2517
|
+
const child = layoutElement.childNodes[childCount];
|
|
2518
|
+
if (child.nodeType !== 1 || child.nodeName.toLowerCase() === "svg") {
|
|
2519
|
+
child.remove();
|
|
2520
|
+
}
|
|
2521
|
+
}
|
|
2522
|
+
}
|
|
2523
|
+
_updateFontIconClasses() {
|
|
2524
|
+
if (!this._usingFontIcon()) {
|
|
2525
|
+
return;
|
|
2526
|
+
}
|
|
2527
|
+
const elem = this._elementRef.nativeElement;
|
|
2528
|
+
const fontSetClasses = (this.fontSet ? this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/) : this._iconRegistry.getDefaultFontSetClass()).filter((className) => className.length > 0);
|
|
2529
|
+
this._previousFontSetClass.forEach((className) => elem.classList.remove(className));
|
|
2530
|
+
fontSetClasses.forEach((className) => elem.classList.add(className));
|
|
2531
|
+
this._previousFontSetClass = fontSetClasses;
|
|
2532
|
+
if (this.fontIcon !== this._previousFontIconClass && !fontSetClasses.includes("mat-ligature-font")) {
|
|
2533
|
+
if (this._previousFontIconClass) {
|
|
2534
|
+
elem.classList.remove(this._previousFontIconClass);
|
|
2535
|
+
}
|
|
2536
|
+
if (this.fontIcon) {
|
|
2537
|
+
elem.classList.add(this.fontIcon);
|
|
2538
|
+
}
|
|
2539
|
+
this._previousFontIconClass = this.fontIcon;
|
|
2540
|
+
}
|
|
2541
|
+
}
|
|
2542
|
+
/**
|
|
2543
|
+
* Cleans up a value to be used as a fontIcon or fontSet.
|
|
2544
|
+
* Since the value ends up being assigned as a CSS class, we
|
|
2545
|
+
* have to trim the value and omit space-separated values.
|
|
2546
|
+
*/
|
|
2547
|
+
_cleanupFontValue(value) {
|
|
2548
|
+
return typeof value === "string" ? value.trim().split(" ")[0] : value;
|
|
2549
|
+
}
|
|
2550
|
+
/**
|
|
2551
|
+
* Prepends the current path to all elements that have an attribute pointing to a `FuncIRI`
|
|
2552
|
+
* reference. This is required because WebKit browsers require references to be prefixed with
|
|
2553
|
+
* the current path, if the page has a `base` tag.
|
|
2554
|
+
*/
|
|
2555
|
+
_prependPathToReferences(path) {
|
|
2556
|
+
const elements = this._elementsWithExternalReferences;
|
|
2557
|
+
if (elements) {
|
|
2558
|
+
elements.forEach((attrs, element) => {
|
|
2559
|
+
attrs.forEach((attr) => {
|
|
2560
|
+
element.setAttribute(attr.name, `url('${path}#${attr.value}')`);
|
|
2561
|
+
});
|
|
2562
|
+
});
|
|
2563
|
+
}
|
|
2564
|
+
}
|
|
2565
|
+
/**
|
|
2566
|
+
* Caches the children of an SVG element that have `url()`
|
|
2567
|
+
* references that we need to prefix with the current path.
|
|
2568
|
+
*/
|
|
2569
|
+
_cacheChildrenWithExternalReferences(element) {
|
|
2570
|
+
const elementsWithFuncIri = element.querySelectorAll(funcIriAttributeSelector);
|
|
2571
|
+
const elements = this._elementsWithExternalReferences = this._elementsWithExternalReferences || /* @__PURE__ */ new Map();
|
|
2572
|
+
for (let i = 0; i < elementsWithFuncIri.length; i++) {
|
|
2573
|
+
funcIriAttributes.forEach((attr) => {
|
|
2574
|
+
const elementWithReference = elementsWithFuncIri[i];
|
|
2575
|
+
const value = elementWithReference.getAttribute(attr);
|
|
2576
|
+
const match = value ? value.match(funcIriPattern) : null;
|
|
2577
|
+
if (match) {
|
|
2578
|
+
let attributes = elements.get(elementWithReference);
|
|
2579
|
+
if (!attributes) {
|
|
2580
|
+
attributes = [];
|
|
2581
|
+
elements.set(elementWithReference, attributes);
|
|
2582
|
+
}
|
|
2583
|
+
attributes.push({
|
|
2584
|
+
name: attr,
|
|
2585
|
+
value: match[1]
|
|
2586
|
+
});
|
|
2587
|
+
}
|
|
2588
|
+
});
|
|
2589
|
+
}
|
|
2590
|
+
}
|
|
2591
|
+
/** Sets a new SVG icon with a particular name. */
|
|
2592
|
+
_updateSvgIcon(rawName) {
|
|
2593
|
+
this._svgNamespace = null;
|
|
2594
|
+
this._svgName = null;
|
|
2595
|
+
this._currentIconFetch.unsubscribe();
|
|
2596
|
+
if (rawName) {
|
|
2597
|
+
const [namespace, iconName] = this._splitIconName(rawName);
|
|
2598
|
+
if (namespace) {
|
|
2599
|
+
this._svgNamespace = namespace;
|
|
2600
|
+
}
|
|
2601
|
+
if (iconName) {
|
|
2602
|
+
this._svgName = iconName;
|
|
2603
|
+
}
|
|
2604
|
+
this._currentIconFetch = this._iconRegistry.getNamedSvgIcon(iconName, namespace).pipe(take(1)).subscribe((svg) => this._setSvgElement(svg), (err) => {
|
|
2605
|
+
const errorMessage = `Error retrieving icon ${namespace}:${iconName}! ${err.message}`;
|
|
2606
|
+
this._errorHandler.handleError(new Error(errorMessage));
|
|
2607
|
+
});
|
|
2608
|
+
}
|
|
2609
|
+
}
|
|
2610
|
+
static \u0275fac = function MatIcon_Factory(__ngFactoryType__) {
|
|
2611
|
+
return new (__ngFactoryType__ || _MatIcon)();
|
|
2612
|
+
};
|
|
2613
|
+
static \u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({
|
|
2614
|
+
type: _MatIcon,
|
|
2615
|
+
selectors: [["mat-icon"]],
|
|
2616
|
+
hostAttrs: ["role", "img", 1, "mat-icon", "notranslate"],
|
|
2617
|
+
hostVars: 10,
|
|
2618
|
+
hostBindings: function MatIcon_HostBindings(rf, ctx) {
|
|
2619
|
+
if (rf & 2) {
|
|
2620
|
+
\u0275\u0275attribute("data-mat-icon-type", ctx._usingFontIcon() ? "font" : "svg")("data-mat-icon-name", ctx._svgName || ctx.fontIcon)("data-mat-icon-namespace", ctx._svgNamespace || ctx.fontSet)("fontIcon", ctx._usingFontIcon() ? ctx.fontIcon : null);
|
|
2621
|
+
\u0275\u0275classMap(ctx.color ? "mat-" + ctx.color : "");
|
|
2622
|
+
\u0275\u0275classProp("mat-icon-inline", ctx.inline)("mat-icon-no-color", ctx.color !== "primary" && ctx.color !== "accent" && ctx.color !== "warn");
|
|
2623
|
+
}
|
|
2624
|
+
},
|
|
2625
|
+
inputs: {
|
|
2626
|
+
color: "color",
|
|
2627
|
+
inline: [2, "inline", "inline", booleanAttribute],
|
|
2628
|
+
svgIcon: "svgIcon",
|
|
2629
|
+
fontSet: "fontSet",
|
|
2630
|
+
fontIcon: "fontIcon"
|
|
2631
|
+
},
|
|
2632
|
+
exportAs: ["matIcon"],
|
|
2633
|
+
ngContentSelectors: _c0,
|
|
2634
|
+
decls: 1,
|
|
2635
|
+
vars: 0,
|
|
2636
|
+
template: function MatIcon_Template(rf, ctx) {
|
|
2637
|
+
if (rf & 1) {
|
|
2638
|
+
\u0275\u0275projectionDef();
|
|
2639
|
+
\u0275\u0275projection(0);
|
|
2640
|
+
}
|
|
2641
|
+
},
|
|
2642
|
+
styles: ["mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color, inherit)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\n"],
|
|
2643
|
+
encapsulation: 2,
|
|
2644
|
+
changeDetection: 0
|
|
2645
|
+
});
|
|
2646
|
+
};
|
|
2647
|
+
(() => {
|
|
2648
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatIcon, [{
|
|
2649
|
+
type: Component,
|
|
2650
|
+
args: [{
|
|
2651
|
+
template: "<ng-content></ng-content>",
|
|
2652
|
+
selector: "mat-icon",
|
|
2653
|
+
exportAs: "matIcon",
|
|
2654
|
+
host: {
|
|
2655
|
+
"role": "img",
|
|
2656
|
+
"class": "mat-icon notranslate",
|
|
2657
|
+
"[class]": 'color ? "mat-" + color : ""',
|
|
2658
|
+
"[attr.data-mat-icon-type]": '_usingFontIcon() ? "font" : "svg"',
|
|
2659
|
+
"[attr.data-mat-icon-name]": "_svgName || fontIcon",
|
|
2660
|
+
"[attr.data-mat-icon-namespace]": "_svgNamespace || fontSet",
|
|
2661
|
+
"[attr.fontIcon]": "_usingFontIcon() ? fontIcon : null",
|
|
2662
|
+
"[class.mat-icon-inline]": "inline",
|
|
2663
|
+
"[class.mat-icon-no-color]": 'color !== "primary" && color !== "accent" && color !== "warn"'
|
|
2664
|
+
},
|
|
2665
|
+
encapsulation: ViewEncapsulation.None,
|
|
2666
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2667
|
+
styles: ["mat-icon,mat-icon.mat-primary,mat-icon.mat-accent,mat-icon.mat-warn{color:var(--mat-icon-color, inherit)}.mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}\n"]
|
|
2668
|
+
}]
|
|
2669
|
+
}], () => [], {
|
|
2670
|
+
color: [{
|
|
2671
|
+
type: Input
|
|
2672
|
+
}],
|
|
2673
|
+
inline: [{
|
|
2674
|
+
type: Input,
|
|
2675
|
+
args: [{
|
|
2676
|
+
transform: booleanAttribute
|
|
2677
|
+
}]
|
|
2678
|
+
}],
|
|
2679
|
+
svgIcon: [{
|
|
2680
|
+
type: Input
|
|
2681
|
+
}],
|
|
2682
|
+
fontSet: [{
|
|
2683
|
+
type: Input
|
|
2684
|
+
}],
|
|
2685
|
+
fontIcon: [{
|
|
2686
|
+
type: Input
|
|
2687
|
+
}]
|
|
2688
|
+
});
|
|
2689
|
+
})();
|
|
2690
|
+
var MatIconModule = class _MatIconModule {
|
|
2691
|
+
static \u0275fac = function MatIconModule_Factory(__ngFactoryType__) {
|
|
2692
|
+
return new (__ngFactoryType__ || _MatIconModule)();
|
|
2693
|
+
};
|
|
2694
|
+
static \u0275mod = /* @__PURE__ */ \u0275\u0275defineNgModule({
|
|
2695
|
+
type: _MatIconModule,
|
|
2696
|
+
imports: [MatCommonModule, MatIcon],
|
|
2697
|
+
exports: [MatIcon, MatCommonModule]
|
|
2698
|
+
});
|
|
2699
|
+
static \u0275inj = /* @__PURE__ */ \u0275\u0275defineInjector({
|
|
2700
|
+
imports: [MatCommonModule, MatCommonModule]
|
|
2701
|
+
});
|
|
2702
|
+
};
|
|
2703
|
+
(() => {
|
|
2704
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MatIconModule, [{
|
|
2705
|
+
type: NgModule,
|
|
2706
|
+
args: [{
|
|
2707
|
+
imports: [MatCommonModule, MatIcon],
|
|
2708
|
+
exports: [MatIcon, MatCommonModule]
|
|
2709
|
+
}]
|
|
2710
|
+
}], null, null);
|
|
2711
|
+
})();
|
|
2712
|
+
|
|
2713
|
+
export {
|
|
2714
|
+
DomRendererFactory2,
|
|
2715
|
+
bootstrapApplication,
|
|
2716
|
+
BrowserModule,
|
|
2717
|
+
Title,
|
|
2718
|
+
DomSanitizer,
|
|
2719
|
+
MatIconRegistry,
|
|
2720
|
+
MatIcon,
|
|
2721
|
+
MatIconModule
|
|
2722
|
+
};
|
|
2723
|
+
//# sourceMappingURL=chunk-UQYTD5AC.js.map
|