@sumaris-net/ngx-components 1.18.0-rc1 → 1.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sumaris-net.ngx-components.umd.js +85 -80
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +4 -0
- package/esm2015/src/app/core/graphql/graphql.service.js +3 -2
- package/esm2015/src/app/core/services/config.service.js +3 -2
- package/esm2015/src/app/core/services/local-settings.service.js +2 -2
- package/esm2015/src/app/core/services/platform.service.js +12 -11
- package/esm2015/src/app/shared/directives/autofocus.directive.js +4 -2
- package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +11 -7
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +5 -4
- package/esm2015/src/app/shared/material/datetime/material.date.js +8 -9
- package/esm2015/src/app/shared/material/datetime/material.dateshort.js +8 -8
- package/esm2015/src/app/shared/material/datetime/material.datetime.js +7 -8
- package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +3 -3
- package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +4 -7
- package/esm2015/src/app/shared/material/latlong/material.latlong.js +4 -6
- package/esm2015/src/app/shared/platforms.js +2 -2
- package/esm2015/src/app/shared/services/entity-service.class.js +1 -1
- package/fesm2015/sumaris-net.ngx-components.js +76 -78
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/core/services/platform.service.d.ts +1 -1
- package/src/app/shared/directives/autofocus.directive.d.ts +2 -1
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +3 -2
- package/src/app/shared/material/datetime/material.date.d.ts +2 -4
- package/src/app/shared/material/datetime/material.dateshort.d.ts +2 -3
- package/src/app/shared/material/datetime/material.datetime.d.ts +1 -3
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +1 -3
- package/src/app/shared/material/latlong/material.latlong.d.ts +1 -3
- package/src/app/shared/services/entity-service.class.d.ts +4 -1
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -8,7 +8,7 @@ export const testUserAgent = (win, expr) => {
|
|
|
8
8
|
};
|
|
9
9
|
export const isWindows = (win) => testUserAgent(win, /windows/i);
|
|
10
10
|
export const isTouchUi = (win) => matchMedia(win, '(any-pointer:coarse)');
|
|
11
|
-
export const isMobile = (win) => isTouchUi(win) && !isWindows(win);
|
|
11
|
+
export const isMobile = (win) => isCordova(window) || isAndroid(win) || isIOS(window) || (isTouchUi(win) && !isWindows(win));
|
|
12
12
|
const isIpad = (win) => {
|
|
13
13
|
// iOS 12 and below
|
|
14
14
|
if (testUserAgent(win, /iPad/i)) {
|
|
@@ -25,4 +25,4 @@ export const isIOS = (win) => testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
|
|
|
25
25
|
export const isAndroid = (win) => testUserAgent(win, /android|sink/i);
|
|
26
26
|
export const isCordova = (win) => !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
|
|
27
27
|
export { ɵ0 };
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGxhdGZvcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztTQUVTO0FBRVQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBVyxFQUFFLENBQ2hFLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBRWhDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVcsRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUN6RCxNQUFNLFNBQVMsR0FBVyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSyxNQUFjLENBQUMsS0FBSyxDQUFDO0lBQ25HLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUN4QyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVksRUFBRSxFQUFFLENBQ3hDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUN0QyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTlGLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDN0IsbUJBQW1CO0lBQ25CLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsVUFBVTtJQUNWLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDckQsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDOztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQ25DLGFBQWEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXBELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQ3ZDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBUSxFQUFXLEVBQUUsQ0FDN0MsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIC0tLVxuICogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaW9uaWMtdGVhbS9pb25pYy1mcmFtZXdvcmsvYmxvYi9iMGQ1M2NhNzM2MTk1ODU2NzFkOGNmNGRjMjRlNDdmODI2NDk1YTBhL2NvcmUvc3JjL3V0aWxzL3BsYXRmb3JtLnRzXG4gKiAtLS0gKi9cblxuZXhwb3J0IGNvbnN0IG1hdGNoTWVkaWEgPSAod2luOiBXaW5kb3csIHF1ZXJ5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHdpbi5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xuXG5leHBvcnQgY29uc3QgdGVzdFVzZXJBZ2VudCA9ICh3aW46IFdpbmRvdywgZXhwcjogUmVnRXhwKSA9PiB7XG4gIGNvbnN0IHVzZXJBZ2VudDogc3RyaW5nID0gd2luLm5hdmlnYXRvci51c2VyQWdlbnQgfHwgd2luLm5hdmlnYXRvci52ZW5kb3IgfHwgKHdpbmRvdyBhcyBhbnkpLm9wZXJhO1xuICByZXR1cm4gZXhwci50ZXN0KHVzZXJBZ2VudCk7XG59XG5cbmV4cG9ydCBjb25zdCBpc1dpbmRvd3MgPSAod2luPzogV2luZG93KSA9PlxuICB0ZXN0VXNlckFnZW50KHdpbiwgL3dpbmRvd3MvaSk7XG5cbmV4cG9ydCBjb25zdCBpc1RvdWNoVWkgPSAod2luPzogV2luZG93KSA9PlxuICBtYXRjaE1lZGlhKHdpbiwgJyhhbnktcG9pbnRlcjpjb2Fyc2UpJyk7XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZSA9ICh3aW46IFdpbmRvdykgPT5cbiAgaXNDb3Jkb3ZhKHdpbmRvdykgfHwgaXNBbmRyb2lkKHdpbikgfHwgaXNJT1Mod2luZG93KSB8fCAoaXNUb3VjaFVpKHdpbikgJiYgIWlzV2luZG93cyh3aW4pKTtcblxuY29uc3QgaXNJcGFkID0gKHdpbjogV2luZG93KSA9PiB7XG4gIC8vIGlPUyAxMiBhbmQgYmVsb3dcbiAgaWYgKHRlc3RVc2VyQWdlbnQod2luLCAvaVBhZC9pKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gaU9TIDEzK1xuICBpZiAodGVzdFVzZXJBZ2VudCh3aW4sIC9NYWNpbnRvc2gvaSkgJiYgaXNNb2JpbGUod2luKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSU9TID0gKHdpbjogV2luZG93KSA9PlxuICB0ZXN0VXNlckFnZW50KHdpbiwgL2lQaG9uZXxpUG9kL2kpIHx8IGlzSXBhZCh3aW4pO1xuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gKHdpbjogV2luZG93KSA9PlxuICB0ZXN0VXNlckFnZW50KHdpbiwgL2FuZHJvaWR8c2luay9pKTtcblxuZXhwb3J0IGNvbnN0IGlzQ29yZG92YSA9ICh3aW46IGFueSk6IGJvb2xlYW4gPT5cbiAgISEod2luWydjb3Jkb3ZhJ10gfHwgd2luWydwaG9uZWdhcCddIHx8IHdpblsnUGhvbmVHYXAnXSk7XG4iXX0=
|
|
@@ -14,4 +14,4 @@ export class EntitiesService {
|
|
|
14
14
|
EntitiesService.decorators = [
|
|
15
15
|
{ type: Directive }
|
|
16
16
|
];
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXNlcnZpY2UuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsU0FBUyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBbUduRCxNQUFNLFVBQVUsZUFBZSxDQUFJLElBQW1CLEVBQUUsSUFBbUI7O0lBQ3pFLE9BQU87UUFDTCxJQUFJLEVBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFJLElBQUksQ0FBQyxJQUFJLDBDQUFFLE1BQU0sQ0FBQSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssV0FBSSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxNQUFNLENBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUN6RixDQUFDO0FBQ0osQ0FBQztBQUdELE1BQU0sT0FBZ0IsZUFBZTtJQUduQyxXQUFXO1FBQ1QsZ0NBQWdDO0lBQ2xDLENBQUM7OztZQU5GLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGZXRjaFBvbGljeSwgV2F0Y2hRdWVyeUZldGNoUG9saWN5fSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7U29ydERpcmVjdGlvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RW1wdHlPYmplY3R9IGZyb20gJ2Fwb2xsby1hbmd1bGFyL3R5cGVzJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFBhZ2Uge1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgc2l6ZTogbnVtYmVyO1xuICBzb3J0Qnk/OiBzdHJpbmc7XG4gIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uO1xufVxuXG5leHBvcnQgZGVjbGFyZSB0eXBlIEZldGNoTW9yZUZuPFIsIFYgPSBFbXB0eU9iamVjdD4gPSAodmFyaWFibGVzPzogVikgPT4gUHJvbWlzZTxSPjtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIExvYWRSZXN1bHQ8VD4ge1xuICBkYXRhOiBUW107XG4gIHRvdGFsPzogbnVtYmVyO1xuICBlcnJvcnM/OiBhbnlbXTtcbiAgZmV0Y2hNb3JlPzogRmV0Y2hNb3JlRm48TG9hZFJlc3VsdDxUPj47XG59XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgU3VnZ2VzdEZuPFQsIEY+ID0gKHZhbHVlOiBhbnksIGZpbHRlcj86IEYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmd8a2V5b2YgVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6IEZldGNoUG9saWN5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA9PiBQcm9taXNlPFRbXSB8IExvYWRSZXN1bHQ8VD4+O1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgU3VnZ2VzdFNlcnZpY2U8VCwgRj4ge1xuICBzdWdnZXN0OiBTdWdnZXN0Rm48VCwgRj47XG59XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRmlsdGVyRm48VD4gPSAoZGF0YTogVCkgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIHR5cGUgRmlsdGVyRm5GYWN0b3J5PFQsIEY+ID0gKGZpbHRlcjogRikgPT4gRmlsdGVyRm48VD47XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMge1xuICBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5O1xuICB0cmFzaD86IGJvb2xlYW47XG4gIHRvRW50aXR5PzogYm9vbGVhbjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUVudGl0eVNlcnZpY2U8XG4gIFQsXG4gIElEID0gYW55LFxuICBMTyA9IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucz4ge1xuXG4gIGxvYWQoXG4gICAgaWQ6IElELFxuICAgIG9wdHM/OiBMT1xuICApOiBQcm9taXNlPFQ+O1xuXG4gIGNhblVzZXJXcml0ZShkYXRhOiBULCBvcHRzPzogYW55KTogYm9vbGVhbjtcblxuICBzYXZlKGRhdGE6IFQsIG9wdHM/OiBhbnkpOiBQcm9taXNlPFQ+O1xuXG4gIGRlbGV0ZShkYXRhOiBULCBvcHRzPzogYW55KTogUHJvbWlzZTxhbnk+O1xuXG4gIGxpc3RlbkNoYW5nZXMoaWQ6IElELCBvcHRzPzogYW55KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyB7XG4gIGZldGNoUG9saWN5PzogV2F0Y2hRdWVyeUZldGNoUG9saWN5O1xuICB0cmFzaD86IGJvb2xlYW47XG4gIHdpdGhUb3RhbD86IGJvb2xlYW47XG4gIHRvRW50aXR5PzogYm9vbGVhbjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUVudGl0aWVzU2VydmljZTxULCBGLCBPIGV4dGVuZHMgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zID0gRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zPiB7XG5cbiAgd2F0Y2hBbGwoXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHNvcnRCeT86IHN0cmluZyxcbiAgICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbixcbiAgICBmaWx0ZXI/OiBQYXJ0aWFsPEY+LFxuICAgIG9wdGlvbnM/OiBPXG4gICk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj47XG5cbiAgLy8gVE9ET1xuICAvKndhdGNoUGFnZShcbiAgICBwYWdlOiBQYWdlPFQ+LFxuICAgIGZpbHRlcj86IEYsXG4gICAgb3B0aW9ucz86IE9cbiAgKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PFQ+PjsqL1xuXG4gIHNhdmVBbGwoZGF0YTogVFtdLCBvcHRzPzogYW55KTogUHJvbWlzZTxUW10+O1xuXG4gIGRlbGV0ZUFsbChkYXRhOiBUW10sIG9wdHM/OiBhbnkpOiBQcm9taXNlPGFueT47XG5cbiAgYXNGaWx0ZXIoZmlsdGVyOiBQYXJ0aWFsPEY+KTogRjtcbn1cblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBMb2FkUmVzdWx0QnlQYWdlRm48VD4gPSAob2Zmc2V0OiBudW1iZXIsIHNpemU6IG51bWJlcikgPT4gUHJvbWlzZTxMb2FkUmVzdWx0PFQ+PjtcblxuZXhwb3J0IGludGVyZmFjZSBJRW50aXR5RnVsbFNlcnZpY2U8VCwgSUQsIEYsIE8gZXh0ZW5kcyBFbnRpdGllc1NlcnZpY2VXYXRjaE9wdGlvbnMgJiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnM+XG4gIGV4dGVuZHMgSUVudGl0eVNlcnZpY2U8VCwgSUQsIE8+LCBJRW50aXRpZXNTZXJ2aWNlPFQsIEYsIE8+ICB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxvYWRSZXN1bHQ8VD4ocmVzMTogTG9hZFJlc3VsdDxUPiwgcmVzMjogTG9hZFJlc3VsdDxUPik6IExvYWRSZXN1bHQ8VD4ge1xuICByZXR1cm4ge1xuICAgIGRhdGEgOiAocmVzMS5kYXRhIHx8IFtdKS5jb25jYXQoLi4ucmVzMi5kYXRhKSxcbiAgICB0b3RhbDogKChyZXMxLnRvdGFsIHx8IHJlczEuZGF0YT8ubGVuZ3RoIHx8IDApICsgKHJlczIudG90YWwgfHwgcmVzMi5kYXRhPy5sZW5ndGggfHwgMCkpXG4gIH07XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0aWVzU2VydmljZTxULCBGLCBPIGV4dGVuZHMgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zID0gRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zPlxuICBpbXBsZW1lbnRzIElFbnRpdGllc1NlcnZpY2U8VCwgRiwgTz4sIE9uRGVzdHJveSB7XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIGFic3RyYWN0IHdhdGNoQWxsKFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlcixcbiAgICBzb3J0Qnk/OiBzdHJpbmcsXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgZmlsdGVyPzogUGFydGlhbDxGPixcbiAgICBvcHRpb25zPzogT1xuICApOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+O1xuXG4gIC8vIFRPRE9cbiAgLyp3YXRjaFBhZ2UoXG4gICAgcGFnZTogUGFnZTxUPixcbiAgICBmaWx0ZXI/OiBGLFxuICAgIG9wdGlvbnM/OiBPXG4gICk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj47Ki9cblxuICBhYnN0cmFjdCBzYXZlQWxsKGRhdGE6IFRbXSwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8VFtdPjtcblxuICBhYnN0cmFjdCBkZWxldGVBbGwoZGF0YTogVFtdLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxhbnk+O1xuXG4gIGFic3RyYWN0IGFzRmlsdGVyKGZpbHRlcjogUGFydGlhbDxGPik6IEY7XG59XG4iXX0=
|
|
@@ -42,7 +42,7 @@ import { trigger, transition, style, animate, state } from '@angular/animations'
|
|
|
42
42
|
import * as i1$1 from '@ngx-translate/core';
|
|
43
43
|
import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
|
44
44
|
import * as i1$4 from '@ionic/angular';
|
|
45
|
-
import { IonicModule, Platform, IonRouterOutlet, ModalController, IonicSafeString, createAnimation, ToastController,
|
|
45
|
+
import { IonicModule, Platform, IonRouterOutlet, ModalController, PopoverController, IonicSafeString, createAnimation, ToastController, AlertController, IonicRouteStrategy, NavParams, MenuController, IonContent, IonInfiniteScroll } from '@ionic/angular';
|
|
46
46
|
import * as momentImported from 'moment';
|
|
47
47
|
import { isMoment } from 'moment';
|
|
48
48
|
import * as i1 from '@angular/material-moment-adapter';
|
|
@@ -1060,6 +1060,33 @@ trigger('slideUpDownAnimation', [
|
|
|
1060
1060
|
])
|
|
1061
1061
|
]);
|
|
1062
1062
|
|
|
1063
|
+
/* ---
|
|
1064
|
+
* Source: https://github.com/ionic-team/ionic-framework/blob/b0d53ca73619585671d8cf4dc24e47f826495a0a/core/src/utils/platform.ts
|
|
1065
|
+
* --- */
|
|
1066
|
+
const matchMedia = (win, query) => win.matchMedia(query).matches;
|
|
1067
|
+
const testUserAgent = (win, expr) => {
|
|
1068
|
+
const userAgent = win.navigator.userAgent || win.navigator.vendor || window.opera;
|
|
1069
|
+
return expr.test(userAgent);
|
|
1070
|
+
};
|
|
1071
|
+
const isWindows = (win) => testUserAgent(win, /windows/i);
|
|
1072
|
+
const isTouchUi = (win) => matchMedia(win, '(any-pointer:coarse)');
|
|
1073
|
+
const isMobile = (win) => isCordova(window) || isAndroid(win) || isIOS(window) || (isTouchUi(win) && !isWindows(win));
|
|
1074
|
+
const isIpad = (win) => {
|
|
1075
|
+
// iOS 12 and below
|
|
1076
|
+
if (testUserAgent(win, /iPad/i)) {
|
|
1077
|
+
return true;
|
|
1078
|
+
}
|
|
1079
|
+
// iOS 13+
|
|
1080
|
+
if (testUserAgent(win, /Macintosh/i) && isMobile(win)) {
|
|
1081
|
+
return true;
|
|
1082
|
+
}
|
|
1083
|
+
return false;
|
|
1084
|
+
};
|
|
1085
|
+
const ɵ0$c = isIpad;
|
|
1086
|
+
const isIOS = (win) => testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
|
|
1087
|
+
const isAndroid = (win) => testUserAgent(win, /android|sink/i);
|
|
1088
|
+
const isCordova = (win) => !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
|
|
1089
|
+
|
|
1063
1090
|
class MatAutocompleteConfigHolder {
|
|
1064
1091
|
constructor(options) {
|
|
1065
1092
|
this.options = options;
|
|
@@ -1115,7 +1142,7 @@ class MatAutocompleteFieldUtils {
|
|
|
1115
1142
|
}
|
|
1116
1143
|
}
|
|
1117
1144
|
const noop$8 = (_) => { };
|
|
1118
|
-
const ɵ0$
|
|
1145
|
+
const ɵ0$b = noop$8;
|
|
1119
1146
|
class MatAutocompleteField {
|
|
1120
1147
|
constructor(cd, formGroupDir) {
|
|
1121
1148
|
this.cd = cd;
|
|
@@ -1135,7 +1162,7 @@ class MatAutocompleteField {
|
|
|
1135
1162
|
this.showLoadingSpinner = true;
|
|
1136
1163
|
this.debug = false;
|
|
1137
1164
|
this.showSearchBar = true;
|
|
1138
|
-
this.stickySearchBar =
|
|
1165
|
+
this.stickySearchBar = false;
|
|
1139
1166
|
this.clicked = new EventEmitter();
|
|
1140
1167
|
this.blurred = new EventEmitter();
|
|
1141
1168
|
this.focused = new EventEmitter();
|
|
@@ -1246,7 +1273,7 @@ class MatAutocompleteField {
|
|
|
1246
1273
|
}
|
|
1247
1274
|
// Default values
|
|
1248
1275
|
this.multiple = toBoolean(this.multiple, false);
|
|
1249
|
-
this.mobile = toBoolean(this.mobile, this.multiple);
|
|
1276
|
+
this.mobile = toBoolean(this.mobile, this.multiple || isMobile(window));
|
|
1250
1277
|
this.displayAttributes = this.displayAttributes || ((_a = this.filter) === null || _a === void 0 ? void 0 : _a.attributes) || ['label', 'name'];
|
|
1251
1278
|
this.displayWith = this.displayWith || MatAutocompleteFieldUtils.createDisplayFn(this.displayAttributes, this.multiple);
|
|
1252
1279
|
this.equals = this.equals || MatAutocompleteFieldUtils.defaultEquals;
|
|
@@ -1778,7 +1805,7 @@ MatAutocompleteField.decorators = [
|
|
|
1778
1805
|
{ type: Component, args: [{
|
|
1779
1806
|
// eslint-disable-next-line @angular-eslint/component-selector
|
|
1780
1807
|
selector: 'mat-autocomplete-field',
|
|
1781
|
-
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <!-- readonly -->\n <mat-form-field *ngIf=\"_readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [title]=\"displayValue\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\" readonly>\n <ion-text>{{displayWith(value)}}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n\n <ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Mobile or Mutliple (use <mat-select>) -->\n <mat-select #matSelect\n *ngIf=\"mobile || multiple; else desktopTemplate\"\n [disableRipple]=\"true\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n [compareWith]=\"equals\"\n [multiple]=\"multiple\"\n [typeaheadDebounceInterval]=\"debounceTime * 10\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- Search bar -->\n <ion-searchbar *ngIf=\"showSearchBar\" #ionSearchbar\n class=\"mat-select-header\"\n [class.ion-searchbar-sticky]=\"stickySearchBar\"\n inputmode=\"search\"\n autocomplete=\"off\"\n animated=\"true\"\n showClearButton\n [debounce]=\"debounceTime\"\n (ionClear)=\"ionSearchBarClear($event)\"\n (ionInput)=\"ionSearchBarChanged($event)\"\n [placeholder]=\"'COMMON.BTN_SEARCH'|translate\"\n ></ion-searchbar>\n\n <!-- Headers -->\n <ion-row class=\"mat-select-header column ion-no-padding\"\n [class.multiple]=\"multiple\"\n [class.ion-searchbar-sticky]=\"showSearchBar && stickySearchBar\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required && !multiple\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- Options -->\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initMatSelectInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- footer -->\n <ion-row *ngIf=\"itemCount as count\"\n class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-select>\n\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #desktopTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [required]=\"required\"\n (click)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- Options -->\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initAutocompleteInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n\n <!-- footer -->\n <ion-row *ngIf=\"itemCount; let count\" class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n </mat-autocomplete>\n\n </ng-template>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-grid>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n\n<ng-template #matSuffixTemplate>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"desktop\"\n (click)=\"dropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #headers>\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n</ng-template>\n\n<ng-template #options>\n\n\n</ng-template>\n\n",
|
|
1808
|
+
template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <!-- readonly -->\n <mat-form-field *ngIf=\"_readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [title]=\"displayValue\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\" readonly>\n <ion-text>{{displayWith(value)}}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n\n <ng-template #writable>\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Mobile or Mutliple (use <mat-select>) -->\n <mat-select #matSelect\n *ngIf=\"mobile || multiple; else desktopTemplate\"\n [disableRipple]=\"true\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n [compareWith]=\"equals\"\n [multiple]=\"multiple\"\n [typeaheadDebounceInterval]=\"debounceTime * 10\"\n [required]=\"required\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- Search bar -->\n <ion-searchbar *ngIf=\"showSearchBar\" #ionSearchbar\n class=\"mat-select-header\"\n [class.ion-searchbar-sticky]=\"stickySearchBar\"\n inputmode=\"search\"\n autocomplete=\"off\"\n animated=\"true\"\n showClearButton\n [debounce]=\"debounceTime\"\n (ionClear)=\"ionSearchBarClear($event)\"\n (ionInput)=\"ionSearchBarChanged($event)\"\n [placeholder]=\"'COMMON.BTN_SEARCH'|translate\"\n ></ion-searchbar>\n\n <!-- Headers -->\n <ion-row class=\"mat-select-header column ion-no-padding\"\n [class.multiple]=\"multiple\"\n [class.ion-searchbar-sticky]=\"showSearchBar && stickySearchBar\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required && !multiple && !clearable\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></ion-label>\n </mat-option>\n\n <!-- Options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initMatSelectInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- footer -->\n <ion-row *ngIf=\"itemCount as count\"\n class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-select>\n\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #desktopTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autocomplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"autofocus\"\n [tabindex]=\"_tabindex\"\n [required]=\"required\"\n (click)=\"clicked.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (blur)=\"filterInputTextBlurEvent($event)\"\n (keydown.escape)=\"keydownEscape.emit($event)\"\n (keyup.enter)=\"keyupEnter.emit($event)\"\n (keyup.arrowdown)=\"!autocomplete.showPanel && dropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autocomplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [panelWidth]=\"panelWidth\">\n <!-- Headers -->\n <ion-row class=\"mat-autocomplete-header column ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- Options -->\n <ng-container *ngIf=\"$filteredItems | async as items; else loadingTemplate\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label><i>{{noResultMessage | translate}}</i></ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initAutocompleteInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(displayValue | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n\n <!-- footer -->\n <ion-row *ngIf=\"itemCount; let count\" class=\"mat-autocomplete-footer ion-no-padding\">\n <ion-col>\n <ion-text class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n </mat-autocomplete>\n\n </ng-template>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ng-template>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n</ion-grid>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n\n<ng-template #matSuffixTemplate>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"desktop\"\n (click)=\"dropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #headers>\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i\" [size]=\"displayColumnSizes[i]\">\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n</ng-template>\n\n<ng-template #options>\n\n\n</ng-template>\n\n",
|
|
1782
1809
|
providers: [{
|
|
1783
1810
|
provide: NG_VALUE_ACCESSOR,
|
|
1784
1811
|
multi: true,
|
|
@@ -4271,40 +4298,13 @@ SharedPipesModule.decorators = [
|
|
|
4271
4298
|
},] }
|
|
4272
4299
|
];
|
|
4273
4300
|
|
|
4274
|
-
/* ---
|
|
4275
|
-
* Source: https://github.com/ionic-team/ionic-framework/blob/b0d53ca73619585671d8cf4dc24e47f826495a0a/core/src/utils/platform.ts
|
|
4276
|
-
* --- */
|
|
4277
|
-
const matchMedia = (win, query) => win.matchMedia(query).matches;
|
|
4278
|
-
const testUserAgent = (win, expr) => {
|
|
4279
|
-
const userAgent = win.navigator.userAgent || win.navigator.vendor || window.opera;
|
|
4280
|
-
return expr.test(userAgent);
|
|
4281
|
-
};
|
|
4282
|
-
const isWindows = (win) => testUserAgent(win, /windows/i);
|
|
4283
|
-
const isTouchUi = (win) => matchMedia(win, '(any-pointer:coarse)');
|
|
4284
|
-
const isMobile = (win) => isTouchUi(win) && !isWindows(win);
|
|
4285
|
-
const isIpad = (win) => {
|
|
4286
|
-
// iOS 12 and below
|
|
4287
|
-
if (testUserAgent(win, /iPad/i)) {
|
|
4288
|
-
return true;
|
|
4289
|
-
}
|
|
4290
|
-
// iOS 13+
|
|
4291
|
-
if (testUserAgent(win, /Macintosh/i) && isMobile(win)) {
|
|
4292
|
-
return true;
|
|
4293
|
-
}
|
|
4294
|
-
return false;
|
|
4295
|
-
};
|
|
4296
|
-
const ɵ0$b = isIpad;
|
|
4297
|
-
const isIOS = (win) => testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
|
|
4298
|
-
const isAndroid = (win) => testUserAgent(win, /android|sink/i);
|
|
4299
|
-
const isCordova = (win) => !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
|
|
4300
|
-
|
|
4301
4301
|
// Import the core angular services.
|
|
4302
4302
|
// ----------------------------------------------------------------------------------- //
|
|
4303
4303
|
// ----------------------------------------------------------------------------------- //
|
|
4304
4304
|
const BASE_TIMER_DELAY = 100;
|
|
4305
4305
|
class AutofocusDirective {
|
|
4306
4306
|
// I initialize the autofocus directive.
|
|
4307
|
-
constructor(elementRef, keyboard) {
|
|
4307
|
+
constructor(platform, elementRef, keyboard) {
|
|
4308
4308
|
this.keyboard = keyboard;
|
|
4309
4309
|
this._timer = null;
|
|
4310
4310
|
this._elementRef = elementRef;
|
|
@@ -4379,6 +4379,7 @@ AutofocusDirective.decorators = [
|
|
|
4379
4379
|
},] }
|
|
4380
4380
|
];
|
|
4381
4381
|
AutofocusDirective.ctorParameters = () => [
|
|
4382
|
+
{ type: Platform },
|
|
4382
4383
|
{ type: ElementRef },
|
|
4383
4384
|
{ type: Keyboard, decorators: [{ type: Optional }] }
|
|
4384
4385
|
];
|
|
@@ -4558,8 +4559,7 @@ const noop$7 = () => {
|
|
|
4558
4559
|
};
|
|
4559
4560
|
const ɵ0$a = noop$7;
|
|
4560
4561
|
class MatLatLongField {
|
|
4561
|
-
constructor(
|
|
4562
|
-
this.platform = platform;
|
|
4562
|
+
constructor(translate, formBuilder, cd, formGroupDir) {
|
|
4563
4563
|
this.translate = translate;
|
|
4564
4564
|
this.formBuilder = formBuilder;
|
|
4565
4565
|
this.cd = cd;
|
|
@@ -4576,7 +4576,6 @@ class MatLatLongField {
|
|
|
4576
4576
|
this.required = false;
|
|
4577
4577
|
this.onBlur = new EventEmitter();
|
|
4578
4578
|
this.onFocus = new EventEmitter();
|
|
4579
|
-
this.mobile = this.platform.is('mobile');
|
|
4580
4579
|
}
|
|
4581
4580
|
get disabled() {
|
|
4582
4581
|
return this.readonly || this.formControl.disabled;
|
|
@@ -4589,6 +4588,7 @@ class MatLatLongField {
|
|
|
4589
4588
|
return this._readonly;
|
|
4590
4589
|
}
|
|
4591
4590
|
ngOnInit() {
|
|
4591
|
+
this.mobile = isNotNil(this.mobile) ? this.mobile : isMobile(window);
|
|
4592
4592
|
this.type = this.type || 'latitude';
|
|
4593
4593
|
this.pattern = this.pattern || 'DDMM';
|
|
4594
4594
|
this.mask = MASKS[this.type] && MASKS[this.type][this.pattern];
|
|
@@ -4850,7 +4850,6 @@ MatLatLongField.decorators = [
|
|
|
4850
4850
|
},] }
|
|
4851
4851
|
];
|
|
4852
4852
|
MatLatLongField.ctorParameters = () => [
|
|
4853
|
-
{ type: Platform },
|
|
4854
4853
|
{ type: TranslateService },
|
|
4855
4854
|
{ type: FormBuilder },
|
|
4856
4855
|
{ type: ChangeDetectorRef },
|
|
@@ -4911,8 +4910,7 @@ const DAY_MASK$2 = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
|
|
|
4911
4910
|
const noop$6 = () => { };
|
|
4912
4911
|
const ɵ0$9 = noop$6;
|
|
4913
4912
|
class MatDate {
|
|
4914
|
-
constructor(
|
|
4915
|
-
this.platform = platform;
|
|
4913
|
+
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
4916
4914
|
this.dateAdapter = dateAdapter;
|
|
4917
4915
|
this.translate = translate;
|
|
4918
4916
|
this.formBuilder = formBuilder;
|
|
@@ -4955,11 +4953,12 @@ class MatDate {
|
|
|
4955
4953
|
return this.formControl.value;
|
|
4956
4954
|
}
|
|
4957
4955
|
ngOnInit() {
|
|
4958
|
-
this.mobile = isNil(this.mobile) ? this.platform.is('mobile') : this.mobile;
|
|
4959
|
-
this._keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
4960
4956
|
this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName);
|
|
4961
4957
|
if (!this.formControl)
|
|
4962
4958
|
throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in <mat-date-field>.');
|
|
4959
|
+
this.mobile = isNotNil(this.mobile) ? this.mobile : isMobile(window);
|
|
4960
|
+
// Workaround because ion-datetime has issue (do not returned a ISO date)
|
|
4961
|
+
this._keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
4963
4962
|
this.required = toBoolean(this.required, this.formControl.validator === Validators.required);
|
|
4964
4963
|
// Add 'validDate' validator (when existing validator are null or required, to be sure to keep it)
|
|
4965
4964
|
if (!this.formControl.validator || this.formControl.validator === Validators.required) {
|
|
@@ -5219,7 +5218,6 @@ MatDate.decorators = [
|
|
|
5219
5218
|
},] }
|
|
5220
5219
|
];
|
|
5221
5220
|
MatDate.ctorParameters = () => [
|
|
5222
|
-
{ type: Platform },
|
|
5223
5221
|
{ type: DateAdapter },
|
|
5224
5222
|
{ type: TranslateService },
|
|
5225
5223
|
{ type: FormBuilder },
|
|
@@ -5228,12 +5226,12 @@ MatDate.ctorParameters = () => [
|
|
|
5228
5226
|
{ type: FormGroupDirective, decorators: [{ type: Optional }] }
|
|
5229
5227
|
];
|
|
5230
5228
|
MatDate.propDecorators = {
|
|
5229
|
+
mobile: [{ type: Input }],
|
|
5231
5230
|
formControl: [{ type: Input }],
|
|
5232
5231
|
formControlName: [{ type: Input }],
|
|
5233
5232
|
placeholder: [{ type: Input }],
|
|
5234
5233
|
floatLabel: [{ type: Input }],
|
|
5235
5234
|
required: [{ type: Input }],
|
|
5236
|
-
mobile: [{ type: Input }],
|
|
5237
5235
|
compact: [{ type: Input }],
|
|
5238
5236
|
placeholderChar: [{ type: Input }],
|
|
5239
5237
|
autofocus: [{ type: Input }],
|
|
@@ -5258,8 +5256,7 @@ const HOUR_MASK$1 = [/[012]/, /\d/, ':', /[012345]/, /\d/];
|
|
|
5258
5256
|
const noop$5 = () => { };
|
|
5259
5257
|
const ɵ0$8 = noop$5;
|
|
5260
5258
|
class MatDateTime {
|
|
5261
|
-
constructor(
|
|
5262
|
-
this.platform = platform;
|
|
5259
|
+
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5263
5260
|
this.dateAdapter = dateAdapter;
|
|
5264
5261
|
this.translate = translate;
|
|
5265
5262
|
this.formBuilder = formBuilder;
|
|
@@ -5302,11 +5299,12 @@ class MatDateTime {
|
|
|
5302
5299
|
return this.formControl.value;
|
|
5303
5300
|
}
|
|
5304
5301
|
ngOnInit() {
|
|
5305
|
-
this.mobile = isNil(this.mobile) ? this.platform.is('mobile') : this.mobile;
|
|
5306
|
-
this._keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
5307
5302
|
this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName);
|
|
5308
5303
|
if (!this.formControl)
|
|
5309
5304
|
throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in <mat-date-time-field>.');
|
|
5305
|
+
this.mobile = isNotNil(this.mobile) ? this.mobile : isMobile(window);
|
|
5306
|
+
// Workaround because ion-datetime has issue (do not returned a ISO date)
|
|
5307
|
+
this._keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
5310
5308
|
this.required = toBoolean(this.required, this.formControl.validator === Validators.required);
|
|
5311
5309
|
// Add 'validDate' validator (when existing validator are null or required, to be sure to keep it)
|
|
5312
5310
|
if (!this.formControl.validator || this.formControl.validator === Validators.required) {
|
|
@@ -5593,7 +5591,6 @@ MatDateTime.decorators = [
|
|
|
5593
5591
|
},] }
|
|
5594
5592
|
];
|
|
5595
5593
|
MatDateTime.ctorParameters = () => [
|
|
5596
|
-
{ type: Platform },
|
|
5597
5594
|
{ type: DateAdapter },
|
|
5598
5595
|
{ type: TranslateService },
|
|
5599
5596
|
{ type: FormBuilder },
|
|
@@ -5631,7 +5628,7 @@ const noop$4 = () => {
|
|
|
5631
5628
|
};
|
|
5632
5629
|
const ɵ0$7 = noop$4;
|
|
5633
5630
|
class MatDateShort {
|
|
5634
|
-
constructor(
|
|
5631
|
+
constructor(dateAdapter, translate, formBuilder, cd, keyboard, formGroupDir) {
|
|
5635
5632
|
this.dateAdapter = dateAdapter;
|
|
5636
5633
|
this.translate = translate;
|
|
5637
5634
|
this.formBuilder = formBuilder;
|
|
@@ -5649,9 +5646,6 @@ class MatDateShort {
|
|
|
5649
5646
|
this.compact = false;
|
|
5650
5647
|
this.placeholderChar = DEFAULT_PLACEHOLDER_CHAR;
|
|
5651
5648
|
this.clearable = false;
|
|
5652
|
-
// Workaround because ion-datetime has issue (do not returned a ISO date)
|
|
5653
|
-
this.mobile = platform.is('mobile');
|
|
5654
|
-
this.keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
5655
5649
|
this.locale = (translate.currentLang || translate.defaultLang).substr(0, 2);
|
|
5656
5650
|
}
|
|
5657
5651
|
set tabindex(value) {
|
|
@@ -5670,6 +5664,9 @@ class MatDateShort {
|
|
|
5670
5664
|
this.formControl = this.formControl || this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName);
|
|
5671
5665
|
if (!this.formControl)
|
|
5672
5666
|
throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in <mat-date-short-field>.');
|
|
5667
|
+
this.mobile = isNotNil(this.mobile) ? this.mobile : isMobile(window);
|
|
5668
|
+
// Workaround because ion-datetime has issue (do not returned a ISO date)
|
|
5669
|
+
this.keyboardHideDelay = this.mobile && KEYBOARD_HIDE_DELAY_MS || 0;
|
|
5673
5670
|
// Redirect errors from main control, into day sub control
|
|
5674
5671
|
const $error = new BehaviorSubject(null);
|
|
5675
5672
|
this.required = toBoolean(this.required, this.formControl.validator === Validators.required);
|
|
@@ -5894,7 +5891,6 @@ MatDateShort.decorators = [
|
|
|
5894
5891
|
},] }
|
|
5895
5892
|
];
|
|
5896
5893
|
MatDateShort.ctorParameters = () => [
|
|
5897
|
-
{ type: Platform },
|
|
5898
5894
|
{ type: DateAdapter },
|
|
5899
5895
|
{ type: TranslateService },
|
|
5900
5896
|
{ type: FormBuilder },
|
|
@@ -5903,6 +5899,7 @@ MatDateShort.ctorParameters = () => [
|
|
|
5903
5899
|
{ type: FormGroupDirective, decorators: [{ type: Optional }] }
|
|
5904
5900
|
];
|
|
5905
5901
|
MatDateShort.propDecorators = {
|
|
5902
|
+
mobile: [{ type: Input }],
|
|
5906
5903
|
disabled: [{ type: Input }],
|
|
5907
5904
|
formControl: [{ type: Input }],
|
|
5908
5905
|
formControlName: [{ type: Input }],
|
|
@@ -9037,11 +9034,12 @@ HotkeysDialogComponent.ctorParameters = () => [
|
|
|
9037
9034
|
];
|
|
9038
9035
|
|
|
9039
9036
|
class Hotkeys {
|
|
9040
|
-
constructor(eventManager, dialog, document, modalController) {
|
|
9037
|
+
constructor(eventManager, dialog, document, modalController, popoverController) {
|
|
9041
9038
|
this.eventManager = eventManager;
|
|
9042
9039
|
this.dialog = dialog;
|
|
9043
9040
|
this.document = document;
|
|
9044
9041
|
this.modalController = modalController;
|
|
9042
|
+
this.popoverController = popoverController;
|
|
9045
9043
|
this._debug = false;
|
|
9046
9044
|
this._hotkeys = new Map();
|
|
9047
9045
|
this._defaults = {
|
|
@@ -9070,10 +9068,12 @@ class Hotkeys {
|
|
|
9070
9068
|
return new Observable(observer => {
|
|
9071
9069
|
const handler = (e) => __awaiter(this, void 0, void 0, function* () {
|
|
9072
9070
|
// Get top component from ModalController
|
|
9073
|
-
const top = yield this.modalController.getTop();
|
|
9071
|
+
const top = (yield this.modalController.getTop()) || (yield this.popoverController.getTop());
|
|
9074
9072
|
// If modal present, check its component name against hotkey element name (fix #181)
|
|
9075
|
-
if (top && top.component['name'] !== merged.elementName)
|
|
9073
|
+
if (top && top.component['name'] !== merged.elementName) {
|
|
9074
|
+
e.preventDefault();
|
|
9076
9075
|
return;
|
|
9076
|
+
}
|
|
9077
9077
|
if (e instanceof KeyboardEvent && e.repeat)
|
|
9078
9078
|
return; // skip when repeated
|
|
9079
9079
|
if (merged.preventDefault)
|
|
@@ -9096,7 +9096,7 @@ class Hotkeys {
|
|
|
9096
9096
|
});
|
|
9097
9097
|
}
|
|
9098
9098
|
}
|
|
9099
|
-
Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1$5.EventManager), i0.ɵɵinject(i2$1.MatDialog), i0.ɵɵinject(i1$3.DOCUMENT), i0.ɵɵinject(i1$4.ModalController)); }, token: Hotkeys, providedIn: "root" });
|
|
9099
|
+
Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1$5.EventManager), i0.ɵɵinject(i2$1.MatDialog), i0.ɵɵinject(i1$3.DOCUMENT), i0.ɵɵinject(i1$4.ModalController), i0.ɵɵinject(i1$4.PopoverController)); }, token: Hotkeys, providedIn: "root" });
|
|
9100
9100
|
Hotkeys.decorators = [
|
|
9101
9101
|
{ type: Injectable, args: [{
|
|
9102
9102
|
providedIn: 'root'
|
|
@@ -9106,7 +9106,8 @@ Hotkeys.ctorParameters = () => [
|
|
|
9106
9106
|
{ type: EventManager },
|
|
9107
9107
|
{ type: MatDialog },
|
|
9108
9108
|
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
|
9109
|
-
{ type: ModalController }
|
|
9109
|
+
{ type: ModalController },
|
|
9110
|
+
{ type: PopoverController }
|
|
9110
9111
|
];
|
|
9111
9112
|
|
|
9112
9113
|
class SharedHotkeysModule {
|
|
@@ -10468,7 +10469,7 @@ class LocalSettingsService extends StartableService {
|
|
|
10468
10469
|
ngOnStart() {
|
|
10469
10470
|
console.info('[settings] Starting service...');
|
|
10470
10471
|
// Restoring local settings
|
|
10471
|
-
this._data.mobile = isNotNil(this._data.mobile) ? this._data.mobile : isMobile(window);
|
|
10472
|
+
this._data.mobile = isNotNil(this._data.mobile) ? this._data.mobile : (isCordova(window) || isMobile(window));
|
|
10472
10473
|
this._data.usageMode = (isAndroid(window) || isIOS(window)) ? 'FIELD' : 'DESK'; // FIELD by default if Android or iOS
|
|
10473
10474
|
// Restoring local settings
|
|
10474
10475
|
return this.restoreLocally();
|
|
@@ -13448,7 +13449,7 @@ class GraphqlService extends StartableService {
|
|
|
13448
13449
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13449
13450
|
yield this.network.ready();
|
|
13450
13451
|
console.info('[graphql] Starting graphql...');
|
|
13451
|
-
const mobile =
|
|
13452
|
+
const mobile = isMobile(window);
|
|
13452
13453
|
const enableTrackMutationQueries = !mobile;
|
|
13453
13454
|
const peer = this.network.peer;
|
|
13454
13455
|
if (!peer)
|
|
@@ -15562,7 +15563,7 @@ class ConfigService extends BaseGraphqlService {
|
|
|
15562
15563
|
else {
|
|
15563
15564
|
let now = this._debug && Date.now();
|
|
15564
15565
|
// Convert images, for offline usage
|
|
15565
|
-
if (this.network.online &&
|
|
15566
|
+
if (this.network.online && isMobile(window)) {
|
|
15566
15567
|
const jobs = [];
|
|
15567
15568
|
// Download logos
|
|
15568
15569
|
if (data.largeLogo && data.largeLogo.startsWith('http')) {
|
|
@@ -15689,14 +15690,15 @@ class PlatformService extends StartableService {
|
|
|
15689
15690
|
is(platformName) {
|
|
15690
15691
|
switch (platformName) {
|
|
15691
15692
|
case 'mobile':
|
|
15692
|
-
|
|
15693
|
-
|
|
15693
|
+
case 'mobileweb':
|
|
15694
|
+
// Exclude Windows touch screens - see SUMARIS issue #323
|
|
15695
|
+
return this.platform.is(platformName) && !isWindows(window);
|
|
15694
15696
|
default:
|
|
15695
15697
|
return this.platform.is(platformName);
|
|
15696
15698
|
}
|
|
15697
15699
|
}
|
|
15698
15700
|
get mobile() {
|
|
15699
|
-
return isNotNil(this._mobile) ? this._mobile :
|
|
15701
|
+
return isNotNil(this._mobile) ? this._mobile : this.is('mobile');
|
|
15700
15702
|
}
|
|
15701
15703
|
/**
|
|
15702
15704
|
* Say if opened has been opened inside an Android or iOs App.
|
|
@@ -15711,17 +15713,17 @@ class PlatformService extends StartableService {
|
|
|
15711
15713
|
isIOSCordova() {
|
|
15712
15714
|
return this._ios && this._cordova || false;
|
|
15713
15715
|
}
|
|
15714
|
-
isWeb() {
|
|
15715
|
-
return !this._cordova || (!this._android && !this._ios);
|
|
15716
|
-
}
|
|
15717
15716
|
isApp() {
|
|
15718
|
-
return this.
|
|
15717
|
+
return this.isAndroidCordova() || this.isIOSCordova();
|
|
15718
|
+
}
|
|
15719
|
+
isWeb() {
|
|
15720
|
+
return !this.isApp();
|
|
15719
15721
|
}
|
|
15720
15722
|
isMobileWeb() {
|
|
15721
|
-
return
|
|
15723
|
+
return this.mobile && this.isWeb();
|
|
15722
15724
|
}
|
|
15723
15725
|
get canDownload() {
|
|
15724
|
-
return
|
|
15726
|
+
return this.downloader && this.isAndroidCordova();
|
|
15725
15727
|
}
|
|
15726
15728
|
get canOpenFile() {
|
|
15727
15729
|
return false;
|
|
@@ -26101,8 +26103,7 @@ class DateTimeTestPage {
|
|
|
26101
26103
|
disableControl.disable();
|
|
26102
26104
|
// Copy the 'enable' value, into the disable control
|
|
26103
26105
|
this.form.get('enable').valueChanges.subscribe(value => disableControl.setValue(value));
|
|
26104
|
-
|
|
26105
|
-
this.showLogPanel = this.showLogPanel || mobile;
|
|
26106
|
+
this.showLogPanel = this.showLogPanel || isMobile(window);
|
|
26106
26107
|
}
|
|
26107
26108
|
ngOnInit() {
|
|
26108
26109
|
setTimeout(() => this.loadData(), 250);
|
|
@@ -26356,8 +26357,7 @@ NumpadTestPage.ctorParameters = () => [
|
|
|
26356
26357
|
|
|
26357
26358
|
const moment = momentImported;
|
|
26358
26359
|
class DateTestPage {
|
|
26359
|
-
constructor(
|
|
26360
|
-
this.platform = platform;
|
|
26360
|
+
constructor(formBuilder, cd) {
|
|
26361
26361
|
this.formBuilder = formBuilder;
|
|
26362
26362
|
this.cd = cd;
|
|
26363
26363
|
this.showLogPanel = true;
|
|
@@ -26379,8 +26379,7 @@ class DateTestPage {
|
|
|
26379
26379
|
disableControl.disable();
|
|
26380
26380
|
// Copy the 'enable' value, into the disable control
|
|
26381
26381
|
this.form.get('enable').valueChanges.subscribe(value => disableControl.setValue(value));
|
|
26382
|
-
|
|
26383
|
-
this.showLogPanel = this.showLogPanel || mobile;
|
|
26382
|
+
this.showLogPanel = this.showLogPanel || isMobile(window);
|
|
26384
26383
|
}
|
|
26385
26384
|
ngOnInit() {
|
|
26386
26385
|
setTimeout(() => this.loadData(), 250);
|
|
@@ -26449,7 +26448,6 @@ DateTestPage.decorators = [
|
|
|
26449
26448
|
},] }
|
|
26450
26449
|
];
|
|
26451
26450
|
DateTestPage.ctorParameters = () => [
|
|
26452
|
-
{ type: Platform },
|
|
26453
26451
|
{ type: FormBuilder },
|
|
26454
26452
|
{ type: ChangeDetectorRef }
|
|
26455
26453
|
];
|
|
@@ -27134,5 +27132,5 @@ CoreTestingModule.decorators = [
|
|
|
27134
27132
|
* Generated bundle index. Do not edit.
|
|
27135
27133
|
*/
|
|
27136
27134
|
|
|
27137
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UserEvent, UserEventFilter, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0$
|
|
27135
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, ErrorCodes, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UserEvent, UserEventFilter, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0$c as ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppIconComponent as ɵi, DateTestPage as ɵj, NumpadTestPage as ɵk, MatBadgeIconTestPage as ɵl, ToastTestingModule as ɵm, ToastTestingPage as ɵn };
|
|
27138
27136
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|