@magmonium/one 0.4.43 → 0.4.46

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.
@@ -29,7 +29,7 @@ import { o as isEditableImage, s as outputSize } from "./magmonium-one-image-fra
29
29
  import * as i0 from "@angular/core";
30
30
  import { ApplicationRef, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, DOCUMENT, DestroyRef, Directive, ElementRef, EventEmitter, HostAttributeToken, HostBinding, HostListener, Injectable, InjectionToken, Injector, Input, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation, afterEveryRender, afterNextRender, afterRenderEffect, computed, contentChild, contentChildren, createComponent, effect, forwardRef, inject, input, inputBinding, linkedSignal, makeEnvironmentProviders, model, numberAttribute, output, outputBinding, provideAppInitializer, provideBrowserGlobalErrorListeners, provideZonelessChangeDetection, reflectComponentType, runInInjectionContext, signal, twoWayBinding, untracked, viewChild, viewChildren } from "@angular/core";
31
31
  import { HttpErrorResponse, provideHttpClient, withFetch, withInterceptors } from "@angular/common/http";
32
- import { EMPTY, Observable, Subject, catchError, combineLatest, filter, finalize, firstValueFrom, forkJoin, from, fromEvent, map, mergeMap, of, pipe, race, shareReplay, startWith, switchMap, take, tap, throwError } from "rxjs";
32
+ import { EMPTY, Observable, Subject, catchError, combineLatest, distinctUntilChanged, filter, finalize, firstValueFrom, forkJoin, from, fromEvent, map, mergeMap, of, pipe, race, shareReplay, startWith, switchMap, take, tap, throwError } from "rxjs";
33
33
  import { rxResource, takeUntilDestroyed, toObservable, toSignal } from "@angular/core/rxjs-interop";
34
34
  import { patchState, signalStore, withComputed, withHooks, withMethods, withProps, withState } from "@ngrx/signals";
35
35
  import { rxMethod } from "@ngrx/signals/rxjs-interop";
@@ -29221,12 +29221,247 @@ const remoteOutletRoute = (name) => ({
29221
29221
  children: [],
29222
29222
  data: { remoteOutlet: true }
29223
29223
  });
29224
+ var AppLogoComponent = class AppLogoComponent {
29225
+ glyph = input(...ngDevMode ? [void 0, { debugName: "glyph" }] : /* istanbul ignore next */ []);
29226
+ appColor = input(...ngDevMode ? [void 0, { debugName: "appColor" }] : /* istanbul ignore next */ []);
29227
+ name = input(...ngDevMode ? [void 0, { debugName: "name" }] : /* istanbul ignore next */ []);
29228
+ link = input(...ngDevMode ? [void 0, { debugName: "link" }] : /* istanbul ignore next */ []);
29229
+ variant = input("tile", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
29230
+ tone = input("app", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
29231
+ size = input(...ngDevMode ? [void 0, { debugName: "size" }] : /* istanbul ignore next */ []);
29232
+ #state = inject(AppLogoState);
29233
+ #own = inject(APP_LOGO_SOURCE);
29234
+ #injector = inject(Injector);
29235
+ #unheld = computed(() => {
29236
+ const link = this.link()?.trim();
29237
+ return link && !this.#state.logos()[link] ? link : void 0;
29238
+ }, ...ngDevMode ? [{ debugName: "#unheld" }] : /* istanbul ignore next */ []);
29239
+ #fetched = toSignal(toObservable(this.#unheld).pipe(distinctUntilChanged(), switchMap((link) => link ? this.#injector.get(AppIdentityService).identity(link) : of(void 0))));
29240
+ lookup = computed(() => {
29241
+ const link = this.link()?.trim();
29242
+ if (link) {
29243
+ const held = this.#state.logos()[link];
29244
+ if (held) return held;
29245
+ const identity = this.#fetched();
29246
+ return identity?.link === link ? {
29247
+ glyph: identity.logoGlyph,
29248
+ color: identity.appColor,
29249
+ name: identity.name || link
29250
+ } : void 0;
29251
+ }
29252
+ return this.glyph() !== void 0 || this.appColor() !== void 0 || this.name() !== void 0 ? void 0 : this.#own();
29253
+ }, ...ngDevMode ? [{ debugName: "lookup" }] : /* istanbul ignore next */ []);
29254
+ color = computed(() => {
29255
+ const value = this.appColor() !== void 0 ? this.appColor() : this.lookup()?.color;
29256
+ return value ? normalizeAppColor(value) ?? null : null;
29257
+ }, ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
29258
+ label = computed(() => (this.name() !== void 0 ? this.name() : this.lookup()?.name) || this.link()?.trim() || "", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
29259
+ shadow = computed(() => {
29260
+ const color = this.color();
29261
+ return color ? appLogoShadowColor(color) : null;
29262
+ }, ...ngDevMode ? [{ debugName: "shadow" }] : /* istanbul ignore next */ []);
29263
+ mask = computed(() => {
29264
+ if (this.glyph() !== void 0) {
29265
+ const glyph = this.glyph();
29266
+ return glyph ? logoGlyphMaskUrl(glyph) : void 0;
29267
+ }
29268
+ const found = this.lookup();
29269
+ if (found?.glyph) return logoGlyphMaskUrl(found.glyph);
29270
+ return found?.src ? `url("${encodeURI(found.src)}")` : void 0;
29271
+ }, ...ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []);
29272
+ letter = computed(() => this.label().trim().charAt(0).toUpperCase(), ...ngDevMode ? [{ debugName: "letter" }] : /* istanbul ignore next */ []);
29273
+ static ɵfac = i0.ɵɵngDeclareFactory({
29274
+ minVersion: "12.0.0",
29275
+ version: "22.2.1",
29276
+ ngImport: i0,
29277
+ type: AppLogoComponent,
29278
+ deps: [],
29279
+ target: i0.ɵɵFactoryTarget.Component
29280
+ });
29281
+ static ɵcmp = i0.ɵɵngDeclareComponent({
29282
+ minVersion: "17.0.0",
29283
+ version: "22.2.1",
29284
+ type: AppLogoComponent,
29285
+ isStandalone: true,
29286
+ selector: "m-app-logo",
29287
+ inputs: {
29288
+ glyph: {
29289
+ classPropertyName: "glyph",
29290
+ publicName: "glyph",
29291
+ isSignal: true,
29292
+ isRequired: false,
29293
+ transformFunction: null
29294
+ },
29295
+ appColor: {
29296
+ classPropertyName: "appColor",
29297
+ publicName: "appColor",
29298
+ isSignal: true,
29299
+ isRequired: false,
29300
+ transformFunction: null
29301
+ },
29302
+ name: {
29303
+ classPropertyName: "name",
29304
+ publicName: "name",
29305
+ isSignal: true,
29306
+ isRequired: false,
29307
+ transformFunction: null
29308
+ },
29309
+ link: {
29310
+ classPropertyName: "link",
29311
+ publicName: "link",
29312
+ isSignal: true,
29313
+ isRequired: false,
29314
+ transformFunction: null
29315
+ },
29316
+ variant: {
29317
+ classPropertyName: "variant",
29318
+ publicName: "variant",
29319
+ isSignal: true,
29320
+ isRequired: false,
29321
+ transformFunction: null
29322
+ },
29323
+ tone: {
29324
+ classPropertyName: "tone",
29325
+ publicName: "tone",
29326
+ isSignal: true,
29327
+ isRequired: false,
29328
+ transformFunction: null
29329
+ },
29330
+ size: {
29331
+ classPropertyName: "size",
29332
+ publicName: "size",
29333
+ isSignal: true,
29334
+ isRequired: false,
29335
+ transformFunction: null
29336
+ }
29337
+ },
29338
+ host: {
29339
+ attributes: { "role": "img" },
29340
+ properties: {
29341
+ "class.m-app-logo--glow": "variant() === 'glow'",
29342
+ "class.m-app-logo--light": "tone() === 'light'",
29343
+ "attr.aria-label": "label() || null",
29344
+ "style.width": "size() || null",
29345
+ "style.height": "size() || null",
29346
+ "style.--m-app-logo-color": "color()",
29347
+ "style.--m-app-logo-shadow": "shadow()"
29348
+ },
29349
+ classAttribute: "m-app-logo"
29350
+ },
29351
+ ngImport: i0,
29352
+ template: `
29353
+ <span class="m-app-logo__mark">
29354
+ @if (mask(); as url) {
29355
+ <span class="m-app-logo__glyph" [style.mask-image]="url"></span>
29356
+ } @else {
29357
+ <span class="m-app-logo__letter">{{ letter() }}</span>
29358
+ }
29359
+ </span>
29360
+ `,
29361
+ isInline: true,
29362
+ 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:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;aspect-ratio:1;container-type:size;border-radius:22%;overflow:hidden;background:var(--m-app-logo-color, var(--m-text-quaternary))}.m-app-logo__mark{display:flex;align-items:center;justify-content:center;width:100%;height:100%;filter:drop-shadow(0 4cqmin 3cqmin var(--m-app-logo-shadow, rgba(0, 0, 0, .25)))}.m-app-logo__glyph{width:60%;height:60%;background:#fff;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}.m-app-logo__letter{color:#fff;font-size:50cqmin;font-weight:700;line-height:1}:host(.m-app-logo--glow){border-radius:0;overflow:visible;background:none}:host(.m-app-logo--glow) .m-app-logo__mark{filter:drop-shadow(0 0 8cqmin color-mix(in srgb,var(--m-app-logo-color, var(--m-mm)) 55%,transparent)) drop-shadow(0 6cqmin 18cqmin color-mix(in srgb,var(--m-app-logo-color, var(--m-mm)) 35%,transparent))}:host(.m-app-logo--glow) .m-app-logo__glyph{width:100%;height:100%;background:var(--m-app-logo-color, var(--m-mm))}:host(.m-app-logo--glow) .m-app-logo__letter{color:var(--m-app-logo-color, var(--m-mm));font-size:80cqmin}:host(.m-app-logo--glow.m-app-logo--light) .m-app-logo__glyph{background:#fff}:host(.m-app-logo--glow.m-app-logo--light) .m-app-logo__letter{color:#fff}\n"],
29363
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
29364
+ });
29365
+ };
29366
+ i0.ɵɵngDeclareClassMetadata({
29367
+ minVersion: "12.0.0",
29368
+ version: "22.2.1",
29369
+ ngImport: i0,
29370
+ type: AppLogoComponent,
29371
+ decorators: [{
29372
+ type: Component,
29373
+ args: [{
29374
+ selector: "m-app-logo",
29375
+ template: `
29376
+ <span class="m-app-logo__mark">
29377
+ @if (mask(); as url) {
29378
+ <span class="m-app-logo__glyph" [style.mask-image]="url"></span>
29379
+ } @else {
29380
+ <span class="m-app-logo__letter">{{ letter() }}</span>
29381
+ }
29382
+ </span>
29383
+ `,
29384
+ changeDetection: ChangeDetectionStrategy.OnPush,
29385
+ host: {
29386
+ class: "m-app-logo",
29387
+ "[class.m-app-logo--glow]": "variant() === 'glow'",
29388
+ "[class.m-app-logo--light]": "tone() === 'light'",
29389
+ role: "img",
29390
+ "[attr.aria-label]": "label() || null",
29391
+ "[style.width]": "size() || null",
29392
+ "[style.height]": "size() || null",
29393
+ "[style.--m-app-logo-color]": "color()",
29394
+ "[style.--m-app-logo-shadow]": "shadow()"
29395
+ },
29396
+ 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:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;aspect-ratio:1;container-type:size;border-radius:22%;overflow:hidden;background:var(--m-app-logo-color, var(--m-text-quaternary))}.m-app-logo__mark{display:flex;align-items:center;justify-content:center;width:100%;height:100%;filter:drop-shadow(0 4cqmin 3cqmin var(--m-app-logo-shadow, rgba(0, 0, 0, .25)))}.m-app-logo__glyph{width:60%;height:60%;background:#fff;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}.m-app-logo__letter{color:#fff;font-size:50cqmin;font-weight:700;line-height:1}:host(.m-app-logo--glow){border-radius:0;overflow:visible;background:none}:host(.m-app-logo--glow) .m-app-logo__mark{filter:drop-shadow(0 0 8cqmin color-mix(in srgb,var(--m-app-logo-color, var(--m-mm)) 55%,transparent)) drop-shadow(0 6cqmin 18cqmin color-mix(in srgb,var(--m-app-logo-color, var(--m-mm)) 35%,transparent))}:host(.m-app-logo--glow) .m-app-logo__glyph{width:100%;height:100%;background:var(--m-app-logo-color, var(--m-mm))}:host(.m-app-logo--glow) .m-app-logo__letter{color:var(--m-app-logo-color, var(--m-mm));font-size:80cqmin}:host(.m-app-logo--glow.m-app-logo--light) .m-app-logo__glyph{background:#fff}:host(.m-app-logo--glow.m-app-logo--light) .m-app-logo__letter{color:#fff}\n"]
29397
+ }]
29398
+ }],
29399
+ propDecorators: {
29400
+ glyph: [{
29401
+ type: i0.Input,
29402
+ args: [{
29403
+ isSignal: true,
29404
+ alias: "glyph",
29405
+ required: false
29406
+ }]
29407
+ }],
29408
+ appColor: [{
29409
+ type: i0.Input,
29410
+ args: [{
29411
+ isSignal: true,
29412
+ alias: "appColor",
29413
+ required: false
29414
+ }]
29415
+ }],
29416
+ name: [{
29417
+ type: i0.Input,
29418
+ args: [{
29419
+ isSignal: true,
29420
+ alias: "name",
29421
+ required: false
29422
+ }]
29423
+ }],
29424
+ link: [{
29425
+ type: i0.Input,
29426
+ args: [{
29427
+ isSignal: true,
29428
+ alias: "link",
29429
+ required: false
29430
+ }]
29431
+ }],
29432
+ variant: [{
29433
+ type: i0.Input,
29434
+ args: [{
29435
+ isSignal: true,
29436
+ alias: "variant",
29437
+ required: false
29438
+ }]
29439
+ }],
29440
+ tone: [{
29441
+ type: i0.Input,
29442
+ args: [{
29443
+ isSignal: true,
29444
+ alias: "tone",
29445
+ required: false
29446
+ }]
29447
+ }],
29448
+ size: [{
29449
+ type: i0.Input,
29450
+ args: [{
29451
+ isSignal: true,
29452
+ alias: "size",
29453
+ required: false
29454
+ }]
29455
+ }]
29456
+ }
29457
+ });
29224
29458
  const REMOTE_PAGE_RELOAD = new InjectionToken("REMOTE_PAGE_RELOAD", {
29225
29459
  providedIn: "root",
29226
29460
  factory: () => () => window.location.reload()
29227
29461
  });
29228
29462
  const tierReloadKey = (link) => `m-remote-tier-reload:${window.location.pathname}|${link ?? ""}|${link && wcTierOf(link) || "status"}`;
29229
29463
  const isBootRedirect = (pending, sent, path) => pending && (sent === void 0 || !samePath(path, sent));
29464
+ const REMOTE_BOOT_TIMEOUT_MS = 1e4;
29230
29465
  var RemoteComponent = class RemoteComponent {
29231
29466
  config = input(...ngDevMode ? [void 0, { debugName: "config" }] : /* istanbul ignore next */ []);
29232
29467
  link = input(...ngDevMode ? [void 0, { debugName: "link" }] : /* istanbul ignore next */ []);
@@ -29247,6 +29482,8 @@ var RemoteComponent = class RemoteComponent {
29247
29482
  return typeof mount === "string" ? parseMountPattern(mount) : mount;
29248
29483
  }, ...ngDevMode ? [{ debugName: "pattern" }] : /* istanbul ignore next */ []);
29249
29484
  beta = input(false, ...ngDevMode ? [{ debugName: "beta" }] : /* istanbul ignore next */ []);
29485
+ glyph = input(...ngDevMode ? [void 0, { debugName: "glyph" }] : /* istanbul ignore next */ []);
29486
+ appColor = input(...ngDevMode ? [void 0, { debugName: "appColor" }] : /* istanbul ignore next */ []);
29250
29487
  loaded = output();
29251
29488
  failed = output();
29252
29489
  loader = inject(RemoteLoaderService);
@@ -29272,6 +29509,13 @@ var RemoteComponent = class RemoteComponent {
29272
29509
  pinnedLink;
29273
29510
  state = signal("idle", ...ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []);
29274
29511
  failure = signal({}, ...ngDevMode ? [{ debugName: "failure" }] : /* istanbul ignore next */ []);
29512
+ booting = signal(false, ...ngDevMode ? [{ debugName: "booting" }] : /* istanbul ignore next */ []);
29513
+ bootTimer;
29514
+ endBoot = () => {
29515
+ clearTimeout(this.bootTimer);
29516
+ this.bootTimer = void 0;
29517
+ this.booting.set(false);
29518
+ };
29275
29519
  hostQuery = this.router ? toSignal(this.router.events.pipe(filter((e) => e instanceof NavigationEnd), map(() => this.currentQuery())), { initialValue: this.currentQuery() }) : signal("");
29276
29520
  hostSegments = this.router ? toSignal(this.router.events.pipe(filter((e) => e instanceof NavigationEnd), map(() => this.primarySegments())), { initialValue: this.primarySegments() }) : signal([]);
29277
29521
  mountMatch = linkedSignal({
@@ -29293,13 +29537,38 @@ var RemoteComponent = class RemoteComponent {
29293
29537
  return navUrl === void 0 ? void 0 : `${navUrl}${this.hostQuery()}`;
29294
29538
  }, ...ngDevMode ? [{ debugName: "remotePath" }] : /* istanbul ignore next */ []);
29295
29539
  ownTail = computed(() => this.mountMatch()?.navUrl ?? this.tail(), ...ngDevMode ? [{ debugName: "ownTail" }] : /* istanbul ignore next */ []);
29296
- appColor = computed(() => {
29540
+ mountColor = computed(() => {
29541
+ const chosen = normalizeAppColor(this.appColor() ?? "");
29542
+ if (chosen) return chosen;
29297
29543
  const link = this.appLink();
29298
29544
  const color = link ? this.appLogoState.logos()[link]?.color : void 0;
29299
29545
  return color ? normalizeAppColor(color) : void 0;
29300
- }, ...ngDevMode ? [{ debugName: "appColor" }] : /* istanbul ignore next */ []);
29546
+ }, ...ngDevMode ? [{ debugName: "mountColor" }] : /* istanbul ignore next */ []);
29547
+ chosenGlyph = computed(() => {
29548
+ const glyph = this.glyph()?.trim();
29549
+ return glyph ? rebuildLogoGlyph(glyph).svg || void 0 : void 0;
29550
+ }, ...ngDevMode ? [{ debugName: "chosenGlyph" }] : /* istanbul ignore next */ []);
29551
+ splash = computed(() => {
29552
+ const link = this.appLink() || void 0;
29553
+ const own = link ? this.appLogoState.logos()[link] : void 0;
29554
+ const chosen = this.chosenGlyph();
29555
+ const color = this.mountColor();
29556
+ if (!own) return {
29557
+ link,
29558
+ glyph: chosen,
29559
+ color,
29560
+ name: void 0
29561
+ };
29562
+ const logo = own.glyph !== void 0 ? own : this.appLogoState.source();
29563
+ return {
29564
+ link,
29565
+ glyph: chosen ?? logo?.glyph ?? null,
29566
+ color: color ?? null,
29567
+ name: own.name?.trim() || link
29568
+ };
29569
+ }, ...ngDevMode ? [{ debugName: "splash" }] : /* istanbul ignore next */ []);
29301
29570
  constructor() {
29302
- effect(() => paintAppColor(this.elementRef.nativeElement, this.appColor()));
29571
+ effect(() => paintAppColor(this.elementRef.nativeElement, this.mountColor()));
29303
29572
  effect(() => {
29304
29573
  this.loginStore?.isLoggedIn();
29305
29574
  const config = this.config();
@@ -29365,6 +29634,7 @@ var RemoteComponent = class RemoteComponent {
29365
29634
  });
29366
29635
  }
29367
29636
  ngOnDestroy() {
29637
+ clearTimeout(this.bootTimer);
29368
29638
  if (this.pinnedLink) setWcTier(this.pinnedLink, void 0);
29369
29639
  this.dismountElement();
29370
29640
  this.url()?.clear(this.queryKeys);
@@ -29411,6 +29681,7 @@ var RemoteComponent = class RemoteComponent {
29411
29681
  };
29412
29682
  onReport = (event) => {
29413
29683
  const detail = event.detail;
29684
+ this.endBoot();
29414
29685
  const raw = detail?.path;
29415
29686
  if (raw === void 0) return;
29416
29687
  const path = raw.replace(/^\//, "");
@@ -29485,6 +29756,8 @@ var RemoteComponent = class RemoteComponent {
29485
29756
  } catch {}
29486
29757
  result.element.addEventListener(WC_ROUTE_CHANGED_EVENT, this.onReport);
29487
29758
  host.appendChild(result.element);
29759
+ this.booting.set(true);
29760
+ this.bootTimer = setTimeout(this.endBoot, REMOTE_BOOT_TIMEOUT_MS);
29488
29761
  this.state.set("loaded");
29489
29762
  const loadedConfig = result.config ?? config;
29490
29763
  if (loadedConfig) this.loaded.emit(loadedConfig);
@@ -29502,6 +29775,7 @@ var RemoteComponent = class RemoteComponent {
29502
29775
  };
29503
29776
  dismountElement = () => {
29504
29777
  const host = this.elementRef.nativeElement;
29778
+ this.endBoot();
29505
29779
  this.loadedElement?.removeEventListener(WC_ROUTE_CHANGED_EVENT, this.onReport);
29506
29780
  if (this.loadedElement?.parentNode === host) host.removeChild(this.loadedElement);
29507
29781
  this.loadedElement = void 0;
@@ -29625,33 +29899,80 @@ var RemoteComponent = class RemoteComponent {
29625
29899
  isSignal: true,
29626
29900
  isRequired: false,
29627
29901
  transformFunction: null
29902
+ },
29903
+ glyph: {
29904
+ classPropertyName: "glyph",
29905
+ publicName: "glyph",
29906
+ isSignal: true,
29907
+ isRequired: false,
29908
+ transformFunction: null
29909
+ },
29910
+ appColor: {
29911
+ classPropertyName: "appColor",
29912
+ publicName: "appColor",
29913
+ isSignal: true,
29914
+ isRequired: false,
29915
+ transformFunction: null
29628
29916
  }
29629
29917
  },
29630
29918
  outputs: {
29631
29919
  loaded: "loaded",
29632
29920
  failed: "failed"
29633
29921
  },
29634
- host: { classAttribute: "m-remote" },
29922
+ host: {
29923
+ properties: { "class.m-remote--booting": "booting()" },
29924
+ classAttribute: "m-remote"
29925
+ },
29635
29926
  ngImport: i0,
29636
29927
  template: `
29637
- @if (state() === 'loading') {
29638
- <div class="m-remote__loading"><div class="m-remote__spinner"></div></div>
29928
+ @if (state() === 'loading' || booting()) {
29929
+ <div class="m-remote__splash">
29930
+ <span class="m-remote__splash-mark">
29931
+ <m-app-logo
29932
+ variant="glow"
29933
+ tone="light"
29934
+ [link]="splash().link"
29935
+ [glyph]="splash().glyph"
29936
+ [appColor]="splash().color"
29937
+ [name]="splash().name"
29938
+ />
29939
+ </span>
29940
+ </div>
29639
29941
  } @else if (state() === 'self-beta') {
29640
29942
  <div class="m-remote__self-beta">
29641
- <span class="m-remote__reason">{{ 'remote-self-beta' | translate }}</span>
29642
- <m-button label="open-beta" icon="chevrons-right" variant="primary" (clicked)="openBeta()" />
29943
+ <span class="m-remote__reason">{{
29944
+ 'remote-self-beta' | translate
29945
+ }}</span>
29946
+ <m-button
29947
+ label="open-beta"
29948
+ icon="chevrons-right"
29949
+ variant="primary"
29950
+ (clicked)="openBeta()"
29951
+ />
29643
29952
  </div>
29644
29953
  } @else if (state() === 'failed') {
29645
29954
  <div class="m-remote__broken">
29646
29955
  <m-icon name="link-broken" color="currentColor" />
29647
29956
  <span class="m-remote__reason">
29648
29957
  @switch (failure().reason) {
29649
- @case ('invalid-link') { {{ 'remote-invalid-link' | translate }} }
29650
- @case ('config-not-found') { {{ 'remote-config-not-found' | translate }} }
29651
- @case ('script-failed') { {{ 'remote-script-failed' | translate }} }
29652
- @case ('element-timeout') { {{ 'remote-element-timeout' | translate }} }
29653
- @case ('offline') { {{ 'remote-offline' | translate }} }
29654
- @case ('tier-conflict') { {{ 'remote-tier-conflict' | translate }} }
29958
+ @case ('invalid-link') {
29959
+ {{ 'remote-invalid-link' | translate }}
29960
+ }
29961
+ @case ('config-not-found') {
29962
+ {{ 'remote-config-not-found' | translate }}
29963
+ }
29964
+ @case ('script-failed') {
29965
+ {{ 'remote-script-failed' | translate }}
29966
+ }
29967
+ @case ('element-timeout') {
29968
+ {{ 'remote-element-timeout' | translate }}
29969
+ }
29970
+ @case ('offline') {
29971
+ {{ 'remote-offline' | translate }}
29972
+ }
29973
+ @case ('tier-conflict') {
29974
+ {{ 'remote-tier-conflict' | translate }}
29975
+ }
29655
29976
  }
29656
29977
  </span>
29657
29978
  <span class="m-remote__detail">{{ appLink() }}</span>
@@ -29662,7 +29983,7 @@ var RemoteComponent = class RemoteComponent {
29662
29983
  }
29663
29984
  `,
29664
29985
  isInline: true,
29665
- 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,.m-remote__self-beta{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,.m-remote__self-beta{color:var(--m-text-secondary)}.m-remote__detail{font-size:.85em}@keyframes m-remote-spin{to{transform:rotate(360deg)}}\n"],
29986
+ 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__broken,.m-remote__self-beta{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px}.m-remote__broken,.m-remote__self-beta{color:var(--m-text-secondary)}.m-remote--booting{position:relative;min-height:100vh}.m-remote--booting>.m-remote__splash{position:absolute;inset:0;z-index:1}.m-remote--booting>:not(.m-remote__splash){visibility:hidden}.m-remote__splash{display:flex;align-items:center;justify-content:center;width:100%;height:100%;min-height:100vh;background:var(--m-background)}.m-remote__splash-mark{display:flex;width:96px;height:96px;animation:m-remote-breathe 1.6s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.m-remote__splash-mark{animation:none}}.m-remote__detail{font-size:.85em}@keyframes m-remote-breathe{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.93)}}\n"],
29666
29987
  dependencies: [
29667
29988
  {
29668
29989
  kind: "component",
@@ -29714,6 +30035,20 @@ var RemoteComponent = class RemoteComponent {
29714
30035
  ],
29715
30036
  outputs: ["configChange", "clicked"]
29716
30037
  },
30038
+ {
30039
+ kind: "component",
30040
+ type: AppLogoComponent,
30041
+ selector: "m-app-logo",
30042
+ inputs: [
30043
+ "glyph",
30044
+ "appColor",
30045
+ "name",
30046
+ "link",
30047
+ "variant",
30048
+ "tone",
30049
+ "size"
30050
+ ]
30051
+ },
29717
30052
  {
29718
30053
  kind: "pipe",
29719
30054
  type: TranslatePipe,
@@ -29736,28 +30071,62 @@ i0.ɵɵngDeclareClassMetadata({
29736
30071
  imports: [
29737
30072
  TranslatePipe,
29738
30073
  IconComponent,
29739
- ButtonComponent
30074
+ ButtonComponent,
30075
+ AppLogoComponent
29740
30076
  ],
29741
- host: { class: "m-remote" },
30077
+ host: {
30078
+ class: "m-remote",
30079
+ "[class.m-remote--booting]": "booting()"
30080
+ },
29742
30081
  template: `
29743
- @if (state() === 'loading') {
29744
- <div class="m-remote__loading"><div class="m-remote__spinner"></div></div>
30082
+ @if (state() === 'loading' || booting()) {
30083
+ <div class="m-remote__splash">
30084
+ <span class="m-remote__splash-mark">
30085
+ <m-app-logo
30086
+ variant="glow"
30087
+ tone="light"
30088
+ [link]="splash().link"
30089
+ [glyph]="splash().glyph"
30090
+ [appColor]="splash().color"
30091
+ [name]="splash().name"
30092
+ />
30093
+ </span>
30094
+ </div>
29745
30095
  } @else if (state() === 'self-beta') {
29746
30096
  <div class="m-remote__self-beta">
29747
- <span class="m-remote__reason">{{ 'remote-self-beta' | translate }}</span>
29748
- <m-button label="open-beta" icon="chevrons-right" variant="primary" (clicked)="openBeta()" />
30097
+ <span class="m-remote__reason">{{
30098
+ 'remote-self-beta' | translate
30099
+ }}</span>
30100
+ <m-button
30101
+ label="open-beta"
30102
+ icon="chevrons-right"
30103
+ variant="primary"
30104
+ (clicked)="openBeta()"
30105
+ />
29749
30106
  </div>
29750
30107
  } @else if (state() === 'failed') {
29751
30108
  <div class="m-remote__broken">
29752
30109
  <m-icon name="link-broken" color="currentColor" />
29753
30110
  <span class="m-remote__reason">
29754
30111
  @switch (failure().reason) {
29755
- @case ('invalid-link') { {{ 'remote-invalid-link' | translate }} }
29756
- @case ('config-not-found') { {{ 'remote-config-not-found' | translate }} }
29757
- @case ('script-failed') { {{ 'remote-script-failed' | translate }} }
29758
- @case ('element-timeout') { {{ 'remote-element-timeout' | translate }} }
29759
- @case ('offline') { {{ 'remote-offline' | translate }} }
29760
- @case ('tier-conflict') { {{ 'remote-tier-conflict' | translate }} }
30112
+ @case ('invalid-link') {
30113
+ {{ 'remote-invalid-link' | translate }}
30114
+ }
30115
+ @case ('config-not-found') {
30116
+ {{ 'remote-config-not-found' | translate }}
30117
+ }
30118
+ @case ('script-failed') {
30119
+ {{ 'remote-script-failed' | translate }}
30120
+ }
30121
+ @case ('element-timeout') {
30122
+ {{ 'remote-element-timeout' | translate }}
30123
+ }
30124
+ @case ('offline') {
30125
+ {{ 'remote-offline' | translate }}
30126
+ }
30127
+ @case ('tier-conflict') {
30128
+ {{ 'remote-tier-conflict' | translate }}
30129
+ }
29761
30130
  }
29762
30131
  </span>
29763
30132
  <span class="m-remote__detail">{{ appLink() }}</span>
@@ -29769,7 +30138,7 @@ i0.ɵɵngDeclareClassMetadata({
29769
30138
  `,
29770
30139
  changeDetection: ChangeDetectionStrategy.OnPush,
29771
30140
  encapsulation: ViewEncapsulation.None,
29772
- 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,.m-remote__self-beta{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,.m-remote__self-beta{color:var(--m-text-secondary)}.m-remote__detail{font-size:.85em}@keyframes m-remote-spin{to{transform:rotate(360deg)}}\n"]
30141
+ 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__broken,.m-remote__self-beta{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px}.m-remote__broken,.m-remote__self-beta{color:var(--m-text-secondary)}.m-remote--booting{position:relative;min-height:100vh}.m-remote--booting>.m-remote__splash{position:absolute;inset:0;z-index:1}.m-remote--booting>:not(.m-remote__splash){visibility:hidden}.m-remote__splash{display:flex;align-items:center;justify-content:center;width:100%;height:100%;min-height:100vh;background:var(--m-background)}.m-remote__splash-mark{display:flex;width:96px;height:96px;animation:m-remote-breathe 1.6s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.m-remote__splash-mark{animation:none}}.m-remote__detail{font-size:.85em}@keyframes m-remote-breathe{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.93)}}\n"]
29773
30142
  }]
29774
30143
  }],
29775
30144
  ctorParameters: () => [],
@@ -29894,6 +30263,22 @@ i0.ɵɵngDeclareClassMetadata({
29894
30263
  required: false
29895
30264
  }]
29896
30265
  }],
30266
+ glyph: [{
30267
+ type: i0.Input,
30268
+ args: [{
30269
+ isSignal: true,
30270
+ alias: "glyph",
30271
+ required: false
30272
+ }]
30273
+ }],
30274
+ appColor: [{
30275
+ type: i0.Input,
30276
+ args: [{
30277
+ isSignal: true,
30278
+ alias: "appColor",
30279
+ required: false
30280
+ }]
30281
+ }],
29897
30282
  loaded: [{
29898
30283
  type: i0.Output,
29899
30284
  args: ["loaded"]
@@ -37977,140 +38362,6 @@ i0.ɵɵngDeclareClassMetadata({
37977
38362
  args: ["inner", { isSignal: true }]
37978
38363
  }] }
37979
38364
  });
37980
- var AppLogoComponent = class AppLogoComponent {
37981
- glyph = input(...ngDevMode ? [void 0, { debugName: "glyph" }] : /* istanbul ignore next */ []);
37982
- appColor = input(...ngDevMode ? [void 0, { debugName: "appColor" }] : /* istanbul ignore next */ []);
37983
- name = input(...ngDevMode ? [void 0, { debugName: "name" }] : /* istanbul ignore next */ []);
37984
- color = computed(() => {
37985
- const value = this.appColor();
37986
- return value ? normalizeAppColor(value) ?? null : null;
37987
- }, ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
37988
- shadow = computed(() => {
37989
- const color = this.color();
37990
- return color ? appLogoShadowColor(color) : null;
37991
- }, ...ngDevMode ? [{ debugName: "shadow" }] : /* istanbul ignore next */ []);
37992
- mask = computed(() => {
37993
- const glyph = this.glyph();
37994
- return glyph ? logoGlyphMaskUrl(glyph) : void 0;
37995
- }, ...ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []);
37996
- letter = computed(() => (this.name()?.trim().charAt(0) ?? "").toUpperCase(), ...ngDevMode ? [{ debugName: "letter" }] : /* istanbul ignore next */ []);
37997
- static ɵfac = i0.ɵɵngDeclareFactory({
37998
- minVersion: "12.0.0",
37999
- version: "22.2.1",
38000
- ngImport: i0,
38001
- type: AppLogoComponent,
38002
- deps: [],
38003
- target: i0.ɵɵFactoryTarget.Component
38004
- });
38005
- static ɵcmp = i0.ɵɵngDeclareComponent({
38006
- minVersion: "17.0.0",
38007
- version: "22.2.1",
38008
- type: AppLogoComponent,
38009
- isStandalone: true,
38010
- selector: "m-app-logo",
38011
- inputs: {
38012
- glyph: {
38013
- classPropertyName: "glyph",
38014
- publicName: "glyph",
38015
- isSignal: true,
38016
- isRequired: false,
38017
- transformFunction: null
38018
- },
38019
- appColor: {
38020
- classPropertyName: "appColor",
38021
- publicName: "appColor",
38022
- isSignal: true,
38023
- isRequired: false,
38024
- transformFunction: null
38025
- },
38026
- name: {
38027
- classPropertyName: "name",
38028
- publicName: "name",
38029
- isSignal: true,
38030
- isRequired: false,
38031
- transformFunction: null
38032
- }
38033
- },
38034
- host: {
38035
- attributes: { "role": "img" },
38036
- properties: {
38037
- "attr.aria-label": "name() || null",
38038
- "style.--m-app-logo-color": "color()",
38039
- "style.--m-app-logo-shadow": "shadow()"
38040
- },
38041
- classAttribute: "m-app-logo"
38042
- },
38043
- ngImport: i0,
38044
- template: `
38045
- <span class="m-app-logo__mark">
38046
- @if (mask(); as url) {
38047
- <span class="m-app-logo__glyph" [style.mask-image]="url"></span>
38048
- } @else {
38049
- <span class="m-app-logo__letter">{{ letter() }}</span>
38050
- }
38051
- </span>
38052
- `,
38053
- isInline: true,
38054
- 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:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;aspect-ratio:1;container-type:size;border-radius:22%;overflow:hidden;background:var(--m-app-logo-color, var(--m-text-quaternary))}.m-app-logo__mark{display:flex;align-items:center;justify-content:center;width:100%;height:100%;filter:drop-shadow(0 4cqmin 3cqmin var(--m-app-logo-shadow, rgba(0, 0, 0, .25)))}.m-app-logo__glyph{width:60%;height:60%;background:#fff;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}.m-app-logo__letter{color:#fff;font-size:50cqmin;font-weight:700;line-height:1}\n"],
38055
- changeDetection: i0.ChangeDetectionStrategy.OnPush
38056
- });
38057
- };
38058
- i0.ɵɵngDeclareClassMetadata({
38059
- minVersion: "12.0.0",
38060
- version: "22.2.1",
38061
- ngImport: i0,
38062
- type: AppLogoComponent,
38063
- decorators: [{
38064
- type: Component,
38065
- args: [{
38066
- selector: "m-app-logo",
38067
- template: `
38068
- <span class="m-app-logo__mark">
38069
- @if (mask(); as url) {
38070
- <span class="m-app-logo__glyph" [style.mask-image]="url"></span>
38071
- } @else {
38072
- <span class="m-app-logo__letter">{{ letter() }}</span>
38073
- }
38074
- </span>
38075
- `,
38076
- changeDetection: ChangeDetectionStrategy.OnPush,
38077
- host: {
38078
- class: "m-app-logo",
38079
- role: "img",
38080
- "[attr.aria-label]": "name() || null",
38081
- "[style.--m-app-logo-color]": "color()",
38082
- "[style.--m-app-logo-shadow]": "shadow()"
38083
- },
38084
- 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:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;aspect-ratio:1;container-type:size;border-radius:22%;overflow:hidden;background:var(--m-app-logo-color, var(--m-text-quaternary))}.m-app-logo__mark{display:flex;align-items:center;justify-content:center;width:100%;height:100%;filter:drop-shadow(0 4cqmin 3cqmin var(--m-app-logo-shadow, rgba(0, 0, 0, .25)))}.m-app-logo__glyph{width:60%;height:60%;background:#fff;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}.m-app-logo__letter{color:#fff;font-size:50cqmin;font-weight:700;line-height:1}\n"]
38085
- }]
38086
- }],
38087
- propDecorators: {
38088
- glyph: [{
38089
- type: i0.Input,
38090
- args: [{
38091
- isSignal: true,
38092
- alias: "glyph",
38093
- required: false
38094
- }]
38095
- }],
38096
- appColor: [{
38097
- type: i0.Input,
38098
- args: [{
38099
- isSignal: true,
38100
- alias: "appColor",
38101
- required: false
38102
- }]
38103
- }],
38104
- name: [{
38105
- type: i0.Input,
38106
- args: [{
38107
- isSignal: true,
38108
- alias: "name",
38109
- required: false
38110
- }]
38111
- }]
38112
- }
38113
- });
38114
38365
  var AppCardComponent = class AppCardComponent {
38115
38366
  app = input.required(...ngDevMode ? [{ debugName: "app" }] : /* istanbul ignore next */ []);
38116
38367
  variant = input("card", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
@@ -38230,7 +38481,11 @@ var AppCardComponent = class AppCardComponent {
38230
38481
  inputs: [
38231
38482
  "glyph",
38232
38483
  "appColor",
38233
- "name"
38484
+ "name",
38485
+ "link",
38486
+ "variant",
38487
+ "tone",
38488
+ "size"
38234
38489
  ]
38235
38490
  },
38236
38491
  {
@@ -38524,7 +38779,11 @@ var LogoGlyphInputComponent = class LogoGlyphInputComponent {
38524
38779
  inputs: [
38525
38780
  "glyph",
38526
38781
  "appColor",
38527
- "name"
38782
+ "name",
38783
+ "link",
38784
+ "variant",
38785
+ "tone",
38786
+ "size"
38528
38787
  ]
38529
38788
  },
38530
38789
  {
@@ -41172,7 +41431,7 @@ var NavHeaderComponent = class NavHeaderComponent {
41172
41431
  },
41173
41432
  ngImport: i0,
41174
41433
  template: "<m-section>\n @if (_isSearch() && _searchOpen()) {\n <!-- Searching: the field takes the row the trail was on, so the nav is\n hidden while there is something to type into. -->\n <m-section-search\n class=\"nav-header__search\"\n [(isOpen)]=\"_searchOpen\"\n [value]=\"_searchStore.query()\"\n [searchLabel]=\"_searchLabel()\"\n (searchChange)=\"_searchStore.updateQuery($event)\"\n />\n } @else if (_trail() || _isSearch()) {\n <!-- The nav's row, and the bar's toggle stands in it rather than in a row\n stacked on top of it. Both slots are written a single `@if` deep: a\n Section matches its projected slots by tag, and a node nested deeper\n falls through to the body instead. -->\n <m-section-back [back]=\"_hasParent()\" (navigate)=\"_navStore.back()\">\n @if (_trail(); as trail) {\n <m-nav-trail [config]=\"trail\" />\n }\n @if (_isSearch()) {\n <m-button\n class=\"nav-header__search-toggle\"\n [config]=\"_searchToggle\"\n (clicked)=\"_openSearch()\"\n />\n }\n </m-section-back>\n }\n\n @if (_user(); as user) {\n <m-user class=\"nav-header__user\" [id]=\"user.id\" [user]=\"user\" mRef=\"root_user\">\n <span class=\"nav-header__username\">&#64;{{ user.username }}</span>\n </m-user>\n } @else if (_header(); as h) {\n @if (h.label) {\n @if (h.appLogo; as logo) {\n <!-- A mounted app's header draws its AppLogo in the icon's place. -->\n <m-section-header class=\"nav-header__title\" [label]=\"h.label\">\n <m-app-logo class=\"nav-header__app-logo\" [glyph]=\"logo.glyph\" [appColor]=\"logo.color\" [name]=\"logo.name\" />\n </m-section-header>\n } @else {\n <m-section-header class=\"nav-header__title\" [icon]=\"h.icon\" [label]=\"h.label\" />\n }\n }\n }\n</m-section>\n",
41175
- 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)}}.nav-header__user{display:block;padding:1rem}.nav-header__username{font-size:.6875rem;font-weight:600;color:var(--m-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}m-section-search.nav-header__search{--_nav-row-height: var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));min-height:var(--_nav-row-height);padding-block:0;--m-input-clear-height: calc(var(--_nav-row-height) - .5rem);--m-input-clear-min-height: calc(var(--_nav-row-height) - .5rem)}.nav-header__app-logo{flex-shrink:0;align-self:flex-start;width:var(--m-section-header-icon-box, 1.5125rem);height:var(--m-section-header-icon-box, 1.5125rem)}\n"],
41434
+ 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)}}.nav-header__user{display:block;padding:1rem}.nav-header__username{font-size:.6875rem;font-weight:600;color:var(--m-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}m-section-search.nav-header__search{--_nav-row-height: var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));min-height:var(--_nav-row-height);padding-block:0;--m-input-clear-height: calc(var(--_nav-row-height) - .5rem);--m-input-clear-min-height: calc(var(--_nav-row-height) - .5rem)}.nav-header__title .nav-header__app-logo{flex-shrink:0;align-self:flex-start;width:var(--m-section-header-icon-box, 1.5125rem);height:var(--m-section-header-icon-box, 1.5125rem)}\n"],
41176
41435
  dependencies: [
41177
41436
  {
41178
41437
  kind: "component",
@@ -41337,7 +41596,11 @@ var NavHeaderComponent = class NavHeaderComponent {
41337
41596
  inputs: [
41338
41597
  "glyph",
41339
41598
  "appColor",
41340
- "name"
41599
+ "name",
41600
+ "link",
41601
+ "variant",
41602
+ "tone",
41603
+ "size"
41341
41604
  ]
41342
41605
  }
41343
41606
  ],
@@ -41373,7 +41636,7 @@ i0.ɵɵngDeclareClassMetadata({
41373
41636
  "[style.--m-section-min-height]": "\"0\""
41374
41637
  },
41375
41638
  template: "<m-section>\n @if (_isSearch() && _searchOpen()) {\n <!-- Searching: the field takes the row the trail was on, so the nav is\n hidden while there is something to type into. -->\n <m-section-search\n class=\"nav-header__search\"\n [(isOpen)]=\"_searchOpen\"\n [value]=\"_searchStore.query()\"\n [searchLabel]=\"_searchLabel()\"\n (searchChange)=\"_searchStore.updateQuery($event)\"\n />\n } @else if (_trail() || _isSearch()) {\n <!-- The nav's row, and the bar's toggle stands in it rather than in a row\n stacked on top of it. Both slots are written a single `@if` deep: a\n Section matches its projected slots by tag, and a node nested deeper\n falls through to the body instead. -->\n <m-section-back [back]=\"_hasParent()\" (navigate)=\"_navStore.back()\">\n @if (_trail(); as trail) {\n <m-nav-trail [config]=\"trail\" />\n }\n @if (_isSearch()) {\n <m-button\n class=\"nav-header__search-toggle\"\n [config]=\"_searchToggle\"\n (clicked)=\"_openSearch()\"\n />\n }\n </m-section-back>\n }\n\n @if (_user(); as user) {\n <m-user class=\"nav-header__user\" [id]=\"user.id\" [user]=\"user\" mRef=\"root_user\">\n <span class=\"nav-header__username\">&#64;{{ user.username }}</span>\n </m-user>\n } @else if (_header(); as h) {\n @if (h.label) {\n @if (h.appLogo; as logo) {\n <!-- A mounted app's header draws its AppLogo in the icon's place. -->\n <m-section-header class=\"nav-header__title\" [label]=\"h.label\">\n <m-app-logo class=\"nav-header__app-logo\" [glyph]=\"logo.glyph\" [appColor]=\"logo.color\" [name]=\"logo.name\" />\n </m-section-header>\n } @else {\n <m-section-header class=\"nav-header__title\" [icon]=\"h.icon\" [label]=\"h.label\" />\n }\n }\n }\n</m-section>\n",
41376
- 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)}}.nav-header__user{display:block;padding:1rem}.nav-header__username{font-size:.6875rem;font-weight:600;color:var(--m-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}m-section-search.nav-header__search{--_nav-row-height: var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));min-height:var(--_nav-row-height);padding-block:0;--m-input-clear-height: calc(var(--_nav-row-height) - .5rem);--m-input-clear-min-height: calc(var(--_nav-row-height) - .5rem)}.nav-header__app-logo{flex-shrink:0;align-self:flex-start;width:var(--m-section-header-icon-box, 1.5125rem);height:var(--m-section-header-icon-box, 1.5125rem)}\n"]
41639
+ 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)}}.nav-header__user{display:block;padding:1rem}.nav-header__username{font-size:.6875rem;font-weight:600;color:var(--m-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}m-section-search.nav-header__search{--_nav-row-height: var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));min-height:var(--_nav-row-height);padding-block:0;--m-input-clear-height: calc(var(--_nav-row-height) - .5rem);--m-input-clear-min-height: calc(var(--_nav-row-height) - .5rem)}.nav-header__title .nav-header__app-logo{flex-shrink:0;align-self:flex-start;width:var(--m-section-header-icon-box, 1.5125rem);height:var(--m-section-header-icon-box, 1.5125rem)}\n"]
41377
41640
  }]
41378
41641
  }],
41379
41642
  ctorParameters: () => []
@@ -41572,7 +41835,11 @@ var NavMenuComponent = class NavMenuComponent {
41572
41835
  inputs: [
41573
41836
  "glyph",
41574
41837
  "appColor",
41575
- "name"
41838
+ "name",
41839
+ "link",
41840
+ "variant",
41841
+ "tone",
41842
+ "size"
41576
41843
  ]
41577
41844
  },
41578
41845
  {
@@ -42509,7 +42776,11 @@ var NavComponent = class NavComponent {
42509
42776
  inputs: [
42510
42777
  "glyph",
42511
42778
  "appColor",
42512
- "name"
42779
+ "name",
42780
+ "link",
42781
+ "variant",
42782
+ "tone",
42783
+ "size"
42513
42784
  ]
42514
42785
  }
42515
42786
  ],
@@ -46591,6 +46862,60 @@ function bootstrapMagApp(routesOrOptions, maybeOptions) {
46591
46862
  `;
46592
46863
  });
46593
46864
  }
46865
+ const SPLASH_ID = "m-splash";
46866
+ const escapeHtml = (value) => value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
46867
+ const splashHtml = ({ appColor, glyph, link }) => {
46868
+ const color = normalizeAppColor(appColor) ?? "#0f172a";
46869
+ const mark = glyph?.trim() ? `<div class="${SPLASH_ID}__glyph"></div>` : `<div class="${SPLASH_ID}__letter">${escapeHtml(link.trim().charAt(0).toUpperCase())}</div>`;
46870
+ const mask = glyph?.trim() ? `
46871
+ #${SPLASH_ID} .${SPLASH_ID}__glyph {
46872
+ width: 100%;
46873
+ height: 100%;
46874
+ background: #fff;
46875
+ -webkit-mask: ${logoGlyphMaskUrl(glyph.trim())} center / contain no-repeat;
46876
+ mask: ${logoGlyphMaskUrl(glyph.trim())} center / contain no-repeat;
46877
+ }` : "";
46878
+ return ` <div id="${SPLASH_ID}">
46879
+ <div class="${SPLASH_ID}__mark" aria-hidden="true">${mark}</div>
46880
+ <style>
46881
+ #${SPLASH_ID} {
46882
+ position: fixed;
46883
+ inset: 0;
46884
+ display: flex;
46885
+ align-items: center;
46886
+ justify-content: center;
46887
+ background: ${color};
46888
+ z-index: 99999;
46889
+ transition: opacity 0.35s ease, visibility 0.35s ease;
46890
+ }
46891
+ #${SPLASH_ID}.hidden {
46892
+ opacity: 0;
46893
+ visibility: hidden;
46894
+ pointer-events: none;
46895
+ }
46896
+ #${SPLASH_ID} .${SPLASH_ID}__mark {
46897
+ display: flex;
46898
+ align-items: center;
46899
+ justify-content: center;
46900
+ width: 72px;
46901
+ height: 72px;
46902
+ animation: m-splash-breathe 1.6s ease-in-out infinite;
46903
+ }${mask}
46904
+ #${SPLASH_ID} .${SPLASH_ID}__letter {
46905
+ color: #fff;
46906
+ font: 700 56px/1 system-ui, sans-serif;
46907
+ }
46908
+ @keyframes m-splash-breathe {
46909
+ 0%, 100% { opacity: 1; transform: scale(1); }
46910
+ 50% { opacity: 0.55; transform: scale(0.93); }
46911
+ }
46912
+ @media (prefers-reduced-motion: reduce) {
46913
+ #${SPLASH_ID} .${SPLASH_ID}__mark { animation: none; }
46914
+ }
46915
+ </style>
46916
+ </div>
46917
+ `;
46918
+ };
46594
46919
  var Domain;
46595
46920
  (function(Domain) {
46596
46921
  Domain["AUTH"] = "auth";
@@ -49963,7 +50288,11 @@ var AppTileComponent = class AppTileComponent {
49963
50288
  inputs: [
49964
50289
  "glyph",
49965
50290
  "appColor",
49966
- "name"
50291
+ "name",
50292
+ "link",
50293
+ "variant",
50294
+ "tone",
50295
+ "size"
49967
50296
  ]
49968
50297
  },
49969
50298
  {
@@ -50718,6 +51047,6 @@ i0.ɵɵngDeclareClassMetadata({
50718
51047
  }]
50719
51048
  }
50720
51049
  });
50721
- export { ACCESS_DOMAINS, APP_CONTEXT_REF, APP_LINK, APP_LOGO_ICON, APP_LOGO_SOURCE, APP_THEME_COLOR, ASSET_BASE_URL, AUDIENCE_ICONS, AUDIENCE_LEVELS, AccordionBodyDirective, AccordionComponent, AccordionGroupComponent, ActionComponent, AnimatedGraphsComponent, AppAvailability, AppCardComponent, AppIdentityService, AppLogoComponent, AppLogoState, AppRelationType, AppTileComponent, AssetStore, AssetUrlPipe, Assets, AudiencePickerBoxComponent, AudiencePickerComponent, AuthActivityPageComponent, AuthApiService, AuthStore, AutosizeDirective, BadgeComponent, BandingComponent, BaseArrayInputComponent, BaseRootWebComponent, BaseWebComponent, BrowserLocaleService, ButtonComponent, ButtonGroupComponent, CALLING_APP_HEADER, COMPONENT_INPUT_REGISTRY, CardComponent, CardWrapperComponent, CarouselComponent, ChartComponent, ChatBubbleComponent, CheckboxGroupComponent, CheckboxInputComponent, ClearableInputComponent, ClipboardService, ColComponent, ColorPickerInputComponent, CommentItemComponent, CommentsApiService, CommentsComponent, CommentsStore, CompactNumberPipe, ComponentInputComponent, ComponentStepperComponent, ConfigComponent, ConfirmComponent, ContextMenuComponent, CustomIconClass, CustomIconEditComponent, DEFAULT_AUDIENCE, DEFAULT_DENIAL, DEFAULT_DOC_ALIGN, DEFAULT_DOC_DENSITY, DEFAULT_DOC_VARIANT, DEFAULT_FILTER_RANGE_MODE, DEFAULT_FILTER_VARIANT, DEFAULT_NAV_PARAM, DEFAULT_NAV_SEGMENT, DEFAULT_SIZE, DOCK_MIN_PAGE_REMAINDER, DOCS_FOLDER, DOC_ACTION_ICONS, DOC_ALIGNS, DOC_DENSITIES, DOC_EDIT_ACTIONS, DOC_TOOLBAR_GROUPS, DOC_VARIANTS, DashboardCardComponent, DateInputComponent, DatePickerComponent, DeviceService, DocComponent, DocEditorComponent, DomService, Domain, DotGridComponent, DragListDirective, DragListItemDirective, DraggableDirective, DropdownInputComponent, FILTER_GROUP_CONTEXT, FILTER_RANGE_MODES, FILTER_VARIANTS, FLEX_VARIANTS, FOLDER_PICK_LISTENER, FORM_ASSET_FOLDER, FileService, FileUploadDirective, FileUploadInputComponent, FlexComponent, FlexItemComponent, FormGroupComponent, FrameComponent, FreezeService, GRID_BREAKPOINTS, GetNavService, HeaderComponent, HighlightDirective, HttpService, HttpSharingClient, ICON_SOURCE, IS_DESIGN_MODE, IS_SIDE_PANEL, IconComponent, ImgComponent, InputType, InstrumentScoreComponent, InterceptorObservables, JumbotronComponent, KeyValueComponent, LAYOUT_ASSET_FOLDER, LOADING_ACTIONS_REF, LOGIN_COMPONENT, LOGIN_STORE, LOGO_GLYPH_MAX_BYTES, LanguageComponent, ListComponent, LogoComponent, LogoGlyphInputComponent, MAG_SOCKET_EVENT, MHeroColorDirective, MHeroComponent, MODAL_REF, MODAL_STORE_REF, MOUNT_STATIC_SEGMENT, MOUNT_TOKEN, MRefDirective, MStepComponent, MURL_PARAM, MURL_SEP, ManifestEnrichmentService, MarginDirective, MenuComponent, ModalDirective, ModalRef, ModalStore, MoneyPipe, MultiRangeInputComponent, MultiselectInputComponent, MurlUrlSerializer, NAV_DEFAULT_MURL, NAV_ID_SEP, NAV_MAIN_BUTTONS, NAV_SEGMENT_RE, NAV_STORE_REF, NAV_WC_COMPONENTS, NAV_WIDGET_MAP, NavComponent, NavDetailsComponent, NavHeaderComponent, NavMenuComponent, NavStore, NavTrailComponent, NothingComponent, NotificationElementComponent, NotificationGroupComponent, NotificationPopupComponent, NotificationService, NotificationStore, NotificationType, NotificationWidgetComponent, ONE_ASSET_BASE_URL, OPTIONS_SOURCE, OVERLAY_WIDGETS, OneApp, OptionsSourceDirective, OverlayBodyComponent, OverlayRef, OverlayService, PLATFORM_BUTTON_NAV_IDS, PLATFORM_EXTENSIBLE_NAV_IDS, PLATFORM_NAV_MAP, PLATFORM_ROOT_CHILDREN, PLUGIN_FALLBACK_LANG, PLUGIN_OUTPUT_EVENT, PLUGIN_SCREENS, PaddingDirective, PaginationComponent, PanelComponent, PercentagePipe, PlaygroundComponent, PluginComponent, PluginInputComponent, PluginOutputComponent, PositionDirective, PwaInstallComponent, RECENT_SEARCH_LIMIT, REMOTE_PAGE_RELOAD, ROOT_NAV, RadioGroupComponent, RadioInputComponent, RangeInputComponent, RatingInputComponent, ReactiveElementComponent, RemoteComponent, RemoteLoaderService, ResizeElementComponent, RouteContainer, RowComponent, SEARCH_ANSWER_KEY, SEARCH_LABEL_KEY, SEARCH_QUERY, SEARCH_RESULTS_EVENT, SECTION_ACCORDION_GROUP, SECTION_FORM_CONTEXT, SECTION_TABLE_VARIANTS, SHARED_ICONS, SHARING_CLIENT, SIZE_CONTEXT, SPACING_INWARD, ScoreComponent, ScrollComponent, ScrollService, SearchPanelComponent, SearchStore, SearchUserPanelComponent, SectionAccordionDirective, SectionAccordionGroupDirective, SectionBackComponent, SectionBadgesComponent, SectionButtonGroupComponent, SectionCardComponent, SectionCarouselComponent, SectionComponent, SectionFilterComponent, SectionFilterGroupComponent, SectionFilterMenuComponent, SectionFilterPanelComponent, SectionFilterRangePanelComponent, SectionFooterComponent, SectionFormComponent, SectionFormItemComponent, SectionHeaderComponent, SectionHeroComponent, SectionPaginationComponent, SectionSearchComponent, SectionStepperComponent, SectionTableCellComponent, SectionTableComponent, SectionTableRowComponent, SectionTableSortPipe, SectionTabsComponent, SectionToggleComponent, SectionToggleItemDirective, SelectableCardInputComponent, SelectorDirective, SettingsSearchBarComponent, SettingsSearchService, ShapeComponent, SharedStoreRegistry, SidePanelDirective, Size, SocketStore, SortComponent, StatComponent, StepComponent, StepperComponent, StepsComponent, StorageService, StrokeLinecap, StrokeLinejoin, SummaryComponent, SvgGeneratorComponent, SvgGeneratorService, SvgService, TOTAL_COLUMNS, TRANSLATION_SOURCE, TableComponent, TechnicalMeterComponent, TextInputComponent, TextOutputComponent, TextareaInputComponent, ThemeComponent, ThemeDataService, ThemeService, ThemeStore, TimeAgoPipe, TimelineComponent, ToggleButtonComponent, ToggleInputComponent, ToggleRadioInputComponent, ToolTipDirective, TooltipComponent, TranslatePipe, TranslateService, TreeGridComponent, URL_SEP, USER_STORE_REF, USER_TAB_MAP, UniverseComponent, UserApiService, UserAvatarComponent, UserComponent, UserNavComponent, UserSettingsComponent, UserStore, WC_BUNDLE, WC_NAVIGATE_EVENT, WC_ROUTE_CHANGED_EVENT, WC_SEARCH_GROUPS, WIN_USER_TAB_HOOK, WIN_USER_TAB_KEY, WatermarkComponent, WcRouterStore, WrapperInputComponent, activeElementWithin, allowedCodes, anchorNavId, appColorBrand, appLogoShadowColor, appThemeColorFactory, applyColorsToElement, applyDocEdit, assetOptions, baseUnderHost, bootstrapMagApp, bootstrapPwaInstall, browserLocale, buildWcBaseUrl, calculateLuminance, calculateRanks, cellText, checkDoc, checkFilterCondition, childNavId, claimDenial, classListSignal, coerceSize, cornerEdge, cornerSide, createLoadingState, createMap, createPlatformNavMap, createPluginElement, definePluginScreens, definedWcBundleOf, definedWcTierOf, deriveAvatarGradient, deriveContrastColor, deriveOppositeColor, derivePropertyName, docActionKey, docAssetCandidates, docProblemKey, docRemotePath, emailValidation, evaluate, evaluateBool, exposeScreens, exposedScreensOf, fieldBoolean, fieldNumber, fieldString, filterHoldsList, filterHoldsOneBound, filterHoldsOptions, filterHoldsRange, filterList, filterNumber, filterNumberList, filterOne, filterPanelOf, filterPanelWidth, filterRange, filterTreeGridRows, filterValueList, filterValues, flattenTreeGridRows, formatBadgeCount, fullName, generateClipPath, generateTransform, getClassList, getProperty, getScrollParent, getTierFromPreviewPath, getTreeGridRow, getUniqueId, getValue, hasErrorComputed, hexToRgb, hslToRgb, initMagmoniumApp, initialNotificationState, initialState, initials, injectAuthenticate, injectDefaultDenial, injectInstallApp, injectParentSize, injectScrollSticky, isBootRedirect, isButtonName, isCancelledComputed, isExtensiblePlatformNavId, isJson, isLightAppColor, isLoadingComputed, isLocalhost, isNavInstanceConfig, isNavMenuConfig, isNavRowsConfig, isNavVisibilityConfig, isPlatformNavId, isPlatformPanelNavId, isSize, isTierPreview, isUrlLocalhost, isValidNavId, isValidNavSegment, isWebComponent, linkToId, linkToNav, loadingActions, logoGlyphMaskUrl, mInterceptor, manualValidation, matchFieldValidation, matchMount, maxLengthValidation, maxValidation, mergePlatformNav, mergeUnique, mergeUniqueBy, mergeUniqueWith, minAgeValidation, minLengthValidation, minValidation, miniMarkToHtml, mountFor, mountPatternProblem, mountPatternText, mountSegmentOf, mountTokenOf, navIdChain, navIdFor, navIdSegment, navIdToRoutePath, navIdToSegments, navParamOf, navTailMatcher, navToId, navVisibilityGuard, nextSectionTableSort, normalizeAppColor, normalizeAssetOptions, offsetOfLine, outletPathOf, outletSegmentsOf, paintAppColor, parentNavId, parseAddress, parseColor, parseMountPattern, parsePatternNames, patternValidation, patternsValidation, permissionRefusal, pickCount, pickSupportedLanguage, picksMembers, platformNavWidgets, pluginTag, presetDefaultOption, privateGuard, processImageToSvg, provideAppContext, provideMagAppConfig, provideMagWcConfig, provideMagWcRoutes, provideModalComponents, provideMurlUrlSerializer, provideNavWidgets, provideOverlayWidgets, providePlatformNavWidgets, providePluginRuntime, provideSearch, provideSizeContext, provideUserTabs, publicGuard, readFieldPatterns, rebuildLogoGlyph, recordDefinedWcTier, remoteOutletRoute, renderAddress, renderDocument, requiredValidation, resolveConfigAsset, resolveIconSize, resolvePallet, resolvePatternRules, resolveSize, resolveSpacing, rgbToHex, rgbToHsl, rowHasChildren, samePatterns, sectionTableColumnId, sectionTableColumnWidths, sectionTableFrozenCount, segmentsToNavId, setProperty, setTreeGridChildren, setWcLocalPort, setWcTier, settingsWidgets, shouldShowBadge, sortSectionTableRows, splitNavId, splitOnMatch, splitPath, stringToColor, tailRouteOf, toAttrBool, toAttrNumber, toCssLength, toHostNavId, toLength, toLocalNavId, toggleGroup, toggleTreeGridRow, toggleUid, unfetchedPlatformNav, ungroupedDocActions, urlValidation, wcLocalBaseOf, wcTierOf, withLevel };
51050
+ export { ACCESS_DOMAINS, APP_CONTEXT_REF, APP_LINK, APP_LOGO_ICON, APP_LOGO_SOURCE, APP_THEME_COLOR, ASSET_BASE_URL, AUDIENCE_ICONS, AUDIENCE_LEVELS, AccordionBodyDirective, AccordionComponent, AccordionGroupComponent, ActionComponent, AnimatedGraphsComponent, AppAvailability, AppCardComponent, AppIdentityService, AppLogoComponent, AppLogoState, AppRelationType, AppTileComponent, AssetStore, AssetUrlPipe, Assets, AudiencePickerBoxComponent, AudiencePickerComponent, AuthActivityPageComponent, AuthApiService, AuthStore, AutosizeDirective, BadgeComponent, BandingComponent, BaseArrayInputComponent, BaseRootWebComponent, BaseWebComponent, BrowserLocaleService, ButtonComponent, ButtonGroupComponent, CALLING_APP_HEADER, COMPONENT_INPUT_REGISTRY, CardComponent, CardWrapperComponent, CarouselComponent, ChartComponent, ChatBubbleComponent, CheckboxGroupComponent, CheckboxInputComponent, ClearableInputComponent, ClipboardService, ColComponent, ColorPickerInputComponent, CommentItemComponent, CommentsApiService, CommentsComponent, CommentsStore, CompactNumberPipe, ComponentInputComponent, ComponentStepperComponent, ConfigComponent, ConfirmComponent, ContextMenuComponent, CustomIconClass, CustomIconEditComponent, DEFAULT_AUDIENCE, DEFAULT_DENIAL, DEFAULT_DOC_ALIGN, DEFAULT_DOC_DENSITY, DEFAULT_DOC_VARIANT, DEFAULT_FILTER_RANGE_MODE, DEFAULT_FILTER_VARIANT, DEFAULT_NAV_PARAM, DEFAULT_NAV_SEGMENT, DEFAULT_SIZE, DOCK_MIN_PAGE_REMAINDER, DOCS_FOLDER, DOC_ACTION_ICONS, DOC_ALIGNS, DOC_DENSITIES, DOC_EDIT_ACTIONS, DOC_TOOLBAR_GROUPS, DOC_VARIANTS, DashboardCardComponent, DateInputComponent, DatePickerComponent, DeviceService, DocComponent, DocEditorComponent, DomService, Domain, DotGridComponent, DragListDirective, DragListItemDirective, DraggableDirective, DropdownInputComponent, FILTER_GROUP_CONTEXT, FILTER_RANGE_MODES, FILTER_VARIANTS, FLEX_VARIANTS, FOLDER_PICK_LISTENER, FORM_ASSET_FOLDER, FileService, FileUploadDirective, FileUploadInputComponent, FlexComponent, FlexItemComponent, FormGroupComponent, FrameComponent, FreezeService, GRID_BREAKPOINTS, GetNavService, HeaderComponent, HighlightDirective, HttpService, HttpSharingClient, ICON_SOURCE, IS_DESIGN_MODE, IS_SIDE_PANEL, IconComponent, ImgComponent, InputType, InstrumentScoreComponent, InterceptorObservables, JumbotronComponent, KeyValueComponent, LAYOUT_ASSET_FOLDER, LOADING_ACTIONS_REF, LOGIN_COMPONENT, LOGIN_STORE, LOGO_GLYPH_MAX_BYTES, LanguageComponent, ListComponent, LogoComponent, LogoGlyphInputComponent, MAG_SOCKET_EVENT, MHeroColorDirective, MHeroComponent, MODAL_REF, MODAL_STORE_REF, MOUNT_STATIC_SEGMENT, MOUNT_TOKEN, MRefDirective, MStepComponent, MURL_PARAM, MURL_SEP, ManifestEnrichmentService, MarginDirective, MenuComponent, ModalDirective, ModalRef, ModalStore, MoneyPipe, MultiRangeInputComponent, MultiselectInputComponent, MurlUrlSerializer, NAV_DEFAULT_MURL, NAV_ID_SEP, NAV_MAIN_BUTTONS, NAV_SEGMENT_RE, NAV_STORE_REF, NAV_WC_COMPONENTS, NAV_WIDGET_MAP, NavComponent, NavDetailsComponent, NavHeaderComponent, NavMenuComponent, NavStore, NavTrailComponent, NothingComponent, NotificationElementComponent, NotificationGroupComponent, NotificationPopupComponent, NotificationService, NotificationStore, NotificationType, NotificationWidgetComponent, ONE_ASSET_BASE_URL, OPTIONS_SOURCE, OVERLAY_WIDGETS, OneApp, OptionsSourceDirective, OverlayBodyComponent, OverlayRef, OverlayService, PLATFORM_BUTTON_NAV_IDS, PLATFORM_EXTENSIBLE_NAV_IDS, PLATFORM_NAV_MAP, PLATFORM_ROOT_CHILDREN, PLUGIN_FALLBACK_LANG, PLUGIN_OUTPUT_EVENT, PLUGIN_SCREENS, PaddingDirective, PaginationComponent, PanelComponent, PercentagePipe, PlaygroundComponent, PluginComponent, PluginInputComponent, PluginOutputComponent, PositionDirective, PwaInstallComponent, RECENT_SEARCH_LIMIT, REMOTE_BOOT_TIMEOUT_MS, REMOTE_PAGE_RELOAD, ROOT_NAV, RadioGroupComponent, RadioInputComponent, RangeInputComponent, RatingInputComponent, ReactiveElementComponent, RemoteComponent, RemoteLoaderService, ResizeElementComponent, RouteContainer, RowComponent, SEARCH_ANSWER_KEY, SEARCH_LABEL_KEY, SEARCH_QUERY, SEARCH_RESULTS_EVENT, SECTION_ACCORDION_GROUP, SECTION_FORM_CONTEXT, SECTION_TABLE_VARIANTS, SHARED_ICONS, SHARING_CLIENT, SIZE_CONTEXT, SPACING_INWARD, SPLASH_ID, ScoreComponent, ScrollComponent, ScrollService, SearchPanelComponent, SearchStore, SearchUserPanelComponent, SectionAccordionDirective, SectionAccordionGroupDirective, SectionBackComponent, SectionBadgesComponent, SectionButtonGroupComponent, SectionCardComponent, SectionCarouselComponent, SectionComponent, SectionFilterComponent, SectionFilterGroupComponent, SectionFilterMenuComponent, SectionFilterPanelComponent, SectionFilterRangePanelComponent, SectionFooterComponent, SectionFormComponent, SectionFormItemComponent, SectionHeaderComponent, SectionHeroComponent, SectionPaginationComponent, SectionSearchComponent, SectionStepperComponent, SectionTableCellComponent, SectionTableComponent, SectionTableRowComponent, SectionTableSortPipe, SectionTabsComponent, SectionToggleComponent, SectionToggleItemDirective, SelectableCardInputComponent, SelectorDirective, SettingsSearchBarComponent, SettingsSearchService, ShapeComponent, SharedStoreRegistry, SidePanelDirective, Size, SocketStore, SortComponent, StatComponent, StepComponent, StepperComponent, StepsComponent, StorageService, StrokeLinecap, StrokeLinejoin, SummaryComponent, SvgGeneratorComponent, SvgGeneratorService, SvgService, TOTAL_COLUMNS, TRANSLATION_SOURCE, TableComponent, TechnicalMeterComponent, TextInputComponent, TextOutputComponent, TextareaInputComponent, ThemeComponent, ThemeDataService, ThemeService, ThemeStore, TimeAgoPipe, TimelineComponent, ToggleButtonComponent, ToggleInputComponent, ToggleRadioInputComponent, ToolTipDirective, TooltipComponent, TranslatePipe, TranslateService, TreeGridComponent, URL_SEP, USER_STORE_REF, USER_TAB_MAP, UniverseComponent, UserApiService, UserAvatarComponent, UserComponent, UserNavComponent, UserSettingsComponent, UserStore, WC_BUNDLE, WC_NAVIGATE_EVENT, WC_ROUTE_CHANGED_EVENT, WC_SEARCH_GROUPS, WIN_USER_TAB_HOOK, WIN_USER_TAB_KEY, WatermarkComponent, WcRouterStore, WrapperInputComponent, activeElementWithin, allowedCodes, anchorNavId, appColorBrand, appLogoShadowColor, appThemeColorFactory, applyColorsToElement, applyDocEdit, assetOptions, baseUnderHost, bootstrapMagApp, bootstrapPwaInstall, browserLocale, buildWcBaseUrl, calculateLuminance, calculateRanks, cellText, checkDoc, checkFilterCondition, childNavId, claimDenial, classListSignal, coerceSize, cornerEdge, cornerSide, createLoadingState, createMap, createPlatformNavMap, createPluginElement, definePluginScreens, definedWcBundleOf, definedWcTierOf, deriveAvatarGradient, deriveContrastColor, deriveOppositeColor, derivePropertyName, docActionKey, docAssetCandidates, docProblemKey, docRemotePath, emailValidation, evaluate, evaluateBool, exposeScreens, exposedScreensOf, fieldBoolean, fieldNumber, fieldString, filterHoldsList, filterHoldsOneBound, filterHoldsOptions, filterHoldsRange, filterList, filterNumber, filterNumberList, filterOne, filterPanelOf, filterPanelWidth, filterRange, filterTreeGridRows, filterValueList, filterValues, flattenTreeGridRows, formatBadgeCount, fullName, generateClipPath, generateTransform, getClassList, getProperty, getScrollParent, getTierFromPreviewPath, getTreeGridRow, getUniqueId, getValue, hasErrorComputed, hexToRgb, hslToRgb, initMagmoniumApp, initialNotificationState, initialState, initials, injectAuthenticate, injectDefaultDenial, injectInstallApp, injectParentSize, injectScrollSticky, isBootRedirect, isButtonName, isCancelledComputed, isExtensiblePlatformNavId, isJson, isLightAppColor, isLoadingComputed, isLocalhost, isNavInstanceConfig, isNavMenuConfig, isNavRowsConfig, isNavVisibilityConfig, isPlatformNavId, isPlatformPanelNavId, isSize, isTierPreview, isUrlLocalhost, isValidNavId, isValidNavSegment, isWebComponent, linkToId, linkToNav, loadingActions, logoGlyphMaskUrl, mInterceptor, manualValidation, matchFieldValidation, matchMount, maxLengthValidation, maxValidation, mergePlatformNav, mergeUnique, mergeUniqueBy, mergeUniqueWith, minAgeValidation, minLengthValidation, minValidation, miniMarkToHtml, mountFor, mountPatternProblem, mountPatternText, mountSegmentOf, mountTokenOf, navIdChain, navIdFor, navIdSegment, navIdToRoutePath, navIdToSegments, navParamOf, navTailMatcher, navToId, navVisibilityGuard, nextSectionTableSort, normalizeAppColor, normalizeAssetOptions, offsetOfLine, outletPathOf, outletSegmentsOf, paintAppColor, parentNavId, parseAddress, parseColor, parseMountPattern, parsePatternNames, patternValidation, patternsValidation, permissionRefusal, pickCount, pickSupportedLanguage, picksMembers, platformNavWidgets, pluginTag, presetDefaultOption, privateGuard, processImageToSvg, provideAppContext, provideMagAppConfig, provideMagWcConfig, provideMagWcRoutes, provideModalComponents, provideMurlUrlSerializer, provideNavWidgets, provideOverlayWidgets, providePlatformNavWidgets, providePluginRuntime, provideSearch, provideSizeContext, provideUserTabs, publicGuard, readFieldPatterns, rebuildLogoGlyph, recordDefinedWcTier, remoteOutletRoute, renderAddress, renderDocument, requiredValidation, resolveConfigAsset, resolveIconSize, resolvePallet, resolvePatternRules, resolveSize, resolveSpacing, rgbToHex, rgbToHsl, rowHasChildren, samePatterns, sectionTableColumnId, sectionTableColumnWidths, sectionTableFrozenCount, segmentsToNavId, setProperty, setTreeGridChildren, setWcLocalPort, setWcTier, settingsWidgets, shouldShowBadge, sortSectionTableRows, splashHtml, splitNavId, splitOnMatch, splitPath, stringToColor, tailRouteOf, toAttrBool, toAttrNumber, toCssLength, toHostNavId, toLength, toLocalNavId, toggleGroup, toggleTreeGridRow, toggleUid, unfetchedPlatformNav, ungroupedDocActions, urlValidation, wcLocalBaseOf, wcTierOf, withLevel };
50722
51051
 
50723
51052
  //# sourceMappingURL=magmonium-one.mjs.map