@wavemaker-ai/app-ng-runtime 1.0.0-rc.317 → 1.0.0-rc.319
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/build-task/bundles/index.umd.js +16 -7
- package/build-task/fesm2022/index.mjs +16 -7
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/base/bundles/index.umd.js +301 -4
- package/components/base/fesm2022/index.mjs +300 -4
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/index.d.ts +106 -2
- package/components/basic/anchor/bundles/index.umd.js +4 -5
- package/components/basic/anchor/fesm2022/index.mjs +4 -5
- package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
- package/components/basic/anchor/index.d.ts +1 -0
- package/components/basic/icon/bundles/index.umd.js +3 -3
- package/components/basic/icon/fesm2022/index.mjs +4 -4
- package/components/basic/icon/fesm2022/index.mjs.map +1 -1
- package/components/basic/icon/index.d.ts +1 -0
- package/components/basic/search/bundles/index.umd.js +6 -3
- package/components/basic/search/fesm2022/index.mjs +7 -4
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/index.d.ts +3 -0
- package/components/basic/spinner/bundles/index.umd.js +5 -3
- package/components/basic/spinner/fesm2022/index.mjs +6 -4
- package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
- package/components/basic/spinner/index.d.ts +1 -0
- package/components/chart/bundles/index.umd.js +4 -3
- package/components/chart/fesm2022/index.mjs +5 -4
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/chart/index.d.ts +1 -0
- package/components/containers/accordion/bundles/index.umd.js +4 -3
- package/components/containers/accordion/fesm2022/index.mjs +5 -4
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/index.d.ts +1 -0
- package/components/containers/panel/bundles/index.umd.js +3 -3
- package/components/containers/panel/fesm2022/index.mjs +4 -4
- package/components/containers/panel/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/index.d.ts +3 -0
- package/components/containers/tabs/bundles/index.umd.js +5 -4
- package/components/containers/tabs/fesm2022/index.mjs +6 -5
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/bundles/index.umd.js +8 -6
- package/components/containers/wizard/fesm2022/index.mjs +9 -7
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/index.d.ts +2 -0
- package/components/data/card/bundles/index.umd.js +3 -3
- package/components/data/card/fesm2022/index.mjs +4 -4
- package/components/data/card/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +6 -3
- package/components/data/form/fesm2022/index.mjs +7 -4
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/index.d.ts +2 -0
- package/components/data/list/bundles/index.umd.js +5 -3
- package/components/data/list/fesm2022/index.mjs +6 -4
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/index.d.ts +2 -0
- package/components/data/table/bundles/index.umd.js +4 -3
- package/components/data/table/fesm2022/index.mjs +5 -4
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/index.d.ts +1 -0
- package/components/dialogs/default/bundles/index.umd.js +2 -2
- package/components/dialogs/default/fesm2022/index.mjs +3 -3
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- package/components/input/button/bundles/index.umd.js +4 -5
- package/components/input/button/fesm2022/index.mjs +4 -5
- package/components/input/button/fesm2022/index.mjs.map +1 -1
- package/components/input/button/index.d.ts +3 -0
- package/components/input/checkbox/bundles/index.umd.js +6 -4
- package/components/input/checkbox/fesm2022/index.mjs +7 -5
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/index.d.ts +2 -0
- package/components/input/file-upload/bundles/index.umd.js +5 -3
- package/components/input/file-upload/fesm2022/index.mjs +6 -4
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/index.d.ts +3 -0
- package/components/input/rating/bundles/index.umd.js +9 -3
- package/components/input/rating/fesm2022/index.mjs +10 -4
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/index.d.ts +6 -0
- package/components/input/slider/bundles/index.umd.js +5 -3
- package/components/input/slider/fesm2022/index.mjs +6 -4
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/index.d.ts +2 -0
- package/components/input/switch/bundles/index.umd.js +6 -3
- package/components/input/switch/fesm2022/index.mjs +7 -4
- package/components/input/switch/fesm2022/index.mjs.map +1 -1
- package/components/input/switch/index.d.ts +2 -0
- package/components/input/text/bundles/index.umd.js +7 -5
- package/components/input/text/fesm2022/index.mjs +8 -6
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/index.d.ts +2 -0
- package/components/navigation/menu/bundles/index.umd.js +4 -3
- package/components/navigation/menu/fesm2022/index.mjs +5 -4
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/index.d.ts +1 -0
- package/components/navigation/navbar/bundles/index.umd.js +5 -5
- package/components/navigation/navbar/fesm2022/index.mjs +5 -5
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- package/components/navigation/navbar/index.d.ts +1 -0
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +23 -1
- package/runtime/base/fesm2022/index.mjs +23 -1
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/index.d.ts +5 -0
- package/transpiler/bundles/index.umd.js +2 -0
- package/transpiler/fesm2022/index.mjs +2 -0
- package/transpiler/fesm2022/index.mjs.map +1 -1
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import * as i1 from '@wm/core';
|
|
2
2
|
import { FormWidgetType, checkIsCustomPipeExpression, $parseExpr, isValidWebURL, _WM_APP_PROJECT, isValidImageUrl, encodeUrl, stringStartsWith, prettifyLabel, deHyphenate, initCaps, getClonedObject, DataSource, debounce, processFilterExpBindNode, isDefined, MatchMode, $parseEvent, isEqualWithFields, getFormattedDate, isAndroid, isNumberType, DataType, setCSS, IDGenerator, toBoolean, isChangeFromWatch, $unwatch, resetChangeFromWatch, isObject as isObject$1, toDimension, $appDigest, removeClass, addClass, setCSSFromObj, App, findParent, setAttr, switchClass, removeAttr, $invokeWatchers, $watch, findValueOf, validateAccessRoles, ComponentType, noop as noop$1, VALIDATOR, isIos, isMobile, hasOffsetStr, AbstractI18nService, CURRENCY_INFO, replace as replace$1, transformFileURI, isLargeTabletLandscape, isLargeTabletPortrait } from '@wm/core';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, forwardRef, ElementRef, inject, ViewContainerRef, Injector, Injectable, Inject, Optional, Directive, Self, ContentChildren, Attribute, Input, Component, Pipe, SecurityContext } from '@angular/core';
|
|
4
|
+
import { InjectionToken, forwardRef, ElementRef, inject, ViewContainerRef, Injector, Injectable, Inject, Optional, Directive, Self, ContentChildren, Attribute, Input, Component, Pipe, SecurityContext, HostBinding, ViewEncapsulation } from '@angular/core';
|
|
5
5
|
import { createFocusTrap } from '@wavemaker/focus-trap';
|
|
6
6
|
import { isNull, get, forEach, join, union, isArray, isObject, includes, split, isString, assignWith, isEmpty, replace, head, keys, isFunction, each, intersection, isUndefined, filter, cloneDeep, orderBy, trim, uniqWith, isEqual, uniqBy, sortBy, groupBy, toLower, values, startsWith, last, extend, camelCase, map, pickBy, first, debounce as debounce$1, omitBy, toUpper, find, concat, assign, isDate } from 'lodash-es';
|
|
7
7
|
import * as momentLib from 'moment';
|
|
8
8
|
import * as i1$2 from '@angular/platform-browser';
|
|
9
|
-
import { EventManager } from '@angular/platform-browser';
|
|
9
|
+
import { EventManager, DomSanitizer } from '@angular/platform-browser';
|
|
10
10
|
import { ReplaySubject, Subject } from 'rxjs';
|
|
11
11
|
import { SecurityService } from '@wm/security';
|
|
12
|
-
import { filter as filter$1, debounceTime } from 'rxjs/operators';
|
|
12
|
+
import { filter as filter$1, debounceTime, tap, shareReplay } from 'rxjs/operators';
|
|
13
13
|
import { Validators } from '@angular/forms';
|
|
14
14
|
import { SwipeAnimation } from '@swipey';
|
|
15
15
|
import * as i1$1 from '@angular/common';
|
|
16
|
+
import { NgClass, NgStyle } from '@angular/common';
|
|
16
17
|
import * as momentLib$1 from 'moment-timezone/moment-timezone';
|
|
17
18
|
import { __decorate, __metadata } from 'tslib';
|
|
19
|
+
import { HttpClient } from '@angular/common/http';
|
|
18
20
|
|
|
19
21
|
const WidgetConfig = new InjectionToken('WidgetConfig');
|
|
20
22
|
class WidgetRef {
|
|
@@ -5909,9 +5911,303 @@ class ShowInDeviceDirective {
|
|
|
5909
5911
|
type: Input
|
|
5910
5912
|
}] }); })();
|
|
5911
5913
|
|
|
5914
|
+
// check if the url is a svg icon url
|
|
5915
|
+
function isSvgIconUrl(url) {
|
|
5916
|
+
if (!url) {
|
|
5917
|
+
return false;
|
|
5918
|
+
}
|
|
5919
|
+
const path = url.split(/[?#]/)[0];
|
|
5920
|
+
return /\.svg$/i.test(path);
|
|
5921
|
+
}
|
|
5922
|
+
/**
|
|
5923
|
+
* Module-level cache for already-normalized SVG markup, keyed by the
|
|
5924
|
+
* pipe-transformed URL. Shared across every directive instance so repeated
|
|
5925
|
+
* usage of the same icon resolves synchronously without another network hit.
|
|
5926
|
+
*/
|
|
5927
|
+
const svgCache = new Map();
|
|
5928
|
+
/**
|
|
5929
|
+
* In-flight request cache. Multiple directives mounted at the same time and
|
|
5930
|
+
* pointing at the same URL share a single HTTP request.
|
|
5931
|
+
*/
|
|
5932
|
+
const inFlightRequests = new Map();
|
|
5933
|
+
/**
|
|
5934
|
+
* Renders the SVG fetched from `iconUrl` inline on the host element so the
|
|
5935
|
+
* markup behaves like a font icon - it can be sized via `font-size`, supports
|
|
5936
|
+
* `:hover` / transitions on the host, and (for SVGs authored with
|
|
5937
|
+
* `currentColor`) inherits `color` from CSS.
|
|
5938
|
+
*
|
|
5939
|
+
* Usage:
|
|
5940
|
+
* <i class="wm-icon" [iconUrl]="url"></i>
|
|
5941
|
+
*
|
|
5942
|
+
* The incoming URL is first run through `ImagePipe` (so relative project
|
|
5943
|
+
* paths, CDN rewrites, etc. work the same way as `<img [src]>`), then fetched
|
|
5944
|
+
* as text via `HttpClient`. The fetched markup is normalized so the root
|
|
5945
|
+
* `<svg>` gets `width="1em"` / `height="1em"` if not already specified (so
|
|
5946
|
+
* the icon scales with the host's `font-size`) and a root `fill="currentColor"`
|
|
5947
|
+
* fallback when no `fill` attribute is declared.
|
|
5948
|
+
*
|
|
5949
|
+
* Original `fill` / `stroke` values inside the SVG are preserved verbatim so
|
|
5950
|
+
* a multi-color SVG renders with its source colors. To make an SVG themeable
|
|
5951
|
+
* via the host's CSS `color`, author the source with `fill="currentColor"`
|
|
5952
|
+
* (the convention used by Material Icons, Heroicons, Font Awesome, etc.).
|
|
5953
|
+
*/
|
|
5954
|
+
class SvgIconDirective {
|
|
5955
|
+
constructor() {
|
|
5956
|
+
/**
|
|
5957
|
+
* Bound to the host's `innerHTML`. Set to a `SafeHtml` value produced by
|
|
5958
|
+
* `DomSanitizer.bypassSecurityTrustHtml` so Angular's renderer skips
|
|
5959
|
+
* re-sanitization and inlines the SVG as-is.
|
|
5960
|
+
*/
|
|
5961
|
+
this.hostInnerHtml = null;
|
|
5962
|
+
this.http = inject(HttpClient);
|
|
5963
|
+
this.sanitizer = inject(DomSanitizer);
|
|
5964
|
+
this.imagePipe = inject(ImagePipe);
|
|
5965
|
+
this.lastResolvedUrl = null;
|
|
5966
|
+
}
|
|
5967
|
+
ngOnChanges(changes) {
|
|
5968
|
+
if (changes['iconUrl']) {
|
|
5969
|
+
this.loadSvg(this.iconUrl);
|
|
5970
|
+
}
|
|
5971
|
+
}
|
|
5972
|
+
ngOnDestroy() {
|
|
5973
|
+
this.cancelInflight();
|
|
5974
|
+
}
|
|
5975
|
+
loadSvg(rawUrl) {
|
|
5976
|
+
this.cancelInflight();
|
|
5977
|
+
if (!rawUrl) {
|
|
5978
|
+
this.hostInnerHtml = null;
|
|
5979
|
+
this.lastResolvedUrl = null;
|
|
5980
|
+
return;
|
|
5981
|
+
}
|
|
5982
|
+
const url = this.imagePipe.transform(rawUrl);
|
|
5983
|
+
if (!url) {
|
|
5984
|
+
this.hostInnerHtml = null;
|
|
5985
|
+
this.lastResolvedUrl = null;
|
|
5986
|
+
return;
|
|
5987
|
+
}
|
|
5988
|
+
if (this.lastResolvedUrl === url && this.hostInnerHtml) {
|
|
5989
|
+
return;
|
|
5990
|
+
}
|
|
5991
|
+
const cached = svgCache.get(url);
|
|
5992
|
+
if (cached !== undefined) {
|
|
5993
|
+
this.applySvg(url, cached);
|
|
5994
|
+
return;
|
|
5995
|
+
}
|
|
5996
|
+
let request$ = inFlightRequests.get(url);
|
|
5997
|
+
if (!request$) {
|
|
5998
|
+
request$ = this.http.get(url, { responseType: 'text' }).pipe(tap(svg => {
|
|
5999
|
+
svgCache.set(url, this.normalizeSvg(svg));
|
|
6000
|
+
inFlightRequests.delete(url);
|
|
6001
|
+
}), shareReplay(1));
|
|
6002
|
+
inFlightRequests.set(url, request$);
|
|
6003
|
+
}
|
|
6004
|
+
this.sub = request$.subscribe({
|
|
6005
|
+
next: () => {
|
|
6006
|
+
const normalized = svgCache.get(url);
|
|
6007
|
+
if (normalized !== undefined) {
|
|
6008
|
+
this.applySvg(url, normalized);
|
|
6009
|
+
}
|
|
6010
|
+
},
|
|
6011
|
+
error: () => {
|
|
6012
|
+
inFlightRequests.delete(url);
|
|
6013
|
+
this.hostInnerHtml = null;
|
|
6014
|
+
this.lastResolvedUrl = null;
|
|
6015
|
+
}
|
|
6016
|
+
});
|
|
6017
|
+
}
|
|
6018
|
+
applySvg(url, svg) {
|
|
6019
|
+
this.lastResolvedUrl = url;
|
|
6020
|
+
this.hostInnerHtml = this.sanitizer.bypassSecurityTrustHtml(svg);
|
|
6021
|
+
}
|
|
6022
|
+
cancelInflight() {
|
|
6023
|
+
if (this.sub) {
|
|
6024
|
+
this.sub.unsubscribe();
|
|
6025
|
+
this.sub = undefined;
|
|
6026
|
+
}
|
|
6027
|
+
}
|
|
6028
|
+
/**
|
|
6029
|
+
* Make the fetched SVG behave like a font icon:
|
|
6030
|
+
* - replace any non-"none" fill/stroke attributes (single- or
|
|
6031
|
+
* double-quoted) with currentColor so CSS `color` controls the icon
|
|
6032
|
+
* - replace any non-"none" inline `fill:` / `stroke:` style values with
|
|
6033
|
+
* currentColor
|
|
6034
|
+
* - on the root <svg> tag, add `width="1em"`, `height="1em"`, and a
|
|
6035
|
+
* default `fill="currentColor"` if missing so the icon scales with
|
|
6036
|
+
* the host element's `font-size`
|
|
6037
|
+
*/
|
|
6038
|
+
normalizeSvg(svg) {
|
|
6039
|
+
if (!svg)
|
|
6040
|
+
return '';
|
|
6041
|
+
let out = svg;
|
|
6042
|
+
// ── Color ────────────────────────────────────────────────────────
|
|
6043
|
+
out = out
|
|
6044
|
+
.replace(/fill\s*=\s*"(?!\s*none\s*")[^"]*"/gi, 'fill="currentColor"')
|
|
6045
|
+
.replace(/fill\s*=\s*'(?!\s*none\s*')[^']*'/gi, "fill='currentColor'")
|
|
6046
|
+
.replace(/stroke\s*=\s*"(?!\s*none\s*")[^"]*"/gi, 'stroke="currentColor"')
|
|
6047
|
+
.replace(/stroke\s*=\s*'(?!\s*none\s*')[^']*'/gi, "stroke='currentColor'")
|
|
6048
|
+
.replace(/(fill|stroke)\s*:\s*(?!\s*none\b)[^;"']+/gi, '$1: currentColor');
|
|
6049
|
+
out = out.replace(/<svg\b([^>]*)>/i, (_match, attrs) => {
|
|
6050
|
+
let updated = attrs;
|
|
6051
|
+
updated = updated.replace(/\swidth\s*=\s*("[^"]*"|'[^']*')/gi, '')
|
|
6052
|
+
.replace(/\s+$/, '') + ' width="1em"';
|
|
6053
|
+
updated = updated.replace(/\sheight\s*=\s*("[^"]*"|'[^']*')/gi, '')
|
|
6054
|
+
.replace(/\s+$/, '') + ' height="1em"';
|
|
6055
|
+
updated += ' fill="currentColor"';
|
|
6056
|
+
return `<svg${updated}>`;
|
|
6057
|
+
});
|
|
6058
|
+
return out;
|
|
6059
|
+
}
|
|
6060
|
+
static { this.ɵfac = function SvgIconDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SvgIconDirective)(); }; }
|
|
6061
|
+
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SvgIconDirective, selectors: [["", "iconUrl", ""]], hostVars: 1, hostBindings: function SvgIconDirective_HostBindings(rf, ctx) { if (rf & 2) {
|
|
6062
|
+
i0.ɵɵdomProperty("innerHTML", ctx.hostInnerHtml, i0.ɵɵsanitizeHtml);
|
|
6063
|
+
} }, inputs: { iconUrl: "iconUrl" }, exportAs: ["svgIcon"], features: [i0.ɵɵNgOnChangesFeature] }); }
|
|
6064
|
+
}
|
|
6065
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SvgIconDirective, [{
|
|
6066
|
+
type: Directive,
|
|
6067
|
+
args: [{
|
|
6068
|
+
standalone: true,
|
|
6069
|
+
selector: '[iconUrl]',
|
|
6070
|
+
exportAs: 'svgIcon'
|
|
6071
|
+
}]
|
|
6072
|
+
}], null, { iconUrl: [{
|
|
6073
|
+
type: Input
|
|
6074
|
+
}], hostInnerHtml: [{
|
|
6075
|
+
type: HostBinding,
|
|
6076
|
+
args: ['innerHTML']
|
|
6077
|
+
}] }); })();
|
|
6078
|
+
|
|
6079
|
+
function WmAppIconComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
6080
|
+
i0.ɵɵelement(0, "i", 0);
|
|
6081
|
+
} if (rf & 2) {
|
|
6082
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
6083
|
+
i0.ɵɵproperty("ngClass", ctx_r0._svgClasses)("ngStyle", ctx_r0.iconStyle)("iconUrl", ctx_r0.iconurl);
|
|
6084
|
+
} }
|
|
6085
|
+
function WmAppIconComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
6086
|
+
i0.ɵɵelement(0, "img", 1);
|
|
6087
|
+
i0.ɵɵpipe(1, "image");
|
|
6088
|
+
} if (rf & 2) {
|
|
6089
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
6090
|
+
i0.ɵɵproperty("ngClass", ctx_r0._imageClasses)("src", i0.ɵɵpipeBind1(1, 4, ctx_r0.iconurl), i0.ɵɵsanitizeUrl)("ngStyle", ctx_r0.iconStyle);
|
|
6091
|
+
i0.ɵɵattribute("alt", ctx_r0.alt || "");
|
|
6092
|
+
} }
|
|
6093
|
+
function WmAppIconComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
6094
|
+
i0.ɵɵelement(0, "i", 2);
|
|
6095
|
+
} if (rf & 2) {
|
|
6096
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
6097
|
+
i0.ɵɵproperty("ngClass", ctx_r0._fontClasses)("ngStyle", ctx_r0.iconStyle);
|
|
6098
|
+
} }
|
|
6099
|
+
/**
|
|
6100
|
+
* Single, reusable renderer for the SVG / image / font 3-way icon branch
|
|
6101
|
+
* that used to be duplicated across every widget that accepts an
|
|
6102
|
+
* `iconclass` + `iconurl` pair (anchor, button, panel header, card,
|
|
6103
|
+
* dialog-header, form, list, table, chart, accordion, file-upload,
|
|
6104
|
+
* rating, switch, menu, navbar, search, tabs, ...).
|
|
6105
|
+
*
|
|
6106
|
+
* Decision order:
|
|
6107
|
+
* 1. `iconurl` ending in `.svg` -> inline SVG via `[iconUrl]` directive
|
|
6108
|
+
* 2. `iconurl` (anything else) -> `<img [src]="url | image">`
|
|
6109
|
+
* 3. `iconclass` -> `<i class="app-icon {{iconclass}}">`
|
|
6110
|
+
* 4. `defaultIconClass` (if set) -> same as #3 with the fallback class
|
|
6111
|
+
* 5. otherwise -> nothing
|
|
6112
|
+
*
|
|
6113
|
+
* Notes:
|
|
6114
|
+
* - `iconurl` wins over `iconclass` when both are set: a widget owner that
|
|
6115
|
+
* bothered to configure a URL almost certainly wants it visible. Where the
|
|
6116
|
+
* old behavior was "render both" (anchor, button), use TWO `<wm-app-icon>`
|
|
6117
|
+
* elements - one with only `iconurl`, one with only `iconclass`.
|
|
6118
|
+
* - The host is `display: contents` so existing CSS selectors targeting
|
|
6119
|
+
* `.app-icon` directly inside the parent (e.g. `.btn .app-icon`) keep
|
|
6120
|
+
* working - the wrapper element is layout-transparent.
|
|
6121
|
+
*/
|
|
6122
|
+
class WmAppIconComponent {
|
|
6123
|
+
get _isSvg() {
|
|
6124
|
+
return isSvgIconUrl(this.iconurl);
|
|
6125
|
+
}
|
|
6126
|
+
get _isImage() {
|
|
6127
|
+
return !!this.iconurl && !this._isSvg;
|
|
6128
|
+
}
|
|
6129
|
+
get _fontClass() {
|
|
6130
|
+
return [this.defaultIconClass, this.iconclass]
|
|
6131
|
+
.filter(Boolean)
|
|
6132
|
+
.join(' ');
|
|
6133
|
+
}
|
|
6134
|
+
_extras() {
|
|
6135
|
+
const extras = this.defaultClasses;
|
|
6136
|
+
if (!extras) {
|
|
6137
|
+
return [];
|
|
6138
|
+
}
|
|
6139
|
+
if (Array.isArray(extras)) {
|
|
6140
|
+
return extras;
|
|
6141
|
+
}
|
|
6142
|
+
return extras.split(/\s+/).filter(Boolean);
|
|
6143
|
+
}
|
|
6144
|
+
get _svgClasses() {
|
|
6145
|
+
return ['app-icon app-icon-svg', ...this._extras()];
|
|
6146
|
+
}
|
|
6147
|
+
get _imageClasses() {
|
|
6148
|
+
return ['app-icon', ...this._extras()];
|
|
6149
|
+
}
|
|
6150
|
+
get _fontClasses() {
|
|
6151
|
+
return ['app-icon', ...this._extras(), ...this._fontClass.split(/\s+/).filter(Boolean)];
|
|
6152
|
+
}
|
|
6153
|
+
static { this.ɵfac = function WmAppIconComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || WmAppIconComponent)(); }; }
|
|
6154
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WmAppIconComponent, selectors: [["wm-app-icon"]], hostVars: 2, hostBindings: function WmAppIconComponent_HostBindings(rf, ctx) { if (rf & 2) {
|
|
6155
|
+
i0.ɵɵstyleProp("display", "contents");
|
|
6156
|
+
} }, inputs: { iconclass: "iconclass", iconurl: "iconurl", defaultIconClass: "defaultIconClass", defaultClasses: "defaultClasses", iconStyle: "iconStyle", alt: "alt" }, decls: 3, vars: 1, consts: [["role", "img", "aria-hidden", "true", "data-identifier", "svg", 3, "ngClass", "ngStyle", "iconUrl"], ["data-identifier", "img", 3, "ngClass", "src", "ngStyle"], ["aria-hidden", "true", 3, "ngClass", "ngStyle"]], template: function WmAppIconComponent_Template(rf, ctx) { if (rf & 1) {
|
|
6157
|
+
i0.ɵɵconditionalCreate(0, WmAppIconComponent_Conditional_0_Template, 1, 3, "i", 0)(1, WmAppIconComponent_Conditional_1_Template, 2, 6, "img", 1)(2, WmAppIconComponent_Conditional_2_Template, 1, 2, "i", 2);
|
|
6158
|
+
} if (rf & 2) {
|
|
6159
|
+
i0.ɵɵconditional(ctx._isSvg ? 0 : ctx._isImage ? 1 : ctx._fontClass ? 2 : -1);
|
|
6160
|
+
} }, dependencies: [NgClass, NgStyle, SvgIconDirective, ImagePipe], encapsulation: 2 }); }
|
|
6161
|
+
}
|
|
6162
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WmAppIconComponent, [{
|
|
6163
|
+
type: Component,
|
|
6164
|
+
args: [{
|
|
6165
|
+
standalone: true,
|
|
6166
|
+
selector: 'wm-app-icon',
|
|
6167
|
+
imports: [NgClass, NgStyle, SvgIconDirective, ImagePipe],
|
|
6168
|
+
encapsulation: ViewEncapsulation.None,
|
|
6169
|
+
host: {
|
|
6170
|
+
'[style.display]': '"contents"'
|
|
6171
|
+
},
|
|
6172
|
+
template: `
|
|
6173
|
+
@if (_isSvg) {
|
|
6174
|
+
<i [ngClass]="_svgClasses"
|
|
6175
|
+
role="img"
|
|
6176
|
+
aria-hidden="true"
|
|
6177
|
+
data-identifier="svg"
|
|
6178
|
+
[ngStyle]="iconStyle"
|
|
6179
|
+
[iconUrl]="iconurl"></i>
|
|
6180
|
+
} @else if (_isImage) {
|
|
6181
|
+
<img [ngClass]="_imageClasses"
|
|
6182
|
+
data-identifier="img"
|
|
6183
|
+
[attr.alt]="alt || ''"
|
|
6184
|
+
[src]="iconurl | image"
|
|
6185
|
+
[ngStyle]="iconStyle"/>
|
|
6186
|
+
} @else if (_fontClass) {
|
|
6187
|
+
<i [ngClass]="_fontClasses"
|
|
6188
|
+
aria-hidden="true"
|
|
6189
|
+
[ngStyle]="iconStyle"></i>
|
|
6190
|
+
}
|
|
6191
|
+
`
|
|
6192
|
+
}]
|
|
6193
|
+
}], null, { iconclass: [{
|
|
6194
|
+
type: Input
|
|
6195
|
+
}], iconurl: [{
|
|
6196
|
+
type: Input
|
|
6197
|
+
}], defaultIconClass: [{
|
|
6198
|
+
type: Input
|
|
6199
|
+
}], defaultClasses: [{
|
|
6200
|
+
type: Input
|
|
6201
|
+
}], iconStyle: [{
|
|
6202
|
+
type: Input
|
|
6203
|
+
}], alt: [{
|
|
6204
|
+
type: Input
|
|
6205
|
+
}] }); })();
|
|
6206
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WmAppIconComponent, { className: "WmAppIconComponent", filePath: "widgets/common/base/app-icon-component.ts", lineNumber: 58 }); })();
|
|
6207
|
+
|
|
5912
6208
|
/**
|
|
5913
6209
|
* Generated bundle index. Do not edit.
|
|
5914
6210
|
*/
|
|
5915
6211
|
|
|
5916
|
-
export { ALLFIELDS, APPLY_STYLES_TYPE, AUTOCLOSE_TYPE, AUTO_LAYOUT_PROPS, AutoLayout, BaseComponent, BaseContainerComponent, BaseFieldValidations, ContainerDirective, Context, CustomPipe, CustomWidgetContainerDirective, DEBOUNCE_TIMES, DISPLAY_TYPE, DataSetItem, DatasetAwareNavComponent, DialogRef, DialogServiceImpl, EDIT_MODE, EVENTS_MAP, FileExtensionFromMimePipe, FileIconClassPipe, FileSizePipe, FilterPipe, INPUTMODE, ImagePipe, ItemTemplateDirective, LIVE_CONSTANTS, LazyLoadDirective, Live_Operations, MessageComponent, NAVIGATION_TYPE, NumberToStringPipe, PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, PROP_TYPE, PartialContainerDirective, PartialDirective, PartialParamDirective, PartialParamHandlerDirective, PrefixPipe, PullToRefresh, RedrawableDirective, RepeatTemplateDirective, SanitizePipe, ShowInDeviceDirective, StateClassPipe, StringToNumberPipe, StylableComponent, SuffixPipe, TemplateReplacePipe, TextContentDirective, TimeFromNowPipe, ToCurrencyPipe, ToDatePipe, ToNumberPipe, TrailingZeroDecimalPipe, TrustAsPipe, WidgetConfig, WidgetRef, applyFilterOnField, configureDnD, convertDataToObject, createArrayFrom, extractDataAsArray, extractDataSourceName, fetchDistinctValues, fetchRelatedFieldData, filterDate, getBackGroundImageUrl, getConditionalClasses, getContainerTargetClass, getCurrentWidgets, getDataTableFilterWidget, getDefaultValue, getDefaultViewModeWidget, getDistinctFieldProperties, getDistinctValues, getDistinctValuesForField, getEditModeWidget, getEmptyMatchMode, getEnableEmptyFilter, getEvaluatedData, getFieldLayoutConfig, getFieldTypeWidgetTypesMap, getImageUrl, getKeyboardFocusableElements, getMatchModeMsgs, getMatchModeTypesMap, getObjValueByKey, getOrderByExpr, getOrderedDataset, getRangeFieldValue, getRangeMatchMode, getRowOperationsColumn, getUniqObjsByDataField, getWatchIdentifier, getWidgetPropsByType, groupData, handleHeaderClick, hasLinkToCurrentPage, interpolateBindExpressions, isActiveNavItem, isBooleanAttr, isDataSetWidget, isDimensionProp, isStyle, parseValueByType, performDataOperation, prepareFieldDefs, propNameCSSKeyMap, provideAs, provideAsDialogRef, provideAsWidgetRef, refreshDataSource, register$1 as register, registerFormWidget, setFocusTrap, setHeaderConfig, setHeaderConfigForTable, setItemByCompare, styler, toggleAllHeaders, transformData, transformDataWithKeys, transformFormData, unsupportedStatePersistenceTypes, updateDeviceView, widgetIdGenerator };
|
|
6212
|
+
export { ALLFIELDS, APPLY_STYLES_TYPE, AUTOCLOSE_TYPE, AUTO_LAYOUT_PROPS, AutoLayout, BaseComponent, BaseContainerComponent, BaseFieldValidations, ContainerDirective, Context, CustomPipe, CustomWidgetContainerDirective, DEBOUNCE_TIMES, DISPLAY_TYPE, DataSetItem, DatasetAwareNavComponent, DialogRef, DialogServiceImpl, EDIT_MODE, EVENTS_MAP, FileExtensionFromMimePipe, FileIconClassPipe, FileSizePipe, FilterPipe, INPUTMODE, ImagePipe, ItemTemplateDirective, LIVE_CONSTANTS, LazyLoadDirective, Live_Operations, MessageComponent, NAVIGATION_TYPE, NumberToStringPipe, PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, PROP_TYPE, PartialContainerDirective, PartialDirective, PartialParamDirective, PartialParamHandlerDirective, PrefixPipe, PullToRefresh, RedrawableDirective, RepeatTemplateDirective, SanitizePipe, ShowInDeviceDirective, StateClassPipe, StringToNumberPipe, StylableComponent, SuffixPipe, SvgIconDirective, TemplateReplacePipe, TextContentDirective, TimeFromNowPipe, ToCurrencyPipe, ToDatePipe, ToNumberPipe, TrailingZeroDecimalPipe, TrustAsPipe, WidgetConfig, WidgetRef, WmAppIconComponent, applyFilterOnField, configureDnD, convertDataToObject, createArrayFrom, extractDataAsArray, extractDataSourceName, fetchDistinctValues, fetchRelatedFieldData, filterDate, getBackGroundImageUrl, getConditionalClasses, getContainerTargetClass, getCurrentWidgets, getDataTableFilterWidget, getDefaultValue, getDefaultViewModeWidget, getDistinctFieldProperties, getDistinctValues, getDistinctValuesForField, getEditModeWidget, getEmptyMatchMode, getEnableEmptyFilter, getEvaluatedData, getFieldLayoutConfig, getFieldTypeWidgetTypesMap, getImageUrl, getKeyboardFocusableElements, getMatchModeMsgs, getMatchModeTypesMap, getObjValueByKey, getOrderByExpr, getOrderedDataset, getRangeFieldValue, getRangeMatchMode, getRowOperationsColumn, getUniqObjsByDataField, getWatchIdentifier, getWidgetPropsByType, groupData, handleHeaderClick, hasLinkToCurrentPage, interpolateBindExpressions, isActiveNavItem, isBooleanAttr, isDataSetWidget, isDimensionProp, isStyle, isSvgIconUrl, parseValueByType, performDataOperation, prepareFieldDefs, propNameCSSKeyMap, provideAs, provideAsDialogRef, provideAsWidgetRef, refreshDataSource, register$1 as register, registerFormWidget, setFocusTrap, setHeaderConfig, setHeaderConfigForTable, setItemByCompare, styler, toggleAllHeaders, transformData, transformDataWithKeys, transformFormData, unsupportedStatePersistenceTypes, updateDeviceView, widgetIdGenerator };
|
|
5917
6213
|
//# sourceMappingURL=index.mjs.map
|