@magmonium/one 0.4.40 → 0.4.42

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.
Files changed (43) hide show
  1. package/assets/fields/app_color.json +5 -0
  2. package/assets/fields/logo_glyph_paste.json +7 -0
  3. package/assets/fields/logo_glyph_upload.json +12 -0
  4. package/assets/forms/logo_glyph_input.json +13 -0
  5. package/assets/i18n/ar.json +8 -0
  6. package/assets/i18n/de.json +8 -0
  7. package/assets/i18n/en.json +8 -0
  8. package/assets/i18n/es.json +8 -0
  9. package/assets/i18n/fr.json +8 -0
  10. package/assets/i18n/hi.json +8 -0
  11. package/assets/i18n/it.json +8 -0
  12. package/assets/i18n/ja.json +8 -0
  13. package/assets/i18n/ko.json +8 -0
  14. package/assets/i18n/nl.json +8 -0
  15. package/assets/i18n/pl.json +8 -0
  16. package/assets/i18n/pt.json +8 -0
  17. package/assets/i18n/ru.json +8 -0
  18. package/assets/i18n/tr.json +8 -0
  19. package/assets/i18n/zh.json +8 -0
  20. package/assets/index.json +1 -1
  21. package/fesm2022/{magmonium-one-base-dropdown-DU4B4w7c.mjs → magmonium-one-base-dropdown-CcZ0lBQv.mjs} +3 -3
  22. package/fesm2022/{magmonium-one-base-dropdown-DU4B4w7c.mjs.map → magmonium-one-base-dropdown-CcZ0lBQv.mjs.map} +1 -1
  23. package/fesm2022/{magmonium-one-button-BWB3ZKIj.mjs → magmonium-one-button-BZQOf-Pm.mjs} +6 -4
  24. package/fesm2022/{magmonium-one-button-BWB3ZKIj.mjs.map → magmonium-one-button-BZQOf-Pm.mjs.map} +1 -1
  25. package/fesm2022/{magmonium-one-group-m41SX_fL.mjs → magmonium-one-group-Dl2bp-y-.mjs} +4 -4
  26. package/fesm2022/{magmonium-one-group-m41SX_fL.mjs.map → magmonium-one-group-Dl2bp-y-.mjs.map} +1 -1
  27. package/fesm2022/{magmonium-one-header-D8CB9CBJ.mjs → magmonium-one-header-DhK9NuZW.mjs} +5 -4
  28. package/fesm2022/{magmonium-one-header-D8CB9CBJ.mjs.map → magmonium-one-header-DhK9NuZW.mjs.map} +1 -1
  29. package/fesm2022/{magmonium-one-icon-BTPHGpEN.mjs → magmonium-one-icon-BgbtOdMv.mjs} +229 -6
  30. package/fesm2022/magmonium-one-icon-BgbtOdMv.mjs.map +1 -0
  31. package/fesm2022/{magmonium-one-image-editor-Dn0ACfH0.mjs → magmonium-one-image-editor-oGxg59hV.mjs} +3 -3
  32. package/fesm2022/{magmonium-one-image-editor-Dn0ACfH0.mjs.map → magmonium-one-image-editor-oGxg59hV.mjs.map} +1 -1
  33. package/fesm2022/{magmonium-one-menu-EIfPlZ4E.mjs → magmonium-one-menu-bI7lVUYI.mjs} +5 -4
  34. package/fesm2022/{magmonium-one-menu-EIfPlZ4E.mjs.map → magmonium-one-menu-bI7lVUYI.mjs.map} +1 -1
  35. package/fesm2022/{magmonium-one-password-BjqYmT1s.mjs → magmonium-one-password-BIs_YxJ5.mjs} +2 -2
  36. package/fesm2022/{magmonium-one-password-BjqYmT1s.mjs.map → magmonium-one-password-BIs_YxJ5.mjs.map} +1 -1
  37. package/fesm2022/{magmonium-one-text-BL-1lWST.mjs → magmonium-one-text-BvXdAX0i.mjs} +4 -3
  38. package/fesm2022/{magmonium-one-text-BL-1lWST.mjs.map → magmonium-one-text-BvXdAX0i.mjs.map} +1 -1
  39. package/fesm2022/magmonium-one.mjs +627 -144
  40. package/fesm2022/magmonium-one.mjs.map +1 -1
  41. package/package.json +1 -1
  42. package/types/magmonium-one.d.ts +283 -31
  43. package/fesm2022/magmonium-one-icon-BTPHGpEN.mjs.map +0 -1
@@ -6,21 +6,21 @@ import { a as calculateLuminance, c as hexToRgb, d as derivePropertyName, f as g
6
6
  import "./magmonium-one-theme-CT4cWpe7.mjs";
7
7
  import { a as sectionTableColumnWidths, c as AssetUrlPipe, d as MoneyPipe, f as TimeAgoPipe, i as sectionTableColumnId, l as CompactNumberPipe, n as SectionTableSortPipe, o as sectionTableFrozenCount, r as nextSectionTableSort, s as sortSectionTableRows, t as LabelComponent, u as PercentagePipe } from "./magmonium-one-label-DjvJthAB.mjs";
8
8
  import { i as getScrollParent, n as activeElementWithin, r as classListSignal, t as BaseTextInputComponent } from "./magmonium-one-base-text-BCSqKmVs.mjs";
9
- import { a as injectParentSize, i as SIZE_CONTEXT, n as CustomIconClass, o as provideSizeContext, r as IconComponent, s as SHARED_ICONS, t as CustomIconEditComponent } from "./magmonium-one-icon-BTPHGpEN.mjs";
9
+ import { a as appLogoShadowColor, c as normalizeAppColor, d as SIZE_CONTEXT, f as injectParentSize, g as AppLogoState, h as APP_LOGO_SOURCE, i as LOGO_GLYPH_MAX_BYTES, l as rebuildLogoGlyph, m as SHARED_ICONS, n as CustomIconClass, o as isLightAppColor, p as provideSizeContext, r as IconComponent, s as logoGlyphMaskUrl, t as CustomIconEditComponent, u as APP_LOGO_ICON } from "./magmonium-one-icon-BgbtOdMv.mjs";
10
10
  import { i as resolveConfigAsset, n as toAttrNumber, r as ConfigComponent, t as toAttrBool } from "./magmonium-one-attribute-value-DCTXt4Sr.mjs";
11
- import { a as isButtonName, c as formatBadgeCount, l as shouldShowBadge, n as SECTION_FORM_CONTEXT, o as ReactiveElementComponent, r as ImgComponent, s as BadgeComponent, t as ButtonComponent } from "./magmonium-one-button-BWB3ZKIj.mjs";
11
+ import { a as isButtonName, c as formatBadgeCount, l as shouldShowBadge, n as SECTION_FORM_CONTEXT, o as ReactiveElementComponent, r as ImgComponent, s as BadgeComponent, t as ButtonComponent } from "./magmonium-one-button-BZQOf-Pm.mjs";
12
12
  import { t as MRefDirective } from "./magmonium-one-m-ref-C8c4Vf1G.mjs";
13
- import { t as HeaderComponent } from "./magmonium-one-header-D8CB9CBJ.mjs";
13
+ import { t as HeaderComponent } from "./magmonium-one-header-DhK9NuZW.mjs";
14
14
  import { t as TextOutputComponent } from "./magmonium-one-text-output-Ci93Hi9Y.mjs";
15
15
  import { t as BaseInputComponent } from "./magmonium-one-base-input-BTxhUtYO.mjs";
16
16
  import { a as stringToColor, c as ToolTipDirective, d as DragListItemDirective, f as DragListDirective, i as MHeroColorDirective, l as FileUploadDirective, n as PaddingDirective, o as HighlightDirective, p as DraggableDirective, r as SPACING_INWARD, s as PositionDirective, t as MarginDirective, u as AutosizeDirective } from "./magmonium-one-directives-DePukAj8.mjs";
17
- import { n as DROPDOWN_IMPORTS, r as DROPDOWN_TEMPLATE, t as BaseDropdownComponent } from "./magmonium-one-base-dropdown-DU4B4w7c.mjs";
17
+ import { n as DROPDOWN_IMPORTS, r as DROPDOWN_TEMPLATE, t as BaseDropdownComponent } from "./magmonium-one-base-dropdown-CcZ0lBQv.mjs";
18
18
  import { t as InputType } from "./magmonium-one-input-DqHPorA1.mjs";
19
- import { t as TextInputComponent } from "./magmonium-one-text-BL-1lWST.mjs";
19
+ import { t as TextInputComponent } from "./magmonium-one-text-BvXdAX0i.mjs";
20
20
  import { i as OptionsSourceDirective, n as normalizeAssetOptions, r as presetDefaultOption, t as assetOptions } from "./magmonium-one-options-asset-EVsv0DL7.mjs";
21
21
  import { r as PLACED_CHECKBOX, t as CheckboxInputComponent } from "./magmonium-one-checkbox-D5-5WhJ-.mjs";
22
- import { i as mergeUniqueWith, n as mergeUnique, r as mergeUniqueBy, t as ButtonGroupComponent } from "./magmonium-one-group-m41SX_fL.mjs";
23
- import { n as ContextMenuBoxComponent, r as MenuComponent, t as ContextMenuComponent } from "./magmonium-one-menu-EIfPlZ4E.mjs";
22
+ import { i as mergeUniqueWith, n as mergeUnique, r as mergeUniqueBy, t as ButtonGroupComponent } from "./magmonium-one-group-Dl2bp-y-.mjs";
23
+ import { n as ContextMenuBoxComponent, r as MenuComponent, t as ContextMenuComponent } from "./magmonium-one-menu-bI7lVUYI.mjs";
24
24
  import { t as BaseCheckboxInputComponent } from "./magmonium-one-base-checkbox-BNQAkyYU.mjs";
25
25
  import { t as RadioInputComponent } from "./magmonium-one-radio-C2wOB_Nb.mjs";
26
26
  import { r as BaseArrayInputComponent, t as MultiRangeInputComponent } from "./magmonium-one-multi-range-o57TiVJU.mjs";
@@ -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, of, pipe, race, shareReplay, startWith, switchMap, take, tap, throwError } from "rxjs";
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";
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";
@@ -565,6 +565,48 @@ const NotificationStore = signalStore({ providedIn: "root" }, withState(initialN
565
565
  else store.notify(notification);
566
566
  });
567
567
  } })));
568
+ var AppIdentityService = class AppIdentityService {
569
+ #http = inject(HttpService);
570
+ #cache = /* @__PURE__ */ new Map();
571
+ identity = (link) => {
572
+ const held = this.#cache.get(link);
573
+ if (held) return held;
574
+ const read = this.#http.get("store", ["identity", link]).pipe(map((identity) => identity), catchError(() => {
575
+ this.#cache.delete(link);
576
+ return of(void 0);
577
+ }), shareReplay(1));
578
+ this.#cache.set(link, read);
579
+ return read;
580
+ };
581
+ forget = (link) => {
582
+ this.#cache.delete(link);
583
+ };
584
+ static ɵfac = i0.ɵɵngDeclareFactory({
585
+ minVersion: "12.0.0",
586
+ version: "22.2.1",
587
+ ngImport: i0,
588
+ type: AppIdentityService,
589
+ deps: [],
590
+ target: i0.ɵɵFactoryTarget.Injectable
591
+ });
592
+ static ɵprov = i0.ɵɵngDeclareInjectable({
593
+ minVersion: "12.0.0",
594
+ version: "22.2.1",
595
+ ngImport: i0,
596
+ type: AppIdentityService,
597
+ providedIn: "root"
598
+ });
599
+ };
600
+ i0.ɵɵngDeclareClassMetadata({
601
+ minVersion: "12.0.0",
602
+ version: "22.2.1",
603
+ ngImport: i0,
604
+ type: AppIdentityService,
605
+ decorators: [{
606
+ type: Injectable,
607
+ args: [{ providedIn: "root" }]
608
+ }]
609
+ });
568
610
  const DEFAULT_NAV_PARAM = "id";
569
611
  const navParamOf = (nav) => nav?.param ?? "id";
570
612
  const ROOT_NAV = "root";
@@ -1169,6 +1211,7 @@ const initialState$3 = {
1169
1211
  remoteWidgets: {},
1170
1212
  navMap: createPlatformNavMap(),
1171
1213
  wcConfigMap: {},
1214
+ identityMap: {},
1172
1215
  navLoading: false
1173
1216
  };
1174
1217
  const routeNavIdOf = (root) => {
@@ -1276,7 +1319,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1276
1319
  const navMap = store.navMap();
1277
1320
  const listed = menuMounts();
1278
1321
  if (!listed.length) return navMap;
1279
- const configs = store.wcConfigMap();
1322
+ const identities = store.identityMap();
1280
1323
  const parentOf = ({ appNavId, urlMode }) => {
1281
1324
  const host = parentNavId(appNavId);
1282
1325
  return urlMode === "tail" && host && navMap[host] ? host : ROOT_NAV;
@@ -1284,7 +1327,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1284
1327
  const extra = listed.map((mount) => {
1285
1328
  const { name, appNavId, link } = mount;
1286
1329
  const fetched = navMap[appNavId];
1287
- const config = link ? configs[link] : void 0;
1330
+ const identity = link ? identities[link] : void 0;
1288
1331
  return {
1289
1332
  node: {
1290
1333
  ...fetched ?? {
@@ -1292,8 +1335,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1292
1335
  presentation: "static"
1293
1336
  },
1294
1337
  navId: appNavId,
1295
- title: config?.app ?? fetched?.title ?? name,
1296
- ...config?.logo ? { logo: config.logo } : {}
1338
+ title: identity?.name ?? fetched?.title ?? name
1297
1339
  },
1298
1340
  parent: parentOf(mount)
1299
1341
  };
@@ -1498,6 +1540,25 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1498
1540
  }, ...ngDevMode ? [{ debugName: "activeWcConfig" }] : /* istanbul ignore next */ []);
1499
1541
  const activeAppOpen = computed(() => !!activeWcConfig()?.open, ...ngDevMode ? [{ debugName: "activeAppOpen" }] : /* istanbul ignore next */ []);
1500
1542
  const currentWcConfig = computed(() => activeAppOpen() ? void 0 : activeWcConfig(), ...ngDevMode ? [{ debugName: "currentWcConfig" }] : /* istanbul ignore next */ []);
1543
+ const currentIdentity = computed(() => {
1544
+ const appLink = store.appLink();
1545
+ return appLink && !activeAppOpen() ? store.identityMap()[appLink] : void 0;
1546
+ }, ...ngDevMode ? [{ debugName: "currentIdentity" }] : /* istanbul ignore next */ []);
1547
+ const appLogo = computed(() => {
1548
+ const appLink = store.appLink();
1549
+ if (appLink && !activeAppOpen()) {
1550
+ const identity = store.identityMap()[appLink];
1551
+ return {
1552
+ glyph: identity?.logoGlyph ?? null,
1553
+ name: identity?.name ?? appLink
1554
+ };
1555
+ }
1556
+ const root = store.navMap()[ROOT_NAV];
1557
+ return root ? {
1558
+ src: root.logo,
1559
+ name: root.title
1560
+ } : void 0;
1561
+ }, ...ngDevMode ? [{ debugName: "appLogo" }] : /* istanbul ignore next */ []);
1501
1562
  const answeringNavId = (candidates, hit) => {
1502
1563
  if (hit) return hit.navId;
1503
1564
  const map = store.navMap();
@@ -1562,6 +1623,8 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1562
1623
  return false;
1563
1624
  }, ...ngDevMode ? [{ debugName: "navHasContent" }] : /* istanbul ignore next */ []),
1564
1625
  currentWcConfig,
1626
+ currentIdentity,
1627
+ appLogo,
1565
1628
  activeAppOpen,
1566
1629
  transparentNavIds,
1567
1630
  resolvedNavMenuConfig,
@@ -1572,6 +1635,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1572
1635
  };
1573
1636
  }), withMethods((store) => {
1574
1637
  const getNavService = inject(GetNavService);
1638
+ const appIdentityService = inject(AppIdentityService);
1575
1639
  const localDefaultNavId = inject(NAV_DEFAULT_MURL, { optional: true });
1576
1640
  const appBaseHref = inject(APP_BASE_HREF, { optional: true }) ?? "/";
1577
1641
  const location = inject(Location);
@@ -1755,6 +1819,15 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1755
1819
  } }));
1756
1820
  };
1757
1821
  const loadWcConfig = rxMethod(pipe(filter((appLink) => !!appLink), filter((appLink) => !untracked(() => !!store.wcConfigMap()[appLink])), switchMap((appLink) => getNavService.loadWcConfig(appLink).pipe(tap((config) => untracked(() => setWcConfig(appLink, config)))))));
1822
+ const setIdentity = (identity) => {
1823
+ patchState(store, (state) => ({ identityMap: {
1824
+ ...state.identityMap,
1825
+ [identity.link]: identity
1826
+ } }));
1827
+ };
1828
+ const loadIdentity = rxMethod(pipe(filter((appLink) => !!appLink), filter((appLink) => !untracked(() => !!store.identityMap()[appLink])), mergeMap((appLink) => appIdentityService.identity(appLink).pipe(tap((identity) => {
1829
+ if (identity) untracked(() => setIdentity(identity));
1830
+ })))));
1758
1831
  const setAppLink = (appLink, appNavId) => {
1759
1832
  patchState(store, {
1760
1833
  appLink,
@@ -1762,6 +1835,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1762
1835
  });
1763
1836
  settleRoute();
1764
1837
  loadWcConfig(appLink);
1838
+ loadIdentity(appLink);
1765
1839
  };
1766
1840
  const registerMount = (mount) => {
1767
1841
  const previous = untracked(() => store.mounts())[mount.name];
@@ -1777,6 +1851,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1777
1851
  settleRoute();
1778
1852
  translateService.mountRemoteApp(mount.link);
1779
1853
  loadWcConfig(mount.link);
1854
+ loadIdentity(mount.link);
1780
1855
  const standsOn = untracked(() => store.hostRoute()).navId === mount.appNavId;
1781
1856
  if (mount.createMenu || stale.length || standsOn) loadMountNav(mount);
1782
1857
  };
@@ -1879,6 +1954,8 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1879
1954
  mountOf,
1880
1955
  setWcConfig,
1881
1956
  loadWcConfig,
1957
+ setIdentity,
1958
+ loadIdentity,
1882
1959
  loadNav,
1883
1960
  registerWidgets,
1884
1961
  back,
@@ -1891,8 +1968,10 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
1891
1968
  navIdChain
1892
1969
  };
1893
1970
  }), withHooks((store) => {
1971
+ const appLogoState = inject(AppLogoState);
1894
1972
  return { onInit() {
1895
1973
  store.syncFromRouter(store.navigationEnd);
1974
+ effect(() => appLogoState.set(store.appLogo()));
1896
1975
  const loadedFor = /* @__PURE__ */ new Set();
1897
1976
  effect(() => {
1898
1977
  const loaders = store.visibilityLoaders();
@@ -3002,7 +3081,8 @@ var ConfirmComponent = class ConfirmComponent {
3002
3081
  "size",
3003
3082
  "one",
3004
3083
  "baseUrl",
3005
- "remote"
3084
+ "remote",
3085
+ "shadow"
3006
3086
  ],
3007
3087
  outputs: ["configChange"]
3008
3088
  },
@@ -4091,7 +4171,7 @@ var SectionFormItemComponent = class SectionFormItemComponent extends ConfigComp
4091
4171
  break;
4092
4172
  }
4093
4173
  case InputType.PASSWORD: {
4094
- const { PasswordInputComponent } = await import("./magmonium-one-password-BjqYmT1s.mjs");
4174
+ const { PasswordInputComponent } = await import("./magmonium-one-password-BIs_YxJ5.mjs");
4095
4175
  this.createDynamicComponent(seq, PasswordInputComponent);
4096
4176
  break;
4097
4177
  }
@@ -4177,7 +4257,7 @@ var SectionFormItemComponent = class SectionFormItemComponent extends ConfigComp
4177
4257
  break;
4178
4258
  }
4179
4259
  default: {
4180
- const { TextInputComponent } = await import("./magmonium-one-text-BL-1lWST.mjs").then((n) => n.n);
4260
+ const { TextInputComponent } = await import("./magmonium-one-text-BvXdAX0i.mjs").then((n) => n.n);
4181
4261
  this.createDynamicComponent(seq, TextInputComponent);
4182
4262
  break;
4183
4263
  }
@@ -6547,7 +6627,8 @@ var SectionBackComponent = class SectionBackComponent {
6547
6627
  "size",
6548
6628
  "one",
6549
6629
  "baseUrl",
6550
- "remote"
6630
+ "remote",
6631
+ "shadow"
6551
6632
  ],
6552
6633
  outputs: ["configChange"]
6553
6634
  },
@@ -6991,7 +7072,8 @@ var ActionComponent = class ActionComponent extends ButtonGroupComponent {
6991
7072
  "size",
6992
7073
  "one",
6993
7074
  "baseUrl",
6994
- "remote"
7075
+ "remote",
7076
+ "shadow"
6995
7077
  ],
6996
7078
  outputs: ["configChange"]
6997
7079
  },
@@ -7351,7 +7433,8 @@ var ClearableInputComponent = class ClearableInputComponent extends BaseTextInpu
7351
7433
  "size",
7352
7434
  "one",
7353
7435
  "baseUrl",
7354
- "remote"
7436
+ "remote",
7437
+ "shadow"
7355
7438
  ],
7356
7439
  outputs: ["configChange"]
7357
7440
  },
@@ -9527,7 +9610,8 @@ var SectionFilterMenuComponent = class SectionFilterMenuComponent {
9527
9610
  "size",
9528
9611
  "one",
9529
9612
  "baseUrl",
9530
- "remote"
9613
+ "remote",
9614
+ "shadow"
9531
9615
  ],
9532
9616
  outputs: ["configChange"]
9533
9617
  },
@@ -14577,7 +14661,8 @@ var AuthActivityPageComponent = class AuthActivityPageComponent {
14577
14661
  "size",
14578
14662
  "one",
14579
14663
  "baseUrl",
14580
- "remote"
14664
+ "remote",
14665
+ "shadow"
14581
14666
  ],
14582
14667
  outputs: ["configChange"]
14583
14668
  },
@@ -16724,7 +16809,7 @@ var SectionHeaderComponent = class SectionHeaderComponent {
16724
16809
  },
16725
16810
  ngImport: i0,
16726
16811
  template: "<!-- One declaration of the row, rendered by whichever branch `spacing` picks.\n Hoisted into a template rather than written twice: an `<ng-content>` may\n appear once per selector in a component, so the duplicated copy caught\n nothing and a header projecting a title rendered it in the `spacing`\n branch alone. -->\n<ng-template #body>\n @if (accordion(); as accordionRef) {\n <div\n class=\"section-header__toggle\"\n [class.section-header__toggle--rotate]=\"toggleRotates()\"\n [class.section-header__toggle--open]=\"accordionRef.isOpen()\"\n [id]=\"accordionRef.headerId\"\n [attr.aria-expanded]=\"accordionRef.isOpen()\"\n [attr.aria-controls]=\"accordionRef.bodyId\"\n >\n <m-button\n [config]=\"{ icon: toggleIconName(), iconOnly: true, variant: 'ghost' }\"\n (clicked)=\"onToggleClick()\" />\n </div>\n }\n @if (showBack()) {\n <div class=\"section-header__back\">\n <m-button\n [config]=\"{ icon: 'chevron-left', iconOnly: true }\"\n (clicked)=\"back.emit()\" />\n </div>\n } @else if (!label() && icon(); as iconName) {\n <!-- Only where no label is written. A header with one hands the icon to\n `m-header`, which draws it inside the heading's line box and so on the\n heading's own centre line. Beside a projected title there is no such\n box to borrow, so the glyph is boxed to the level's line box here and\n centred in it — otherwise it centres against the whole title column,\n which on the Canvas is the label slot's drop rect stacked above the\n heading. -->\n <div class=\"section-header__icon\">\n <m-icon [name]=\"iconName\" />\n </div>\n }\n <div\n class=\"section-header__title\"\n [class.section-header__title--reverse]=\"reverse()\"\n >\n <!-- The title slot is the catch-all rather than a `[label]` one: every\n header already projecting a heading writes it unselected, and a\n selector here would drop that content on the floor. What the design\n page emits — `<span label>` — is caught by it too, nothing else\n claiming the node. -->\n <ng-content />\n <!-- The written label, drawn beside the slot rather than as its\n `ng-content` fallback. A fallback renders only while *nothing* is\n projected, and the design Canvas always projects the slot span —\n empty until a Control is dropped in it — so a fallback there would\n blank the label a header is still configured with. `label` answers\n instead, which no header projecting a title sets. -->\n @if (label()) {\n <m-header\n [level]=\"level()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [params]=\"params()\"\n [noTranslate]=\"noTranslate()\" />\n }\n @if (subText(); as sub) {\n <span class=\"section-header__sub\">{{ sub }}</span>\n }\n </div>\n <!-- A FilterGroup projected into the header row, selected by tag rather than\n by an attribute — the same shape a Section catches its `m-action` with.\n A header has room for one icon and not for a row, so a group landing\n here is squeezed by placement (ADR 0025); nothing here enforces that,\n the caller binding `[squeeze]` on the tag it projects. -->\n <div class=\"section-header__filters\">\n <ng-content select=\"m-section-filter-group\" />\n </div>\n @if (actionConfig(); as action) {\n <div class=\"section-header__action\">\n <m-button [config]=\"action\" (clicked)=\"actionClick.emit()\" />\n </div>\n }\n @if (hasMenu()) {\n <div class=\"section-header__menu\">\n <m-context-menu\n [config]=\"menu()\"\n [name]=\"menuName()\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"action.emit($event)\"\n />\n </div>\n }\n</ng-template>\n\n<!-- Always the same two boxes, whether or not a `maxWidth` is in force. The\n border and the sticky backdrop live on the host and keep spanning the\n Section's full width; only this container narrows and is placed by the\n Section's `align`, so the heading lines up with the body under it. -->\n<div class=\"section-header__container\">\n <div class=\"section-header__inner\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n</div>\n",
16727
- 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:flex;align-items:center;gap:.5rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);padding:var(--section-header-py, .85rem) var(--section-px, 1rem);width:100%;grid-column:1/-1}:host(.no-border){border-bottom:none}:host(.spacing){padding:0;width:100%}.section-header__container{width:100%;min-width:0;max-width:var(--m-section-header-max-width, none);margin-inline:0 auto}:host(.box-center) .section-header__container{margin-inline:auto}:host(.box-right) .section-header__container{margin-inline:auto 0}.section-header__inner{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.section-header__inner .section-header__title{flex:1;min-width:0;gap:.5rem}:host(.spacing) .section-header__inner{padding:1rem 1.5rem}:host(.has-sidepanel){padding-right:50px}:host(.has-sidepanel.has-menu){padding-right:50px}:host(.spacing.has-sidepanel) .section-header__inner{padding-right:calc(1.5rem + 50px)}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10}:host(.is-sticky-enabled){background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}:host(.is-accordion){cursor:pointer}.section-header__toggle{display:flex;flex-shrink:0}.section-header__toggle.section-header__toggle--rotate m-button{display:flex;transition:transform .3s cubic-bezier(.4,0,.2,1)}.section-header__toggle.section-header__toggle--rotate.section-header__toggle--open m-button{transform:rotate(180deg)}.section-header__title{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}m-header{min-width:0}.section-header__title--reverse{flex-direction:column-reverse}.section-header__sub{font-size:.8rem;color:var(--m-text-secondary);line-height:1.2}:host(.align-center){--m-header-justify: center}:host(.align-right){--m-header-justify: flex-end}:host(.has-menu){padding-right:0}:host(.spacing.has-menu) .section-header__inner{padding-right:0}.section-header__filters{display:contents}.section-header__filters m-section-filter-group{width:auto;flex-shrink:0;border-bottom:none}.section-header__back{display:flex;align-items:center;flex-shrink:0}.section-header__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;align-self:flex-start;height:var(--m-section-header-icon-box, 1.5125rem)}.section-header__menu,.section-header__action{margin-left:auto;flex-shrink:0;display:flex;align-items:center}.section-header__action+.section-header__menu{margin-left:0}\n"],
16812
+ 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:flex;align-items:center;gap:.5rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);padding:var(--section-header-py, .85rem) var(--section-px, 1rem);width:100%;grid-column:1/-1}:host(.no-border){border-bottom:none}:host(.spacing){padding:0;width:100%}.section-header__container{width:100%;min-width:0;max-width:var(--m-section-header-max-width, none);margin-inline:0 auto}:host(.box-center) .section-header__container{margin-inline:auto}:host(.box-right) .section-header__container{margin-inline:auto 0}.section-header__inner{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.section-header__inner .section-header__title{flex:1;min-width:0;gap:.5rem}:host(.spacing) .section-header__inner{padding:1rem 1.5rem}:host(.has-sidepanel){padding-right:50px}:host(.has-sidepanel.has-menu){padding-right:50px}:host(.spacing.has-sidepanel) .section-header__inner{padding-right:calc(1.5rem + 50px)}:host(.is-sticky-enabled){position:sticky;top:var(--m-section-header-sticky-top, 0);z-index:var(--m-section-header-sticky-z, 10)}:host(.is-sticky){background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}:host(.is-accordion){cursor:pointer}.section-header__toggle{display:flex;flex-shrink:0}.section-header__toggle.section-header__toggle--rotate m-button{display:flex;transition:transform .3s cubic-bezier(.4,0,.2,1)}.section-header__toggle.section-header__toggle--rotate.section-header__toggle--open m-button{transform:rotate(180deg)}.section-header__title{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}m-header{min-width:0}.section-header__title--reverse{flex-direction:column-reverse}.section-header__sub{font-size:.8rem;color:var(--m-text-secondary);line-height:1.2}:host(.align-center){--m-header-justify: center}:host(.align-right){--m-header-justify: flex-end}:host(.has-menu){padding-right:0}:host(.spacing.has-menu) .section-header__inner{padding-right:0}.section-header__filters{display:contents}.section-header__filters m-section-filter-group{width:auto;flex-shrink:0;border-bottom:none}.section-header__back{display:flex;align-items:center;flex-shrink:0}.section-header__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;align-self:flex-start;height:var(--m-section-header-icon-box, 1.5125rem)}.section-header__menu,.section-header__action{margin-left:auto;flex-shrink:0;display:flex;align-items:center}.section-header__action+.section-header__menu{margin-left:0}\n"],
16728
16813
  dependencies: [
16729
16814
  {
16730
16815
  kind: "directive",
@@ -16778,7 +16863,8 @@ var SectionHeaderComponent = class SectionHeaderComponent {
16778
16863
  "size",
16779
16864
  "one",
16780
16865
  "baseUrl",
16781
- "remote"
16866
+ "remote",
16867
+ "shadow"
16782
16868
  ],
16783
16869
  outputs: ["configChange"]
16784
16870
  },
@@ -16856,7 +16942,7 @@ i0.ɵɵngDeclareClassMetadata({
16856
16942
  "(click)": "onHeaderClick($event)"
16857
16943
  },
16858
16944
  template: "<!-- One declaration of the row, rendered by whichever branch `spacing` picks.\n Hoisted into a template rather than written twice: an `<ng-content>` may\n appear once per selector in a component, so the duplicated copy caught\n nothing and a header projecting a title rendered it in the `spacing`\n branch alone. -->\n<ng-template #body>\n @if (accordion(); as accordionRef) {\n <div\n class=\"section-header__toggle\"\n [class.section-header__toggle--rotate]=\"toggleRotates()\"\n [class.section-header__toggle--open]=\"accordionRef.isOpen()\"\n [id]=\"accordionRef.headerId\"\n [attr.aria-expanded]=\"accordionRef.isOpen()\"\n [attr.aria-controls]=\"accordionRef.bodyId\"\n >\n <m-button\n [config]=\"{ icon: toggleIconName(), iconOnly: true, variant: 'ghost' }\"\n (clicked)=\"onToggleClick()\" />\n </div>\n }\n @if (showBack()) {\n <div class=\"section-header__back\">\n <m-button\n [config]=\"{ icon: 'chevron-left', iconOnly: true }\"\n (clicked)=\"back.emit()\" />\n </div>\n } @else if (!label() && icon(); as iconName) {\n <!-- Only where no label is written. A header with one hands the icon to\n `m-header`, which draws it inside the heading's line box and so on the\n heading's own centre line. Beside a projected title there is no such\n box to borrow, so the glyph is boxed to the level's line box here and\n centred in it — otherwise it centres against the whole title column,\n which on the Canvas is the label slot's drop rect stacked above the\n heading. -->\n <div class=\"section-header__icon\">\n <m-icon [name]=\"iconName\" />\n </div>\n }\n <div\n class=\"section-header__title\"\n [class.section-header__title--reverse]=\"reverse()\"\n >\n <!-- The title slot is the catch-all rather than a `[label]` one: every\n header already projecting a heading writes it unselected, and a\n selector here would drop that content on the floor. What the design\n page emits — `<span label>` — is caught by it too, nothing else\n claiming the node. -->\n <ng-content />\n <!-- The written label, drawn beside the slot rather than as its\n `ng-content` fallback. A fallback renders only while *nothing* is\n projected, and the design Canvas always projects the slot span —\n empty until a Control is dropped in it — so a fallback there would\n blank the label a header is still configured with. `label` answers\n instead, which no header projecting a title sets. -->\n @if (label()) {\n <m-header\n [level]=\"level()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [params]=\"params()\"\n [noTranslate]=\"noTranslate()\" />\n }\n @if (subText(); as sub) {\n <span class=\"section-header__sub\">{{ sub }}</span>\n }\n </div>\n <!-- A FilterGroup projected into the header row, selected by tag rather than\n by an attribute — the same shape a Section catches its `m-action` with.\n A header has room for one icon and not for a row, so a group landing\n here is squeezed by placement (ADR 0025); nothing here enforces that,\n the caller binding `[squeeze]` on the tag it projects. -->\n <div class=\"section-header__filters\">\n <ng-content select=\"m-section-filter-group\" />\n </div>\n @if (actionConfig(); as action) {\n <div class=\"section-header__action\">\n <m-button [config]=\"action\" (clicked)=\"actionClick.emit()\" />\n </div>\n }\n @if (hasMenu()) {\n <div class=\"section-header__menu\">\n <m-context-menu\n [config]=\"menu()\"\n [name]=\"menuName()\"\n [visibilityRule]=\"visibilityRule()\"\n [disableRule]=\"disableRule()\"\n [extraData]=\"extraData()\"\n (action)=\"action.emit($event)\"\n />\n </div>\n }\n</ng-template>\n\n<!-- Always the same two boxes, whether or not a `maxWidth` is in force. The\n border and the sticky backdrop live on the host and keep spanning the\n Section's full width; only this container narrows and is placed by the\n Section's `align`, so the heading lines up with the body under it. -->\n<div class=\"section-header__container\">\n <div class=\"section-header__inner\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n</div>\n",
16859
- 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:flex;align-items:center;gap:.5rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);padding:var(--section-header-py, .85rem) var(--section-px, 1rem);width:100%;grid-column:1/-1}:host(.no-border){border-bottom:none}:host(.spacing){padding:0;width:100%}.section-header__container{width:100%;min-width:0;max-width:var(--m-section-header-max-width, none);margin-inline:0 auto}:host(.box-center) .section-header__container{margin-inline:auto}:host(.box-right) .section-header__container{margin-inline:auto 0}.section-header__inner{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.section-header__inner .section-header__title{flex:1;min-width:0;gap:.5rem}:host(.spacing) .section-header__inner{padding:1rem 1.5rem}:host(.has-sidepanel){padding-right:50px}:host(.has-sidepanel.has-menu){padding-right:50px}:host(.spacing.has-sidepanel) .section-header__inner{padding-right:calc(1.5rem + 50px)}:host(.is-sticky-enabled){position:sticky;top:0;z-index:10}:host(.is-sticky-enabled){background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}:host(.is-accordion){cursor:pointer}.section-header__toggle{display:flex;flex-shrink:0}.section-header__toggle.section-header__toggle--rotate m-button{display:flex;transition:transform .3s cubic-bezier(.4,0,.2,1)}.section-header__toggle.section-header__toggle--rotate.section-header__toggle--open m-button{transform:rotate(180deg)}.section-header__title{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}m-header{min-width:0}.section-header__title--reverse{flex-direction:column-reverse}.section-header__sub{font-size:.8rem;color:var(--m-text-secondary);line-height:1.2}:host(.align-center){--m-header-justify: center}:host(.align-right){--m-header-justify: flex-end}:host(.has-menu){padding-right:0}:host(.spacing.has-menu) .section-header__inner{padding-right:0}.section-header__filters{display:contents}.section-header__filters m-section-filter-group{width:auto;flex-shrink:0;border-bottom:none}.section-header__back{display:flex;align-items:center;flex-shrink:0}.section-header__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;align-self:flex-start;height:var(--m-section-header-icon-box, 1.5125rem)}.section-header__menu,.section-header__action{margin-left:auto;flex-shrink:0;display:flex;align-items:center}.section-header__action+.section-header__menu{margin-left:0}\n"]
16945
+ 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:flex;align-items:center;gap:.5rem;min-height:var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));border-bottom:1px solid var(--m-backdrop-border);padding:var(--section-header-py, .85rem) var(--section-px, 1rem);width:100%;grid-column:1/-1}:host(.no-border){border-bottom:none}:host(.spacing){padding:0;width:100%}.section-header__container{width:100%;min-width:0;max-width:var(--m-section-header-max-width, none);margin-inline:0 auto}:host(.box-center) .section-header__container{margin-inline:auto}:host(.box-right) .section-header__container{margin-inline:auto 0}.section-header__inner{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.section-header__inner .section-header__title{flex:1;min-width:0;gap:.5rem}:host(.spacing) .section-header__inner{padding:1rem 1.5rem}:host(.has-sidepanel){padding-right:50px}:host(.has-sidepanel.has-menu){padding-right:50px}:host(.spacing.has-sidepanel) .section-header__inner{padding-right:calc(1.5rem + 50px)}:host(.is-sticky-enabled){position:sticky;top:var(--m-section-header-sticky-top, 0);z-index:var(--m-section-header-sticky-z, 10)}:host(.is-sticky){background:color-mix(in srgb,var(--m-background) 80%,transparent);backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%)}:host(.is-accordion){cursor:pointer}.section-header__toggle{display:flex;flex-shrink:0}.section-header__toggle.section-header__toggle--rotate m-button{display:flex;transition:transform .3s cubic-bezier(.4,0,.2,1)}.section-header__toggle.section-header__toggle--rotate.section-header__toggle--open m-button{transform:rotate(180deg)}.section-header__title{flex:1;min-width:0;display:flex;flex-direction:column;gap:.1rem}m-header{min-width:0}.section-header__title--reverse{flex-direction:column-reverse}.section-header__sub{font-size:.8rem;color:var(--m-text-secondary);line-height:1.2}:host(.align-center){--m-header-justify: center}:host(.align-right){--m-header-justify: flex-end}:host(.has-menu){padding-right:0}:host(.spacing.has-menu) .section-header__inner{padding-right:0}.section-header__filters{display:contents}.section-header__filters m-section-filter-group{width:auto;flex-shrink:0;border-bottom:none}.section-header__back{display:flex;align-items:center;flex-shrink:0}.section-header__icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;align-self:flex-start;height:var(--m-section-header-icon-box, 1.5125rem)}.section-header__menu,.section-header__action{margin-left:auto;flex-shrink:0;display:flex;align-items:center}.section-header__action+.section-header__menu{margin-left:0}\n"]
16860
16946
  }]
16861
16947
  }],
16862
16948
  propDecorators: {
@@ -17310,7 +17396,8 @@ var SectionTableComponent = class SectionTableComponent extends ConfigComponent
17310
17396
  "size",
17311
17397
  "one",
17312
17398
  "baseUrl",
17313
- "remote"
17399
+ "remote",
17400
+ "shadow"
17314
17401
  ],
17315
17402
  outputs: ["configChange"]
17316
17403
  },
@@ -18418,7 +18505,8 @@ var TextareaInputComponent = class TextareaInputComponent extends BaseTextInputC
18418
18505
  "size",
18419
18506
  "one",
18420
18507
  "baseUrl",
18421
- "remote"
18508
+ "remote",
18509
+ "shadow"
18422
18510
  ],
18423
18511
  outputs: ["configChange"]
18424
18512
  }
@@ -21372,7 +21460,8 @@ var ColorPickerInputComponent = class ColorPickerInputComponent extends BaseText
21372
21460
  "size",
21373
21461
  "one",
21374
21462
  "baseUrl",
21375
- "remote"
21463
+ "remote",
21464
+ "shadow"
21376
21465
  ],
21377
21466
  outputs: ["configChange"]
21378
21467
  },
@@ -21652,7 +21741,7 @@ var WrapperInputComponent = class WrapperInputComponent extends ConfigComponent
21652
21741
  break;
21653
21742
  }
21654
21743
  case InputType.PASSWORD: {
21655
- const { PasswordInputComponent } = await import("./magmonium-one-password-BjqYmT1s.mjs");
21744
+ const { PasswordInputComponent } = await import("./magmonium-one-password-BIs_YxJ5.mjs");
21656
21745
  this.createDynamicComponent(seq, PasswordInputComponent);
21657
21746
  break;
21658
21747
  }
@@ -21738,7 +21827,7 @@ var WrapperInputComponent = class WrapperInputComponent extends ConfigComponent
21738
21827
  break;
21739
21828
  }
21740
21829
  default: {
21741
- const { TextInputComponent } = await import("./magmonium-one-text-BL-1lWST.mjs").then((n) => n.n);
21830
+ const { TextInputComponent } = await import("./magmonium-one-text-BvXdAX0i.mjs").then((n) => n.n);
21742
21831
  this.createDynamicComponent(seq, TextInputComponent);
21743
21832
  break;
21744
21833
  }
@@ -22669,7 +22758,8 @@ var ToggleRadioInputComponent = class ToggleRadioInputComponent extends BaseText
22669
22758
  "size",
22670
22759
  "one",
22671
22760
  "baseUrl",
22672
- "remote"
22761
+ "remote",
22762
+ "shadow"
22673
22763
  ],
22674
22764
  outputs: ["configChange"]
22675
22765
  },
@@ -23037,7 +23127,8 @@ var SelectableCardInputComponent = class SelectableCardInputComponent extends Ba
23037
23127
  "size",
23038
23128
  "one",
23039
23129
  "baseUrl",
23040
- "remote"
23130
+ "remote",
23131
+ "shadow"
23041
23132
  ],
23042
23133
  outputs: ["configChange"]
23043
23134
  },
@@ -24054,7 +24145,7 @@ var FileUploadInputComponent = class FileUploadInputComponent extends BaseInputC
24054
24145
  openEditor = async (file, size) => {
24055
24146
  const modalStore = this.modalStore;
24056
24147
  if (!modalStore) return void 0;
24057
- const { ImageEditorComponent } = await import("./magmonium-one-image-editor-Dn0ACfH0.mjs");
24148
+ const { ImageEditorComponent } = await import("./magmonium-one-image-editor-oGxg59hV.mjs");
24058
24149
  const ratio = String(this.config()?.ratio ?? "");
24059
24150
  return new Promise((resolve) => {
24060
24151
  const modalRef = new ModalRef();
@@ -24293,7 +24384,8 @@ var FileUploadInputComponent = class FileUploadInputComponent extends BaseInputC
24293
24384
  "size",
24294
24385
  "one",
24295
24386
  "baseUrl",
24296
- "remote"
24387
+ "remote",
24388
+ "shadow"
24297
24389
  ],
24298
24390
  outputs: ["configChange"]
24299
24391
  },
@@ -24734,7 +24826,8 @@ var ListComponent = class ListComponent extends ConfigComponent {
24734
24826
  "size",
24735
24827
  "one",
24736
24828
  "baseUrl",
24737
- "remote"
24829
+ "remote",
24830
+ "shadow"
24738
24831
  ],
24739
24832
  outputs: ["configChange"]
24740
24833
  },
@@ -25784,7 +25877,8 @@ var StepComponent = class StepComponent {
25784
25877
  "size",
25785
25878
  "one",
25786
25879
  "baseUrl",
25787
- "remote"
25880
+ "remote",
25881
+ "shadow"
25788
25882
  ],
25789
25883
  outputs: ["configChange"]
25790
25884
  },
@@ -27164,7 +27258,8 @@ var DashboardCardComponent = class DashboardCardComponent {
27164
27258
  "size",
27165
27259
  "one",
27166
27260
  "baseUrl",
27167
- "remote"
27261
+ "remote",
27262
+ "shadow"
27168
27263
  ],
27169
27264
  outputs: ["configChange"]
27170
27265
  },
@@ -27656,7 +27751,8 @@ var WatermarkComponent = class WatermarkComponent extends ConfigComponent {
27656
27751
  "size",
27657
27752
  "one",
27658
27753
  "baseUrl",
27659
- "remote"
27754
+ "remote",
27755
+ "shadow"
27660
27756
  ],
27661
27757
  outputs: ["configChange"]
27662
27758
  }, {
@@ -27935,7 +28031,8 @@ var TechnicalMeterComponent = class TechnicalMeterComponent {
27935
28031
  "size",
27936
28032
  "one",
27937
28033
  "baseUrl",
27938
- "remote"
28034
+ "remote",
28035
+ "shadow"
27939
28036
  ],
27940
28037
  outputs: ["configChange"]
27941
28038
  },
@@ -29516,7 +29613,8 @@ var RemoteComponent = class RemoteComponent {
29516
29613
  "size",
29517
29614
  "one",
29518
29615
  "baseUrl",
29519
- "remote"
29616
+ "remote",
29617
+ "shadow"
29520
29618
  ],
29521
29619
  outputs: ["configChange"]
29522
29620
  },
@@ -30065,7 +30163,8 @@ var PluginComponent = class PluginComponent {
30065
30163
  "size",
30066
30164
  "one",
30067
30165
  "baseUrl",
30068
- "remote"
30166
+ "remote",
30167
+ "shadow"
30069
30168
  ],
30070
30169
  outputs: ["configChange"]
30071
30170
  }, {
@@ -31098,7 +31197,8 @@ var SortComponent = class SortComponent extends ConfigComponent {
31098
31197
  "size",
31099
31198
  "one",
31100
31199
  "baseUrl",
31101
- "remote"
31200
+ "remote",
31201
+ "shadow"
31102
31202
  ],
31103
31203
  outputs: ["configChange"]
31104
31204
  },
@@ -33310,7 +33410,8 @@ var TableBodyComponent = class TableBodyComponent {
33310
33410
  "size",
33311
33411
  "one",
33312
33412
  "baseUrl",
33313
- "remote"
33413
+ "remote",
33414
+ "shadow"
33314
33415
  ],
33315
33416
  outputs: ["configChange"]
33316
33417
  },
@@ -35690,7 +35791,8 @@ var TreeGridComponent = class TreeGridComponent extends ConfigComponent {
35690
35791
  "size",
35691
35792
  "one",
35692
35793
  "baseUrl",
35693
- "remote"
35794
+ "remote",
35795
+ "shadow"
35694
35796
  ],
35695
35797
  outputs: ["configChange"]
35696
35798
  },
@@ -36538,7 +36640,8 @@ var SummaryComponent = class SummaryComponent extends ConfigComponent {
36538
36640
  "size",
36539
36641
  "one",
36540
36642
  "baseUrl",
36541
- "remote"
36643
+ "remote",
36644
+ "shadow"
36542
36645
  ],
36543
36646
  outputs: ["configChange"]
36544
36647
  },
@@ -36833,7 +36936,8 @@ var AccordionComponent = class AccordionComponent extends ConfigComponent {
36833
36936
  "size",
36834
36937
  "one",
36835
36938
  "baseUrl",
36836
- "remote"
36939
+ "remote",
36940
+ "shadow"
36837
36941
  ],
36838
36942
  outputs: ["configChange"]
36839
36943
  },
@@ -37629,7 +37733,8 @@ var NothingComponent = class NothingComponent {
37629
37733
  "size",
37630
37734
  "one",
37631
37735
  "baseUrl",
37632
- "remote"
37736
+ "remote",
37737
+ "shadow"
37633
37738
  ],
37634
37739
  outputs: ["configChange"]
37635
37740
  },
@@ -37810,6 +37915,140 @@ i0.ɵɵngDeclareClassMetadata({
37810
37915
  args: ["inner", { isSignal: true }]
37811
37916
  }] }
37812
37917
  });
37918
+ var AppLogoComponent = class AppLogoComponent {
37919
+ glyph = input(...ngDevMode ? [void 0, { debugName: "glyph" }] : /* istanbul ignore next */ []);
37920
+ appColor = input(...ngDevMode ? [void 0, { debugName: "appColor" }] : /* istanbul ignore next */ []);
37921
+ name = input(...ngDevMode ? [void 0, { debugName: "name" }] : /* istanbul ignore next */ []);
37922
+ color = computed(() => {
37923
+ const value = this.appColor();
37924
+ return value ? normalizeAppColor(value) ?? null : null;
37925
+ }, ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
37926
+ shadow = computed(() => {
37927
+ const color = this.color();
37928
+ return color ? appLogoShadowColor(color) : null;
37929
+ }, ...ngDevMode ? [{ debugName: "shadow" }] : /* istanbul ignore next */ []);
37930
+ mask = computed(() => {
37931
+ const glyph = this.glyph();
37932
+ return glyph ? logoGlyphMaskUrl(glyph) : void 0;
37933
+ }, ...ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []);
37934
+ letter = computed(() => (this.name()?.trim().charAt(0) ?? "").toUpperCase(), ...ngDevMode ? [{ debugName: "letter" }] : /* istanbul ignore next */ []);
37935
+ static ɵfac = i0.ɵɵngDeclareFactory({
37936
+ minVersion: "12.0.0",
37937
+ version: "22.2.1",
37938
+ ngImport: i0,
37939
+ type: AppLogoComponent,
37940
+ deps: [],
37941
+ target: i0.ɵɵFactoryTarget.Component
37942
+ });
37943
+ static ɵcmp = i0.ɵɵngDeclareComponent({
37944
+ minVersion: "17.0.0",
37945
+ version: "22.2.1",
37946
+ type: AppLogoComponent,
37947
+ isStandalone: true,
37948
+ selector: "m-app-logo",
37949
+ inputs: {
37950
+ glyph: {
37951
+ classPropertyName: "glyph",
37952
+ publicName: "glyph",
37953
+ isSignal: true,
37954
+ isRequired: false,
37955
+ transformFunction: null
37956
+ },
37957
+ appColor: {
37958
+ classPropertyName: "appColor",
37959
+ publicName: "appColor",
37960
+ isSignal: true,
37961
+ isRequired: false,
37962
+ transformFunction: null
37963
+ },
37964
+ name: {
37965
+ classPropertyName: "name",
37966
+ publicName: "name",
37967
+ isSignal: true,
37968
+ isRequired: false,
37969
+ transformFunction: null
37970
+ }
37971
+ },
37972
+ host: {
37973
+ attributes: { "role": "img" },
37974
+ properties: {
37975
+ "attr.aria-label": "name() || null",
37976
+ "style.--m-app-logo-color": "color()",
37977
+ "style.--m-app-logo-shadow": "shadow()"
37978
+ },
37979
+ classAttribute: "m-app-logo"
37980
+ },
37981
+ ngImport: i0,
37982
+ template: `
37983
+ <span class="m-app-logo__mark">
37984
+ @if (mask(); as url) {
37985
+ <span class="m-app-logo__glyph" [style.mask-image]="url"></span>
37986
+ } @else {
37987
+ <span class="m-app-logo__letter">{{ letter() }}</span>
37988
+ }
37989
+ </span>
37990
+ `,
37991
+ isInline: true,
37992
+ 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"],
37993
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
37994
+ });
37995
+ };
37996
+ i0.ɵɵngDeclareClassMetadata({
37997
+ minVersion: "12.0.0",
37998
+ version: "22.2.1",
37999
+ ngImport: i0,
38000
+ type: AppLogoComponent,
38001
+ decorators: [{
38002
+ type: Component,
38003
+ args: [{
38004
+ selector: "m-app-logo",
38005
+ template: `
38006
+ <span class="m-app-logo__mark">
38007
+ @if (mask(); as url) {
38008
+ <span class="m-app-logo__glyph" [style.mask-image]="url"></span>
38009
+ } @else {
38010
+ <span class="m-app-logo__letter">{{ letter() }}</span>
38011
+ }
38012
+ </span>
38013
+ `,
38014
+ changeDetection: ChangeDetectionStrategy.OnPush,
38015
+ host: {
38016
+ class: "m-app-logo",
38017
+ role: "img",
38018
+ "[attr.aria-label]": "name() || null",
38019
+ "[style.--m-app-logo-color]": "color()",
38020
+ "[style.--m-app-logo-shadow]": "shadow()"
38021
+ },
38022
+ 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"]
38023
+ }]
38024
+ }],
38025
+ propDecorators: {
38026
+ glyph: [{
38027
+ type: i0.Input,
38028
+ args: [{
38029
+ isSignal: true,
38030
+ alias: "glyph",
38031
+ required: false
38032
+ }]
38033
+ }],
38034
+ appColor: [{
38035
+ type: i0.Input,
38036
+ args: [{
38037
+ isSignal: true,
38038
+ alias: "appColor",
38039
+ required: false
38040
+ }]
38041
+ }],
38042
+ name: [{
38043
+ type: i0.Input,
38044
+ args: [{
38045
+ isSignal: true,
38046
+ alias: "name",
38047
+ required: false
38048
+ }]
38049
+ }]
38050
+ }
38051
+ });
37813
38052
  var AppCardComponent = class AppCardComponent {
37814
38053
  app = input.required(...ngDevMode ? [{ debugName: "app" }] : /* istanbul ignore next */ []);
37815
38054
  variant = input("card", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
@@ -37875,8 +38114,8 @@ var AppCardComponent = class AppCardComponent {
37875
38114
  },
37876
38115
  ngImport: i0,
37877
38116
  template: `
37878
- <div [class]="'app-card app-card--' + variant()" [style.--app-accent]="app().accentColor" (click)="cardClick.emit(app())" role="button" tabindex="0">
37879
- @if (app().accentColor && variant() === 'card') {
38117
+ <div [class]="'app-card app-card--' + variant()" [style.--app-accent]="app().appColor" (click)="cardClick.emit(app())" role="button" tabindex="0">
38118
+ @if (app().appColor && variant() === 'card') {
37880
38119
  <div class="app-card__accent"></div>
37881
38120
  }
37882
38121
 
@@ -37885,17 +38124,13 @@ var AppCardComponent = class AppCardComponent {
37885
38124
  }
37886
38125
 
37887
38126
  <div class="app-card__icon-wrap">
37888
- <m-img [src]="app().iconUrl" [remote]="app().remote" [alt]="app().name" onerror="this.src='assets/icons/default-app.svg'; this.onerror=null;" />
38127
+ <m-app-logo [glyph]="app().logoGlyph" [appColor]="app().appColor" [name]="app().name" />
37889
38128
  </div>
37890
38129
 
37891
38130
  <div class="app-card__body">
37892
38131
  <div class="app-card__main-info">
37893
38132
  <span class="app-card__name">{{ app().name }}</span>
37894
38133
 
37895
- @if (variant() === 'row' || variant() === 'card') {
37896
- <span class="app-card__company">{{ app().company }}</span>
37897
- }
37898
-
37899
38134
  @if (variant() === 'row') {
37900
38135
  <span class="app-card__version">{{ app().version }}</span>
37901
38136
  }
@@ -37924,24 +38159,16 @@ var AppCardComponent = class AppCardComponent {
37924
38159
  </div>
37925
38160
  `,
37926
38161
  isInline: true,
37927
- 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)}}.app-card{position:relative;display:flex;border-radius:1.25rem;background:var(--m-backdrop-card, rgba(255, 255, 255, .25));-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--m-border, rgba(255, 255, 255, .4));padding:1rem;gap:1rem;cursor:pointer;transition:all .3s cubic-bezier(.16,1,.3,1);outline:none;overflow:hidden}.app-card:hover{transform:translateY(-4px);box-shadow:0 12px 24px -8px var(--m-backdrop-shadow, rgba(0, 0, 0, .1));border-color:var(--m-focus, rgba(65, 105, 225, .4))}.app-card--small{padding:.75rem;gap:.75rem;align-items:center}.app-card--small .app-card__icon-wrap{width:2.5rem;height:2.5rem;border-radius:.75rem}.app-card--small .app-card__name{font-size:.875rem;font-weight:700}.app-card--tile{flex-direction:column;align-items:center;justify-content:center;padding:.875rem;gap:.5rem}.app-card--tile .app-card__icon-wrap{width:3.5rem;height:3.5rem;border-radius:1rem}.app-card--tile .app-card__body{align-items:center;text-align:center}.app-card--tile .app-card__main-info{align-items:center}.app-card--tile .app-card__name{font-size:.8125rem;font-weight:600;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.app-card--row{align-items:center}.app-card--row .app-card__icon-wrap{width:3.25rem;height:3.25rem;border-radius:.875rem}.app-card--row .app-card__main-info{display:flex;flex-direction:column;gap:.125rem}.app-card--row .app-card__name{font-size:.9375rem;font-weight:700}.app-card--row .app-card__company,.app-card--row .app-card__version{font-size:.75rem;color:var(--m-text-secondary, #64748b)}.app-card--card{flex-direction:column;padding:1.25rem;min-height:12rem}.app-card--card .app-card__accent{position:absolute;top:0;left:0;right:0;height:4px;background:var(--app-accent, var(--m-focus, #4169e1))}.app-card--card .app-card__icon-wrap{width:3.75rem;height:3.75rem;border-radius:1.125rem;background:var(--app-accent, var(--m-frame, #e0e7ff));opacity:.9}.app-card--card .app-card__icon-wrap:before{content:\"\";position:absolute;inset:0;background:var(--app-accent);opacity:.15}.app-card--card .app-card__body{flex:1;display:flex;flex-direction:column;gap:.5rem}.app-card--card .app-card__name{font-size:1.125rem;font-weight:800}.app-card--card .app-card__company{font-size:.8125rem;color:var(--m-text-secondary, #64748b);font-weight:600}.app-card--card .app-card__desc{font-size:.875rem;color:var(--m-text-secondary, #64748b);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:.25rem 0}.app-card--card .app-card__footer{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.app-card--card .app-card__version-badge{font-size:.6875rem;font-weight:700;background:var(--m-background-lite, rgba(0, 0, 0, .05));padding:.125rem .5rem;border-radius:9999px;color:var(--m-text-secondary, #64748b)}.app-card--card .app-card__updated{font-size:.6875rem;color:var(--m-text-tertiary, #94a3b8)}.app-card__badge{position:absolute;top:.75rem;right:.75rem;min-width:1.375rem;height:1.375rem;padding:0 .375rem;background:var(--m-error, #f43f5e);color:#fff;border-radius:9999px;font-size:.625rem;font-weight:800;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #f43f5e66;z-index:2}.app-card__icon-wrap{flex-shrink:0;overflow:hidden;background:var(--m-frame, #f1f5f9);display:flex;align-items:center;justify-content:center}.app-card__icon-wrap img,.app-card__icon-wrap m-img{width:60%;height:60%;object-fit:contain}.app-card__body{min-width:0}.app-card__actions{margin-left:auto;display:flex;align-items:center}.app-card--card .app-card__actions{position:absolute;bottom:1.25rem;right:1.25rem}\n"],
38162
+ 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)}}.app-card{position:relative;display:flex;border-radius:1.25rem;background:var(--m-backdrop-card, rgba(255, 255, 255, .25));-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--m-border, rgba(255, 255, 255, .4));padding:1rem;gap:1rem;cursor:pointer;transition:all .3s cubic-bezier(.16,1,.3,1);outline:none;overflow:hidden}.app-card:hover{transform:translateY(-4px);box-shadow:0 12px 24px -8px var(--m-backdrop-shadow, rgba(0, 0, 0, .1));border-color:var(--m-focus, rgba(65, 105, 225, .4))}.app-card--small{padding:.75rem;gap:.75rem;align-items:center}.app-card--small .app-card__icon-wrap{width:2.5rem;height:2.5rem;border-radius:.75rem}.app-card--small .app-card__name{font-size:.875rem;font-weight:700}.app-card--tile{flex-direction:column;align-items:center;justify-content:center;padding:.875rem;gap:.5rem}.app-card--tile .app-card__icon-wrap{width:3.5rem;height:3.5rem;border-radius:1rem}.app-card--tile .app-card__body{align-items:center;text-align:center}.app-card--tile .app-card__main-info{align-items:center}.app-card--tile .app-card__name{font-size:.8125rem;font-weight:600;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.app-card--row{align-items:center}.app-card--row .app-card__icon-wrap{width:3.25rem;height:3.25rem;border-radius:.875rem}.app-card--row .app-card__main-info{display:flex;flex-direction:column;gap:.125rem}.app-card--row .app-card__name{font-size:.9375rem;font-weight:700}.app-card--row .app-card__version{font-size:.75rem;color:var(--m-text-secondary, #64748b)}.app-card--card{flex-direction:column;padding:1.25rem;min-height:12rem}.app-card--card .app-card__accent{position:absolute;top:0;left:0;right:0;height:4px;background:var(--app-accent, var(--m-focus, #4169e1))}.app-card--card .app-card__icon-wrap{width:3.75rem;height:3.75rem;border-radius:1.125rem;background:var(--app-accent, var(--m-frame, #e0e7ff));opacity:.9}.app-card--card .app-card__icon-wrap:before{content:\"\";position:absolute;inset:0;background:var(--app-accent);opacity:.15}.app-card--card .app-card__body{flex:1;display:flex;flex-direction:column;gap:.5rem}.app-card--card .app-card__name{font-size:1.125rem;font-weight:800}.app-card--card .app-card__desc{font-size:.875rem;color:var(--m-text-secondary, #64748b);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:.25rem 0}.app-card--card .app-card__footer{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.app-card--card .app-card__version-badge{font-size:.6875rem;font-weight:700;background:var(--m-background-lite, rgba(0, 0, 0, .05));padding:.125rem .5rem;border-radius:9999px;color:var(--m-text-secondary, #64748b)}.app-card--card .app-card__updated{font-size:.6875rem;color:var(--m-text-tertiary, #94a3b8)}.app-card__badge{position:absolute;top:.75rem;right:.75rem;min-width:1.375rem;height:1.375rem;padding:0 .375rem;background:var(--m-error, #f43f5e);color:#fff;border-radius:9999px;font-size:.625rem;font-weight:800;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #f43f5e66;z-index:2}.app-card__icon-wrap{flex-shrink:0;overflow:hidden;background:var(--m-frame, #f1f5f9);display:flex;align-items:center;justify-content:center}.app-card__icon-wrap img,.app-card__icon-wrap m-img{width:60%;height:60%;object-fit:contain}.app-card__body{min-width:0}.app-card__actions{margin-left:auto;display:flex;align-items:center}.app-card--card .app-card__actions{position:absolute;bottom:1.25rem;right:1.25rem}\n"],
37928
38163
  dependencies: [
37929
38164
  {
37930
38165
  kind: "component",
37931
- type: ImgComponent,
37932
- selector: "m-img",
38166
+ type: AppLogoComponent,
38167
+ selector: "m-app-logo",
37933
38168
  inputs: [
37934
- "src",
37935
- "data",
37936
- "dataType",
37937
- "alt",
37938
- "priority",
37939
- "fill",
37940
- "width",
37941
- "height",
37942
- "remote",
37943
- "ngSrcset",
37944
- "sizes"
38169
+ "glyph",
38170
+ "appColor",
38171
+ "name"
37945
38172
  ]
37946
38173
  },
37947
38174
  {
@@ -37989,7 +38216,8 @@ var AppCardComponent = class AppCardComponent {
37989
38216
  "size",
37990
38217
  "one",
37991
38218
  "baseUrl",
37992
- "remote"
38219
+ "remote",
38220
+ "shadow"
37993
38221
  ],
37994
38222
  outputs: ["configChange"]
37995
38223
  },
@@ -38013,14 +38241,14 @@ i0.ɵɵngDeclareClassMetadata({
38013
38241
  selector: "m-app-card",
38014
38242
  changeDetection: ChangeDetectionStrategy.OnPush,
38015
38243
  imports: [
38016
- ImgComponent,
38244
+ AppLogoComponent,
38017
38245
  ButtonComponent,
38018
38246
  TranslatePipe,
38019
38247
  IconComponent
38020
38248
  ],
38021
38249
  template: `
38022
- <div [class]="'app-card app-card--' + variant()" [style.--app-accent]="app().accentColor" (click)="cardClick.emit(app())" role="button" tabindex="0">
38023
- @if (app().accentColor && variant() === 'card') {
38250
+ <div [class]="'app-card app-card--' + variant()" [style.--app-accent]="app().appColor" (click)="cardClick.emit(app())" role="button" tabindex="0">
38251
+ @if (app().appColor && variant() === 'card') {
38024
38252
  <div class="app-card__accent"></div>
38025
38253
  }
38026
38254
 
@@ -38029,17 +38257,13 @@ i0.ɵɵngDeclareClassMetadata({
38029
38257
  }
38030
38258
 
38031
38259
  <div class="app-card__icon-wrap">
38032
- <m-img [src]="app().iconUrl" [remote]="app().remote" [alt]="app().name" onerror="this.src='assets/icons/default-app.svg'; this.onerror=null;" />
38260
+ <m-app-logo [glyph]="app().logoGlyph" [appColor]="app().appColor" [name]="app().name" />
38033
38261
  </div>
38034
38262
 
38035
38263
  <div class="app-card__body">
38036
38264
  <div class="app-card__main-info">
38037
38265
  <span class="app-card__name">{{ app().name }}</span>
38038
38266
 
38039
- @if (variant() === 'row' || variant() === 'card') {
38040
- <span class="app-card__company">{{ app().company }}</span>
38041
- }
38042
-
38043
38267
  @if (variant() === 'row') {
38044
38268
  <span class="app-card__version">{{ app().version }}</span>
38045
38269
  }
@@ -38067,7 +38291,7 @@ i0.ɵɵngDeclareClassMetadata({
38067
38291
  }
38068
38292
  </div>
38069
38293
  `,
38070
- 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)}}.app-card{position:relative;display:flex;border-radius:1.25rem;background:var(--m-backdrop-card, rgba(255, 255, 255, .25));-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--m-border, rgba(255, 255, 255, .4));padding:1rem;gap:1rem;cursor:pointer;transition:all .3s cubic-bezier(.16,1,.3,1);outline:none;overflow:hidden}.app-card:hover{transform:translateY(-4px);box-shadow:0 12px 24px -8px var(--m-backdrop-shadow, rgba(0, 0, 0, .1));border-color:var(--m-focus, rgba(65, 105, 225, .4))}.app-card--small{padding:.75rem;gap:.75rem;align-items:center}.app-card--small .app-card__icon-wrap{width:2.5rem;height:2.5rem;border-radius:.75rem}.app-card--small .app-card__name{font-size:.875rem;font-weight:700}.app-card--tile{flex-direction:column;align-items:center;justify-content:center;padding:.875rem;gap:.5rem}.app-card--tile .app-card__icon-wrap{width:3.5rem;height:3.5rem;border-radius:1rem}.app-card--tile .app-card__body{align-items:center;text-align:center}.app-card--tile .app-card__main-info{align-items:center}.app-card--tile .app-card__name{font-size:.8125rem;font-weight:600;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.app-card--row{align-items:center}.app-card--row .app-card__icon-wrap{width:3.25rem;height:3.25rem;border-radius:.875rem}.app-card--row .app-card__main-info{display:flex;flex-direction:column;gap:.125rem}.app-card--row .app-card__name{font-size:.9375rem;font-weight:700}.app-card--row .app-card__company,.app-card--row .app-card__version{font-size:.75rem;color:var(--m-text-secondary, #64748b)}.app-card--card{flex-direction:column;padding:1.25rem;min-height:12rem}.app-card--card .app-card__accent{position:absolute;top:0;left:0;right:0;height:4px;background:var(--app-accent, var(--m-focus, #4169e1))}.app-card--card .app-card__icon-wrap{width:3.75rem;height:3.75rem;border-radius:1.125rem;background:var(--app-accent, var(--m-frame, #e0e7ff));opacity:.9}.app-card--card .app-card__icon-wrap:before{content:\"\";position:absolute;inset:0;background:var(--app-accent);opacity:.15}.app-card--card .app-card__body{flex:1;display:flex;flex-direction:column;gap:.5rem}.app-card--card .app-card__name{font-size:1.125rem;font-weight:800}.app-card--card .app-card__company{font-size:.8125rem;color:var(--m-text-secondary, #64748b);font-weight:600}.app-card--card .app-card__desc{font-size:.875rem;color:var(--m-text-secondary, #64748b);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:.25rem 0}.app-card--card .app-card__footer{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.app-card--card .app-card__version-badge{font-size:.6875rem;font-weight:700;background:var(--m-background-lite, rgba(0, 0, 0, .05));padding:.125rem .5rem;border-radius:9999px;color:var(--m-text-secondary, #64748b)}.app-card--card .app-card__updated{font-size:.6875rem;color:var(--m-text-tertiary, #94a3b8)}.app-card__badge{position:absolute;top:.75rem;right:.75rem;min-width:1.375rem;height:1.375rem;padding:0 .375rem;background:var(--m-error, #f43f5e);color:#fff;border-radius:9999px;font-size:.625rem;font-weight:800;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #f43f5e66;z-index:2}.app-card__icon-wrap{flex-shrink:0;overflow:hidden;background:var(--m-frame, #f1f5f9);display:flex;align-items:center;justify-content:center}.app-card__icon-wrap img,.app-card__icon-wrap m-img{width:60%;height:60%;object-fit:contain}.app-card__body{min-width:0}.app-card__actions{margin-left:auto;display:flex;align-items:center}.app-card--card .app-card__actions{position:absolute;bottom:1.25rem;right:1.25rem}\n"]
38294
+ 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)}}.app-card{position:relative;display:flex;border-radius:1.25rem;background:var(--m-backdrop-card, rgba(255, 255, 255, .25));-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--m-border, rgba(255, 255, 255, .4));padding:1rem;gap:1rem;cursor:pointer;transition:all .3s cubic-bezier(.16,1,.3,1);outline:none;overflow:hidden}.app-card:hover{transform:translateY(-4px);box-shadow:0 12px 24px -8px var(--m-backdrop-shadow, rgba(0, 0, 0, .1));border-color:var(--m-focus, rgba(65, 105, 225, .4))}.app-card--small{padding:.75rem;gap:.75rem;align-items:center}.app-card--small .app-card__icon-wrap{width:2.5rem;height:2.5rem;border-radius:.75rem}.app-card--small .app-card__name{font-size:.875rem;font-weight:700}.app-card--tile{flex-direction:column;align-items:center;justify-content:center;padding:.875rem;gap:.5rem}.app-card--tile .app-card__icon-wrap{width:3.5rem;height:3.5rem;border-radius:1rem}.app-card--tile .app-card__body{align-items:center;text-align:center}.app-card--tile .app-card__main-info{align-items:center}.app-card--tile .app-card__name{font-size:.8125rem;font-weight:600;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.app-card--row{align-items:center}.app-card--row .app-card__icon-wrap{width:3.25rem;height:3.25rem;border-radius:.875rem}.app-card--row .app-card__main-info{display:flex;flex-direction:column;gap:.125rem}.app-card--row .app-card__name{font-size:.9375rem;font-weight:700}.app-card--row .app-card__version{font-size:.75rem;color:var(--m-text-secondary, #64748b)}.app-card--card{flex-direction:column;padding:1.25rem;min-height:12rem}.app-card--card .app-card__accent{position:absolute;top:0;left:0;right:0;height:4px;background:var(--app-accent, var(--m-focus, #4169e1))}.app-card--card .app-card__icon-wrap{width:3.75rem;height:3.75rem;border-radius:1.125rem;background:var(--app-accent, var(--m-frame, #e0e7ff));opacity:.9}.app-card--card .app-card__icon-wrap:before{content:\"\";position:absolute;inset:0;background:var(--app-accent);opacity:.15}.app-card--card .app-card__body{flex:1;display:flex;flex-direction:column;gap:.5rem}.app-card--card .app-card__name{font-size:1.125rem;font-weight:800}.app-card--card .app-card__desc{font-size:.875rem;color:var(--m-text-secondary, #64748b);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:.25rem 0}.app-card--card .app-card__footer{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.app-card--card .app-card__version-badge{font-size:.6875rem;font-weight:700;background:var(--m-background-lite, rgba(0, 0, 0, .05));padding:.125rem .5rem;border-radius:9999px;color:var(--m-text-secondary, #64748b)}.app-card--card .app-card__updated{font-size:.6875rem;color:var(--m-text-tertiary, #94a3b8)}.app-card__badge{position:absolute;top:.75rem;right:.75rem;min-width:1.375rem;height:1.375rem;padding:0 .375rem;background:var(--m-error, #f43f5e);color:#fff;border-radius:9999px;font-size:.625rem;font-weight:800;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #f43f5e66;z-index:2}.app-card__icon-wrap{flex-shrink:0;overflow:hidden;background:var(--m-frame, #f1f5f9);display:flex;align-items:center;justify-content:center}.app-card__icon-wrap img,.app-card__icon-wrap m-img{width:60%;height:60%;object-fit:contain}.app-card__body{min-width:0}.app-card__actions{margin-left:auto;display:flex;align-items:center}.app-card--card .app-card__actions{position:absolute;bottom:1.25rem;right:1.25rem}\n"]
38071
38295
  }]
38072
38296
  }],
38073
38297
  propDecorators: {
@@ -38121,6 +38345,241 @@ i0.ɵɵngDeclareClassMetadata({
38121
38345
  }]
38122
38346
  }
38123
38347
  });
38348
+ const ERROR_KEYS = {
38349
+ logo_invalid: "logo-glyph-invalid",
38350
+ logo_too_large: "logo-glyph-too-large"
38351
+ };
38352
+ var LogoGlyphInputComponent = class LogoGlyphInputComponent {
38353
+ glyph = model(null, ...ngDevMode ? [{ debugName: "glyph" }] : /* istanbul ignore next */ []);
38354
+ appColor = model(null, ...ngDevMode ? [{ debugName: "appColor" }] : /* istanbul ignore next */ []);
38355
+ name = input(...ngDevMode ? [void 0, { debugName: "name" }] : /* istanbul ignore next */ []);
38356
+ suggestedColors = input([], ...ngDevMode ? [{ debugName: "suggestedColors" }] : /* istanbul ignore next */ []);
38357
+ disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
38358
+ markup = signal("", ...ngDevMode ? [{ debugName: "markup" }] : /* istanbul ignore next */ []);
38359
+ error = signal("", ...ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []);
38360
+ errorKey = computed(() => {
38361
+ const error = this.error();
38362
+ return error ? ERROR_KEYS[error] : void 0;
38363
+ }, ...ngDevMode ? [{ debugName: "errorKey" }] : /* istanbul ignore next */ []);
38364
+ lightColor = computed(() => {
38365
+ const color = this.appColor();
38366
+ return !!color && isLightAppColor(color);
38367
+ }, ...ngDevMode ? [{ debugName: "lightColor" }] : /* istanbul ignore next */ []);
38368
+ suggestions = computed(() => this.suggestedColors().map((color) => normalizeAppColor(color)).filter((color) => !!color), ...ngDevMode ? [{ debugName: "suggestions" }] : /* istanbul ignore next */ []);
38369
+ formData = computed(() => ({
38370
+ logo_glyph_paste: this.markup(),
38371
+ app_color: this.appColor() ?? ""
38372
+ }), ...ngDevMode ? [{ debugName: "formData" }] : /* istanbul ignore next */ []);
38373
+ lastUpload;
38374
+ take = (markup) => {
38375
+ this.markup.set(markup);
38376
+ if (!markup.trim()) {
38377
+ this.error.set("");
38378
+ return;
38379
+ }
38380
+ const { svg, error } = rebuildLogoGlyph(markup);
38381
+ this.error.set(error);
38382
+ if (svg) this.glyph.set(svg);
38383
+ };
38384
+ onForm = (data) => {
38385
+ const upload = data["logo_glyph_upload"];
38386
+ if (upload !== this.lastUpload) {
38387
+ this.lastUpload = upload;
38388
+ if (typeof upload === "string") this.take(upload);
38389
+ }
38390
+ const paste = data["logo_glyph_paste"];
38391
+ if (typeof paste === "string" && paste !== this.markup()) this.take(paste);
38392
+ const color = normalizeAppColor(String(data["app_color"] ?? ""));
38393
+ if (color && color !== this.appColor()) this.appColor.set(color);
38394
+ };
38395
+ pickSuggestion = (color) => {
38396
+ if (!this.disabled()) this.appColor.set(color);
38397
+ };
38398
+ static ɵfac = i0.ɵɵngDeclareFactory({
38399
+ minVersion: "12.0.0",
38400
+ version: "22.2.1",
38401
+ ngImport: i0,
38402
+ type: LogoGlyphInputComponent,
38403
+ deps: [],
38404
+ target: i0.ɵɵFactoryTarget.Component
38405
+ });
38406
+ static ɵcmp = i0.ɵɵngDeclareComponent({
38407
+ minVersion: "17.0.0",
38408
+ version: "22.2.1",
38409
+ type: LogoGlyphInputComponent,
38410
+ isStandalone: true,
38411
+ selector: "m-logo-glyph-input",
38412
+ inputs: {
38413
+ glyph: {
38414
+ classPropertyName: "glyph",
38415
+ publicName: "glyph",
38416
+ isSignal: true,
38417
+ isRequired: false,
38418
+ transformFunction: null
38419
+ },
38420
+ appColor: {
38421
+ classPropertyName: "appColor",
38422
+ publicName: "appColor",
38423
+ isSignal: true,
38424
+ isRequired: false,
38425
+ transformFunction: null
38426
+ },
38427
+ name: {
38428
+ classPropertyName: "name",
38429
+ publicName: "name",
38430
+ isSignal: true,
38431
+ isRequired: false,
38432
+ transformFunction: null
38433
+ },
38434
+ suggestedColors: {
38435
+ classPropertyName: "suggestedColors",
38436
+ publicName: "suggestedColors",
38437
+ isSignal: true,
38438
+ isRequired: false,
38439
+ transformFunction: null
38440
+ },
38441
+ disabled: {
38442
+ classPropertyName: "disabled",
38443
+ publicName: "disabled",
38444
+ isSignal: true,
38445
+ isRequired: false,
38446
+ transformFunction: null
38447
+ }
38448
+ },
38449
+ outputs: {
38450
+ glyph: "glyphChange",
38451
+ appColor: "appColorChange"
38452
+ },
38453
+ host: { classAttribute: "m-logo-glyph-input" },
38454
+ ngImport: i0,
38455
+ template: "<div class=\"m-logo-glyph-input__preview\">\n <div class=\"m-logo-glyph-input__logo m-logo-glyph-input__logo--large\">\n <m-app-logo [glyph]=\"glyph()\" [appColor]=\"appColor()\" [name]=\"name()\" />\n </div>\n <div class=\"m-logo-glyph-input__logo m-logo-glyph-input__logo--small\">\n <m-app-logo [glyph]=\"glyph()\" [appColor]=\"appColor()\" [name]=\"name()\" />\n </div>\n</div>\n\n<div class=\"m-logo-glyph-input__fields\">\n <ng-content select=\"[logoAi]\" />\n\n <!-- asset: forms/logo_glyph_input.yml -->\n <m-form\n name=\"logo_glyph_input\"\n [one]=\"true\"\n [data]=\"formData()\"\n [readonly]=\"disabled()\"\n [autofocus]=\"false\"\n (dataChange)=\"onForm($event)\"\n />\n @if (errorKey(); as key) {\n <m-text-output variant=\"footer\" color=\"error\" [label]=\"key\" />\n }\n @if (lightColor()) {\n <m-text-output variant=\"footer\" color=\"warning\" label=\"app-color-light\" />\n }\n\n @if (suggestions().length) {\n <m-text-output variant=\"footer\" label=\"app-color-suggestions\" />\n <div class=\"m-logo-glyph-input__swatches\">\n @for (color of suggestions(); track color) {\n <div\n class=\"m-logo-glyph-input__swatch\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"color\"\n [attr.aria-pressed]=\"color === appColor()\"\n [class.m-logo-glyph-input__swatch--picked]=\"color === appColor()\"\n (click)=\"pickSuggestion(color)\"\n (keydown.enter)=\"pickSuggestion(color)\"\n (keydown.space)=\"pickSuggestion(color); $event.preventDefault()\"\n >\n <m-app-logo [glyph]=\"glyph()\" [appColor]=\"color\" [name]=\"name()\" />\n </div>\n }\n </div>\n }\n</div>\n",
38456
+ 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:flex;flex-wrap:wrap;gap:1.5rem;align-items:flex-start}.m-logo-glyph-input__preview{display:flex;align-items:flex-end;gap:1rem}.m-logo-glyph-input__logo--large{width:6rem;height:6rem}.m-logo-glyph-input__logo--small{width:2rem;height:2rem}.m-logo-glyph-input__fields{display:flex;flex-direction:column;gap:.75rem;flex:1 1 18rem;min-width:0}.m-logo-glyph-input__swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(2.5rem,1fr));gap:.5rem}.m-logo-glyph-input__swatch{aspect-ratio:1;border-radius:25%;padding:2px;cursor:pointer;outline:2px solid transparent;transition:outline-color .15s ease}.m-logo-glyph-input__swatch:focus-visible,.m-logo-glyph-input__swatch:hover{outline-color:var(--m-text-quaternary)}.m-logo-glyph-input__swatch--picked{outline-color:var(--m-mm)}\n"],
38457
+ dependencies: [
38458
+ {
38459
+ kind: "component",
38460
+ type: AppLogoComponent,
38461
+ selector: "m-app-logo",
38462
+ inputs: [
38463
+ "glyph",
38464
+ "appColor",
38465
+ "name"
38466
+ ]
38467
+ },
38468
+ {
38469
+ kind: "component",
38470
+ type: FormGroupComponent,
38471
+ selector: "m-form, m-one-form",
38472
+ inputs: [
38473
+ "data",
38474
+ "state",
38475
+ "validation",
38476
+ "options",
38477
+ "fieldConfigs",
38478
+ "aclResolver",
38479
+ "autofocus",
38480
+ "readonly",
38481
+ "fieldRenderIds",
38482
+ "elements",
38483
+ "templates",
38484
+ "datas",
38485
+ "label",
38486
+ "subtitle"
38487
+ ],
38488
+ outputs: [
38489
+ "dataChange",
38490
+ "act",
38491
+ "stateChange"
38492
+ ]
38493
+ },
38494
+ {
38495
+ kind: "component",
38496
+ type: TextOutputComponent,
38497
+ selector: "m-text-output",
38498
+ inputs: [
38499
+ "config",
38500
+ "align",
38501
+ "variant",
38502
+ "color",
38503
+ "fontWeight",
38504
+ "label",
38505
+ "noTranslate",
38506
+ "params"
38507
+ ],
38508
+ outputs: ["configChange", "clicked"]
38509
+ }
38510
+ ],
38511
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
38512
+ });
38513
+ };
38514
+ i0.ɵɵngDeclareClassMetadata({
38515
+ minVersion: "12.0.0",
38516
+ version: "22.2.1",
38517
+ ngImport: i0,
38518
+ type: LogoGlyphInputComponent,
38519
+ decorators: [{
38520
+ type: Component,
38521
+ args: [{
38522
+ selector: "m-logo-glyph-input",
38523
+ imports: [
38524
+ AppLogoComponent,
38525
+ FormGroupComponent,
38526
+ TextOutputComponent
38527
+ ],
38528
+ changeDetection: ChangeDetectionStrategy.OnPush,
38529
+ host: { class: "m-logo-glyph-input" },
38530
+ template: "<div class=\"m-logo-glyph-input__preview\">\n <div class=\"m-logo-glyph-input__logo m-logo-glyph-input__logo--large\">\n <m-app-logo [glyph]=\"glyph()\" [appColor]=\"appColor()\" [name]=\"name()\" />\n </div>\n <div class=\"m-logo-glyph-input__logo m-logo-glyph-input__logo--small\">\n <m-app-logo [glyph]=\"glyph()\" [appColor]=\"appColor()\" [name]=\"name()\" />\n </div>\n</div>\n\n<div class=\"m-logo-glyph-input__fields\">\n <ng-content select=\"[logoAi]\" />\n\n <!-- asset: forms/logo_glyph_input.yml -->\n <m-form\n name=\"logo_glyph_input\"\n [one]=\"true\"\n [data]=\"formData()\"\n [readonly]=\"disabled()\"\n [autofocus]=\"false\"\n (dataChange)=\"onForm($event)\"\n />\n @if (errorKey(); as key) {\n <m-text-output variant=\"footer\" color=\"error\" [label]=\"key\" />\n }\n @if (lightColor()) {\n <m-text-output variant=\"footer\" color=\"warning\" label=\"app-color-light\" />\n }\n\n @if (suggestions().length) {\n <m-text-output variant=\"footer\" label=\"app-color-suggestions\" />\n <div class=\"m-logo-glyph-input__swatches\">\n @for (color of suggestions(); track color) {\n <div\n class=\"m-logo-glyph-input__swatch\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"color\"\n [attr.aria-pressed]=\"color === appColor()\"\n [class.m-logo-glyph-input__swatch--picked]=\"color === appColor()\"\n (click)=\"pickSuggestion(color)\"\n (keydown.enter)=\"pickSuggestion(color)\"\n (keydown.space)=\"pickSuggestion(color); $event.preventDefault()\"\n >\n <m-app-logo [glyph]=\"glyph()\" [appColor]=\"color\" [name]=\"name()\" />\n </div>\n }\n </div>\n }\n</div>\n",
38531
+ 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:flex;flex-wrap:wrap;gap:1.5rem;align-items:flex-start}.m-logo-glyph-input__preview{display:flex;align-items:flex-end;gap:1rem}.m-logo-glyph-input__logo--large{width:6rem;height:6rem}.m-logo-glyph-input__logo--small{width:2rem;height:2rem}.m-logo-glyph-input__fields{display:flex;flex-direction:column;gap:.75rem;flex:1 1 18rem;min-width:0}.m-logo-glyph-input__swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(2.5rem,1fr));gap:.5rem}.m-logo-glyph-input__swatch{aspect-ratio:1;border-radius:25%;padding:2px;cursor:pointer;outline:2px solid transparent;transition:outline-color .15s ease}.m-logo-glyph-input__swatch:focus-visible,.m-logo-glyph-input__swatch:hover{outline-color:var(--m-text-quaternary)}.m-logo-glyph-input__swatch--picked{outline-color:var(--m-mm)}\n"]
38532
+ }]
38533
+ }],
38534
+ propDecorators: {
38535
+ glyph: [{
38536
+ type: i0.Input,
38537
+ args: [{
38538
+ isSignal: true,
38539
+ alias: "glyph",
38540
+ required: false
38541
+ }]
38542
+ }, {
38543
+ type: i0.Output,
38544
+ args: ["glyphChange"]
38545
+ }],
38546
+ appColor: [{
38547
+ type: i0.Input,
38548
+ args: [{
38549
+ isSignal: true,
38550
+ alias: "appColor",
38551
+ required: false
38552
+ }]
38553
+ }, {
38554
+ type: i0.Output,
38555
+ args: ["appColorChange"]
38556
+ }],
38557
+ name: [{
38558
+ type: i0.Input,
38559
+ args: [{
38560
+ isSignal: true,
38561
+ alias: "name",
38562
+ required: false
38563
+ }]
38564
+ }],
38565
+ suggestedColors: [{
38566
+ type: i0.Input,
38567
+ args: [{
38568
+ isSignal: true,
38569
+ alias: "suggestedColors",
38570
+ required: false
38571
+ }]
38572
+ }],
38573
+ disabled: [{
38574
+ type: i0.Input,
38575
+ args: [{
38576
+ isSignal: true,
38577
+ alias: "disabled",
38578
+ required: false
38579
+ }]
38580
+ }]
38581
+ }
38582
+ });
38124
38583
  var PlaygroundComponent = class PlaygroundComponent {
38125
38584
  config = input(...ngDevMode ? [void 0, { debugName: "config" }] : /* istanbul ignore next */ []);
38126
38585
  copied = signal(false, ...ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []);
@@ -38977,7 +39436,8 @@ var ModalComponent = class ModalComponent extends ConfigComponent {
38977
39436
  "size",
38978
39437
  "one",
38979
39438
  "baseUrl",
38980
- "remote"
39439
+ "remote",
39440
+ "shadow"
38981
39441
  ],
38982
39442
  outputs: ["configChange"]
38983
39443
  },
@@ -40285,7 +40745,8 @@ var NavTrailComponent = class NavTrailComponent {
40285
40745
  "size",
40286
40746
  "one",
40287
40747
  "baseUrl",
40288
- "remote"
40748
+ "remote",
40749
+ "shadow"
40289
40750
  ],
40290
40751
  outputs: ["configChange"]
40291
40752
  },
@@ -40620,7 +41081,7 @@ var NavHeaderComponent = class NavHeaderComponent {
40620
41081
  return trail && trail.length > 0 ? trail : null;
40621
41082
  }, ...ngDevMode ? [{ debugName: "_trail" }] : /* istanbul ignore next */ []);
40622
41083
  _user = computed(() => this._isUser() ? this.#authStore.user() ?? null : null, ...ngDevMode ? [{ debugName: "_user" }] : /* istanbul ignore next */ []);
40623
- _header = computed(() => this._isUser() ? null : this._navStore.breadcrumb().header, ...ngDevMode ? [{ debugName: "_header" }] : /* istanbul ignore next */ []);
41084
+ _header = computed(() => this._isSearch() || this._isUser() ? null : this._navStore.breadcrumb().header, ...ngDevMode ? [{ debugName: "_header" }] : /* istanbul ignore next */ []);
40624
41085
  constructor() {
40625
41086
  effect(() => {
40626
41087
  if (!this._isSearch()) this._searchOpen.set(false);
@@ -40640,9 +41101,16 @@ var NavHeaderComponent = class NavHeaderComponent {
40640
41101
  type: NavHeaderComponent,
40641
41102
  isStandalone: true,
40642
41103
  selector: "m-nav-header",
41104
+ host: {
41105
+ properties: {
41106
+ "style.display": "\"block\"",
41107
+ "style.--m-section-min-height": "\"0\""
41108
+ },
41109
+ classAttribute: "m-nav-header"
41110
+ },
40643
41111
  ngImport: i0,
40644
- 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 {\n @if (_trail(); as trail) {\n <m-section-back [back]=\"_hasParent()\" (navigate)=\"_navStore.back()\">\n <m-nav-trail [config]=\"trail\" />\n @if (_isSearch()) {\n <!-- The bar's toggle, drawn in the nav's own row rather than in a row\n stacked on top of it. -->\n <m-button\n class=\"nav-header__search-toggle\"\n [config]=\"_searchToggle\"\n (clicked)=\"_openSearch()\"\n />\n }\n </m-section-back>\n } @else if (_isSearch()) {\n <!-- No trail to sit beside — a search opened at root — so the toggle takes\n the header row on its own. -->\n <m-section-back>\n <m-button\n class=\"nav-header__search-toggle\"\n [config]=\"_searchToggle\"\n (clicked)=\"_openSearch()\"\n />\n </m-section-back>\n }\n\n @if (!_isSearch()) {\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 <m-section-header class=\"nav-header__title\" [icon]=\"h.icon\" [label]=\"h.label\" />\n }\n }\n }\n }\n</m-section>\n",
40645
- 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;--m-section-min-height: 0}.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)}\n"],
41112
+ 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 <m-section-header class=\"nav-header__title\" [icon]=\"h.icon\" [label]=\"h.label\" />\n }\n }\n</m-section>\n",
41113
+ 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)}\n"],
40646
41114
  dependencies: [
40647
41115
  {
40648
41116
  kind: "component",
@@ -40826,8 +41294,13 @@ i0.ɵɵngDeclareClassMetadata({
40826
41294
  ],
40827
41295
  encapsulation: ViewEncapsulation.None,
40828
41296
  changeDetection: ChangeDetectionStrategy.OnPush,
40829
- 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 {\n @if (_trail(); as trail) {\n <m-section-back [back]=\"_hasParent()\" (navigate)=\"_navStore.back()\">\n <m-nav-trail [config]=\"trail\" />\n @if (_isSearch()) {\n <!-- The bar's toggle, drawn in the nav's own row rather than in a row\n stacked on top of it. -->\n <m-button\n class=\"nav-header__search-toggle\"\n [config]=\"_searchToggle\"\n (clicked)=\"_openSearch()\"\n />\n }\n </m-section-back>\n } @else if (_isSearch()) {\n <!-- No trail to sit beside — a search opened at root — so the toggle takes\n the header row on its own. -->\n <m-section-back>\n <m-button\n class=\"nav-header__search-toggle\"\n [config]=\"_searchToggle\"\n (clicked)=\"_openSearch()\"\n />\n </m-section-back>\n }\n\n @if (!_isSearch()) {\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 <m-section-header class=\"nav-header__title\" [icon]=\"h.icon\" [label]=\"h.label\" />\n }\n }\n }\n }\n</m-section>\n",
40830
- 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;--m-section-min-height: 0}.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)}\n"]
41297
+ host: {
41298
+ class: "m-nav-header",
41299
+ "[style.display]": "\"block\"",
41300
+ "[style.--m-section-min-height]": "\"0\""
41301
+ },
41302
+ 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 <m-section-header class=\"nav-header__title\" [icon]=\"h.icon\" [label]=\"h.label\" />\n }\n }\n</m-section>\n",
41303
+ 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)}\n"]
40831
41304
  }]
40832
41305
  }],
40833
41306
  ctorParameters: () => []
@@ -40996,7 +41469,8 @@ var NavMenuComponent = class NavMenuComponent {
40996
41469
  "size",
40997
41470
  "one",
40998
41471
  "baseUrl",
40999
- "remote"
41472
+ "remote",
41473
+ "shadow"
41000
41474
  ],
41001
41475
  outputs: ["configChange"]
41002
41476
  },
@@ -41459,7 +41933,8 @@ var NavDetailsComponent = class NavDetailsComponent {
41459
41933
  "size",
41460
41934
  "one",
41461
41935
  "baseUrl",
41462
- "remote"
41936
+ "remote",
41937
+ "shadow"
41463
41938
  ],
41464
41939
  outputs: ["configChange"]
41465
41940
  },
@@ -41612,24 +42087,31 @@ var NavComponent = class NavComponent {
41612
42087
  logo = computed(() => {
41613
42088
  if (this.logoPending()) return void 0;
41614
42089
  const config = this.isHost() ? void 0 : this.currentWcConfig();
41615
- if (config?.logo) return {
41616
- src: config.logo,
41617
- alt: config.name || config.app,
41618
- app: config.app
41619
- };
42090
+ if (config?.app) {
42091
+ const identity = this.#navStore.currentIdentity();
42092
+ return {
42093
+ app: config.app,
42094
+ alt: identity?.name ?? config.app,
42095
+ glyph: identity?.logoGlyph ?? null,
42096
+ color: identity?.appColor ?? null,
42097
+ src: void 0
42098
+ };
42099
+ }
41620
42100
  const root = this.#navStore.navMap()[ROOT_NAV];
41621
42101
  return root?.logo ? {
41622
- src: root.logo,
42102
+ app: void 0,
41623
42103
  alt: root.title ?? "logo",
41624
- app: void 0
42104
+ glyph: null,
42105
+ color: null,
42106
+ src: root.logo
41625
42107
  } : void 0;
41626
42108
  }, ...ngDevMode ? [{ debugName: "logo" }] : /* istanbul ignore next */ []);
41627
42109
  appRail = computed(() => {
41628
42110
  if (!this.isHost()) return [];
41629
42111
  const configs = this.#navStore.wcConfigMap();
42112
+ const identities = this.#navStore.identityMap();
41630
42113
  const panelNavId = this.isNavOpened() ? this.#navStore.id() : void 0;
41631
42114
  const isActive = (appNavId) => !!panelNavId && (panelNavId === appNavId || panelNavId.startsWith(`${appNavId}_`));
41632
- const hostLogo = this.#navStore.navMap()[ROOT_NAV]?.logo;
41633
42115
  const appLink = this.appLink();
41634
42116
  const appNavId = this.#navStore.appNavId();
41635
42117
  const main = appLink && appNavId && !this.activeAppOpen() ? [{
@@ -41648,9 +42130,9 @@ var NavComponent = class NavComponent {
41648
42130
  key,
41649
42131
  appNavId,
41650
42132
  pending: !config,
41651
- src: config?.logo ?? hostLogo,
41652
- remote: config?.logo ? config.link || link : void 0,
41653
- alt: config?.name || config?.app || link,
42133
+ glyph: identities[link]?.logoGlyph ?? null,
42134
+ color: identities[link]?.appColor ?? null,
42135
+ alt: identities[link]?.name ?? link,
41654
42136
  active: isActive(appNavId)
41655
42137
  }));
41656
42138
  }, ...ngDevMode ? [{ debugName: "appRail" }] : /* istanbul ignore next */ []);
@@ -41836,7 +42318,7 @@ var NavComponent = class NavComponent {
41836
42318
  outputs: { menuClicked: "menuClicked" },
41837
42319
  host: { classAttribute: "m-nav" },
41838
42320
  ngImport: i0,
41839
- template: "<div class=\"nav\" [class.is-open]=\"isNavOpened()\" [class.is-scrolled-down]=\"isScrolledDown()\">\n <div class=\"nav__header\">\n @if (showLogo()) {\n @if (logo(); as logo) {\n <!-- AppLogo: menu open → home with panel still showing root; closed → home page. -->\n <button\n type=\"button\"\n class=\"nav_logo nav_logo--app\"\n [attr.data-app]=\"logo.app\"\n [attr.aria-label]=\"logo.alt\"\n [class.nav_logo--pop]=\"logoPop()\"\n [class.nav_logo--active]=\"logoActive()\"\n (click)=\"onLogoClick()\"\n (animationend)=\"logoPop.set(false)\"\n >\n <m-img class=\"nav_logo_img\" [src]=\"logo.src\" [alt]=\"logo.alt\" />\n </button>\n } @else if (logoPending()) {\n <div class=\"nav_logo nav_logo--loading\">\n <div class=\"nav_logo-skeleton\"></div>\n </div>\n }\n }\n <div class=\"nav_actions\">\n <m-one-button-group\n class=\"nav_main_group\"\n name=\"nav_main_button_group\"\n [buttons]=\"computedMainButtons()\"\n [vertical]=\"isVertical()\"\n />\n </div>\n @for (app of appRail(); track app.key) {\n <!-- App Rail: the Main Slot's App, then each Side App — opens the panel on its menu. -->\n @if (app.pending) {\n <div class=\"nav_logo nav_logo--loading nav_logo--rail\">\n <div class=\"nav_logo-skeleton\"></div>\n </div>\n } @else {\n <button\n type=\"button\"\n class=\"nav_logo nav_logo--app nav_logo--rail\"\n [attr.data-app]=\"app.key\"\n [attr.aria-label]=\"app.alt\"\n [class.nav_logo--active]=\"app.active\"\n (click)=\"onAppLogoClick(app.appNavId)\"\n >\n <m-img class=\"nav_logo_img\" [src]=\"app.src\" [remote]=\"app.remote\" [alt]=\"app.alt\" />\n </button>\n }\n }\n </div>\n\n <div class=\"nav__body\">\n <m-one-button (clicked)=\"toggleMenu()\" [config]=\"menuButtonConfig()\" />\n </div>\n\n <div class=\"nav__footer\">\n <m-one-button-group name=\"nav_footer_button_group\" [buttons]=\"computedFooterButtons()\" [vertical]=\"isVertical()\" />\n </div>\n</div>\n\n<div\n class=\"nav__backdrop\"\n [class.show]=\"isNavOpened()\"\n (click)=\"toggleMenu()\"\n (keydown.enter)=\"toggleMenu()\"\n tabindex=\"0\"\n></div>\n<m-nav-details />\n",
42321
+ template: "<div class=\"nav\" [class.is-open]=\"isNavOpened()\" [class.is-scrolled-down]=\"isScrolledDown()\">\n <div class=\"nav__header\">\n @if (showLogo()) {\n @if (logo(); as logo) {\n <!-- AppLogo: menu open → home with panel still showing root; closed → home page. -->\n <button\n type=\"button\"\n class=\"nav_logo nav_logo--app\"\n [attr.data-app]=\"logo.app\"\n [attr.aria-label]=\"logo.alt\"\n [class.nav_logo--pop]=\"logoPop()\"\n [class.nav_logo--active]=\"logoActive()\"\n (click)=\"onLogoClick()\"\n (animationend)=\"logoPop.set(false)\"\n >\n @if (logo.src) {\n <m-img class=\"nav_logo_img\" [src]=\"logo.src\" [alt]=\"logo.alt\" />\n } @else {\n <m-app-logo class=\"nav_logo_img\" [glyph]=\"logo.glyph\" [appColor]=\"logo.color\" [name]=\"logo.alt\" />\n }\n </button>\n } @else if (logoPending()) {\n <div class=\"nav_logo nav_logo--loading\">\n <div class=\"nav_logo-skeleton\"></div>\n </div>\n }\n }\n <div class=\"nav_actions\">\n <m-one-button-group\n class=\"nav_main_group\"\n name=\"nav_main_button_group\"\n [buttons]=\"computedMainButtons()\"\n [vertical]=\"isVertical()\"\n />\n </div>\n @for (app of appRail(); track app.key) {\n <!-- App Rail: the Main Slot's App, then each Side App — opens the panel on its menu. -->\n @if (app.pending) {\n <div class=\"nav_logo nav_logo--loading nav_logo--rail\">\n <div class=\"nav_logo-skeleton\"></div>\n </div>\n } @else {\n <button\n type=\"button\"\n class=\"nav_logo nav_logo--app nav_logo--rail\"\n [attr.data-app]=\"app.key\"\n [attr.aria-label]=\"app.alt\"\n [class.nav_logo--active]=\"app.active\"\n (click)=\"onAppLogoClick(app.appNavId)\"\n >\n <m-app-logo class=\"nav_logo_img\" [glyph]=\"app.glyph\" [appColor]=\"app.color\" [name]=\"app.alt\" />\n </button>\n }\n }\n </div>\n\n <div class=\"nav__body\">\n <m-one-button (clicked)=\"toggleMenu()\" [config]=\"menuButtonConfig()\" />\n </div>\n\n <div class=\"nav__footer\">\n <m-one-button-group name=\"nav_footer_button_group\" [buttons]=\"computedFooterButtons()\" [vertical]=\"isVertical()\" />\n </div>\n</div>\n\n<div\n class=\"nav__backdrop\"\n [class.show]=\"isNavOpened()\"\n (click)=\"toggleMenu()\"\n (keydown.enter)=\"toggleMenu()\"\n tabindex=\"0\"\n></div>\n<m-nav-details />\n",
41840
42322
  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-nav .nav{position:fixed;top:0;left:0;backdrop-filter:blur(16px) brightness(1.1) saturate(1.8) contrast(1.1);-webkit-backdrop-filter:blur(16px) brightness(1.1) saturate(1.8) contrast(1.1);background-color:var(--m-backdrop-glass);border:1px solid var(--m-backdrop-border);border:none;border-right:1px solid color-mix(in srgb,var(--m-border) 55%,transparent);width:64px;height:100%;transition:.4s cubic-bezier(.165,.84,.44,1) .15s ease-in-out;z-index:100;display:flex;flex-direction:column}.m-nav .nav button:not(.primary):not(:has(.nav-lang-label)):hover{background:#ffffff14;transform:scale(1.05);box-shadow:none}.m-nav .nav button:not(.primary):not(:has(.nav-lang-label)):active{transform:scale(.95);box-shadow:none}.m-nav .nav m-one-button:has(.nav-lang-label){--m-button-background: transparent;--m-button-hover-background: transparent;--m-button-border: none;--m-button-shadow: none;--m-button-padding: 0;--m-button-width: 2rem;--m-button-hover-transform: none}.m-nav .nav .button-group{display:flex;flex-direction:column;align-items:center;gap:1.75rem}.m-nav .nav_logo{display:flex;align-items:center;justify-content:center;padding:0;height:64px;width:64px;box-sizing:border-box;position:relative;margin:0 auto}.m-nav .nav_logo:after{content:\"\";position:absolute;bottom:0;left:10%;width:80%;height:2px;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--m-mm) 25%,transparent) 0%,color-mix(in srgb,var(--m-success) 15%,transparent) 40%,transparent 100%);filter:blur(.5px);pointer-events:none;z-index:11}.m-nav .nav_logo.nav_logo--rail:after{content:none}.m-nav .nav_logo.nav_logo--app{border:0;background:transparent!important;font:inherit;color:inherit;cursor:pointer;pointer-events:auto;-webkit-tap-highlight-color:transparent}.m-nav .nav_logo.nav_logo--app:hover{transform:none!important}.m-nav .nav_logo.nav_logo--app .nav_logo_img{display:block;width:32px;height:32px;margin:0 auto;position:relative;z-index:1;border-radius:9px;overflow:hidden;transition:transform .35s cubic-bezier(.34,1.56,.64,1)}.m-nav .nav_logo.nav_logo--app .nav_logo_img img{width:100%;height:100%;object-fit:cover}.m-nav .nav_logo.nav_logo--app:hover .nav_logo_img{transform:scale(1.06)}.m-nav .nav_logo.nav_logo--app:active .nav_logo_img{transform:scale(.88);transition-duration:.1s}.m-nav .nav_logo.nav_logo--app.nav_logo--pop .nav_logo_img{animation:nav-logo-pop .4s cubic-bezier(.34,1.56,.64,1)}.m-nav .nav_logo.nav_logo--app:before{content:\"\";position:absolute;top:50%;left:50%;width:44px;height:44px;border-radius:14px;border:1px solid transparent;transform:translate(-50%,-50%) scale(.85);opacity:0;pointer-events:none;transition:opacity .2s ease,transform .25s cubic-bezier(.34,1.56,.64,1)}.m-nav .nav_logo.nav_logo--app.nav_logo--active:before{opacity:1;transform:translate(-50%,-50%) scale(1);border-color:color-mix(in srgb,var(--m-primary-color) 45%,transparent);background:color-mix(in srgb,var(--m-primary-color) 8%,transparent)}.m-nav .nav_logo.nav_logo--loading{cursor:default!important;pointer-events:none!important}.m-nav .nav_logo.nav_logo--loading .nav_logo-skeleton{width:28px;height:28px;margin:0 auto;border-radius:8px;background:#ffffff14;animation:nav-logo-skeleton-pulse 1.5s infinite ease-in-out}.m-nav .nav_logo svg{width:1.75rem;height:auto;display:block;margin:0 auto;filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--m-mm) 40%,transparent));transition:filter .3s ease-out}.m-nav .nav_logo svg:hover{filter:drop-shadow(0 8px 16px color-mix(in srgb,var(--m-mm) 60%,transparent))}.m-nav .nav_actions{width:100%;flex-direction:column;display:flex;align-items:center;justify-content:center;gap:1.75rem;margin-top:.5rem}.m-nav .nav_actions .nav_main_group{display:flex;flex-direction:column;align-items:center;width:100%}.m-nav .nav_user{width:100%;display:flex;align-items:center;justify-content:center;position:relative;z-index:12}.m-nav .nav__header,.m-nav .nav__footer{width:100%;position:relative;align-items:center;justify-content:center;display:flex;flex-direction:column}.m-nav .nav__body{width:100%;position:relative;flex:1;display:grid;place-items:center}@media(max-width:767px){.m-nav .nav{top:auto!important;bottom:0!important;left:0;right:0;position:fixed;width:100%;height:48px;box-sizing:content-box;display:flex;flex-direction:row;align-items:stretch;border-right:none;border-top:1px solid color-mix(in srgb,var(--m-border) 55%,transparent);padding-bottom:env(safe-area-inset-bottom);will-change:transform,opacity;transition:transform .4s cubic-bezier(.4,0,.2,1),opacity .4s ease;-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);background:color-mix(in srgb,var(--m-background) 70%,transparent)}.m-nav .nav.is-scrolled-down{transform:translateY(calc(100% + env(safe-area-inset-bottom)));opacity:0;pointer-events:none}.m-nav .nav .nav__footer{display:none}.m-nav .nav .nav__header{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:space-between;height:100%}.m-nav .nav .nav__header .nav_logo{flex:0 0 64px;display:flex;align-items:center;justify-content:center;height:100%;cursor:pointer}.m-nav .nav .nav__header .nav_logo.nav_logo--loading{cursor:default!important;pointer-events:none!important}.m-nav .nav .nav__header .nav_logo svg{width:1.5rem}.m-nav .nav .nav__header .nav_actions{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.75rem;height:100%}.m-nav .nav .nav__header .nav_actions .nav_main_group{display:flex;align-items:center}.m-nav .nav .nav__header .nav_actions .nav_main_group .button-group{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:center;gap:.75rem}.m-nav .nav .nav__body{flex:0 0 48px;display:flex;justify-content:flex-end;align-items:center;padding-right:.25rem;height:100%}}@media(min-width:768px)and (max-width:1199px){.m-nav .nav{top:auto!important;bottom:0!important;left:0;right:0;position:fixed;width:100%;height:56px;box-sizing:content-box;display:flex;flex-direction:row;align-items:stretch;border-right:none;border-top:1px solid color-mix(in srgb,var(--m-border) 55%,transparent);padding-bottom:env(safe-area-inset-bottom);will-change:transform,opacity;transition:transform .4s cubic-bezier(.4,0,.2,1),opacity .4s ease;-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);background:color-mix(in srgb,var(--m-background) 70%,transparent)}.m-nav .nav.is-scrolled-down{transform:translateY(calc(100% + env(safe-area-inset-bottom)));opacity:0;pointer-events:none}.m-nav .nav .nav__footer{display:none}.m-nav .nav .nav__header{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:space-between;height:100%}.m-nav .nav .nav__header .nav_logo{flex:0 0 72px;display:flex;align-items:center;justify-content:center;height:100%;cursor:pointer}.m-nav .nav .nav__header .nav_logo.nav_logo--loading{cursor:default!important;pointer-events:none!important}.m-nav .nav .nav__header .nav_logo svg{width:1.75rem}.m-nav .nav .nav__header .nav_actions{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:1.25rem;height:100%}.m-nav .nav .nav__header .nav_actions .nav_main_group{display:flex;align-items:center}.m-nav .nav .nav__header .nav_actions .nav_main_group .button-group{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:center;gap:1.25rem}.m-nav .nav .nav__body{flex:0 0 56px;display:flex;justify-content:flex-end;align-items:center;padding-right:.5rem;height:100%}}@keyframes breathe{0%,to{box-shadow:0 2px 8px #00000014,0 0 0 0 transparent}50%{box-shadow:0 6px 16px color-mix(in srgb,var(--m-mm) 20%,transparent),0 0 10px 2px color-mix(in srgb,var(--m-mm) 25%,transparent)}}.m-nav .nav__backdrop{position:fixed;inset:0;z-index:80;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.16,1,.3,1);cursor:pointer}.m-nav .nav__backdrop.show{opacity:1;pointer-events:all}.m-nav .nav-lang-label{font-size:.7rem;font-weight:800;text-transform:uppercase;color:var(--m-text-secondary);opacity:.8;line-height:1;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:2em;background:#00000008;transition:all .2s ease}.m-nav button:has(.nav-lang-label):hover .nav-lang-label{background:#0000000f;opacity:1;color:var(--m-primary-color)}.m-nav button.primary:has(.nav-lang-label) .nav-lang-label{background:var(--m-btn-color-opposite, #e1b941);opacity:1}@keyframes nav-logo-skeleton-pulse{0%{opacity:.5}50%{opacity:.8}to{opacity:.5}}@keyframes nav-logo-pop{0%{transform:scale(1)}35%{transform:scale(.85)}70%{transform:scale(1.06)}to{transform:scale(1)}}\n"],
41841
42323
  dependencies: [
41842
42324
  {
@@ -41908,6 +42390,16 @@ var NavComponent = class NavComponent {
41908
42390
  "ngSrcset",
41909
42391
  "sizes"
41910
42392
  ]
42393
+ },
42394
+ {
42395
+ kind: "component",
42396
+ type: AppLogoComponent,
42397
+ selector: "m-app-logo",
42398
+ inputs: [
42399
+ "glyph",
42400
+ "appColor",
42401
+ "name"
42402
+ ]
41911
42403
  }
41912
42404
  ],
41913
42405
  changeDetection: i0.ChangeDetectionStrategy.OnPush,
@@ -41927,12 +42419,13 @@ i0.ɵɵngDeclareClassMetadata({
41927
42419
  ButtonGroupComponent,
41928
42420
  ButtonComponent,
41929
42421
  NavDetailsComponent,
41930
- ImgComponent
42422
+ ImgComponent,
42423
+ AppLogoComponent
41931
42424
  ],
41932
42425
  encapsulation: ViewEncapsulation.None,
41933
42426
  changeDetection: ChangeDetectionStrategy.OnPush,
41934
42427
  host: { class: "m-nav" },
41935
- template: "<div class=\"nav\" [class.is-open]=\"isNavOpened()\" [class.is-scrolled-down]=\"isScrolledDown()\">\n <div class=\"nav__header\">\n @if (showLogo()) {\n @if (logo(); as logo) {\n <!-- AppLogo: menu open → home with panel still showing root; closed → home page. -->\n <button\n type=\"button\"\n class=\"nav_logo nav_logo--app\"\n [attr.data-app]=\"logo.app\"\n [attr.aria-label]=\"logo.alt\"\n [class.nav_logo--pop]=\"logoPop()\"\n [class.nav_logo--active]=\"logoActive()\"\n (click)=\"onLogoClick()\"\n (animationend)=\"logoPop.set(false)\"\n >\n <m-img class=\"nav_logo_img\" [src]=\"logo.src\" [alt]=\"logo.alt\" />\n </button>\n } @else if (logoPending()) {\n <div class=\"nav_logo nav_logo--loading\">\n <div class=\"nav_logo-skeleton\"></div>\n </div>\n }\n }\n <div class=\"nav_actions\">\n <m-one-button-group\n class=\"nav_main_group\"\n name=\"nav_main_button_group\"\n [buttons]=\"computedMainButtons()\"\n [vertical]=\"isVertical()\"\n />\n </div>\n @for (app of appRail(); track app.key) {\n <!-- App Rail: the Main Slot's App, then each Side App — opens the panel on its menu. -->\n @if (app.pending) {\n <div class=\"nav_logo nav_logo--loading nav_logo--rail\">\n <div class=\"nav_logo-skeleton\"></div>\n </div>\n } @else {\n <button\n type=\"button\"\n class=\"nav_logo nav_logo--app nav_logo--rail\"\n [attr.data-app]=\"app.key\"\n [attr.aria-label]=\"app.alt\"\n [class.nav_logo--active]=\"app.active\"\n (click)=\"onAppLogoClick(app.appNavId)\"\n >\n <m-img class=\"nav_logo_img\" [src]=\"app.src\" [remote]=\"app.remote\" [alt]=\"app.alt\" />\n </button>\n }\n }\n </div>\n\n <div class=\"nav__body\">\n <m-one-button (clicked)=\"toggleMenu()\" [config]=\"menuButtonConfig()\" />\n </div>\n\n <div class=\"nav__footer\">\n <m-one-button-group name=\"nav_footer_button_group\" [buttons]=\"computedFooterButtons()\" [vertical]=\"isVertical()\" />\n </div>\n</div>\n\n<div\n class=\"nav__backdrop\"\n [class.show]=\"isNavOpened()\"\n (click)=\"toggleMenu()\"\n (keydown.enter)=\"toggleMenu()\"\n tabindex=\"0\"\n></div>\n<m-nav-details />\n",
42428
+ template: "<div class=\"nav\" [class.is-open]=\"isNavOpened()\" [class.is-scrolled-down]=\"isScrolledDown()\">\n <div class=\"nav__header\">\n @if (showLogo()) {\n @if (logo(); as logo) {\n <!-- AppLogo: menu open → home with panel still showing root; closed → home page. -->\n <button\n type=\"button\"\n class=\"nav_logo nav_logo--app\"\n [attr.data-app]=\"logo.app\"\n [attr.aria-label]=\"logo.alt\"\n [class.nav_logo--pop]=\"logoPop()\"\n [class.nav_logo--active]=\"logoActive()\"\n (click)=\"onLogoClick()\"\n (animationend)=\"logoPop.set(false)\"\n >\n @if (logo.src) {\n <m-img class=\"nav_logo_img\" [src]=\"logo.src\" [alt]=\"logo.alt\" />\n } @else {\n <m-app-logo class=\"nav_logo_img\" [glyph]=\"logo.glyph\" [appColor]=\"logo.color\" [name]=\"logo.alt\" />\n }\n </button>\n } @else if (logoPending()) {\n <div class=\"nav_logo nav_logo--loading\">\n <div class=\"nav_logo-skeleton\"></div>\n </div>\n }\n }\n <div class=\"nav_actions\">\n <m-one-button-group\n class=\"nav_main_group\"\n name=\"nav_main_button_group\"\n [buttons]=\"computedMainButtons()\"\n [vertical]=\"isVertical()\"\n />\n </div>\n @for (app of appRail(); track app.key) {\n <!-- App Rail: the Main Slot's App, then each Side App — opens the panel on its menu. -->\n @if (app.pending) {\n <div class=\"nav_logo nav_logo--loading nav_logo--rail\">\n <div class=\"nav_logo-skeleton\"></div>\n </div>\n } @else {\n <button\n type=\"button\"\n class=\"nav_logo nav_logo--app nav_logo--rail\"\n [attr.data-app]=\"app.key\"\n [attr.aria-label]=\"app.alt\"\n [class.nav_logo--active]=\"app.active\"\n (click)=\"onAppLogoClick(app.appNavId)\"\n >\n <m-app-logo class=\"nav_logo_img\" [glyph]=\"app.glyph\" [appColor]=\"app.color\" [name]=\"app.alt\" />\n </button>\n }\n }\n </div>\n\n <div class=\"nav__body\">\n <m-one-button (clicked)=\"toggleMenu()\" [config]=\"menuButtonConfig()\" />\n </div>\n\n <div class=\"nav__footer\">\n <m-one-button-group name=\"nav_footer_button_group\" [buttons]=\"computedFooterButtons()\" [vertical]=\"isVertical()\" />\n </div>\n</div>\n\n<div\n class=\"nav__backdrop\"\n [class.show]=\"isNavOpened()\"\n (click)=\"toggleMenu()\"\n (keydown.enter)=\"toggleMenu()\"\n tabindex=\"0\"\n></div>\n<m-nav-details />\n",
41936
42429
  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-nav .nav{position:fixed;top:0;left:0;backdrop-filter:blur(16px) brightness(1.1) saturate(1.8) contrast(1.1);-webkit-backdrop-filter:blur(16px) brightness(1.1) saturate(1.8) contrast(1.1);background-color:var(--m-backdrop-glass);border:1px solid var(--m-backdrop-border);border:none;border-right:1px solid color-mix(in srgb,var(--m-border) 55%,transparent);width:64px;height:100%;transition:.4s cubic-bezier(.165,.84,.44,1) .15s ease-in-out;z-index:100;display:flex;flex-direction:column}.m-nav .nav button:not(.primary):not(:has(.nav-lang-label)):hover{background:#ffffff14;transform:scale(1.05);box-shadow:none}.m-nav .nav button:not(.primary):not(:has(.nav-lang-label)):active{transform:scale(.95);box-shadow:none}.m-nav .nav m-one-button:has(.nav-lang-label){--m-button-background: transparent;--m-button-hover-background: transparent;--m-button-border: none;--m-button-shadow: none;--m-button-padding: 0;--m-button-width: 2rem;--m-button-hover-transform: none}.m-nav .nav .button-group{display:flex;flex-direction:column;align-items:center;gap:1.75rem}.m-nav .nav_logo{display:flex;align-items:center;justify-content:center;padding:0;height:64px;width:64px;box-sizing:border-box;position:relative;margin:0 auto}.m-nav .nav_logo:after{content:\"\";position:absolute;bottom:0;left:10%;width:80%;height:2px;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--m-mm) 25%,transparent) 0%,color-mix(in srgb,var(--m-success) 15%,transparent) 40%,transparent 100%);filter:blur(.5px);pointer-events:none;z-index:11}.m-nav .nav_logo.nav_logo--rail:after{content:none}.m-nav .nav_logo.nav_logo--app{border:0;background:transparent!important;font:inherit;color:inherit;cursor:pointer;pointer-events:auto;-webkit-tap-highlight-color:transparent}.m-nav .nav_logo.nav_logo--app:hover{transform:none!important}.m-nav .nav_logo.nav_logo--app .nav_logo_img{display:block;width:32px;height:32px;margin:0 auto;position:relative;z-index:1;border-radius:9px;overflow:hidden;transition:transform .35s cubic-bezier(.34,1.56,.64,1)}.m-nav .nav_logo.nav_logo--app .nav_logo_img img{width:100%;height:100%;object-fit:cover}.m-nav .nav_logo.nav_logo--app:hover .nav_logo_img{transform:scale(1.06)}.m-nav .nav_logo.nav_logo--app:active .nav_logo_img{transform:scale(.88);transition-duration:.1s}.m-nav .nav_logo.nav_logo--app.nav_logo--pop .nav_logo_img{animation:nav-logo-pop .4s cubic-bezier(.34,1.56,.64,1)}.m-nav .nav_logo.nav_logo--app:before{content:\"\";position:absolute;top:50%;left:50%;width:44px;height:44px;border-radius:14px;border:1px solid transparent;transform:translate(-50%,-50%) scale(.85);opacity:0;pointer-events:none;transition:opacity .2s ease,transform .25s cubic-bezier(.34,1.56,.64,1)}.m-nav .nav_logo.nav_logo--app.nav_logo--active:before{opacity:1;transform:translate(-50%,-50%) scale(1);border-color:color-mix(in srgb,var(--m-primary-color) 45%,transparent);background:color-mix(in srgb,var(--m-primary-color) 8%,transparent)}.m-nav .nav_logo.nav_logo--loading{cursor:default!important;pointer-events:none!important}.m-nav .nav_logo.nav_logo--loading .nav_logo-skeleton{width:28px;height:28px;margin:0 auto;border-radius:8px;background:#ffffff14;animation:nav-logo-skeleton-pulse 1.5s infinite ease-in-out}.m-nav .nav_logo svg{width:1.75rem;height:auto;display:block;margin:0 auto;filter:drop-shadow(0 4px 12px color-mix(in srgb,var(--m-mm) 40%,transparent));transition:filter .3s ease-out}.m-nav .nav_logo svg:hover{filter:drop-shadow(0 8px 16px color-mix(in srgb,var(--m-mm) 60%,transparent))}.m-nav .nav_actions{width:100%;flex-direction:column;display:flex;align-items:center;justify-content:center;gap:1.75rem;margin-top:.5rem}.m-nav .nav_actions .nav_main_group{display:flex;flex-direction:column;align-items:center;width:100%}.m-nav .nav_user{width:100%;display:flex;align-items:center;justify-content:center;position:relative;z-index:12}.m-nav .nav__header,.m-nav .nav__footer{width:100%;position:relative;align-items:center;justify-content:center;display:flex;flex-direction:column}.m-nav .nav__body{width:100%;position:relative;flex:1;display:grid;place-items:center}@media(max-width:767px){.m-nav .nav{top:auto!important;bottom:0!important;left:0;right:0;position:fixed;width:100%;height:48px;box-sizing:content-box;display:flex;flex-direction:row;align-items:stretch;border-right:none;border-top:1px solid color-mix(in srgb,var(--m-border) 55%,transparent);padding-bottom:env(safe-area-inset-bottom);will-change:transform,opacity;transition:transform .4s cubic-bezier(.4,0,.2,1),opacity .4s ease;-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);background:color-mix(in srgb,var(--m-background) 70%,transparent)}.m-nav .nav.is-scrolled-down{transform:translateY(calc(100% + env(safe-area-inset-bottom)));opacity:0;pointer-events:none}.m-nav .nav .nav__footer{display:none}.m-nav .nav .nav__header{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:space-between;height:100%}.m-nav .nav .nav__header .nav_logo{flex:0 0 64px;display:flex;align-items:center;justify-content:center;height:100%;cursor:pointer}.m-nav .nav .nav__header .nav_logo.nav_logo--loading{cursor:default!important;pointer-events:none!important}.m-nav .nav .nav__header .nav_logo svg{width:1.5rem}.m-nav .nav .nav__header .nav_actions{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.75rem;height:100%}.m-nav .nav .nav__header .nav_actions .nav_main_group{display:flex;align-items:center}.m-nav .nav .nav__header .nav_actions .nav_main_group .button-group{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:center;gap:.75rem}.m-nav .nav .nav__body{flex:0 0 48px;display:flex;justify-content:flex-end;align-items:center;padding-right:.25rem;height:100%}}@media(min-width:768px)and (max-width:1199px){.m-nav .nav{top:auto!important;bottom:0!important;left:0;right:0;position:fixed;width:100%;height:56px;box-sizing:content-box;display:flex;flex-direction:row;align-items:stretch;border-right:none;border-top:1px solid color-mix(in srgb,var(--m-border) 55%,transparent);padding-bottom:env(safe-area-inset-bottom);will-change:transform,opacity;transition:transform .4s cubic-bezier(.4,0,.2,1),opacity .4s ease;-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);background:color-mix(in srgb,var(--m-background) 70%,transparent)}.m-nav .nav.is-scrolled-down{transform:translateY(calc(100% + env(safe-area-inset-bottom)));opacity:0;pointer-events:none}.m-nav .nav .nav__footer{display:none}.m-nav .nav .nav__header{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:space-between;height:100%}.m-nav .nav .nav__header .nav_logo{flex:0 0 72px;display:flex;align-items:center;justify-content:center;height:100%;cursor:pointer}.m-nav .nav .nav__header .nav_logo.nav_logo--loading{cursor:default!important;pointer-events:none!important}.m-nav .nav .nav__header .nav_logo svg{width:1.75rem}.m-nav .nav .nav__header .nav_actions{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:1.25rem;height:100%}.m-nav .nav .nav__header .nav_actions .nav_main_group{display:flex;align-items:center}.m-nav .nav .nav__header .nav_actions .nav_main_group .button-group{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:center;gap:1.25rem}.m-nav .nav .nav__body{flex:0 0 56px;display:flex;justify-content:flex-end;align-items:center;padding-right:.5rem;height:100%}}@keyframes breathe{0%,to{box-shadow:0 2px 8px #00000014,0 0 0 0 transparent}50%{box-shadow:0 6px 16px color-mix(in srgb,var(--m-mm) 20%,transparent),0 0 10px 2px color-mix(in srgb,var(--m-mm) 25%,transparent)}}.m-nav .nav__backdrop{position:fixed;inset:0;z-index:80;opacity:0;pointer-events:none;transition:opacity .4s cubic-bezier(.16,1,.3,1);cursor:pointer}.m-nav .nav__backdrop.show{opacity:1;pointer-events:all}.m-nav .nav-lang-label{font-size:.7rem;font-weight:800;text-transform:uppercase;color:var(--m-text-secondary);opacity:.8;line-height:1;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:2em;background:#00000008;transition:all .2s ease}.m-nav button:has(.nav-lang-label):hover .nav-lang-label{background:#0000000f;opacity:1;color:var(--m-primary-color)}.m-nav button.primary:has(.nav-lang-label) .nav-lang-label{background:var(--m-btn-color-opposite, #e1b941);opacity:1}@keyframes nav-logo-skeleton-pulse{0%{opacity:.5}50%{opacity:.8}to{opacity:.5}}@keyframes nav-logo-pop{0%{transform:scale(1)}35%{transform:scale(.85)}70%{transform:scale(1.06)}to{transform:scale(1)}}\n"]
41937
42430
  }]
41938
42431
  }],
@@ -41970,7 +42463,6 @@ var FooterComponent = class FooterComponent {
41970
42463
  #navStore = inject(NavStore);
41971
42464
  currentYear = (/* @__PURE__ */ new Date()).getFullYear();
41972
42465
  activeApp = this.#navStore.currentWcConfig;
41973
- companyName = computed(() => this.activeApp()?.company ?? "Magmonium India Private Limited", ...ngDevMode ? [{ debugName: "companyName" }] : /* istanbul ignore next */ []);
41974
42466
  static ɵfac = i0.ɵɵngDeclareFactory({
41975
42467
  minVersion: "12.0.0",
41976
42468
  version: "22.2.1",
@@ -42028,7 +42520,8 @@ var FooterComponent = class FooterComponent {
42028
42520
  "size",
42029
42521
  "one",
42030
42522
  "baseUrl",
42031
- "remote"
42523
+ "remote",
42524
+ "shadow"
42032
42525
  ],
42033
42526
  outputs: ["configChange"]
42034
42527
  },
@@ -44231,7 +44724,8 @@ var ThemeCardContentComponent = class ThemeCardContentComponent {
44231
44724
  "size",
44232
44725
  "one",
44233
44726
  "baseUrl",
44234
- "remote"
44727
+ "remote",
44728
+ "shadow"
44235
44729
  ],
44236
44730
  outputs: ["configChange"]
44237
44731
  }, {
@@ -48014,7 +48508,8 @@ var SvgGeneratorComponent = class SvgGeneratorComponent {
48014
48508
  "size",
48015
48509
  "one",
48016
48510
  "baseUrl",
48017
- "remote"
48511
+ "remote",
48512
+ "shadow"
48018
48513
  ],
48019
48514
  outputs: ["configChange"]
48020
48515
  },
@@ -48279,7 +48774,8 @@ var SearchUserPanelComponent = class SearchUserPanelComponent {
48279
48774
  "size",
48280
48775
  "one",
48281
48776
  "baseUrl",
48282
- "remote"
48777
+ "remote",
48778
+ "shadow"
48283
48779
  ],
48284
48780
  outputs: ["configChange"]
48285
48781
  },
@@ -49202,7 +49698,6 @@ i0.ɵɵngDeclareClassMetadata({
49202
49698
  }]
49203
49699
  }
49204
49700
  });
49205
- const FALLBACK_ICON = "apps";
49206
49701
  var AppTileComponent = class AppTileComponent {
49207
49702
  app = input.required(...ngDevMode ? [{ debugName: "app" }] : /* istanbul ignore next */ []);
49208
49703
  notifications = input([], ...ngDevMode ? [{ debugName: "notifications" }] : /* istanbul ignore next */ []);
@@ -49210,13 +49705,7 @@ var AppTileComponent = class AppTileComponent {
49210
49705
  openApp = output();
49211
49706
  clearAll = output();
49212
49707
  expanded = signal(false, ...ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []);
49213
- fallback = FALLBACK_ICON;
49214
49708
  icon = computed(() => this.app()?.icon, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
49215
- remote = computed(() => this.app()?.remote, ...ngDevMode ? [{ debugName: "remote" }] : /* istanbul ignore next */ []);
49216
- isUrl = computed(() => {
49217
- const icon = this.icon();
49218
- return !!icon && (icon.startsWith("http") || icon.startsWith("/") || icon.includes("."));
49219
- }, ...ngDevMode ? [{ debugName: "isUrl" }] : /* istanbul ignore next */ []);
49220
49709
  notificationCount = computed(() => this.notifications().length, ...ngDevMode ? [{ debugName: "notificationCount" }] : /* istanbul ignore next */ []);
49221
49710
  expandOrNavigate = (_event) => {
49222
49711
  if (this.expanded()) {
@@ -49295,10 +49784,10 @@ var AppTileComponent = class AppTileComponent {
49295
49784
  @if (expanded()) {
49296
49785
  <div class="app-tile__header">
49297
49786
  <div class="app-tile__header-icon">
49298
- @if (isUrl()) {
49299
- <m-img [src]="icon()!" [remote]="remote()" [alt]="app.name" />
49787
+ @if (icon(); as name) {
49788
+ <m-icon [name]="name" color="mm" />
49300
49789
  } @else {
49301
- <m-icon [name]="icon() || fallback" color="mm" />
49790
+ <m-app-logo [glyph]="app.logoGlyph" [appColor]="app.appColor" [name]="app.name" />
49302
49791
  }
49303
49792
  </div>
49304
49793
  <span class="app-tile__header-name">{{ app.name }}</span>
@@ -49314,13 +49803,13 @@ var AppTileComponent = class AppTileComponent {
49314
49803
  </div>
49315
49804
  } @else {
49316
49805
  <div class="app-tile__icon-wrapper">
49317
- @if (isUrl()) {
49318
- <div class="app-tile__custom-icon">
49319
- <m-img [src]="icon()!" [remote]="remote()" [alt]="app.name" />
49806
+ @if (icon(); as name) {
49807
+ <div class="app-tile__icon">
49808
+ <m-icon [name]="name" />
49320
49809
  </div>
49321
49810
  } @else {
49322
- <div class="app-tile__icon">
49323
- <m-icon [name]="icon() || fallback" />
49811
+ <div class="app-tile__custom-icon">
49812
+ <m-app-logo [glyph]="app.logoGlyph" [appColor]="app.appColor" [name]="app.name" />
49324
49813
  </div>
49325
49814
  }
49326
49815
  @if (notificationCount() > 0) {
@@ -49337,20 +49826,12 @@ var AppTileComponent = class AppTileComponent {
49337
49826
  dependencies: [
49338
49827
  {
49339
49828
  kind: "component",
49340
- type: ImgComponent,
49341
- selector: "m-img",
49829
+ type: AppLogoComponent,
49830
+ selector: "m-app-logo",
49342
49831
  inputs: [
49343
- "src",
49344
- "data",
49345
- "dataType",
49346
- "alt",
49347
- "priority",
49348
- "fill",
49349
- "width",
49350
- "height",
49351
- "remote",
49352
- "ngSrcset",
49353
- "sizes"
49832
+ "glyph",
49833
+ "appColor",
49834
+ "name"
49354
49835
  ]
49355
49836
  },
49356
49837
  {
@@ -49364,7 +49845,8 @@ var AppTileComponent = class AppTileComponent {
49364
49845
  "size",
49365
49846
  "one",
49366
49847
  "baseUrl",
49367
- "remote"
49848
+ "remote",
49849
+ "shadow"
49368
49850
  ],
49369
49851
  outputs: ["configChange"]
49370
49852
  },
@@ -49410,7 +49892,7 @@ i0.ɵɵngDeclareClassMetadata({
49410
49892
  selector: "m-app-tile",
49411
49893
  changeDetection: ChangeDetectionStrategy.OnPush,
49412
49894
  imports: [
49413
- ImgComponent,
49895
+ AppLogoComponent,
49414
49896
  IconComponent,
49415
49897
  BadgeComponent,
49416
49898
  ButtonGroupComponent,
@@ -49432,10 +49914,10 @@ i0.ɵɵngDeclareClassMetadata({
49432
49914
  @if (expanded()) {
49433
49915
  <div class="app-tile__header">
49434
49916
  <div class="app-tile__header-icon">
49435
- @if (isUrl()) {
49436
- <m-img [src]="icon()!" [remote]="remote()" [alt]="app.name" />
49917
+ @if (icon(); as name) {
49918
+ <m-icon [name]="name" color="mm" />
49437
49919
  } @else {
49438
- <m-icon [name]="icon() || fallback" color="mm" />
49920
+ <m-app-logo [glyph]="app.logoGlyph" [appColor]="app.appColor" [name]="app.name" />
49439
49921
  }
49440
49922
  </div>
49441
49923
  <span class="app-tile__header-name">{{ app.name }}</span>
@@ -49451,13 +49933,13 @@ i0.ɵɵngDeclareClassMetadata({
49451
49933
  </div>
49452
49934
  } @else {
49453
49935
  <div class="app-tile__icon-wrapper">
49454
- @if (isUrl()) {
49455
- <div class="app-tile__custom-icon">
49456
- <m-img [src]="icon()!" [remote]="remote()" [alt]="app.name" />
49936
+ @if (icon(); as name) {
49937
+ <div class="app-tile__icon">
49938
+ <m-icon [name]="name" />
49457
49939
  </div>
49458
49940
  } @else {
49459
- <div class="app-tile__icon">
49460
- <m-icon [name]="icon() || fallback" />
49941
+ <div class="app-tile__custom-icon">
49942
+ <m-app-logo [glyph]="app.logoGlyph" [appColor]="app.appColor" [name]="app.name" />
49461
49943
  </div>
49462
49944
  }
49463
49945
  @if (notificationCount() > 0) {
@@ -49718,7 +50200,8 @@ var AudiencePickerBoxComponent = class AudiencePickerBoxComponent {
49718
50200
  "size",
49719
50201
  "one",
49720
50202
  "baseUrl",
49721
- "remote"
50203
+ "remote",
50204
+ "shadow"
49722
50205
  ],
49723
50206
  outputs: ["configChange"]
49724
50207
  },
@@ -50103,6 +50586,6 @@ i0.ɵɵngDeclareClassMetadata({
50103
50586
  }]
50104
50587
  }
50105
50588
  });
50106
- export { ACCESS_DOMAINS, APP_CONTEXT_REF, APP_LINK, ASSET_BASE_URL, AUDIENCE_ICONS, AUDIENCE_LEVELS, AccordionBodyDirective, AccordionComponent, AccordionGroupComponent, ActionComponent, AnimatedGraphsComponent, AppAvailability, AppCardComponent, 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, LanguageComponent, ListComponent, LogoComponent, 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, 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, isLoadingComputed, isLocalhost, isNavInstanceConfig, isNavMenuConfig, isNavRowsConfig, isNavVisibilityConfig, isPlatformNavId, isPlatformPanelNavId, isSize, isTierPreview, isUrlLocalhost, isValidNavId, isValidNavSegment, isWebComponent, linkToId, linkToNav, loadingActions, 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, normalizeAssetOptions, offsetOfLine, outletPathOf, outletSegmentsOf, 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, 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 };
50589
+ export { ACCESS_DOMAINS, APP_CONTEXT_REF, APP_LINK, APP_LOGO_ICON, APP_LOGO_SOURCE, 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, appLogoShadowColor, 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, 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 };
50107
50590
 
50108
50591
  //# sourceMappingURL=magmonium-one.mjs.map