@magmonium/one 0.4.18 → 0.4.20
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/assets/docs/en/app-repo.md +294 -0
- package/assets/i18n/en.json +1 -0
- package/assets/index.json +1 -1
- package/fesm2022/{magmonium-one-image-editor-BbFlj-1H.mjs → magmonium-one-image-editor-B2079TFM.mjs} +2 -2
- package/fesm2022/{magmonium-one-image-editor-BbFlj-1H.mjs.map → magmonium-one-image-editor-B2079TFM.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-magmonium-one-xCRWlG4J.mjs → magmonium-one-magmonium-one-BLuMt3bj.mjs} +553 -62
- package/fesm2022/magmonium-one-magmonium-one-BLuMt3bj.mjs.map +1 -0
- package/fesm2022/{magmonium-one-otp-BDzRVFz5.mjs → magmonium-one-otp-Kcns6JtV.mjs} +2 -2
- package/fesm2022/{magmonium-one-otp-BDzRVFz5.mjs.map → magmonium-one-otp-Kcns6JtV.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-password-C-4aA16X.mjs → magmonium-one-password-C1VDuH8J.mjs} +2 -2
- package/fesm2022/{magmonium-one-password-C-4aA16X.mjs.map → magmonium-one-password-C1VDuH8J.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-toggle-BcNgKeU8.mjs → magmonium-one-toggle-BeNbv_Ox.mjs} +2 -2
- package/fesm2022/{magmonium-one-toggle-BcNgKeU8.mjs.map → magmonium-one-toggle-BeNbv_Ox.mjs.map} +1 -1
- package/fesm2022/magmonium-one.mjs +1 -1
- package/package.json +1 -1
- package/types/magmonium-one.d.ts +201 -8
- package/fesm2022/magmonium-one-magmonium-one-xCRWlG4J.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, signal, inject, Injectable, DestroyRef, linkedSignal, computed, DOCUMENT, ApplicationRef, RendererFactory2, createComponent, EnvironmentInjector, Pipe, ChangeDetectorRef, untracked, ElementRef, afterNextRender, input, ChangeDetectionStrategy, Component, effect, Injector, reflectComponentType, inputBinding, model, HostListener, Renderer2, Directive, output, viewChild, ViewEncapsulation, forwardRef, Input, booleanAttribute, afterRenderEffect, outputBinding, twoWayBinding, runInInjectionContext, contentChild, TemplateRef, contentChildren, ViewContainerRef, HostAttributeToken, viewChildren, afterEveryRender, EventEmitter, Output, ViewChild, ContentChild, provideZonelessChangeDetection, makeEnvironmentProviders, HostBinding, provideAppInitializer, provideBrowserGlobalErrorListeners, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
2
|
+
import { InjectionToken, signal, inject, Injectable, DestroyRef, linkedSignal, computed, DOCUMENT, ApplicationRef, RendererFactory2, createComponent, EnvironmentInjector, Pipe, ChangeDetectorRef, untracked, ElementRef, afterNextRender, input, ChangeDetectionStrategy, Component, effect, Injector, reflectComponentType, inputBinding, model, HostListener, Renderer2, Directive, output, viewChild, ViewEncapsulation, forwardRef, Input, booleanAttribute, afterRenderEffect, outputBinding, twoWayBinding, runInInjectionContext, contentChild, TemplateRef, contentChildren, ViewContainerRef, HostAttributeToken, viewChildren, afterEveryRender, EventEmitter, Output, ViewChild, numberAttribute, ContentChild, provideZonelessChangeDetection, makeEnvironmentProviders, HostBinding, provideAppInitializer, provideBrowserGlobalErrorListeners, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
3
3
|
import { HttpClient, HttpParams, HttpErrorResponse, provideHttpClient, withFetch, withInterceptors } from '@angular/common/http';
|
|
4
4
|
import { firstValueFrom, of, tap, catchError, throwError, shareReplay, finalize, forkJoin, map, Observable, pipe, interval, fromEvent, switchMap as switchMap$1, filter, Subject, EMPTY, from, combineLatest, race, take, startWith } from 'rxjs';
|
|
5
5
|
import { rxResource, toObservable, toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
@@ -109,6 +109,12 @@ const APP_CONTEXT_REF = new InjectionToken('APP_CONTEXT_REF');
|
|
|
109
109
|
* 0007) and init asks for Agreement to it.
|
|
110
110
|
*/
|
|
111
111
|
const APP_LINK = new InjectionToken('APP_LINK', { providedIn: 'root', factory: () => signal(undefined) });
|
|
112
|
+
/**
|
|
113
|
+
* The loading counter this application's requests move, ahead of the host's
|
|
114
|
+
* shared one. A Plugin provides its own so its requests never turn the host's
|
|
115
|
+
* `busy` on (libs/one CONTEXT.md Plugin); unset, the host's counter is used.
|
|
116
|
+
*/
|
|
117
|
+
const LOADING_ACTIONS_REF = new InjectionToken('LOADING_ACTIONS_REF');
|
|
112
118
|
const IS_SIDE_PANEL = new InjectionToken('IS_SIDE_PANEL');
|
|
113
119
|
// SVG markup supplied by name from memory instead of fetched as an asset.
|
|
114
120
|
// `m-icon` reads it before its own resource, so a glyph that exists only in a
|
|
@@ -190,6 +196,32 @@ function setWcTier(remoteId, tier) {
|
|
|
190
196
|
delete tiers[remoteId];
|
|
191
197
|
win.__MAGMONIUM_WC_TIERS__ = tiers;
|
|
192
198
|
}
|
|
199
|
+
/** Pins an AppLink's `local` tier to a dev-server port, or unpins it. */
|
|
200
|
+
function setWcLocalPort(remoteId, port) {
|
|
201
|
+
const win = tierWindow();
|
|
202
|
+
if (!win)
|
|
203
|
+
return;
|
|
204
|
+
const ports = { ...(win.__MAGMONIUM_WC_LOCAL_PORTS__ ?? {}) };
|
|
205
|
+
if (port)
|
|
206
|
+
ports[remoteId] = port;
|
|
207
|
+
else
|
|
208
|
+
delete ports[remoteId];
|
|
209
|
+
win.__MAGMONIUM_WC_LOCAL_PORTS__ = ports;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Where an AppLink pinned to `local` is served: the app's own dev server, whose
|
|
213
|
+
* `assets/` holds `remote/app-wc.json`, the bundle and every asset. Undefined
|
|
214
|
+
* when it is not pinned there, or has no usable port.
|
|
215
|
+
*/
|
|
216
|
+
function wcLocalBaseOf(remoteId) {
|
|
217
|
+
const win = tierWindow();
|
|
218
|
+
if (win?.__MAGMONIUM_WC_TIERS__?.[remoteId] !== 'local')
|
|
219
|
+
return undefined;
|
|
220
|
+
const port = win.__MAGMONIUM_WC_LOCAL_PORTS__?.[remoteId];
|
|
221
|
+
return port && Number.isInteger(port) && port > 0 && port < 65536
|
|
222
|
+
? `http://localhost:${port}/assets`
|
|
223
|
+
: undefined;
|
|
224
|
+
}
|
|
193
225
|
function wcTierOf(remoteId) {
|
|
194
226
|
return tierWindow()?.__MAGMONIUM_WC_TIERS__?.[remoteId];
|
|
195
227
|
}
|
|
@@ -207,6 +239,10 @@ function recordDefinedWcTier(selector, tier) {
|
|
|
207
239
|
};
|
|
208
240
|
}
|
|
209
241
|
function buildWcBaseUrl(apiUrl, remoteId) {
|
|
242
|
+
// Asked for by name, so it wins over every guess below.
|
|
243
|
+
const local = wcLocalBaseOf(remoteId);
|
|
244
|
+
if (local)
|
|
245
|
+
return local;
|
|
210
246
|
if (tierWindow()?.__MAGMONIUM_STANDALONE__) {
|
|
211
247
|
return '/assets';
|
|
212
248
|
}
|
|
@@ -214,7 +250,7 @@ function buildWcBaseUrl(apiUrl, remoteId) {
|
|
|
214
250
|
return `/local-dist/m-${remoteId}-wc`;
|
|
215
251
|
}
|
|
216
252
|
const tier = wcTierOf(remoteId);
|
|
217
|
-
return `${apiUrl}/store/v1/wc/${remoteId}${tier ?
|
|
253
|
+
return `${apiUrl}/store/v1/wc/${remoteId}${tier === 'beta' ? '/beta' : ''}`;
|
|
218
254
|
}
|
|
219
255
|
|
|
220
256
|
/** Access domains — routed to Auth URL when it differs from Backend URL (ADR 0012). */
|
|
@@ -306,11 +342,14 @@ class HttpService {
|
|
|
306
342
|
return this.http.get(url, { responseType: 'text' });
|
|
307
343
|
}
|
|
308
344
|
wc(link, filePath) {
|
|
345
|
+
const local = wcLocalBaseOf(link);
|
|
346
|
+
if (local)
|
|
347
|
+
return this.http.get(`${local}/${filePath.join('/')}`);
|
|
309
348
|
if (isLocalhost) {
|
|
310
349
|
return this.http.get(`/local-dist/m-${link}-wc/${filePath.join('/')}`);
|
|
311
350
|
}
|
|
312
351
|
const tier = wcTierOf(link);
|
|
313
|
-
return this.get('store', ['wc', link, ...(tier ? [tier] : []), ...filePath]);
|
|
352
|
+
return this.get('store', ['wc', link, ...(tier === 'beta' ? [tier] : []), ...filePath]);
|
|
314
353
|
}
|
|
315
354
|
buildWcUrl(link) {
|
|
316
355
|
return buildWcBaseUrl(this.url, link);
|
|
@@ -2869,13 +2908,23 @@ const GRID_BREAKPOINTS = {
|
|
|
2869
2908
|
xxl: 1400,
|
|
2870
2909
|
};
|
|
2871
2910
|
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
const
|
|
2911
|
+
/**
|
|
2912
|
+
* One loading counter and the actions that move it. The module's own is the
|
|
2913
|
+
* app-wide one every Screen's `busy` reads; a Plugin makes another so its
|
|
2914
|
+
* requests never move it (libs/one CONTEXT.md Plugin).
|
|
2915
|
+
*/
|
|
2916
|
+
function createLoadingState() {
|
|
2917
|
+
const loadingSignal = signal({
|
|
2918
|
+
requestCount: 0,
|
|
2919
|
+
}, ...(ngDevMode ? [{ debugName: "loadingSignal" }] : /* istanbul ignore next */ []));
|
|
2920
|
+
return {
|
|
2921
|
+
isLoading: computed(() => loadingSignal().requestCount > 0),
|
|
2922
|
+
hasError: computed(() => !!loadingSignal().error),
|
|
2923
|
+
isCancelled: computed(() => !!loadingSignal().cancelled),
|
|
2924
|
+
actions: createLoadingActions(loadingSignal),
|
|
2925
|
+
};
|
|
2926
|
+
}
|
|
2927
|
+
const createLoadingActions = (loadingSignal) => ({
|
|
2879
2928
|
// Synchronous, where stopLoading is deferred. Deferring both collapsed a fast
|
|
2880
2929
|
// or cached response into one microtask batch — the count went 0 → 1 → 0 with
|
|
2881
2930
|
// no change detection in between, so the overlay never rendered a frame. The
|
|
@@ -2944,7 +2993,12 @@ const loadingActions = {
|
|
|
2944
2993
|
});
|
|
2945
2994
|
});
|
|
2946
2995
|
},
|
|
2947
|
-
};
|
|
2996
|
+
});
|
|
2997
|
+
const appLoading = createLoadingState();
|
|
2998
|
+
const isLoadingComputed = appLoading.isLoading;
|
|
2999
|
+
const hasErrorComputed = appLoading.hasError;
|
|
3000
|
+
const isCancelledComputed = appLoading.isCancelled;
|
|
3001
|
+
const loadingActions = appLoading.actions;
|
|
2948
3002
|
|
|
2949
3003
|
function classListSignal(element) {
|
|
2950
3004
|
const classSignal = signal(Array.from(element.classList), ...(ngDevMode ? [{ debugName: "classSignal" }] : /* istanbul ignore next */ []));
|
|
@@ -4036,9 +4090,9 @@ const isDefaultNav = (navId) => navIdSegment(navId) === DEFAULT_NAV_SEGMENT;
|
|
|
4036
4090
|
* landing on `root_app_default` is standing on `root_app`, and the panel says
|
|
4037
4091
|
* so rather than naming a segment that is on no menu.
|
|
4038
4092
|
*/
|
|
4039
|
-
const visibleNavId = (navId) => {
|
|
4093
|
+
const visibleNavId = (navId, transparent = EMPTY_HIDDEN) => {
|
|
4040
4094
|
let id = navId;
|
|
4041
|
-
while (id !== ROOT_NAV$1 && isDefaultNav(id))
|
|
4095
|
+
while (id !== ROOT_NAV$1 && (isDefaultNav(id) || transparent.has(id)))
|
|
4042
4096
|
id = parentNavId(id) ?? ROOT_NAV$1;
|
|
4043
4097
|
return id;
|
|
4044
4098
|
};
|
|
@@ -4059,6 +4113,12 @@ const childIdsOf = (navId, navMap) => {
|
|
|
4059
4113
|
return declared;
|
|
4060
4114
|
return Object.keys(navMap).filter((id) => parentNavId(id) === navId && !PLATFORM_BUTTON_NAV_IDS.includes(id));
|
|
4061
4115
|
};
|
|
4116
|
+
/**
|
|
4117
|
+
* Whether `navId` is one of the Platform Navs a mounted app brings under its
|
|
4118
|
+
* own root (`<root>_settings`, …). An Open App draws as part of its host, so
|
|
4119
|
+
* the host's chrome is the only chrome — the app's own is never a row.
|
|
4120
|
+
*/
|
|
4121
|
+
const isOwnChrome = (navId, appRootId) => PLATFORM_BUTTON_NAV_IDS.some((platformId) => navId === appRootId + platformId.slice(ROOT_NAV$1.length));
|
|
4062
4122
|
/**
|
|
4063
4123
|
* The children a menu may draw. A Nav needs a title to be a row at all, and a
|
|
4064
4124
|
* `default` node is not a row: it is its parent's own content, so it is
|
|
@@ -4086,15 +4146,17 @@ const menuChildIds = (navId, navMap, dynamicRows = {}, instances = {},
|
|
|
4086
4146
|
// A set rather than a predicate: the answers are resolved once per read of
|
|
4087
4147
|
// the widget maps, and this walk is called from four places that would
|
|
4088
4148
|
// otherwise each resolve them again.
|
|
4089
|
-
hidden = EMPTY_HIDDEN
|
|
4149
|
+
hidden = EMPTY_HIDDEN,
|
|
4150
|
+
// Default Navs by role rather than by name (DeriveBreadcrumbParams).
|
|
4151
|
+
transparent = EMPTY_HIDDEN) => childIdsOf(navId, navMap).flatMap((childId) => {
|
|
4090
4152
|
// Hidden first, and before the Default Nav descent: a hidden parent takes
|
|
4091
4153
|
// its children with it, which is the same cascade the route guard walks —
|
|
4092
4154
|
// a row spliced out of a panel whose children still listed beneath it
|
|
4093
4155
|
// would be the panel that looks correct and is not.
|
|
4094
4156
|
if (hidden.has(childId))
|
|
4095
4157
|
return [];
|
|
4096
|
-
if (isDefaultNav(childId))
|
|
4097
|
-
return menuChildIds(childId, navMap, dynamicRows, instances, hidden);
|
|
4158
|
+
if (isDefaultNav(childId) || transparent.has(childId))
|
|
4159
|
+
return menuChildIds(childId, navMap, dynamicRows, instances, hidden, transparent).filter((id) => !transparent.has(childId) || !isOwnChrome(id, childId));
|
|
4098
4160
|
if (navMap[childId]?.presentation === 'dynamic') {
|
|
4099
4161
|
if (drawsRows(childId, dynamicRows))
|
|
4100
4162
|
return [childId];
|
|
@@ -4115,10 +4177,11 @@ hidden = EMPTY_HIDDEN) => childIdsOf(navId, navMap).flatMap((childId) => {
|
|
|
4115
4177
|
* list the User moved through and the row they are on is the one marked
|
|
4116
4178
|
* active. Root is the floor: its own children are the last list there is.
|
|
4117
4179
|
*/
|
|
4118
|
-
const navMenuOwnerId = (navId, navMap, hasOwnContent = false, dynamicRows = {}, instances = {}, hidden = EMPTY_HIDDEN) => {
|
|
4119
|
-
const visible = visibleNavId(navId);
|
|
4180
|
+
const navMenuOwnerId = (navId, navMap, hasOwnContent = false, dynamicRows = {}, instances = {}, hidden = EMPTY_HIDDEN, transparent = EMPTY_HIDDEN) => {
|
|
4181
|
+
const visible = visibleNavId(navId, transparent);
|
|
4120
4182
|
if (visible === ROOT_NAV$1 ||
|
|
4121
|
-
menuChildIds(visible, navMap, dynamicRows, instances, hidden)
|
|
4183
|
+
menuChildIds(visible, navMap, dynamicRows, instances, hidden, transparent)
|
|
4184
|
+
.length) {
|
|
4122
4185
|
return visible;
|
|
4123
4186
|
}
|
|
4124
4187
|
// A panel that answers with a widget of its own keeps its own title —
|
|
@@ -4132,8 +4195,9 @@ const navMenuOwnerId = (navId, navMap, hasOwnContent = false, dynamicRows = {},
|
|
|
4132
4195
|
// own row marked. Where no ancestor lists anything there is no better title
|
|
4133
4196
|
// than the one we are on — a mistitled empty panel is worse than a titled one.
|
|
4134
4197
|
for (let ancestor = parentNavId(visible); ancestor; ancestor = parentNavId(ancestor)) {
|
|
4135
|
-
const owner = visibleNavId(ancestor);
|
|
4136
|
-
if (menuChildIds(owner, navMap, dynamicRows, instances, hidden)
|
|
4198
|
+
const owner = visibleNavId(ancestor, transparent);
|
|
4199
|
+
if (menuChildIds(owner, navMap, dynamicRows, instances, hidden, transparent)
|
|
4200
|
+
.length)
|
|
4137
4201
|
return owner;
|
|
4138
4202
|
if (owner === ROOT_NAV$1)
|
|
4139
4203
|
break;
|
|
@@ -4149,11 +4213,11 @@ const navMenuOwnerId = (navId, navMap, hasOwnContent = false, dynamicRows = {},
|
|
|
4149
4213
|
* store behind it fills, and a chevron waiting on them would pop in late or
|
|
4150
4214
|
* not at all. One that resolves nothing leaves the Browse on the empty state.
|
|
4151
4215
|
*/
|
|
4152
|
-
const isBrowsable = (navId, navMap, dynamicRows, instances, hidden) => navMap[navId]?.kind === 'url' &&
|
|
4216
|
+
const isBrowsable = (navId, navMap, dynamicRows, instances, hidden, transparent) => navMap[navId]?.kind === 'url' &&
|
|
4153
4217
|
menuChildIds(navId, navMap, Object.fromEntries(Object.entries(dynamicRows).map(([id, rows]) => [
|
|
4154
4218
|
id,
|
|
4155
4219
|
{ ...rows, loading: true },
|
|
4156
|
-
])), instances, hidden).length > 0;
|
|
4220
|
+
])), instances, hidden, transparent).length > 0;
|
|
4157
4221
|
/**
|
|
4158
4222
|
* The rows one panel draws. A `dynamic` child with a NavRowSource behind it is
|
|
4159
4223
|
* **transparent** the way a Default Nav is: its resolved rows are spliced where
|
|
@@ -4167,14 +4231,14 @@ const isBrowsable = (navId, navMap, dynamicRows, instances, hidden) => navMap[na
|
|
|
4167
4231
|
* falling through to the static siblings around it would show a panel that
|
|
4168
4232
|
* looks correct and is not.
|
|
4169
4233
|
*/
|
|
4170
|
-
const buildNavMenus = (navId, navMap, anchor, dynamicRows = {}, routeParams, instances = {}, hidden = EMPTY_HIDDEN) => menuChildIds(navId, navMap, dynamicRows, instances, hidden).flatMap((childId) => {
|
|
4234
|
+
const buildNavMenus = (navId, navMap, anchor, dynamicRows = {}, routeParams, instances = {}, hidden = EMPTY_HIDDEN, transparent = EMPTY_HIDDEN) => menuChildIds(navId, navMap, dynamicRows, instances, hidden, transparent).flatMap((childId) => {
|
|
4171
4235
|
const nav = navMap[childId];
|
|
4172
4236
|
const resolved = nav && dynamicRows[childId];
|
|
4173
4237
|
// The instances above this row, whether it is a row of its own or one of
|
|
4174
4238
|
// the rows a source resolved: a panel drawn beneath a dynamic Nav is a
|
|
4175
4239
|
// panel every entry in it routes behind.
|
|
4176
4240
|
const inherited = navParamsFor(parentNavId(childId) ?? childId, navMap, routeParams);
|
|
4177
|
-
const browsable = isBrowsable(childId, navMap, dynamicRows, instances, hidden)
|
|
4241
|
+
const browsable = isBrowsable(childId, navMap, dynamicRows, instances, hidden, transparent)
|
|
4178
4242
|
? { browsable: true }
|
|
4179
4243
|
: {};
|
|
4180
4244
|
if (!nav || nav.presentation !== 'dynamic' || !resolved) {
|
|
@@ -4204,7 +4268,7 @@ const mergeTrail = (derived, override, derivedHeader) => {
|
|
|
4204
4268
|
return { trail, header: override.header ?? derivedHeader };
|
|
4205
4269
|
};
|
|
4206
4270
|
function deriveBreadcrumb(params) {
|
|
4207
|
-
const { navId, navMap, anchor, breadcrumb, navMenu, hasOwnContent, dynamicRows, routeParams, instances, hidden = EMPTY_HIDDEN, } = params;
|
|
4271
|
+
const { navId, navMap, anchor, breadcrumb, navMenu, hasOwnContent, dynamicRows, routeParams, instances, hidden = EMPTY_HIDDEN, transparent = EMPTY_HIDDEN, } = params;
|
|
4208
4272
|
if (!navId)
|
|
4209
4273
|
return emptyResult();
|
|
4210
4274
|
/**
|
|
@@ -4253,15 +4317,15 @@ function deriveBreadcrumb(params) {
|
|
|
4253
4317
|
// The header and the trail belong to whichever Nav owns the menu below them:
|
|
4254
4318
|
// on a leaf that is the parent, so the User reads the list they are in with
|
|
4255
4319
|
// their own row marked, rather than a title over an empty panel.
|
|
4256
|
-
const ownerId = navMenuOwnerId(navId, navMap, hasOwnContent, dynamicRows, instances, hidden);
|
|
4320
|
+
const ownerId = navMenuOwnerId(navId, navMap, hasOwnContent, dynamicRows, instances, hidden, transparent);
|
|
4257
4321
|
// An emitted breadcrumb names the panel it was emitted for. Once the panel
|
|
4258
4322
|
// has been handed up to an ancestor it is no longer that panel, so the
|
|
4259
4323
|
// override would title the ancestor's list after the leaf we left.
|
|
4260
|
-
const ownPanel = ownerId === visibleNavId(navId);
|
|
4324
|
+
const ownPanel = ownerId === visibleNavId(navId, transparent);
|
|
4261
4325
|
const chain = navIdChain(ownerId);
|
|
4262
4326
|
const derivedTrail = chain
|
|
4263
4327
|
.slice(0, -1)
|
|
4264
|
-
.filter((id) => !isDefaultNav(id))
|
|
4328
|
+
.filter((id) => !isDefaultNav(id) && !transparent.has(id))
|
|
4265
4329
|
.map((id) => toTrailItem(id, navMap, anchor, instanceOf(id), rowParams(id)));
|
|
4266
4330
|
const nav = navMap[ownerId];
|
|
4267
4331
|
const ownerParams = rowParams(ownerId);
|
|
@@ -4283,7 +4347,7 @@ function deriveBreadcrumb(params) {
|
|
|
4283
4347
|
breadcrumb: { trail, header },
|
|
4284
4348
|
navMenus: navMenu?.length && ownPanel
|
|
4285
4349
|
? navMenu
|
|
4286
|
-
: buildNavMenus(ownerId, navMap, anchor, dynamicRows, routeParams, instances, hidden),
|
|
4350
|
+
: buildNavMenus(ownerId, navMap, anchor, dynamicRows, routeParams, instances, hidden, transparent),
|
|
4287
4351
|
};
|
|
4288
4352
|
}
|
|
4289
4353
|
|
|
@@ -4562,6 +4626,15 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4562
4626
|
? [{ name: appLink, link: appLink, appNavId }, ...mounts]
|
|
4563
4627
|
: mounts;
|
|
4564
4628
|
}, ...(ngDevMode ? [{ debugName: "allMounts" }] : /* istanbul ignore next */ []));
|
|
4629
|
+
/**
|
|
4630
|
+
* Each mounted Open App's root (store CONTEXT.md): the host draws the app
|
|
4631
|
+
* as its own, so its root is a Default Nav by role — its rows are the
|
|
4632
|
+
* host's rows, and it is never a trail entry, a header or a node with the
|
|
4633
|
+
* app's logo.
|
|
4634
|
+
*/
|
|
4635
|
+
const transparentNavIds = computed(() => new Set(allMounts()
|
|
4636
|
+
.filter(({ link }) => store.wcConfigMap()[link]?.open)
|
|
4637
|
+
.map(({ appNavId }) => appNavId)), ...(ngDevMode ? [{ debugName: "transparentNavIds" }] : /* istanbul ignore next */ []));
|
|
4565
4638
|
/**
|
|
4566
4639
|
* The side apps the menu lists, in mount order: a registered mount whose
|
|
4567
4640
|
* segment the URL holds, then any segment no mount has claimed yet —
|
|
@@ -4903,10 +4976,15 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4903
4976
|
const hit = widgetEntry();
|
|
4904
4977
|
return hit && isNavMenuConfig(hit.entry) ? hit.entry : null;
|
|
4905
4978
|
}, ...(ngDevMode ? [{ debugName: "resolvedNavMenuConfig" }] : /* istanbul ignore next */ []));
|
|
4906
|
-
|
|
4979
|
+
/** The active app's config as fetched, Open App or not. */
|
|
4980
|
+
const activeWcConfig = computed(() => {
|
|
4907
4981
|
const appLink = store.appLink();
|
|
4908
4982
|
return appLink ? store.wcConfigMap()[appLink] : undefined;
|
|
4909
|
-
}, ...(ngDevMode ? [{ debugName: "
|
|
4983
|
+
}, ...(ngDevMode ? [{ debugName: "activeWcConfig" }] : /* istanbul ignore next */ []));
|
|
4984
|
+
/** The active app draws as part of the host: no logo, footer or settings of its own. */
|
|
4985
|
+
const activeAppOpen = computed(() => !!activeWcConfig()?.open, ...(ngDevMode ? [{ debugName: "activeAppOpen" }] : /* istanbul ignore next */ []));
|
|
4986
|
+
/** The active app as the chrome shows it — none while it is an Open App. */
|
|
4987
|
+
const currentWcConfig = computed(() => activeAppOpen() ? undefined : activeWcConfig(), ...(ngDevMode ? [{ debugName: "currentWcConfig" }] : /* istanbul ignore next */ []));
|
|
4910
4988
|
/**
|
|
4911
4989
|
* The Nav the open panel *is*, which is the key its content answered to.
|
|
4912
4990
|
* A Murl that fell through to its root-anchored panel is showing that
|
|
@@ -4923,8 +5001,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4923
5001
|
// asset holds — left the page's own menu up under its own header.
|
|
4924
5002
|
const map = store.navMap();
|
|
4925
5003
|
const rows = dynamicRows();
|
|
4926
|
-
return (candidates.find((c) => menuChildIds(c, map, rows, dynamicInstances(), hiddenNavIds())
|
|
4927
|
-
.length) ??
|
|
5004
|
+
return (candidates.find((c) => menuChildIds(c, map, rows, dynamicInstances(), hiddenNavIds(), transparentNavIds()).length) ??
|
|
4928
5005
|
// A leaf nothing is registered for is still a Nav the tree knows, and
|
|
4929
5006
|
// that is where the panel belongs: `|settings|app` with no widget hands
|
|
4930
5007
|
// the panel back to *settings*, whose row it is, rather than climbing
|
|
@@ -4953,6 +5030,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4953
5030
|
dynamicRows: dynamicRows(),
|
|
4954
5031
|
instances: dynamicInstances(),
|
|
4955
5032
|
hidden: hiddenNavIds(),
|
|
5033
|
+
transparent: transparentNavIds(),
|
|
4956
5034
|
routeParams: panelParams(),
|
|
4957
5035
|
breadcrumb: menuConfig?.breadcramb?.() ??
|
|
4958
5036
|
(typeof widgetConfig?.breadcramb === 'function'
|
|
@@ -5001,6 +5079,8 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
5001
5079
|
navMenus,
|
|
5002
5080
|
navHasContent,
|
|
5003
5081
|
currentWcConfig,
|
|
5082
|
+
activeAppOpen,
|
|
5083
|
+
transparentNavIds,
|
|
5004
5084
|
resolvedNavMenuConfig,
|
|
5005
5085
|
instanceLoaders,
|
|
5006
5086
|
hiddenNavIds,
|
|
@@ -5362,7 +5442,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
5362
5442
|
const parent = owner ? parentNavId(owner) : undefined;
|
|
5363
5443
|
if (!parent)
|
|
5364
5444
|
return;
|
|
5365
|
-
browse(visibleNavId(parent), untracked(() => store.panelParams()));
|
|
5445
|
+
browse(visibleNavId(parent, untracked(() => store.transparentNavIds())), untracked(() => store.panelParams()));
|
|
5366
5446
|
};
|
|
5367
5447
|
/**
|
|
5368
5448
|
* Moves the open panel onto another Nav and never the User: the Address,
|
|
@@ -10599,6 +10679,9 @@ class AgreementGate {
|
|
|
10599
10679
|
catch {
|
|
10600
10680
|
return;
|
|
10601
10681
|
}
|
|
10682
|
+
// An Open App needs no Relation: nothing to install, agree to or refuse.
|
|
10683
|
+
if (view.open)
|
|
10684
|
+
return;
|
|
10602
10685
|
const app = { id: view.app, link, name };
|
|
10603
10686
|
if (view.countryBlocked) {
|
|
10604
10687
|
await this.#countryBlocked(name ?? link);
|
|
@@ -11370,7 +11453,7 @@ class SectionFormItemComponent extends ConfigComponent {
|
|
|
11370
11453
|
break;
|
|
11371
11454
|
}
|
|
11372
11455
|
case InputType.TOGGLE: {
|
|
11373
|
-
const { ToggleInputComponent } = await import('./magmonium-one-toggle-
|
|
11456
|
+
const { ToggleInputComponent } = await import('./magmonium-one-toggle-BeNbv_Ox.mjs');
|
|
11374
11457
|
this.createDynamicComponent(seq, ToggleInputComponent, [], true);
|
|
11375
11458
|
break;
|
|
11376
11459
|
}
|
|
@@ -11382,12 +11465,12 @@ class SectionFormItemComponent extends ConfigComponent {
|
|
|
11382
11465
|
break;
|
|
11383
11466
|
}
|
|
11384
11467
|
case InputType.PASSWORD: {
|
|
11385
|
-
const { PasswordInputComponent } = await import('./magmonium-one-password-
|
|
11468
|
+
const { PasswordInputComponent } = await import('./magmonium-one-password-C1VDuH8J.mjs');
|
|
11386
11469
|
this.createDynamicComponent(seq, PasswordInputComponent);
|
|
11387
11470
|
break;
|
|
11388
11471
|
}
|
|
11389
11472
|
case InputType.OTP: {
|
|
11390
|
-
const { OtpInputComponent } = await import('./magmonium-one-otp-
|
|
11473
|
+
const { OtpInputComponent } = await import('./magmonium-one-otp-Kcns6JtV.mjs');
|
|
11391
11474
|
this.createDynamicComponent(seq, OtpInputComponent);
|
|
11392
11475
|
break;
|
|
11393
11476
|
}
|
|
@@ -19322,7 +19405,9 @@ const mInterceptor = (incoming, next) => {
|
|
|
19322
19405
|
const isAuth = request.url.includes(`${authBaseUrl}/auth/`);
|
|
19323
19406
|
const isInitCall = request.url === httpService.buildUrl('auth', ['init']);
|
|
19324
19407
|
const isRefreshCall = request.url === httpService.buildUrl('auth', ['refresh']);
|
|
19325
|
-
const actions =
|
|
19408
|
+
const actions = inject(LOADING_ACTIONS_REF, { optional: true }) ??
|
|
19409
|
+
SharedStoreRegistry.getLoadingActions() ??
|
|
19410
|
+
loadingActions;
|
|
19326
19411
|
const notificationService = inject(NotificationService);
|
|
19327
19412
|
const defaultDenial = injectDefaultDenial();
|
|
19328
19413
|
/**
|
|
@@ -23639,7 +23724,7 @@ class WrapperInputComponent extends ConfigComponent {
|
|
|
23639
23724
|
break;
|
|
23640
23725
|
}
|
|
23641
23726
|
case InputType.TOGGLE: {
|
|
23642
|
-
const { ToggleInputComponent } = await import('./magmonium-one-toggle-
|
|
23727
|
+
const { ToggleInputComponent } = await import('./magmonium-one-toggle-BeNbv_Ox.mjs');
|
|
23643
23728
|
this.createDynamicComponent(seq, ToggleInputComponent, [], true);
|
|
23644
23729
|
break;
|
|
23645
23730
|
}
|
|
@@ -23651,12 +23736,12 @@ class WrapperInputComponent extends ConfigComponent {
|
|
|
23651
23736
|
break;
|
|
23652
23737
|
}
|
|
23653
23738
|
case InputType.PASSWORD: {
|
|
23654
|
-
const { PasswordInputComponent } = await import('./magmonium-one-password-
|
|
23739
|
+
const { PasswordInputComponent } = await import('./magmonium-one-password-C1VDuH8J.mjs');
|
|
23655
23740
|
this.createDynamicComponent(seq, PasswordInputComponent);
|
|
23656
23741
|
break;
|
|
23657
23742
|
}
|
|
23658
23743
|
case InputType.OTP: {
|
|
23659
|
-
const { OtpInputComponent } = await import('./magmonium-one-otp-
|
|
23744
|
+
const { OtpInputComponent } = await import('./magmonium-one-otp-Kcns6JtV.mjs');
|
|
23660
23745
|
this.createDynamicComponent(seq, OtpInputComponent);
|
|
23661
23746
|
break;
|
|
23662
23747
|
}
|
|
@@ -25385,7 +25470,7 @@ class FileUploadInputComponent extends BaseInputComponent {
|
|
|
25385
25470
|
const modalStore = this.modalStore;
|
|
25386
25471
|
if (!modalStore)
|
|
25387
25472
|
return undefined;
|
|
25388
|
-
const { ImageEditorComponent } = await import('./magmonium-one-image-editor-
|
|
25473
|
+
const { ImageEditorComponent } = await import('./magmonium-one-image-editor-B2079TFM.mjs');
|
|
25389
25474
|
const ratio = String(this.config()?.ratio ?? '');
|
|
25390
25475
|
return new Promise((resolve) => {
|
|
25391
25476
|
const modalRef = new ModalRef();
|
|
@@ -25721,12 +25806,16 @@ class ListComponent extends ConfigComponent {
|
|
|
25721
25806
|
orientation = input(undefined, ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
25722
25807
|
gap = input(undefined, ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
25723
25808
|
startIcon = input(undefined, ...(ngDevMode ? [{ debugName: "startIcon" }] : /* istanbul ignore next */ []));
|
|
25809
|
+
iconColor = input(undefined, ...(ngDevMode ? [{ debugName: "iconColor" }] : /* istanbul ignore next */ []));
|
|
25724
25810
|
items = input(undefined, ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
25725
25811
|
noTranslate = input(undefined, ...(ngDevMode ? [{ debugName: "noTranslate" }] : /* istanbul ignore next */ []));
|
|
25726
25812
|
resolvedVariant = computed(() => this.variant() ?? this.config()?.variant ?? 'unordered', ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
|
|
25727
25813
|
isOrdered = computed(() => this.resolvedVariant() === 'ordered', ...(ngDevMode ? [{ debugName: "isOrdered" }] : /* istanbul ignore next */ []));
|
|
25728
25814
|
resolvedOrientation = computed(() => this.orientation() ?? this.config()?.orientation ?? 'vertical', ...(ngDevMode ? [{ debugName: "resolvedOrientation" }] : /* istanbul ignore next */ []));
|
|
25729
25815
|
resolvedStartIcon = computed(() => this.startIcon() ?? this.config()?.startIcon, ...(ngDevMode ? [{ debugName: "resolvedStartIcon" }] : /* istanbul ignore next */ []));
|
|
25816
|
+
// Undefined leaves the Icon on its own default — the brand colour — rather
|
|
25817
|
+
// than pinning one here.
|
|
25818
|
+
resolvedIconColor = computed(() => this.iconColor() ?? this.config()?.iconColor, ...(ngDevMode ? [{ debugName: "resolvedIconColor" }] : /* istanbul ignore next */ []));
|
|
25730
25819
|
resolvedGap = computed(() => resolveGap(this.gap() ?? this.config()?.gap), ...(ngDevMode ? [{ debugName: "resolvedGap" }] : /* istanbul ignore next */ []));
|
|
25731
25820
|
/**
|
|
25732
25821
|
* What sits before a row, or nothing at all. A `menu` carries its glyphs
|
|
@@ -25783,7 +25872,7 @@ class ListComponent extends ConfigComponent {
|
|
|
25783
25872
|
last,
|
|
25784
25873
|
});
|
|
25785
25874
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
25786
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ListComponent, isStandalone: true, selector: "m-list, m-one-list", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, startIcon: { classPropertyName: "startIcon", publicName: "startIcon", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, noTranslate: { classPropertyName: "noTranslate", publicName: "noTranslate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-design-mode": "isDesignMode", "style.--m-list-gap": "resolvedGap()", "style.--m-list-counter-digits": "counterDigits()" }, classAttribute: "m-list" }, queries: [{ propertyName: "projectedTemplate", first: true, predicate: (TemplateRef), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
25875
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ListComponent, isStandalone: true, selector: "m-list, m-one-list", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, startIcon: { classPropertyName: "startIcon", publicName: "startIcon", isSignal: true, isRequired: false, transformFunction: null }, iconColor: { classPropertyName: "iconColor", publicName: "iconColor", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, noTranslate: { classPropertyName: "noTranslate", publicName: "noTranslate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-design-mode": "isDesignMode", "style.--m-list-gap": "resolvedGap()", "style.--m-list-counter-digits": "counterDigits()" }, classAttribute: "m-list" }, queries: [{ propertyName: "projectedTemplate", first: true, predicate: (TemplateRef), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
25787
25876
|
<ng-template #rowList>
|
|
25788
25877
|
@for (item of rows(); track item.id; let i = $index) {
|
|
25789
25878
|
<li class="m-list__item">
|
|
@@ -25795,7 +25884,11 @@ class ListComponent extends ConfigComponent {
|
|
|
25795
25884
|
aria-hidden="true"
|
|
25796
25885
|
>
|
|
25797
25886
|
@if (kind === 'icon') {
|
|
25798
|
-
<m-icon
|
|
25887
|
+
<m-icon
|
|
25888
|
+
[name]="resolvedStartIcon()!"
|
|
25889
|
+
[color]="resolvedIconColor()"
|
|
25890
|
+
[baseUrl]="baseUrl()"
|
|
25891
|
+
/>
|
|
25799
25892
|
} @else if (kind === 'counter') {
|
|
25800
25893
|
{{ i + 1 }}.
|
|
25801
25894
|
} @else {
|
|
@@ -25832,7 +25925,7 @@ class ListComponent extends ConfigComponent {
|
|
|
25832
25925
|
<ng-container *ngTemplateOutlet="rowList" />
|
|
25833
25926
|
</ul>
|
|
25834
25927
|
}
|
|
25835
|
-
`, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}:host(.is-design-mode){min-height:4em}.m-list__list{display:flex;gap:var(--m-list-gap, 0);margin:0;padding:0;list-style:none}.m-list__list--vertical{flex-direction:column}.m-list__list--horizontal{flex-direction:row;flex-wrap:wrap}.m-list__list.align-center{align-items:center}.m-list__list.align-right{align-items:flex-end}.m-list__item{display:flex;align-items:baseline;gap:.5em;min-width:0}.m-
|
|
25928
|
+
`, isInline: true, styles: ["@charset \"UTF-8\";@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}:host(.is-design-mode){min-height:4em}.m-list__list{display:flex;gap:var(--m-list-gap, 0);margin:0;padding:0;list-style:none}.m-list__list--vertical{flex-direction:column}.m-list__list--horizontal{flex-direction:row;flex-wrap:wrap}.m-list__list.align-center{align-items:center}.m-list__list.align-right{align-items:flex-end}.m-list__item{display:flex;align-items:baseline;gap:.5em;min-width:0}.m-list__marker{flex:0 0 auto;display:flex;align-items:center;color:var(--m-text-tertiary);line-height:inherit}.m-list__marker--icon:before{content:\"\\200b\"}.m-list__marker--counter{justify-content:flex-end;min-width:calc(var(--m-list-counter-digits, 1) * 1ch + .5ch);font-variant-numeric:tabular-nums}.m-list__body{flex:1 1 auto;min-width:0}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
25836
25929
|
}
|
|
25837
25930
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ListComponent, decorators: [{
|
|
25838
25931
|
type: Component,
|
|
@@ -25848,7 +25941,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
25848
25941
|
aria-hidden="true"
|
|
25849
25942
|
>
|
|
25850
25943
|
@if (kind === 'icon') {
|
|
25851
|
-
<m-icon
|
|
25944
|
+
<m-icon
|
|
25945
|
+
[name]="resolvedStartIcon()!"
|
|
25946
|
+
[color]="resolvedIconColor()"
|
|
25947
|
+
[baseUrl]="baseUrl()"
|
|
25948
|
+
/>
|
|
25852
25949
|
} @else if (kind === 'counter') {
|
|
25853
25950
|
{{ i + 1 }}.
|
|
25854
25951
|
} @else {
|
|
@@ -25890,8 +25987,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
25890
25987
|
'[class.is-design-mode]': 'isDesignMode',
|
|
25891
25988
|
'[style.--m-list-gap]': 'resolvedGap()',
|
|
25892
25989
|
'[style.--m-list-counter-digits]': 'counterDigits()',
|
|
25893
|
-
}, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}:host(.is-design-mode){min-height:4em}.m-list__list{display:flex;gap:var(--m-list-gap, 0);margin:0;padding:0;list-style:none}.m-list__list--vertical{flex-direction:column}.m-list__list--horizontal{flex-direction:row;flex-wrap:wrap}.m-list__list.align-center{align-items:center}.m-list__list.align-right{align-items:flex-end}.m-list__item{display:flex;align-items:baseline;gap:.5em;min-width:0}.m-
|
|
25894
|
-
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: false }] }], template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], startIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "startIcon", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], noTranslate: [{ type: i0.Input, args: [{ isSignal: true, alias: "noTranslate", required: false }] }], projectedTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
|
|
25990
|
+
}, styles: ["@charset \"UTF-8\";@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}:host(.is-design-mode){min-height:4em}.m-list__list{display:flex;gap:var(--m-list-gap, 0);margin:0;padding:0;list-style:none}.m-list__list--vertical{flex-direction:column}.m-list__list--horizontal{flex-direction:row;flex-wrap:wrap}.m-list__list.align-center{align-items:center}.m-list__list.align-right{align-items:flex-end}.m-list__item{display:flex;align-items:baseline;gap:.5em;min-width:0}.m-list__marker{flex:0 0 auto;display:flex;align-items:center;color:var(--m-text-tertiary);line-height:inherit}.m-list__marker--icon:before{content:\"\\200b\"}.m-list__marker--counter{justify-content:flex-end;min-width:calc(var(--m-list-counter-digits, 1) * 1ch + .5ch);font-variant-numeric:tabular-nums}.m-list__body{flex:1 1 auto;min-width:0}\n"] }]
|
|
25991
|
+
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: false }] }], template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], startIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "startIcon", required: false }] }], iconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconColor", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], noTranslate: [{ type: i0.Input, args: [{ isSignal: true, alias: "noTranslate", required: false }] }], projectedTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
|
|
25895
25992
|
|
|
25896
25993
|
const TOTAL_COLUMNS = 12;
|
|
25897
25994
|
|
|
@@ -27870,6 +27967,156 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
27870
27967
|
}, styles: [":host{display:block;width:100%}.m-section-carousel{display:flex;flex-direction:column;gap:.75rem;width:100%}.m-section-carousel__viewport{position:relative;flex:1;min-width:0;overflow:hidden;max-height:var(--m-section-carousel-max-height, none);touch-action:pan-y}.m-section-carousel__track{display:flex;width:100%;transition:transform .35s cubic-bezier(.4,0,.2,1)}.m-section-carousel__track--dragging{transition:none}.m-section-carousel__slide{flex:0 0 100%;min-width:0;max-height:var(--m-section-carousel-max-height, none);overflow:hidden}.m-section-carousel__indicators{display:flex;align-items:center;justify-content:center;gap:.5rem;flex-wrap:wrap}.m-section-carousel__indicator{appearance:none;border:none;padding:0;cursor:pointer;width:.5rem;height:.5rem;border-radius:50%;background:var(--m-section-carousel-indicator, currentColor);opacity:.35;transition:opacity .2s ease,width .2s ease,background .2s ease}.m-section-carousel__indicator--capsule{width:1.25rem;height:.375rem;border-radius:999px}.m-section-carousel__indicator--active{opacity:1}.m-section-carousel__indicator--capsule.m-section-carousel__indicator--active{width:2rem}.m-section-carousel--indicator-top{flex-direction:column-reverse}.m-section-carousel--indicator-left{flex-direction:row-reverse;align-items:center}.m-section-carousel--indicator-right{flex-direction:row;align-items:center}.m-section-carousel--indicator-left .m-section-carousel__indicators,.m-section-carousel--indicator-right .m-section-carousel__indicators{flex-direction:column}\n"] }]
|
|
27871
27968
|
}], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: false }] }], template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], indicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicator", required: false }] }], indicatorShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicatorShape", required: false }] }], autoPlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPlay", required: false }] }], interval: [{ type: i0.Input, args: [{ isSignal: true, alias: "interval", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], pauseOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseOnHover", required: false }] }], drag: [{ type: i0.Input, args: [{ isSignal: true, alias: "drag", required: false }] }], slideChange: [{ type: i0.Output, args: ["slideChange"] }], itemChange: [{ type: i0.Output, args: ["itemChange"] }], projectedTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
|
|
27872
27969
|
|
|
27970
|
+
/** What a Plugin element dispatches for every output its Screen emits. */
|
|
27971
|
+
const PLUGIN_OUTPUT_EVENT = 'plugin-output';
|
|
27972
|
+
/**
|
|
27973
|
+
* The language a Plugin's keys fall back to when its app ships none for the
|
|
27974
|
+
* host's — the app's Default Language, which is `en` for every app today.
|
|
27975
|
+
*/
|
|
27976
|
+
const PLUGIN_FALLBACK_LANG = 'en';
|
|
27977
|
+
const PLUGIN_SCREENS = new InjectionToken('PLUGIN_SCREENS');
|
|
27978
|
+
/**
|
|
27979
|
+
* Offers Screens to other apps as Plugins (libs/one CONTEXT.md). Listed in the
|
|
27980
|
+
* app's providers; its wc bundle defines one element per Screen at load,
|
|
27981
|
+
* without booting the app's root.
|
|
27982
|
+
*/
|
|
27983
|
+
function exposeScreens(screens) {
|
|
27984
|
+
return { provide: PLUGIN_SCREENS, useValue: screens, multi: true };
|
|
27985
|
+
}
|
|
27986
|
+
/** Every Screen the app exposes, however many `exposeScreens` calls list them. */
|
|
27987
|
+
function exposedScreensOf(injector) {
|
|
27988
|
+
return Object.assign({}, ...(injector.get(PLUGIN_SCREENS, null, { optional: true }) ?? []));
|
|
27989
|
+
}
|
|
27990
|
+
/**
|
|
27991
|
+
* The element tag of an Exposed Screen: under the app's own root selector, so
|
|
27992
|
+
* two apps exposing one name never clash, and derivable by a host that holds
|
|
27993
|
+
* only the app's config and the Screen's name.
|
|
27994
|
+
*/
|
|
27995
|
+
const pluginTag = (selector, screen) => `${selector}--${screen}`;
|
|
27996
|
+
/**
|
|
27997
|
+
* The application a Plugin runs in, beside its app's root rather than inside
|
|
27998
|
+
* it: own HttpService, own translations, own loading counter. Spread last over
|
|
27999
|
+
* the app's providers so these win.
|
|
28000
|
+
*/
|
|
28001
|
+
function providePluginRuntime() {
|
|
28002
|
+
return [
|
|
28003
|
+
// Its own counter: neither the host's `busy` nor its app root's freeze
|
|
28004
|
+
// overlay moves for a Plugin's requests.
|
|
28005
|
+
{ provide: LOADING_ACTIONS_REF, useFactory: () => createLoadingState().actions },
|
|
28006
|
+
{
|
|
28007
|
+
provide: TranslateService,
|
|
28008
|
+
useFactory: () => {
|
|
28009
|
+
const own = new TranslateService();
|
|
28010
|
+
own.init();
|
|
28011
|
+
own.remoteFallbackLang.set(PLUGIN_FALLBACK_LANG);
|
|
28012
|
+
return own;
|
|
28013
|
+
},
|
|
28014
|
+
},
|
|
28015
|
+
// The nearest host's AppLink, set by the element when it connects (api ADR 0008).
|
|
28016
|
+
{ provide: APP_LINK, useFactory: () => signal(undefined) },
|
|
28017
|
+
];
|
|
28018
|
+
}
|
|
28019
|
+
/**
|
|
28020
|
+
* The custom element one Exposed Screen mounts as. Inputs are element
|
|
28021
|
+
* properties, outputs one `plugin-output` event each; `lang`, `pluginLink`
|
|
28022
|
+
* and `hostLink` are set by the host's `m-plugin` before it connects.
|
|
28023
|
+
*/
|
|
28024
|
+
function createPluginElement(component, pluginApp) {
|
|
28025
|
+
const mirror = reflectComponentType(component);
|
|
28026
|
+
const inputs = mirror?.inputs.map((i) => i.templateName) ?? [];
|
|
28027
|
+
const outputs = mirror?.outputs ?? [];
|
|
28028
|
+
class PluginElement extends HTMLElement {
|
|
28029
|
+
pluginLink;
|
|
28030
|
+
hostLink;
|
|
28031
|
+
ref;
|
|
28032
|
+
app;
|
|
28033
|
+
mounting = false;
|
|
28034
|
+
language;
|
|
28035
|
+
values = new Map();
|
|
28036
|
+
subscriptions = [];
|
|
28037
|
+
get lang() {
|
|
28038
|
+
return this.language ?? '';
|
|
28039
|
+
}
|
|
28040
|
+
set lang(value) {
|
|
28041
|
+
this.language = value;
|
|
28042
|
+
if (value)
|
|
28043
|
+
this.app?.injector.get(TranslateService).setLang(value);
|
|
28044
|
+
}
|
|
28045
|
+
connectedCallback() {
|
|
28046
|
+
void this.mount();
|
|
28047
|
+
}
|
|
28048
|
+
disconnectedCallback() {
|
|
28049
|
+
this.subscriptions.forEach((s) => s.unsubscribe());
|
|
28050
|
+
this.subscriptions = [];
|
|
28051
|
+
this.ref?.destroy();
|
|
28052
|
+
this.ref = undefined;
|
|
28053
|
+
this.replaceChildren();
|
|
28054
|
+
}
|
|
28055
|
+
setInput(name, value) {
|
|
28056
|
+
this.values.set(name, value);
|
|
28057
|
+
this.ref?.setInput(name, value);
|
|
28058
|
+
}
|
|
28059
|
+
async mount() {
|
|
28060
|
+
if (this.ref || this.mounting)
|
|
28061
|
+
return;
|
|
28062
|
+
this.mounting = true;
|
|
28063
|
+
try {
|
|
28064
|
+
this.app ??= await pluginApp();
|
|
28065
|
+
}
|
|
28066
|
+
finally {
|
|
28067
|
+
this.mounting = false;
|
|
28068
|
+
}
|
|
28069
|
+
if (!this.isConnected || this.ref)
|
|
28070
|
+
return;
|
|
28071
|
+
const injector = this.app.injector;
|
|
28072
|
+
if (this.hostLink)
|
|
28073
|
+
injector.get(APP_LINK).set(this.hostLink);
|
|
28074
|
+
const translate = injector.get(TranslateService);
|
|
28075
|
+
if (this.pluginLink)
|
|
28076
|
+
translate.remoteAppId.set(this.pluginLink);
|
|
28077
|
+
if (this.language)
|
|
28078
|
+
translate.setLang(this.language);
|
|
28079
|
+
const hostElement = document.createElement('div');
|
|
28080
|
+
this.appendChild(hostElement);
|
|
28081
|
+
const ref = createComponent(component, {
|
|
28082
|
+
environmentInjector: injector,
|
|
28083
|
+
hostElement,
|
|
28084
|
+
});
|
|
28085
|
+
this.values.forEach((value, name) => ref.setInput(name, value));
|
|
28086
|
+
this.subscriptions = outputs.map(({ propName, templateName }) => ref.instance[propName].subscribe((value) => this.dispatchEvent(new CustomEvent(PLUGIN_OUTPUT_EVENT, {
|
|
28087
|
+
detail: { name: templateName, value },
|
|
28088
|
+
}))));
|
|
28089
|
+
this.app.attachView(ref.hostView);
|
|
28090
|
+
this.ref = ref;
|
|
28091
|
+
}
|
|
28092
|
+
}
|
|
28093
|
+
for (const name of inputs) {
|
|
28094
|
+
Object.defineProperty(PluginElement.prototype, name, {
|
|
28095
|
+
configurable: true,
|
|
28096
|
+
get() {
|
|
28097
|
+
return this.values.get(name);
|
|
28098
|
+
},
|
|
28099
|
+
set(value) {
|
|
28100
|
+
this.setInput(name, value);
|
|
28101
|
+
},
|
|
28102
|
+
});
|
|
28103
|
+
}
|
|
28104
|
+
return PluginElement;
|
|
28105
|
+
}
|
|
28106
|
+
/**
|
|
28107
|
+
* Defines every Exposed Screen's element. The Plugin application is created
|
|
28108
|
+
* once, on the first mount, so an app nobody mounts a Plugin of pays nothing.
|
|
28109
|
+
*/
|
|
28110
|
+
function definePluginScreens(selector, screens, createPluginApp) {
|
|
28111
|
+
let app;
|
|
28112
|
+
const pluginApp = () => (app ??= createPluginApp());
|
|
28113
|
+
for (const [name, component] of Object.entries(screens)) {
|
|
28114
|
+
const tag = pluginTag(selector, name);
|
|
28115
|
+
if (!customElements.get(tag))
|
|
28116
|
+
customElements.define(tag, createPluginElement(component, pluginApp));
|
|
28117
|
+
}
|
|
28118
|
+
}
|
|
28119
|
+
|
|
27873
28120
|
/** The Store's own link rule (m-api `LINK_SLUG_PATTERN`) — ADR 0037. */
|
|
27874
28121
|
const LINK_SLUG = /^[a-z0-9-]+$/;
|
|
27875
28122
|
const ELEMENT_TIMEOUT_MS = 15_000;
|
|
@@ -27937,11 +28184,40 @@ class RemoteLoaderService {
|
|
|
27937
28184
|
* fetched, because the link is concatenated into a module-script URL.
|
|
27938
28185
|
*/
|
|
27939
28186
|
loadFromLink = async (link, useShadow = false, props, children) => {
|
|
28187
|
+
const config = await this.configOf(link);
|
|
28188
|
+
return config.reason
|
|
28189
|
+
? config
|
|
28190
|
+
: this.mount(config.config, useShadow, props, children);
|
|
28191
|
+
};
|
|
28192
|
+
/**
|
|
28193
|
+
* Loads one Exposed Screen of the app a Store link names, as a Plugin: the
|
|
28194
|
+
* app's bundle, then the Screen's own element, never the app's root.
|
|
28195
|
+
*/
|
|
28196
|
+
loadPluginFromLink = async (link, screen, props) => {
|
|
28197
|
+
const loaded = await this.configOf(link);
|
|
28198
|
+
if (loaded.reason)
|
|
28199
|
+
return loaded;
|
|
28200
|
+
const config = loaded.config;
|
|
28201
|
+
const bundle = await this.loadBundle(config);
|
|
28202
|
+
if (bundle !== true)
|
|
28203
|
+
return bundle;
|
|
28204
|
+
const tag = pluginTag(config.selector, screen);
|
|
28205
|
+
// The bundle defines its Plugins before its root, so a tag still missing
|
|
28206
|
+
// once the root is defined is a Screen the app does not expose.
|
|
28207
|
+
if (!customElements.get(tag))
|
|
28208
|
+
return { reason: 'screen-not-found' };
|
|
28209
|
+
const element = this.create(tag, props || {});
|
|
28210
|
+
const { assetBaseUrl } = this.resolveUrls(config);
|
|
28211
|
+
return element ? { element, assetBaseUrl, config } : { reason: 'element-timeout' };
|
|
28212
|
+
};
|
|
28213
|
+
/** The app's config, fetched by a link checked first — it is concatenated into a script URL. */
|
|
28214
|
+
configOf = async (link) => {
|
|
27940
28215
|
if (!LINK_SLUG.test(link))
|
|
27941
28216
|
return { reason: 'invalid-link' };
|
|
27942
|
-
let config;
|
|
27943
28217
|
try {
|
|
27944
|
-
config = await firstValueFrom(this.httpService.wc(link, ['remote', 'app-wc.json']));
|
|
28218
|
+
const config = await firstValueFrom(this.httpService.wc(link, ['remote', 'app-wc.json']));
|
|
28219
|
+
// The validated link, never the answer's own: the script URL is built from it.
|
|
28220
|
+
return { config: { ...config, link } };
|
|
27945
28221
|
}
|
|
27946
28222
|
catch (error) {
|
|
27947
28223
|
const status = error instanceof HttpErrorResponse ? error.status : 0;
|
|
@@ -27949,20 +28225,29 @@ class RemoteLoaderService {
|
|
|
27949
28225
|
? { reason: 'config-not-found', status }
|
|
27950
28226
|
: { reason: 'offline' };
|
|
27951
28227
|
}
|
|
27952
|
-
// The validated link, never the answer's own: the script URL is built from it.
|
|
27953
|
-
return this.mount({ ...config, link }, useShadow, props, children);
|
|
27954
28228
|
};
|
|
27955
28229
|
loadComponentFromConfig = async (config, useShadow = false, props, children) => {
|
|
27956
28230
|
const { element, assetBaseUrl } = await this.mount(config, useShadow, props, children);
|
|
27957
28231
|
return element ? { element, assetBaseUrl: assetBaseUrl ?? '' } : undefined;
|
|
27958
28232
|
};
|
|
27959
|
-
/** Logged out answers nothing at all — not a failure, the login effect reloads. */
|
|
27960
28233
|
mount = async (config, useShadow, props, children) => {
|
|
28234
|
+
const bundle = await this.loadBundle(config);
|
|
28235
|
+
if (bundle !== true)
|
|
28236
|
+
return bundle;
|
|
28237
|
+
const { assetBaseUrl } = this.resolveUrls(config);
|
|
28238
|
+
const element = this.create(config.selector, props || {}, children || [], useShadow);
|
|
28239
|
+
return element ? { element, assetBaseUrl, config } : { reason: 'element-timeout' };
|
|
28240
|
+
};
|
|
28241
|
+
/**
|
|
28242
|
+
* The app's bundle loaded and its root element defined — `true`, or why not.
|
|
28243
|
+
* Logged out answers nothing at all: not a failure, the login effect reloads.
|
|
28244
|
+
*/
|
|
28245
|
+
loadBundle = async (config) => {
|
|
27961
28246
|
if (this.loginStore && !this.loginStore.isLoggedIn()) {
|
|
27962
28247
|
console.warn(`Attempted to load component ${config.selector} without authentication`);
|
|
27963
28248
|
return {};
|
|
27964
28249
|
}
|
|
27965
|
-
const { scriptUrl
|
|
28250
|
+
const { scriptUrl } = this.resolveUrls(config);
|
|
27966
28251
|
if (!scriptUrl)
|
|
27967
28252
|
return { reason: 'script-failed' };
|
|
27968
28253
|
// A tag already defined by another tier's bundle would hand back that
|
|
@@ -27991,8 +28276,7 @@ class RemoteLoaderService {
|
|
|
27991
28276
|
return { reason: 'element-timeout' };
|
|
27992
28277
|
if (!wasDefined)
|
|
27993
28278
|
recordDefinedWcTier(config.selector, tier);
|
|
27994
|
-
|
|
27995
|
-
return element ? { element, assetBaseUrl, config } : { reason: 'element-timeout' };
|
|
28279
|
+
return true;
|
|
27996
28280
|
};
|
|
27997
28281
|
async loadScript(url) {
|
|
27998
28282
|
if (document.querySelector(`script[data-wc-src="${url}"]`)) {
|
|
@@ -28627,6 +28911,208 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
28627
28911
|
`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.m-remote{display:block;width:100%;min-height:100%;flex:1;isolation:isolate}.m-remote__loading,.m-remote__broken{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px}.m-remote__spinner{width:20px;height:20px;border:2px solid var(--m-backdrop-border);border-top-color:var(--m-mm);border-radius:50%;animation:m-remote-spin .8s linear infinite}.m-remote__broken{color:var(--m-text-secondary)}.m-remote__detail{font-size:.85em}@keyframes m-remote-spin{to{transform:rotate(360deg)}}\n"] }]
|
|
28628
28912
|
}], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: false }] }], useShadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "useShadow", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], children: [{ type: i0.Input, args: [{ isSignal: true, alias: "children", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], urlMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "urlMode", required: false }] }], path: [{ type: i0.Input, args: [{ isSignal: true, alias: "path", required: false }] }], tail: [{ type: i0.Input, args: [{ isSignal: true, alias: "tail", required: false }] }], out: [{ type: i0.Input, args: [{ isSignal: true, alias: "out", required: false }] }], createMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "createMenu", required: false }] }], mount: [{ type: i0.Input, args: [{ isSignal: true, alias: "mount", required: false }] }], beta: [{ type: i0.Input, args: [{ isSignal: true, alias: "beta", required: false }] }], loaded: [{ type: i0.Output, args: ["loaded"] }], failed: [{ type: i0.Output, args: ["failed"] }] } });
|
|
28629
28913
|
|
|
28914
|
+
/**
|
|
28915
|
+
* One input of a Plugin's Exposed Screen, written as a child of `m-plugin`:
|
|
28916
|
+
* the input's name on the tag and its value as a binding, so a template never
|
|
28917
|
+
* spells the inputs as an object literal. Renders nothing.
|
|
28918
|
+
*/
|
|
28919
|
+
class PluginInputComponent {
|
|
28920
|
+
name = input.required(...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
28921
|
+
value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
|
|
28922
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PluginInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28923
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: PluginInputComponent, isStandalone: true, selector: "m-plugin-input", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, host: { styleAttribute: "display: none" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
28924
|
+
}
|
|
28925
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PluginInputComponent, decorators: [{
|
|
28926
|
+
type: Component,
|
|
28927
|
+
args: [{
|
|
28928
|
+
selector: 'm-plugin-input',
|
|
28929
|
+
template: '',
|
|
28930
|
+
host: { style: 'display: none' },
|
|
28931
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
28932
|
+
}]
|
|
28933
|
+
}], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }] } });
|
|
28934
|
+
|
|
28935
|
+
/**
|
|
28936
|
+
* One output of a Plugin's Exposed Screen, written as a child of `m-plugin`:
|
|
28937
|
+
* the output's name on the tag and `(fired)` carrying each value it emits, so
|
|
28938
|
+
* a template handles it like any other event. Renders nothing.
|
|
28939
|
+
*/
|
|
28940
|
+
class PluginOutputComponent {
|
|
28941
|
+
name = input.required(...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
28942
|
+
fired = output();
|
|
28943
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PluginOutputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28944
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: PluginOutputComponent, isStandalone: true, selector: "m-plugin-output", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { fired: "fired" }, host: { styleAttribute: "display: none" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
28945
|
+
}
|
|
28946
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PluginOutputComponent, decorators: [{
|
|
28947
|
+
type: Component,
|
|
28948
|
+
args: [{
|
|
28949
|
+
selector: 'm-plugin-output',
|
|
28950
|
+
template: '',
|
|
28951
|
+
host: { style: 'display: none' },
|
|
28952
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
28953
|
+
}]
|
|
28954
|
+
}], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], fired: [{ type: i0.Output, args: ["fired"] }] } });
|
|
28955
|
+
|
|
28956
|
+
/**
|
|
28957
|
+
* Mounts another app's Exposed Screen as a Plugin (libs/one CONTEXT.md): an
|
|
28958
|
+
* AppLink, the Screen's name, a value per input and one `output` event per
|
|
28959
|
+
* output the Screen emits. Never a whole app and never an address — that is
|
|
28960
|
+
* `m-remote`.
|
|
28961
|
+
*/
|
|
28962
|
+
class PluginComponent {
|
|
28963
|
+
/** The AppLink of the app exposing the Screen. */
|
|
28964
|
+
link = input.required(...(ngDevMode ? [{ debugName: "link" }] : /* istanbul ignore next */ []));
|
|
28965
|
+
/** The Exposed Screen's name. */
|
|
28966
|
+
screen = input.required(...(ngDevMode ? [{ debugName: "screen" }] : /* istanbul ignore next */ []));
|
|
28967
|
+
/** Where the app is loaded from; `published` unless asked otherwise. */
|
|
28968
|
+
source = input('published', ...(ngDevMode ? [{ debugName: "source" }] : /* istanbul ignore next */ []));
|
|
28969
|
+
/** The dev-server port a `local` source is served from — `port="4300"` reads as a number. */
|
|
28970
|
+
port = input(undefined, { ...(ngDevMode ? { debugName: "port" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined || value === null || value === ''
|
|
28971
|
+
? undefined
|
|
28972
|
+
: numberAttribute(value) });
|
|
28973
|
+
/** A value per input of the Exposed Screen, by its name. */
|
|
28974
|
+
inputs = input({}, ...(ngDevMode ? [{ debugName: "inputs" }] : /* istanbul ignore next */ []));
|
|
28975
|
+
/** The same, written as `m-plugin-input` children — these win over `inputs`. */
|
|
28976
|
+
inputChildren = contentChildren(PluginInputComponent, ...(ngDevMode ? [{ debugName: "inputChildren" }] : /* istanbul ignore next */ []));
|
|
28977
|
+
/** `m-plugin-output` children, each handed the values of the output it names. */
|
|
28978
|
+
outputChildren = contentChildren(PluginOutputComponent, ...(ngDevMode ? [{ debugName: "outputChildren" }] : /* istanbul ignore next */ []));
|
|
28979
|
+
values = computed(() => ({
|
|
28980
|
+
...this.inputs(),
|
|
28981
|
+
...Object.fromEntries(this.inputChildren().map((child) => [child.name(), child.value()])),
|
|
28982
|
+
}), ...(ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []));
|
|
28983
|
+
/** One per output the Exposed Screen emits, named as the Screen names it. */
|
|
28984
|
+
output = output();
|
|
28985
|
+
/** Why a load drew the broken state. */
|
|
28986
|
+
failed = output();
|
|
28987
|
+
loader = inject(RemoteLoaderService);
|
|
28988
|
+
translateService = inject(TranslateService);
|
|
28989
|
+
loginStore = inject(LOGIN_STORE, { optional: true });
|
|
28990
|
+
hostLink = inject(APP_LINK);
|
|
28991
|
+
elementRef = inject(ElementRef);
|
|
28992
|
+
loadedElement;
|
|
28993
|
+
/** Bumped per load, so an answer for a link since replaced is dropped. */
|
|
28994
|
+
loadId = 0;
|
|
28995
|
+
state = signal('idle', ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
28996
|
+
failure = signal({}, ...(ngDevMode ? [{ debugName: "failure" }] : /* istanbul ignore next */ []));
|
|
28997
|
+
constructor() {
|
|
28998
|
+
effect(() => {
|
|
28999
|
+
this.loginStore?.isLoggedIn();
|
|
29000
|
+
const link = this.link();
|
|
29001
|
+
const screen = this.screen();
|
|
29002
|
+
const source = this.source();
|
|
29003
|
+
const port = this.port();
|
|
29004
|
+
untracked(() => {
|
|
29005
|
+
// Pinned for the link as a whole: the manifest, the bundle and every
|
|
29006
|
+
// asset the Plugin asks for are all built from it.
|
|
29007
|
+
setWcTier(link, source === 'published' ? undefined : source);
|
|
29008
|
+
setWcLocalPort(link, source === 'local' ? port : undefined);
|
|
29009
|
+
void this.load(link, screen);
|
|
29010
|
+
});
|
|
29011
|
+
});
|
|
29012
|
+
// Inputs reach the Screen without reloading it.
|
|
29013
|
+
effect(() => {
|
|
29014
|
+
const inputs = this.values();
|
|
29015
|
+
const el = this.loadedElement;
|
|
29016
|
+
if (!el)
|
|
29017
|
+
return;
|
|
29018
|
+
Object.entries(inputs).forEach(([key, value]) => {
|
|
29019
|
+
el[key] = value;
|
|
29020
|
+
});
|
|
29021
|
+
});
|
|
29022
|
+
// The Plugin speaks the host's language, from its own translations.
|
|
29023
|
+
effect(() => {
|
|
29024
|
+
const lang = this.translateService.lang();
|
|
29025
|
+
if (this.loadedElement)
|
|
29026
|
+
this.loadedElement.lang = lang;
|
|
29027
|
+
});
|
|
29028
|
+
}
|
|
29029
|
+
ngOnDestroy() {
|
|
29030
|
+
this.dismount();
|
|
29031
|
+
}
|
|
29032
|
+
load = async (link, screen) => {
|
|
29033
|
+
const id = ++this.loadId;
|
|
29034
|
+
this.dismount();
|
|
29035
|
+
this.state.set('loading');
|
|
29036
|
+
const result = await this.loader.loadPluginFromLink(link, screen, {
|
|
29037
|
+
...untracked(() => this.values()),
|
|
29038
|
+
lang: untracked(() => this.translateService.lang()),
|
|
29039
|
+
pluginLink: link,
|
|
29040
|
+
hostLink: this.hostLink(),
|
|
29041
|
+
});
|
|
29042
|
+
if (id !== this.loadId)
|
|
29043
|
+
return;
|
|
29044
|
+
if (!result.element) {
|
|
29045
|
+
this.failure.set(result);
|
|
29046
|
+
if (result.reason)
|
|
29047
|
+
this.failed.emit(result);
|
|
29048
|
+
return this.state.set(result.reason ? 'failed' : 'idle');
|
|
29049
|
+
}
|
|
29050
|
+
this.loadedElement = result.element;
|
|
29051
|
+
result.element.style.display = 'block';
|
|
29052
|
+
result.element.addEventListener(PLUGIN_OUTPUT_EVENT, this.onOutput);
|
|
29053
|
+
this.elementRef.nativeElement.appendChild(result.element);
|
|
29054
|
+
this.state.set('loaded');
|
|
29055
|
+
};
|
|
29056
|
+
onOutput = (event) => {
|
|
29057
|
+
const detail = event.detail;
|
|
29058
|
+
this.output.emit(detail);
|
|
29059
|
+
this.outputChildren()
|
|
29060
|
+
.filter((child) => child.name() === detail.name)
|
|
29061
|
+
.forEach((child) => child.fired.emit(detail.value));
|
|
29062
|
+
};
|
|
29063
|
+
dismount = () => {
|
|
29064
|
+
this.loadedElement?.removeEventListener(PLUGIN_OUTPUT_EVENT, this.onOutput);
|
|
29065
|
+
this.loadedElement?.remove();
|
|
29066
|
+
this.loadedElement = undefined;
|
|
29067
|
+
};
|
|
29068
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PluginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
29069
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: PluginComponent, isStandalone: true, selector: "m-plugin", inputs: { link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: true, transformFunction: null }, screen: { classPropertyName: "screen", publicName: "screen", isSignal: true, isRequired: true, transformFunction: null }, source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null }, port: { classPropertyName: "port", publicName: "port", isSignal: true, isRequired: false, transformFunction: null }, inputs: { classPropertyName: "inputs", publicName: "inputs", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { output: "output", failed: "failed" }, host: { classAttribute: "m-plugin" }, queries: [{ propertyName: "inputChildren", predicate: PluginInputComponent, isSignal: true }, { propertyName: "outputChildren", predicate: PluginOutputComponent, isSignal: true }], ngImport: i0, template: `
|
|
29070
|
+
@if (state() === 'loading') {
|
|
29071
|
+
<div class="m-plugin__loading"><div class="m-plugin__spinner"></div></div>
|
|
29072
|
+
} @else if (state() === 'failed') {
|
|
29073
|
+
<div class="m-plugin__broken">
|
|
29074
|
+
<m-icon name="link-broken" color="currentColor" />
|
|
29075
|
+
<span class="m-plugin__reason">
|
|
29076
|
+
@switch (failure().reason) {
|
|
29077
|
+
@case ('invalid-link') { {{ 'remote-invalid-link' | translate }} }
|
|
29078
|
+
@case ('config-not-found') { {{ 'remote-config-not-found' | translate }} }
|
|
29079
|
+
@case ('script-failed') { {{ 'remote-script-failed' | translate }} }
|
|
29080
|
+
@case ('element-timeout') { {{ 'remote-element-timeout' | translate }} }
|
|
29081
|
+
@case ('offline') { {{ 'remote-offline' | translate }} }
|
|
29082
|
+
@case ('tier-conflict') { {{ 'remote-tier-conflict' | translate }} }
|
|
29083
|
+
@case ('screen-not-found') { {{ 'plugin-screen-not-found' | translate }} }
|
|
29084
|
+
}
|
|
29085
|
+
</span>
|
|
29086
|
+
<span class="m-plugin__detail">{{ link() }} · {{ screen() }}</span>
|
|
29087
|
+
</div>
|
|
29088
|
+
}
|
|
29089
|
+
`, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.m-plugin{display:block}.m-plugin__loading,.m-plugin__broken{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px}.m-plugin__spinner{width:20px;height:20px;border:2px solid var(--m-backdrop-border);border-top-color:var(--m-mm);border-radius:50%;animation:plugin-spin .8s linear infinite}.m-plugin__broken{color:var(--m-text-secondary)}.m-plugin__detail{font-size:.85em}@keyframes plugin-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
29090
|
+
}
|
|
29091
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: PluginComponent, decorators: [{
|
|
29092
|
+
type: Component,
|
|
29093
|
+
args: [{ selector: 'm-plugin', imports: [TranslatePipe, IconComponent], host: { class: 'm-plugin' }, template: `
|
|
29094
|
+
@if (state() === 'loading') {
|
|
29095
|
+
<div class="m-plugin__loading"><div class="m-plugin__spinner"></div></div>
|
|
29096
|
+
} @else if (state() === 'failed') {
|
|
29097
|
+
<div class="m-plugin__broken">
|
|
29098
|
+
<m-icon name="link-broken" color="currentColor" />
|
|
29099
|
+
<span class="m-plugin__reason">
|
|
29100
|
+
@switch (failure().reason) {
|
|
29101
|
+
@case ('invalid-link') { {{ 'remote-invalid-link' | translate }} }
|
|
29102
|
+
@case ('config-not-found') { {{ 'remote-config-not-found' | translate }} }
|
|
29103
|
+
@case ('script-failed') { {{ 'remote-script-failed' | translate }} }
|
|
29104
|
+
@case ('element-timeout') { {{ 'remote-element-timeout' | translate }} }
|
|
29105
|
+
@case ('offline') { {{ 'remote-offline' | translate }} }
|
|
29106
|
+
@case ('tier-conflict') { {{ 'remote-tier-conflict' | translate }} }
|
|
29107
|
+
@case ('screen-not-found') { {{ 'plugin-screen-not-found' | translate }} }
|
|
29108
|
+
}
|
|
29109
|
+
</span>
|
|
29110
|
+
<span class="m-plugin__detail">{{ link() }} · {{ screen() }}</span>
|
|
29111
|
+
</div>
|
|
29112
|
+
}
|
|
29113
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.m-plugin{display:block}.m-plugin__loading,.m-plugin__broken{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px}.m-plugin__spinner{width:20px;height:20px;border:2px solid var(--m-backdrop-border);border-top-color:var(--m-mm);border-radius:50%;animation:plugin-spin .8s linear infinite}.m-plugin__broken{color:var(--m-text-secondary)}.m-plugin__detail{font-size:.85em}@keyframes plugin-spin{to{transform:rotate(360deg)}}\n"] }]
|
|
29114
|
+
}], ctorParameters: () => [], propDecorators: { link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: true }] }], screen: [{ type: i0.Input, args: [{ isSignal: true, alias: "screen", required: true }] }], source: [{ type: i0.Input, args: [{ isSignal: true, alias: "source", required: false }] }], port: [{ type: i0.Input, args: [{ isSignal: true, alias: "port", required: false }] }], inputs: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputs", required: false }] }], inputChildren: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PluginInputComponent), { isSignal: true }] }], outputChildren: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PluginOutputComponent), { isSignal: true }] }], output: [{ type: i0.Output, args: ["output"] }], failed: [{ type: i0.Output, args: ["failed"] }] } });
|
|
29115
|
+
|
|
28630
29116
|
class TooltipComponent {
|
|
28631
29117
|
text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : /* istanbul ignore next */ []));
|
|
28632
29118
|
template = input(...(ngDevMode ? [undefined, { debugName: "template" }] : /* istanbul ignore next */ []));
|
|
@@ -35303,7 +35789,7 @@ class NavMenuComponent {
|
|
|
35303
35789
|
<div class="nav-menu">
|
|
35304
35790
|
<m-list variant="menu" [data]="rows()" [template]="menuTemplate" />
|
|
35305
35791
|
</div>
|
|
35306
|
-
`, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__browse{flex:none;margin-inline-end:.5rem;color:var(--m-text-tertiary)}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "directive", type: MRefDirective, selector: "[mRef]", inputs: ["mRef", "mRefLinkActive", "mRefToggle", "mRefParams"] }, { kind: "component", type: ListComponent, selector: "m-list, m-one-list", inputs: ["data", "element", "template", "variant", "orientation", "gap", "startIcon", "items", "noTranslate"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
35792
|
+
`, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__browse{flex:none;margin-inline-end:.5rem;color:var(--m-text-tertiary)}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "directive", type: MRefDirective, selector: "[mRef]", inputs: ["mRef", "mRefLinkActive", "mRefToggle", "mRefParams"] }, { kind: "component", type: ListComponent, selector: "m-list, m-one-list", inputs: ["data", "element", "template", "variant", "orientation", "gap", "startIcon", "iconColor", "items", "noTranslate"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
35307
35793
|
}
|
|
35308
35794
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NavMenuComponent, decorators: [{
|
|
35309
35795
|
type: Component,
|
|
@@ -35611,7 +36097,12 @@ class NavComponent {
|
|
|
35611
36097
|
isNavOpened = computed(() => this.#navStore.isNavOpened(), ...(ngDevMode ? [{ debugName: "isNavOpened" }] : /* istanbul ignore next */ []));
|
|
35612
36098
|
currentWcConfig = computed(() => this.#navStore.currentWcConfig(), ...(ngDevMode ? [{ debugName: "currentWcConfig" }] : /* istanbul ignore next */ []));
|
|
35613
36099
|
appLink = computed(() => this.#navStore.appLink(), ...(ngDevMode ? [{ debugName: "appLink" }] : /* istanbul ignore next */ []));
|
|
35614
|
-
|
|
36100
|
+
/** An Open App draws as part of the host: the host's logo, no apps button. */
|
|
36101
|
+
activeAppOpen = computed(() => this.#navStore.activeAppOpen(), ...(ngDevMode ? [{ debugName: "activeAppOpen" }] : /* istanbul ignore next */ []));
|
|
36102
|
+
logoPending = computed(() => !this.isHost() &&
|
|
36103
|
+
!!this.appLink() &&
|
|
36104
|
+
!this.currentWcConfig() &&
|
|
36105
|
+
!this.activeAppOpen(), ...(ngDevMode ? [{ debugName: "logoPending" }] : /* istanbul ignore next */ []));
|
|
35615
36106
|
logo = computed(() => {
|
|
35616
36107
|
if (this.logoPending())
|
|
35617
36108
|
return undefined;
|
|
@@ -35687,7 +36178,7 @@ class NavComponent {
|
|
|
35687
36178
|
};
|
|
35688
36179
|
return { ...common, apps: appsButton };
|
|
35689
36180
|
}
|
|
35690
|
-
else if (appLink) {
|
|
36181
|
+
else if (appLink && !this.activeAppOpen()) {
|
|
35691
36182
|
const appsButton = {
|
|
35692
36183
|
icon: 'apps',
|
|
35693
36184
|
iconOnly: true,
|
|
@@ -41030,5 +41521,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
41030
41521
|
* Generated bundle index. Do not edit.
|
|
41031
41522
|
*/
|
|
41032
41523
|
|
|
41033
|
-
export { ChatBubbleComponent as $, ACCESS_DOMAINS as A, ButtonComponent as B, AssetUrlPipe as C, Assets as D, AuthActivityPageComponent as E, AuthApiService as F, AuthStore as G, HeaderComponent$1 as H, InputType as I, AutosizeDirective as J, BadgeComponent as K, LabelComponent as L, MODAL_REF as M, BandingComponent as N, BaseArrayInputComponent as O, BaseRootWebComponent as P, BaseWebComponent as Q, RangeInputComponent as R, BrowserLocaleService as S, TranslatePipe as T, ButtonGroupComponent as U, CALLING_APP_HEADER as V, COMPONENT_INPUT_REGISTRY as W, CardComponent as X, CardWrapperComponent as Y, CarouselComponent as Z, ChartComponent as _, MIN_ZOOM as a, HttpService as a$, CheckboxGroupComponent as a0, CheckboxInputComponent as a1, ClearableInputComponent as a2, ClipboardService as a3, ColComponent as a4, ColorPickerInputComponent as a5, CommentItemComponent as a6, CommentsApiService as a7, CommentsComponent as a8, CommentsStore as a9, DeviceService as aA, DocComponent as aB, DocEditorComponent as aC, DomService as aD, Domain as aE, DotGridComponent as aF, DragListDirective as aG, DragListItemDirective as aH, DraggableDirective as aI, DropdownInputComponent as aJ, FILTER_GROUP_CONTEXT as aK, FILTER_RANGE_MODES as aL, FILTER_VARIANTS as aM, FLEX_VARIANTS as aN, FOLDER_PICK_LISTENER as aO, FORM_ASSET_FOLDER as aP, FileService as aQ, FileUploadDirective as aR, FileUploadInputComponent as aS, FlexComponent as aT, FlexItemComponent as aU, FormGroupComponent as aV, FrameComponent as aW, FreezeService as aX, GRID_BREAKPOINTS as aY, GetNavService as aZ, HighlightDirective as a_, CompactNumberPipe as aa, ComponentInputComponent as ab, ComponentStepperComponent as ac, ConfigComponent as ad, ConfirmComponent as ae, ContextMenuComponent as af, CustomIconClass as ag, CustomIconEditComponent as ah, DEFAULT_DENIAL as ai, DEFAULT_DOC_DENSITY as aj, DEFAULT_DOC_VARIANT as ak, DEFAULT_FILTER_RANGE_MODE as al, DEFAULT_FILTER_VARIANT as am, DEFAULT_NAV_PARAM as an, DEFAULT_NAV_SEGMENT as ao, DEFAULT_SIZE as ap, DOCK_MIN_PAGE_REMAINDER as aq, DOCS_FOLDER as ar, DOC_ACTION_ICONS as as, DOC_DENSITIES as at, DOC_EDIT_ACTIONS as au, DOC_TOOLBAR_GROUPS as av, DOC_VARIANTS as aw, DashboardCardComponent as ax, DateInputComponent as ay, DatePickerComponent as az, MAX_ZOOM as b, PLATFORM_BUTTON_NAV_IDS as b$, ICON_SOURCE as b0, IS_SIDE_PANEL as b1, IconComponent as b2, ImgComponent as b3, InstrumentScoreComponent as b4, InterceptorObservables as b5, JumbotronComponent as b6, KeyValueComponent as b7, LAYOUT_ASSET_FOLDER as b8, LOGIN_COMPONENT as b9, NAV_MAIN_BUTTONS as bA, NAV_SEGMENT_RE as bB, NAV_STORE_REF as bC, NAV_WC_COMPONENTS as bD, NAV_WIDGET_MAP as bE, NavComponent as bF, NavDetailsComponent as bG, NavHeaderComponent as bH, NavMenuComponent as bI, NavStore as bJ, NavTrailComponent as bK, NothingComponent as bL, NotificationElementComponent as bM, NotificationGroupComponent as bN, NotificationPopupComponent as bO, NotificationService as bP, NotificationStore as bQ, NotificationType as bR, NotificationWidgetComponent as bS, ONE_ASSET_BASE_URL as bT, OPTIONS_SOURCE as bU, OVERLAY_WIDGETS as bV, OneApp as bW, OptionsSourceDirective as bX, OverlayBodyComponent as bY, OverlayRef as bZ, OverlayService as b_, LOGIN_STORE as ba, LanguageComponent as bb, ListComponent as bc, LogoComponent as bd, MAG_SOCKET_EVENT as be, MHeroColorDirective as bf, MHeroComponent as bg, MODAL_STORE_REF as bh, MOUNT_STATIC_SEGMENT as bi, MOUNT_TOKEN as bj, MRefDirective as bk, MStepComponent as bl, MURL_PARAM as bm, MURL_SEP as bn, ManifestEnrichmentService as bo, MarginDirective as bp, MenuComponent as bq, ModalDirective as br, ModalRef as bs, ModalStore as bt, MoneyPipe as bu, MultiRangeInputComponent as bv, MultiselectInputComponent as bw, MurlUrlSerializer as bx, NAV_DEFAULT_MURL as by, NAV_ID_SEP as bz, cropRect as c, SectionToggleItemDirective as c$, PLATFORM_EXTENSIBLE_NAV_IDS as c0, PLATFORM_NAV_MAP as c1, PLATFORM_ROOT_CHILDREN as c2, PaddingDirective as c3, PaginationComponent as c4, PanelComponent as c5, PercentagePipe as c6, PlaygroundComponent as c7, PositionDirective as c8, PwaInstallComponent as c9, SectionAccordionDirective as cA, SectionAccordionGroupDirective as cB, SectionBackComponent as cC, SectionBadgesComponent as cD, SectionButtonGroupComponent as cE, SectionCardComponent as cF, SectionCarouselComponent as cG, SectionComponent as cH, SectionFilterComponent as cI, SectionFilterGroupComponent as cJ, SectionFilterMenuComponent as cK, SectionFilterPanelComponent as cL, SectionFilterRangePanelComponent as cM, SectionFooterComponent as cN, SectionFormComponent as cO, SectionFormItemComponent as cP, SectionHeaderComponent as cQ, SectionHeroComponent as cR, SectionPaginationComponent as cS, SectionSearchComponent as cT, SectionStepperComponent as cU, SectionTableCellComponent as cV, SectionTableComponent as cW, SectionTableRowComponent as cX, SectionTableSortPipe as cY, SectionTabsComponent as cZ, SectionToggleComponent as c_, RECENT_SEARCH_LIMIT as ca, REMOTE_PAGE_RELOAD as cb, ROOT_NAV$1 as cc, RadioGroupComponent as cd, RadioInputComponent as ce, RatingInputComponent as cf, ReactiveElementComponent as cg, RemoteComponent as ch, RemoteLoaderService as ci, ResizeElementComponent as cj, RouteContainer as ck, RowComponent as cl, SEARCH_QUERY as cm, SEARCH_RESULTS_EVENT as cn, SECTION_ACCORDION_GROUP as co, SECTION_FORM_CONTEXT as cp, SECTION_TABLE_VARIANTS as cq, SHARED_ICONS as cr, SIZE_CONTEXT as cs, SPACING_INWARD as ct, ScoreComponent as cu, ScrollComponent as cv, ScrollService as cw, SearchPanelComponent as cx, SearchStore as cy, SearchUserPanelComponent as cz, drawFramed as d, applyDocEdit as d$, SelectableCardInputComponent as d0, SelectorDirective as d1, SettingsSearchBarComponent as d2, SettingsSearchService as d3, ShapeComponent as d4, SharedStoreRegistry as d5, SidePanelDirective as d6, Size as d7, SocketStore as d8, SortComponent as d9, ToggleRadioInputComponent as dA, ToolTipDirective as dB, TooltipComponent as dC, TranslateService as dD, TreeGridComponent as dE, URL_SEP as dF, USER_STORE_REF as dG, USER_TAB_MAP as dH, UniverseComponent as dI, UserApiService as dJ, UserAvatarComponent as dK, UserComponent as dL, UserNavComponent as dM, UserSettingsComponent as dN, UserStore as dO, WC_BUNDLE as dP, WC_NAVIGATE_EVENT as dQ, WC_ROUTE_CHANGED_EVENT as dR, WC_SEARCH_GROUPS as dS, WIN_USER_TAB_HOOK as dT, WIN_USER_TAB_KEY as dU, WatermarkComponent as dV, WcRouterStore as dW, WrapperInputComponent as dX, allowedCodes as dY, anchorNavId as dZ, applyColorsToElement as d_, StatComponent as da, StepComponent as db, StepperComponent as dc, StepsComponent as dd, StorageService as de, StrokeLinecap as df, StrokeLinejoin as dg, SummaryComponent as dh, SvgGeneratorComponent as di, SvgGeneratorService as dj, SvgService as dk, TOTAL_COLUMNS as dl, TRANSLATION_SOURCE as dm, TableComponent as dn, TechnicalMeterComponent as dp, TextInputComponent as dq, TextareaInputComponent as dr, ThemeComponent as ds, ThemeDataService as dt, ThemeService as du, ThemeStore as dv, TimeAgoPipe as dw, TimelineComponent as dx, ToggleButtonComponent as dy, ToggleInputComponent as dz, encodeFramed as e, initialNotificationState as e$, assetOptions as e0, bootstrapMagApp as e1, bootstrapPwaInstall as e2, browserLocale as e3, buildWcBaseUrl as e4, calculateLuminance as e5, calculateRanks as e6, cellText as e7, checkDoc as e8, checkFilterCondition as e9, filterHoldsRange as eA, filterList as eB, filterNumber as eC, filterNumberList as eD, filterOne as eE, filterPanelOf as eF, filterPanelWidth as eG, filterRange as eH, filterTreeGridRows as eI, filterValueList as eJ, filterValues as eK, flattenTreeGridRows as eL, formatBadgeCount as eM, fullName as eN, generateClipPath as eO, generateTransform as eP, getClassList as eQ, getProperty as eR, getScrollParent as eS, getTierFromPreviewPath as eT, getTreeGridRow as eU, getUniqueId as eV, getValue as eW, hasErrorComputed as eX, hexToRgb as eY, hslToRgb$1 as eZ, initMagmoniumApp as e_, childNavId as ea, claimDenial as eb, classListSignal as ec, coerceSize as ed, cornerEdge as ee, cornerSide as ef, createMap as eg, createPlatformNavMap as eh, definedWcTierOf as ei, deriveAvatarGradient as ej, deriveContrastColor as ek, deriveOppositeColor as el, derivePropertyName as em, docActionKey as en, docAssetCandidates as eo, docProblemKey as ep, docRemotePath as eq, emailValidation as er, evaluate as es, evaluateBool as et, fieldBoolean as eu, fieldNumber as ev, fieldString as ew, filterHoldsList as ex, filterHoldsOneBound as ey, filterHoldsOptions as ez, clampFraming as f, parsePatternNames as f$, initialState$2 as f0, initials as f1, injectAuthenticate as f2, injectDefaultDenial as f3, injectInstallApp as f4, injectParentSize as f5, injectScrollSticky as f6, isBootRedirect as f7, isButtonName as f8, isCancelledComputed as f9, mergeUniqueBy as fA, mergeUniqueWith as fB, minAgeValidation as fC, minLengthValidation as fD, minValidation as fE, miniMarkToHtml as fF, mountFor as fG, mountPatternProblem as fH, mountPatternText as fI, mountSegmentOf as fJ, mountTokenOf as fK, navIdChain as fL, navIdFor as fM, navIdSegment as fN, navIdToRoutePath as fO, navIdToSegments as fP, navParamOf as fQ, navTailMatcher as fR, navToId as fS, navVisibilityGuard as fT, nextSectionTableSort as fU, normalizeAssetOptions as fV, offsetOfLine as fW, parentNavId as fX, parseAddress as fY, parseColor as fZ, parseMountPattern as f_, isExtensiblePlatformNavId as fa, isJson as fb, isLoadingComputed as fc, isLocalhost as fd, isNavInstanceConfig as fe, isNavMenuConfig as ff, isNavRowsConfig as fg, isNavVisibilityConfig as fh, isPlatformNavId as fi, isSize as fj, isTierPreview as fk, isUrlLocalhost as fl, isValidNavId as fm, isValidNavSegment as fn, isWebComponent as fo, linkToId as fp, linkToNav as fq, loadingActions as fr, mInterceptor as fs, manualValidation as ft, matchFieldValidation as fu, matchMount as fv, maxLengthValidation as fw, maxValidation as fx, mergePlatformNav as fy, mergeUnique as fz, BaseInputComponent as g, patternValidation as g0, patternsValidation as g1, permissionRefusal as g2, pickSupportedLanguage as g3, platformNavWidgets as g4, presetDefaultOption as g5, privateGuard as g6, processImageToSvg as g7, provideAppContext as g8, provideMagAppConfig as g9, samePatterns as gA, sectionTableColumnId as gB, sectionTableColumnWidths as gC, sectionTableFrozenCount as gD, segmentsToNavId as gE, setProperty as gF, setTreeGridChildren as gG, setWcTier as gH, settingsWidgets as gI, shouldShowBadge as gJ, sortSectionTableRows as gK, splitNavId as gL, splitOnMatch as gM, stringToColor as gN, tailRouteOf as gO, toAttrBool as gP, toAttrNumber as gQ, toCssLength as gR, toHostNavId as gS, toLength$1 as gT, toLocalNavId as gU, toggleTreeGridRow as gV, unfetchedPlatformNav as gW, ungroupedDocActions as gX, urlValidation as gY, wcTierOf as gZ, provideMagWcConfig as ga, provideMagWcRoutes as gb, provideModalComponents as gc, provideMurlUrlSerializer as gd, provideNavWidgets as ge, provideOverlayWidgets as gf, providePlatformNavWidgets as gg, provideSearch as gh, provideSizeContext as gi, provideUserTabs as gj, publicGuard as gk, readFieldPatterns as gl, recordDefinedWcTier as gm, remoteOutletRoute as gn, renderAddress as go, renderDocument as gp, requiredValidation as gq, resolveConfigAsset as gr, resolveIconSize as gs, resolvePallet as gt, resolvePatternRules as gu, resolveSize as gv, resolveSpacing as gw, rgbToHex as gx, rgbToHsl as gy, rowHasChildren as gz, BaseTextInputComponent as h, initialFraming as i, TextOutputComponent as j, IS_DESIGN_MODE as k, APP_CONTEXT_REF as l, APP_LINK as m, ASSET_BASE_URL as n, outputSize as o, parseRatio as p, AccordionBodyDirective as q, renameForType as r, AccordionComponent as s, AccordionGroupComponent as t, ActionComponent as u, AnimatedGraphsComponent as v, AppCardComponent as w, AppRelationType as x, AppTileComponent as y, AssetStore as z };
|
|
41034
|
-
//# sourceMappingURL=magmonium-one-magmonium-one-
|
|
41524
|
+
export { ChatBubbleComponent as $, ACCESS_DOMAINS as A, ButtonComponent as B, AssetUrlPipe as C, Assets as D, AuthActivityPageComponent as E, AuthApiService as F, AuthStore as G, HeaderComponent$1 as H, InputType as I, AutosizeDirective as J, BadgeComponent as K, LabelComponent as L, MODAL_REF as M, BandingComponent as N, BaseArrayInputComponent as O, BaseRootWebComponent as P, BaseWebComponent as Q, RangeInputComponent as R, BrowserLocaleService as S, TranslatePipe as T, ButtonGroupComponent as U, CALLING_APP_HEADER as V, COMPONENT_INPUT_REGISTRY as W, CardComponent as X, CardWrapperComponent as Y, CarouselComponent as Z, ChartComponent as _, MIN_ZOOM as a, HttpService as a$, CheckboxGroupComponent as a0, CheckboxInputComponent as a1, ClearableInputComponent as a2, ClipboardService as a3, ColComponent as a4, ColorPickerInputComponent as a5, CommentItemComponent as a6, CommentsApiService as a7, CommentsComponent as a8, CommentsStore as a9, DeviceService as aA, DocComponent as aB, DocEditorComponent as aC, DomService as aD, Domain as aE, DotGridComponent as aF, DragListDirective as aG, DragListItemDirective as aH, DraggableDirective as aI, DropdownInputComponent as aJ, FILTER_GROUP_CONTEXT as aK, FILTER_RANGE_MODES as aL, FILTER_VARIANTS as aM, FLEX_VARIANTS as aN, FOLDER_PICK_LISTENER as aO, FORM_ASSET_FOLDER as aP, FileService as aQ, FileUploadDirective as aR, FileUploadInputComponent as aS, FlexComponent as aT, FlexItemComponent as aU, FormGroupComponent as aV, FrameComponent as aW, FreezeService as aX, GRID_BREAKPOINTS as aY, GetNavService as aZ, HighlightDirective as a_, CompactNumberPipe as aa, ComponentInputComponent as ab, ComponentStepperComponent as ac, ConfigComponent as ad, ConfirmComponent as ae, ContextMenuComponent as af, CustomIconClass as ag, CustomIconEditComponent as ah, DEFAULT_DENIAL as ai, DEFAULT_DOC_DENSITY as aj, DEFAULT_DOC_VARIANT as ak, DEFAULT_FILTER_RANGE_MODE as al, DEFAULT_FILTER_VARIANT as am, DEFAULT_NAV_PARAM as an, DEFAULT_NAV_SEGMENT as ao, DEFAULT_SIZE as ap, DOCK_MIN_PAGE_REMAINDER as aq, DOCS_FOLDER as ar, DOC_ACTION_ICONS as as, DOC_DENSITIES as at, DOC_EDIT_ACTIONS as au, DOC_TOOLBAR_GROUPS as av, DOC_VARIANTS as aw, DashboardCardComponent as ax, DateInputComponent as ay, DatePickerComponent as az, MAX_ZOOM as b, OverlayService as b$, ICON_SOURCE as b0, IS_SIDE_PANEL as b1, IconComponent as b2, ImgComponent as b3, InstrumentScoreComponent as b4, InterceptorObservables as b5, JumbotronComponent as b6, KeyValueComponent as b7, LAYOUT_ASSET_FOLDER as b8, LOADING_ACTIONS_REF as b9, NAV_ID_SEP as bA, NAV_MAIN_BUTTONS as bB, NAV_SEGMENT_RE as bC, NAV_STORE_REF as bD, NAV_WC_COMPONENTS as bE, NAV_WIDGET_MAP as bF, NavComponent as bG, NavDetailsComponent as bH, NavHeaderComponent as bI, NavMenuComponent as bJ, NavStore as bK, NavTrailComponent as bL, NothingComponent as bM, NotificationElementComponent as bN, NotificationGroupComponent as bO, NotificationPopupComponent as bP, NotificationService as bQ, NotificationStore as bR, NotificationType as bS, NotificationWidgetComponent as bT, ONE_ASSET_BASE_URL as bU, OPTIONS_SOURCE as bV, OVERLAY_WIDGETS as bW, OneApp as bX, OptionsSourceDirective as bY, OverlayBodyComponent as bZ, OverlayRef as b_, LOGIN_COMPONENT as ba, LOGIN_STORE as bb, LanguageComponent as bc, ListComponent as bd, LogoComponent as be, MAG_SOCKET_EVENT as bf, MHeroColorDirective as bg, MHeroComponent as bh, MODAL_STORE_REF as bi, MOUNT_STATIC_SEGMENT as bj, MOUNT_TOKEN as bk, MRefDirective as bl, MStepComponent as bm, MURL_PARAM as bn, MURL_SEP as bo, ManifestEnrichmentService as bp, MarginDirective as bq, MenuComponent as br, ModalDirective as bs, ModalRef as bt, ModalStore as bu, MoneyPipe as bv, MultiRangeInputComponent as bw, MultiselectInputComponent as bx, MurlUrlSerializer as by, NAV_DEFAULT_MURL as bz, cropRect as c, SectionStepperComponent as c$, PLATFORM_BUTTON_NAV_IDS as c0, PLATFORM_EXTENSIBLE_NAV_IDS as c1, PLATFORM_NAV_MAP as c2, PLATFORM_ROOT_CHILDREN as c3, PLUGIN_FALLBACK_LANG as c4, PLUGIN_OUTPUT_EVENT as c5, PLUGIN_SCREENS as c6, PaddingDirective as c7, PaginationComponent as c8, PanelComponent as c9, SPACING_INWARD as cA, ScoreComponent as cB, ScrollComponent as cC, ScrollService as cD, SearchPanelComponent as cE, SearchStore as cF, SearchUserPanelComponent as cG, SectionAccordionDirective as cH, SectionAccordionGroupDirective as cI, SectionBackComponent as cJ, SectionBadgesComponent as cK, SectionButtonGroupComponent as cL, SectionCardComponent as cM, SectionCarouselComponent as cN, SectionComponent as cO, SectionFilterComponent as cP, SectionFilterGroupComponent as cQ, SectionFilterMenuComponent as cR, SectionFilterPanelComponent as cS, SectionFilterRangePanelComponent as cT, SectionFooterComponent as cU, SectionFormComponent as cV, SectionFormItemComponent as cW, SectionHeaderComponent as cX, SectionHeroComponent as cY, SectionPaginationComponent as cZ, SectionSearchComponent as c_, PercentagePipe as ca, PlaygroundComponent as cb, PluginComponent as cc, PluginInputComponent as cd, PluginOutputComponent as ce, PositionDirective as cf, PwaInstallComponent as cg, RECENT_SEARCH_LIMIT as ch, REMOTE_PAGE_RELOAD as ci, ROOT_NAV$1 as cj, RadioGroupComponent as ck, RadioInputComponent as cl, RatingInputComponent as cm, ReactiveElementComponent as cn, RemoteComponent as co, RemoteLoaderService as cp, ResizeElementComponent as cq, RouteContainer as cr, RowComponent as cs, SEARCH_QUERY as ct, SEARCH_RESULTS_EVENT as cu, SECTION_ACCORDION_GROUP as cv, SECTION_FORM_CONTEXT as cw, SECTION_TABLE_VARIANTS as cx, SHARED_ICONS as cy, SIZE_CONTEXT as cz, drawFramed as d, WIN_USER_TAB_KEY as d$, SectionTableCellComponent as d0, SectionTableComponent as d1, SectionTableRowComponent as d2, SectionTableSortPipe as d3, SectionTabsComponent as d4, SectionToggleComponent as d5, SectionToggleItemDirective as d6, SelectableCardInputComponent as d7, SelectorDirective as d8, SettingsSearchBarComponent as d9, ThemeDataService as dA, ThemeService as dB, ThemeStore as dC, TimeAgoPipe as dD, TimelineComponent as dE, ToggleButtonComponent as dF, ToggleInputComponent as dG, ToggleRadioInputComponent as dH, ToolTipDirective as dI, TooltipComponent as dJ, TranslateService as dK, TreeGridComponent as dL, URL_SEP as dM, USER_STORE_REF as dN, USER_TAB_MAP as dO, UniverseComponent as dP, UserApiService as dQ, UserAvatarComponent as dR, UserComponent as dS, UserNavComponent as dT, UserSettingsComponent as dU, UserStore as dV, WC_BUNDLE as dW, WC_NAVIGATE_EVENT as dX, WC_ROUTE_CHANGED_EVENT as dY, WC_SEARCH_GROUPS as dZ, WIN_USER_TAB_HOOK as d_, SettingsSearchService as da, ShapeComponent as db, SharedStoreRegistry as dc, SidePanelDirective as dd, Size as de, SocketStore as df, SortComponent as dg, StatComponent as dh, StepComponent as di, StepperComponent as dj, StepsComponent as dk, StorageService as dl, StrokeLinecap as dm, StrokeLinejoin as dn, SummaryComponent as dp, SvgGeneratorComponent as dq, SvgGeneratorService as dr, SvgService as ds, TOTAL_COLUMNS as dt, TRANSLATION_SOURCE as du, TableComponent as dv, TechnicalMeterComponent as dw, TextInputComponent as dx, TextareaInputComponent as dy, ThemeComponent as dz, encodeFramed as e, generateTransform as e$, WatermarkComponent as e0, WcRouterStore as e1, WrapperInputComponent as e2, allowedCodes as e3, anchorNavId as e4, applyColorsToElement as e5, applyDocEdit as e6, assetOptions as e7, bootstrapMagApp as e8, bootstrapPwaInstall as e9, docRemotePath as eA, emailValidation as eB, evaluate as eC, evaluateBool as eD, exposeScreens as eE, exposedScreensOf as eF, fieldBoolean as eG, fieldNumber as eH, fieldString as eI, filterHoldsList as eJ, filterHoldsOneBound as eK, filterHoldsOptions as eL, filterHoldsRange as eM, filterList as eN, filterNumber as eO, filterNumberList as eP, filterOne as eQ, filterPanelOf as eR, filterPanelWidth as eS, filterRange as eT, filterTreeGridRows as eU, filterValueList as eV, filterValues as eW, flattenTreeGridRows as eX, formatBadgeCount as eY, fullName as eZ, generateClipPath as e_, browserLocale as ea, buildWcBaseUrl as eb, calculateLuminance as ec, calculateRanks as ed, cellText as ee, checkDoc as ef, checkFilterCondition as eg, childNavId as eh, claimDenial as ei, classListSignal as ej, coerceSize as ek, cornerEdge as el, cornerSide as em, createLoadingState as en, createMap as eo, createPlatformNavMap as ep, createPluginElement as eq, definePluginScreens as er, definedWcTierOf as es, deriveAvatarGradient as et, deriveContrastColor as eu, deriveOppositeColor as ev, derivePropertyName as ew, docActionKey as ex, docAssetCandidates as ey, docProblemKey as ez, clampFraming as f, navIdToSegments as f$, getClassList as f0, getProperty as f1, getScrollParent as f2, getTierFromPreviewPath as f3, getTreeGridRow as f4, getUniqueId as f5, getValue as f6, hasErrorComputed as f7, hexToRgb as f8, hslToRgb$1 as f9, isWebComponent as fA, linkToId as fB, linkToNav as fC, loadingActions as fD, mInterceptor as fE, manualValidation as fF, matchFieldValidation as fG, matchMount as fH, maxLengthValidation as fI, maxValidation as fJ, mergePlatformNav as fK, mergeUnique as fL, mergeUniqueBy as fM, mergeUniqueWith as fN, minAgeValidation as fO, minLengthValidation as fP, minValidation as fQ, miniMarkToHtml as fR, mountFor as fS, mountPatternProblem as fT, mountPatternText as fU, mountSegmentOf as fV, mountTokenOf as fW, navIdChain as fX, navIdFor as fY, navIdSegment as fZ, navIdToRoutePath as f_, initMagmoniumApp as fa, initialNotificationState as fb, initialState$2 as fc, initials as fd, injectAuthenticate as fe, injectDefaultDenial as ff, injectInstallApp as fg, injectParentSize as fh, injectScrollSticky as fi, isBootRedirect as fj, isButtonName as fk, isCancelledComputed as fl, isExtensiblePlatformNavId as fm, isJson as fn, isLoadingComputed as fo, isLocalhost as fp, isNavInstanceConfig as fq, isNavMenuConfig as fr, isNavRowsConfig as fs, isNavVisibilityConfig as ft, isPlatformNavId as fu, isSize as fv, isTierPreview as fw, isUrlLocalhost as fx, isValidNavId as fy, isValidNavSegment as fz, BaseInputComponent as g, splitOnMatch as g$, navParamOf as g0, navTailMatcher as g1, navToId as g2, navVisibilityGuard as g3, nextSectionTableSort as g4, normalizeAssetOptions as g5, offsetOfLine as g6, parentNavId as g7, parseAddress as g8, parseColor as g9, recordDefinedWcTier as gA, remoteOutletRoute as gB, renderAddress as gC, renderDocument as gD, requiredValidation as gE, resolveConfigAsset as gF, resolveIconSize as gG, resolvePallet as gH, resolvePatternRules as gI, resolveSize as gJ, resolveSpacing as gK, rgbToHex as gL, rgbToHsl as gM, rowHasChildren as gN, samePatterns as gO, sectionTableColumnId as gP, sectionTableColumnWidths as gQ, sectionTableFrozenCount as gR, segmentsToNavId as gS, setProperty as gT, setTreeGridChildren as gU, setWcLocalPort as gV, setWcTier as gW, settingsWidgets as gX, shouldShowBadge as gY, sortSectionTableRows as gZ, splitNavId as g_, parseMountPattern as ga, parsePatternNames as gb, patternValidation as gc, patternsValidation as gd, permissionRefusal as ge, pickSupportedLanguage as gf, platformNavWidgets as gg, pluginTag as gh, presetDefaultOption as gi, privateGuard as gj, processImageToSvg as gk, provideAppContext as gl, provideMagAppConfig as gm, provideMagWcConfig as gn, provideMagWcRoutes as go, provideModalComponents as gp, provideMurlUrlSerializer as gq, provideNavWidgets as gr, provideOverlayWidgets as gs, providePlatformNavWidgets as gt, providePluginRuntime as gu, provideSearch as gv, provideSizeContext as gw, provideUserTabs as gx, publicGuard as gy, readFieldPatterns as gz, BaseTextInputComponent as h, stringToColor as h0, tailRouteOf as h1, toAttrBool as h2, toAttrNumber as h3, toCssLength as h4, toHostNavId as h5, toLength$1 as h6, toLocalNavId as h7, toggleTreeGridRow as h8, unfetchedPlatformNav as h9, ungroupedDocActions as ha, urlValidation as hb, wcLocalBaseOf as hc, wcTierOf as hd, initialFraming as i, TextOutputComponent as j, IS_DESIGN_MODE as k, APP_CONTEXT_REF as l, APP_LINK as m, ASSET_BASE_URL as n, outputSize as o, parseRatio as p, AccordionBodyDirective as q, renameForType as r, AccordionComponent as s, AccordionGroupComponent as t, ActionComponent as u, AnimatedGraphsComponent as v, AppCardComponent as w, AppRelationType as x, AppTileComponent as y, AssetStore as z };
|
|
41525
|
+
//# sourceMappingURL=magmonium-one-magmonium-one-BLuMt3bj.mjs.map
|