@magmonium/one 0.4.50 → 0.4.51

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.
@@ -14,8 +14,8 @@ import { t as InputType } from "./magmonium-one-input-DqHPorA1.mjs";
14
14
  import { r as PLACED_CHECKBOX, t as CheckboxInputComponent } from "./magmonium-one-checkbox-CS83TVYG.mjs";
15
15
  import { a as ToolTipDirective, c as DragListItemDirective, d as MarginDirective, f as PaddingDirective, i as PositionDirective, l as DragListDirective, n as stringToColor, o as FileUploadDirective, p as SPACING_INWARD, r as HighlightDirective, s as AutosizeDirective, t as MHeroColorDirective, u as DraggableDirective } from "./magmonium-one-directives-O1JyFBc3.mjs";
16
16
  import { t as HeaderComponent } from "./magmonium-one-header-7MmiF2rG.mjs";
17
- import { i as mergeUniqueWith, n as mergeUnique, r as mergeUniqueBy, t as ButtonGroupComponent } from "./magmonium-one-group-CYIO2BE-.mjs";
18
- import { n as ContextMenuBoxComponent, r as MenuComponent, t as ContextMenuComponent } from "./magmonium-one-menu-Dstqv7P7.mjs";
17
+ import { i as mergeUniqueWith, n as mergeUnique, r as mergeUniqueBy, t as ButtonGroupComponent } from "./magmonium-one-group-BBaepb2P.mjs";
18
+ import { n as ContextMenuBoxComponent, r as MenuComponent, t as ContextMenuComponent } from "./magmonium-one-menu-B8H0Grmb.mjs";
19
19
  import { t as BaseInputComponent } from "./magmonium-one-base-input-CsVND89n.mjs";
20
20
  import { i as getScrollParent, n as activeElementWithin, r as classListSignal, t as BaseTextInputComponent } from "./magmonium-one-base-text-CWf7J75v.mjs";
21
21
  import { t as TextOutputComponent } from "./magmonium-one-text-output-Cg2dT_U_.mjs";
@@ -24,7 +24,7 @@ import { t as RadioInputComponent } from "./magmonium-one-radio-dZL0E4k_.mjs";
24
24
  import { t as TextInputComponent } from "./magmonium-one-text-BPThK6-y.mjs";
25
25
  import { r as BaseArrayInputComponent, t as MultiRangeInputComponent } from "./magmonium-one-multi-range-OzTdXSHR.mjs";
26
26
  import { t as RangeInputComponent } from "./magmonium-one-range-DLu5PhUN.mjs";
27
- import { n as DROPDOWN_IMPORTS, r as DROPDOWN_TEMPLATE, t as BaseDropdownComponent } from "./magmonium-one-base-dropdown-Dxo8Yd62.mjs";
27
+ import { n as DROPDOWN_IMPORTS, r as DROPDOWN_TEMPLATE, t as BaseDropdownComponent } from "./magmonium-one-base-dropdown-0qlJVp_y.mjs";
28
28
  import { o as isEditableImage, s as outputSize } from "./magmonium-one-image-frame-BTSaUSAi.mjs";
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";
@@ -13782,6 +13782,9 @@ function isNavRowsConfig(entry) {
13782
13782
  function isNavInstanceConfig(entry) {
13783
13783
  return typeof entry === "object" && "navInstance" in entry;
13784
13784
  }
13785
+ function isNavCountConfig(entry) {
13786
+ return typeof entry === "object" && "navCount" in entry;
13787
+ }
13785
13788
  function isNavVisibilityConfig(entry) {
13786
13789
  return typeof entry === "object" && "navVisible" in entry;
13787
13790
  }
@@ -14049,7 +14052,7 @@ const mergeTrail = (derived, override, derivedHeader) => {
14049
14052
  };
14050
14053
  };
14051
14054
  function deriveBreadcrumb(params) {
14052
- const { navId, navMap, anchor, breadcrumb, navMenu, hasOwnContent, dynamicRows, routeParams, instances, hidden = EMPTY_HIDDEN, transparent = EMPTY_HIDDEN } = params;
14055
+ const { navId, navMap, anchor, breadcrumb, navMenu, hasOwnContent, dynamicRows, routeParams, instances, hidden = EMPTY_HIDDEN, transparent = EMPTY_HIDDEN, counts } = params;
14053
14056
  if (!navId) return emptyResult();
14054
14057
  const instanceOf = (id) => {
14055
14058
  const nav = navMap[id];
@@ -14088,12 +14091,20 @@ function deriveBreadcrumb(params) {
14088
14091
  trail: derivedTrail,
14089
14092
  header: derivedHeader
14090
14093
  };
14094
+ const withCount = (entry) => {
14095
+ const badge = counts?.[entry.nav ?? entry.id];
14096
+ return badge ? {
14097
+ ...entry,
14098
+ badge
14099
+ } : entry;
14100
+ };
14101
+ const menus = navMenu?.length && ownPanel ? navMenu : buildNavMenus(ownerId, navMap, anchor, dynamicRows, routeParams, instances, hidden, transparent);
14091
14102
  return {
14092
14103
  breadcrumb: {
14093
- trail,
14094
- header
14104
+ trail: (trail ?? []).map(withCount),
14105
+ header: withCount(header)
14095
14106
  },
14096
- navMenus: navMenu?.length && ownPanel ? navMenu : buildNavMenus(ownerId, navMap, anchor, dynamicRows, routeParams, instances, hidden, transparent)
14107
+ navMenus: menus.map(withCount)
14097
14108
  };
14098
14109
  }
14099
14110
  const withOpenOutlets = (router, address) => {
@@ -14228,7 +14239,6 @@ const initialState$3 = {
14228
14239
  menuNavId: void 0,
14229
14240
  menuParams: void 0,
14230
14241
  browsedApp: void 0,
14231
- keepPanelOnPathChange: false,
14232
14242
  panelPushed: false,
14233
14243
  navScrolledDown: false,
14234
14244
  visibilityAnswers: {},
@@ -14382,6 +14392,11 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14382
14392
  const hasMurl = computed(() => store.murl().length > 0, ...ngDevMode ? [{ debugName: "hasMurl" }] : /* istanbul ignore next */ []);
14383
14393
  const isNavOpened = computed(() => hasMurl() || store.navOpenedByUser(), ...ngDevMode ? [{ debugName: "isNavOpened" }] : /* istanbul ignore next */ []);
14384
14394
  const isMNavOpened = hasMurl;
14395
+ const isSideMenuOpen = computed(() => {
14396
+ if (!isNavOpened()) return false;
14397
+ const navId = id();
14398
+ return menuMounts().some(({ urlMode, link, appNavId }) => urlMode === "outlet" && !!link && (navId === appNavId || navId.startsWith(`${appNavId}_`)));
14399
+ }, ...ngDevMode ? [{ debugName: "isSideMenuOpen" }] : /* istanbul ignore next */ []);
14385
14400
  const entryAt = (candidate) => {
14386
14401
  const maps = navWidgetMaps ?? [];
14387
14402
  const navId = candidate;
@@ -14439,6 +14454,16 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14439
14454
  }
14440
14455
  return out;
14441
14456
  }, ...ngDevMode ? [{ debugName: "dynamicInstances" }] : /* istanbul ignore next */ []);
14457
+ const navCounts = computed(() => {
14458
+ const out = {};
14459
+ for (const nav of Object.values(store.navMap())) {
14460
+ const hit = entryAt(nav.navId);
14461
+ if (!hit || !isNavCountConfig(hit.entry)) continue;
14462
+ const badge = hit.entry.navCount();
14463
+ if (badge) out[nav.navId] = badge;
14464
+ }
14465
+ return out;
14466
+ }, ...ngDevMode ? [{ debugName: "navCounts" }] : /* istanbul ignore next */ []);
14442
14467
  const visibilityReads = computed(() => {
14443
14468
  const params = panelParams();
14444
14469
  const out = [];
@@ -14642,6 +14667,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14642
14667
  hidden: hiddenNavIds(),
14643
14668
  transparent: transparentNavIds(),
14644
14669
  routeParams: panelParams(),
14670
+ counts: navCounts(),
14645
14671
  breadcrumb: menuConfig?.breadcramb?.() ?? (typeof widgetConfig?.breadcramb === "function" ? widgetConfig.breadcramb() : widgetConfig?.breadcramb),
14646
14672
  navMenu: emittedMenu,
14647
14673
  hasOwnContent: !!widgetConfig || !!emittedMenu?.length
@@ -14683,6 +14709,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14683
14709
  hasMurl,
14684
14710
  isNavOpened,
14685
14711
  isMNavOpened,
14712
+ isSideMenuOpen,
14686
14713
  resolvedWidget,
14687
14714
  searchAnswer,
14688
14715
  searchLabel,
@@ -14718,23 +14745,32 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14718
14745
  const translateService = inject(TranslateService);
14719
14746
  const router = store.router;
14720
14747
  const mountOf = (navId) => mountFor(navId, untracked(() => store.allMounts()));
14748
+ const slotOfMount = (mount) => slotOf(mount.name, mount.appNavId, untracked(() => store.path()), untracked(() => store.outlets()), untracked(() => store.navMap()));
14721
14749
  const addressFor = (navId, params) => renderAddress(navId, store.navMap(), {
14722
14750
  navId: store.routeNavId() ?? "root",
14723
14751
  path: store.path()
14724
14752
  }, params);
14725
14753
  const goToNav = (navId, params, options) => {
14726
14754
  const willOpen = untracked(() => splitNavId(navId, store.navMap()).murl.length > 0);
14727
- if (options?.keepPanel && !willOpen) patchState(store, {
14728
- navOpenedByUser: true,
14729
- keepPanelOnPathChange: true
14730
- });
14755
+ const keepPanel = !!options?.keepPanel || untracked(() => store.isNavOpened());
14756
+ if (keepPanel && !willOpen) patchState(store, { navOpenedByUser: true });
14731
14757
  const mount = mountOf(navId);
14732
14758
  if (mount?.navigate) {
14733
- if (!options?.keepPanel) patchState(store, {
14734
- navOpenedByUser: false,
14735
- menuNavId: void 0,
14736
- browsedApp: void 0
14737
- });
14759
+ if (!options?.keepPanel) {
14760
+ const slot = keepPanel && slotOfMount(mount);
14761
+ patchState(store, slot === "side" ? {
14762
+ menuNavId: navId,
14763
+ menuParams: params,
14764
+ browsedApp: {
14765
+ name: mount.name,
14766
+ appNavId: mount.appNavId,
14767
+ slot
14768
+ }
14769
+ } : {
14770
+ menuNavId: void 0,
14771
+ browsedApp: void 0
14772
+ });
14773
+ }
14738
14774
  const map = untracked(() => store.navMap());
14739
14775
  const own = navIdToRoutePath(mount.appNavId, map);
14740
14776
  const full = fillRoutePath(navId, map, params);
@@ -14814,6 +14850,9 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14814
14850
  menuNavId: void 0,
14815
14851
  browsedApp: void 0
14816
14852
  });
14853
+ dropMurl();
14854
+ };
14855
+ const dropMurl = () => {
14817
14856
  if (!untracked(() => store.hasMurl())) return;
14818
14857
  if (untracked(() => store.panelPushed())) {
14819
14858
  patchState(store, { panelPushed: false });
@@ -14843,10 +14882,9 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14843
14882
  const outlets = outletsOf(router.url);
14844
14883
  untracked(() => {
14845
14884
  const pathChanged = path !== store.path();
14846
- const keepPanel = store.keepPanelOnPathChange();
14847
14885
  const browsed = store.browsedApp();
14848
14886
  const slot = browsed && slotOf(browsed.name, browsed.appNavId, path, outlets, store.navMap());
14849
- const moved = !!browsed && !!slot && slot !== browsed.slot;
14887
+ const kept = !!browsed && !!slot && (slot !== browsed.slot || slot === "side");
14850
14888
  patchState(store, {
14851
14889
  path,
14852
14890
  outlets,
@@ -14856,13 +14894,11 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14856
14894
  }),
14857
14895
  routeChain,
14858
14896
  murl,
14859
- menuNavId: moved ? store.menuNavId() : void 0,
14860
- browsedApp: moved && browsed && slot ? {
14897
+ menuNavId: kept ? store.menuNavId() : void 0,
14898
+ browsedApp: kept && browsed && slot ? {
14861
14899
  ...browsed,
14862
14900
  slot
14863
14901
  } : void 0,
14864
- navOpenedByUser: pathChanged && !keepPanel && !moved ? false : store.navOpenedByUser(),
14865
- keepPanelOnPathChange: false,
14866
14902
  navScrolledDown: pathChanged ? false : store.navScrolledDown(),
14867
14903
  panelPushed: murl.length ? store.panelPushed() : false
14868
14904
  });
@@ -14872,11 +14908,20 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14872
14908
  const setSelected = (navId, params, options) => {
14873
14909
  if (!navId) return closePanel();
14874
14910
  if (!standsOn(navId, params)) return goToNav(navId, params, options);
14875
- if (!options?.keepPanel) return closePanel();
14911
+ if (options?.keepPanel) {
14912
+ patchState(store, {
14913
+ navOpenedByUser: true,
14914
+ menuNavId: void 0
14915
+ });
14916
+ return;
14917
+ }
14918
+ if (!untracked(() => store.isNavOpened())) return;
14876
14919
  patchState(store, {
14877
14920
  navOpenedByUser: true,
14878
- menuNavId: void 0
14921
+ menuNavId: void 0,
14922
+ browsedApp: void 0
14879
14923
  });
14924
+ dropMurl();
14880
14925
  };
14881
14926
  const toggleMenu = () => {
14882
14927
  if (untracked(() => store.isNavOpened())) {
@@ -14894,7 +14939,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14894
14939
  [appLink]: config
14895
14940
  } }));
14896
14941
  };
14897
- 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)))))));
14942
+ const loadWcConfig = rxMethod(pipe(filter((appLink) => !!appLink), filter((appLink) => !untracked(() => !!store.wcConfigMap()[appLink])), mergeMap((appLink) => getNavService.loadWcConfig(appLink).pipe(tap((config) => untracked(() => setWcConfig(appLink, config)))))));
14898
14943
  const setIdentity = (identity) => {
14899
14944
  patchState(store, (state) => ({ identityMap: {
14900
14945
  ...state.identityMap,
@@ -14946,6 +14991,12 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14946
14991
  settleRoute();
14947
14992
  };
14948
14993
  const setMountRoute = (name, route) => {
14994
+ const keyOf = (r) => r && visibilityKey(r.navId, r.params);
14995
+ const browsed = untracked(() => store.browsedApp());
14996
+ if (browsed?.name === name && browsed.slot === "side" && keyOf(route) !== keyOf(untracked(() => store.mountRoutes())[name])) patchState(store, {
14997
+ menuNavId: route ? toHostNavId(route.navId, browsed.appNavId) : browsed.appNavId,
14998
+ menuParams: route?.params
14999
+ });
14949
15000
  patchState(store, (state) => ({ mountRoutes: route ? {
14950
15001
  ...state.mountRoutes,
14951
15002
  [name]: route
@@ -14976,7 +15027,7 @@ const NavStore = signalStore({ providedIn: "root" }, withState(initialState$3),
14976
15027
  };
14977
15028
  const browseApp = (appNavId) => {
14978
15029
  const mount = mountOf(appNavId);
14979
- const slot = mount && slotOf(mount.name, mount.appNavId, untracked(() => store.path()), untracked(() => store.outlets()), untracked(() => store.navMap()));
15030
+ const slot = mount && slotOfMount(mount);
14980
15031
  patchState(store, {
14981
15032
  navOpenedByUser: true,
14982
15033
  menuNavId: appNavId,
@@ -16677,6 +16728,7 @@ var SectionHeaderComponent = class SectionHeaderComponent {
16677
16728
  extraData = input(...ngDevMode ? [void 0, { debugName: "extraData" }] : /* istanbul ignore next */ []);
16678
16729
  align = input(void 0, ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
16679
16730
  alignment = computed(() => this.align() ?? "left", ...ngDevMode ? [{ debugName: "alignment" }] : /* istanbul ignore next */ []);
16731
+ badge = input(...ngDevMode ? [void 0, { debugName: "badge" }] : /* istanbul ignore next */ []);
16680
16732
  showBack = input(false, ...ngDevMode ? [{ debugName: "showBack" }] : /* istanbul ignore next */ []);
16681
16733
  actionButton = input(...ngDevMode ? [void 0, { debugName: "actionButton" }] : /* istanbul ignore next */ []);
16682
16734
  actionLabel = input(...ngDevMode ? [void 0, { debugName: "actionLabel" }] : /* istanbul ignore next */ []);
@@ -16707,6 +16759,11 @@ var SectionHeaderComponent = class SectionHeaderComponent {
16707
16759
  variant: "ghost"
16708
16760
  };
16709
16761
  }, ...ngDevMode ? [{ debugName: "actionConfig" }] : /* istanbul ignore next */ []);
16762
+ badgeConfig = computed(() => {
16763
+ if (!this.badge()?.count) return void 0;
16764
+ return { variant: this.badge()?.variant ?? "danger" };
16765
+ }, ...ngDevMode ? [{ debugName: "badgeConfig" }] : /* istanbul ignore next */ []);
16766
+ badgeText = computed(() => formatBadgeCount(this.badge()?.count), ...ngDevMode ? [{ debugName: "badgeText" }] : /* istanbul ignore next */ []);
16710
16767
  accordion = computed(() => this.sectionContext?.accordion?.() ?? null, ...ngDevMode ? [{ debugName: "accordion" }] : /* istanbul ignore next */ []);
16711
16768
  toggleIconName = computed(() => {
16712
16769
  const accordion = this.accordion();
@@ -16839,6 +16896,13 @@ var SectionHeaderComponent = class SectionHeaderComponent {
16839
16896
  isRequired: false,
16840
16897
  transformFunction: null
16841
16898
  },
16899
+ badge: {
16900
+ classPropertyName: "badge",
16901
+ publicName: "badge",
16902
+ isSignal: true,
16903
+ isRequired: false,
16904
+ transformFunction: null
16905
+ },
16842
16906
  showBack: {
16843
16907
  classPropertyName: "showBack",
16844
16908
  publicName: "showBack",
@@ -16901,8 +16965,8 @@ var SectionHeaderComponent = class SectionHeaderComponent {
16901
16965
  classAttribute: "m-section-header"
16902
16966
  },
16903
16967
  ngImport: i0,
16904
- 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 <!-- An AppLogo projected in the icon's place, selected by tag like the\n FilterGroup below — boxed to the heading's line box the same way. -->\n <div class=\"section-header__logo\">\n <ng-content select=\"m-app-logo\" />\n </div>\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",
16905
- 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,.section-header__logo{display:contents}.section-header__logo 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"],
16968
+ 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 <!-- An AppLogo projected in the icon's place, selected by tag like the\n FilterGroup below — boxed to the heading's line box the same way. -->\n <div class=\"section-header__logo\">\n <ng-content select=\"m-app-logo\" />\n </div>\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 <!-- The badge shares the heading's line rather than sitting at the row's\n end, where a header's `flex: 1` title box would push it: the count\n belongs to the word it counts. -->\n <div class=\"section-header__heading\">\n <m-header\n [level]=\"level()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [params]=\"params()\"\n [noTranslate]=\"noTranslate()\" />\n @if (badgeConfig(); as badge) {\n <m-badge [config]=\"badge\">{{ badgeText() }}</m-badge>\n }\n </div>\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",
16969
+ 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}.section-header__heading{display:flex;align-items:center;gap:.5rem;min-width:0}.section-header__heading m-badge{--m-badge-height: 1.5em;--m-badge-min-width: 1.5em;--m-badge-padding: 0 .3em;--m-badge-gap: .1em;flex:none}: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,.section-header__logo{display:contents}.section-header__logo 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"],
16906
16970
  dependencies: [
16907
16971
  {
16908
16972
  kind: "directive",
@@ -16961,6 +17025,13 @@ var SectionHeaderComponent = class SectionHeaderComponent {
16961
17025
  ],
16962
17026
  outputs: ["configChange"]
16963
17027
  },
17028
+ {
17029
+ kind: "component",
17030
+ type: BadgeComponent,
17031
+ selector: "m-badge",
17032
+ inputs: ["config"],
17033
+ outputs: ["configChange"]
17034
+ },
16964
17035
  {
16965
17036
  kind: "component",
16966
17037
  type: ButtonComponent,
@@ -17013,6 +17084,7 @@ i0.ɵɵngDeclareClassMetadata({
17013
17084
  ContextMenuComponent,
17014
17085
  HeaderComponent,
17015
17086
  IconComponent,
17087
+ BadgeComponent,
17016
17088
  ButtonComponent
17017
17089
  ],
17018
17090
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -17034,8 +17106,8 @@ i0.ɵɵngDeclareClassMetadata({
17034
17106
  "[class.is-accordion]": "!!accordion()",
17035
17107
  "(click)": "onHeaderClick($event)"
17036
17108
  },
17037
- 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 <!-- An AppLogo projected in the icon's place, selected by tag like the\n FilterGroup below — boxed to the heading's line box the same way. -->\n <div class=\"section-header__logo\">\n <ng-content select=\"m-app-logo\" />\n </div>\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",
17038
- 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,.section-header__logo{display:contents}.section-header__logo 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"]
17109
+ 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 <!-- An AppLogo projected in the icon's place, selected by tag like the\n FilterGroup below — boxed to the heading's line box the same way. -->\n <div class=\"section-header__logo\">\n <ng-content select=\"m-app-logo\" />\n </div>\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 <!-- The badge shares the heading's line rather than sitting at the row's\n end, where a header's `flex: 1` title box would push it: the count\n belongs to the word it counts. -->\n <div class=\"section-header__heading\">\n <m-header\n [level]=\"level()\"\n [label]=\"label()\"\n [icon]=\"icon()\"\n [params]=\"params()\"\n [noTranslate]=\"noTranslate()\" />\n @if (badgeConfig(); as badge) {\n <m-badge [config]=\"badge\">{{ badgeText() }}</m-badge>\n }\n </div>\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",
17110
+ 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}.section-header__heading{display:flex;align-items:center;gap:.5rem;min-width:0}.section-header__heading m-badge{--m-badge-height: 1.5em;--m-badge-min-width: 1.5em;--m-badge-padding: 0 .3em;--m-badge-gap: .1em;flex:none}: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,.section-header__logo{display:contents}.section-header__logo 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"]
17039
17111
  }]
17040
17112
  }],
17041
17113
  propDecorators: {
@@ -17151,6 +17223,14 @@ i0.ɵɵngDeclareClassMetadata({
17151
17223
  required: false
17152
17224
  }]
17153
17225
  }],
17226
+ badge: [{
17227
+ type: i0.Input,
17228
+ args: [{
17229
+ isSignal: true,
17230
+ alias: "badge",
17231
+ required: false
17232
+ }]
17233
+ }],
17154
17234
  showBack: [{
17155
17235
  type: i0.Input,
17156
17236
  args: [{
@@ -21129,7 +21209,7 @@ var ColorPickerBoxComponent = class ColorPickerBoxComponent {
21129
21209
  </m-section>
21130
21210
  </div>`,
21131
21211
  isInline: true,
21132
- 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)}}.color-picker-box{width:100%;box-sizing:border-box;background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);overflow:hidden;box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:color-picker-in .2s ease-out}.color-picker-box .color-picker-box-header{position:sticky;display:flex;flex-direction:row;top:0;left:0;width:100%;z-index:10;align-items:center;justify-content:space-between;background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));border-bottom:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)))}.color-picker-box .color-picker-box-header .color-preview{height:2em;width:2em;border-radius:calc(var(--m-input-radius, .5rem) * .6);margin:.5em}.color-picker-box .color-picker-box-header .color-header{flex:1;padding:0 .5em}.color-picker-box .color-area{position:relative;width:100%;height:5em;overflow:hidden}.color-picker-box .color-area .color-base{position:absolute;inset:0;width:100%;height:100%;background:linear-gradient(180deg,#fff,#fff0,#000),linear-gradient(90deg,gray,#fff0);pointer-events:none}.color-picker-box .color-area .saturation-gradient{position:absolute;inset:0;background:linear-gradient(90deg,rgb(128,128,128) 0%,transparent 100%)}.color-picker-box .color-area .brightness-gradient{position:absolute;inset:0;background:linear-gradient(180deg,#ffffff 0%,transparent 50%,#000000 100%)}.color-picker-box .color-area .color-pointer{position:absolute;width:12px;height:12px;border:2px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #0000004d;cursor:pointer;z-index:1}.color-picker-box .color-sliders{display:flex;flex-direction:column;gap:.5em;padding:.5em .75em;box-sizing:border-box}.color-picker-box .color-sliders .hue-slider,.color-picker-box .color-sliders .opacity-slider{height:.5em;position:relative;border-radius:.5em}.color-picker-box .color-sliders .hue-slider .pointer,.color-picker-box .color-sliders .opacity-slider .pointer{width:.5em;height:.5em;border-radius:50%;transform:translate(-50%,calc(-50% + 4px));box-shadow:0 1px 3px #0003;cursor:pointer;margin:0;padding:0;border:2px solid white;transition:scale .2s ease}.color-picker-box .color-sliders .hue-slider .pointer:hover,.color-picker-box .color-sliders .opacity-slider .pointer:hover{scale:1.2;box-shadow:0 2px 4px #0003}.color-picker-box .color-sliders .hue-slider{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.color-picker-box .suggested-colors{padding:.375rem;box-sizing:border-box;width:100%}.color-picker-box .suggested-colors .suggested-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.375em;padding:.25em .375em;border-bottom:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)))}.color-picker-box .suggested-colors .suggested-header span{font-size:.75em;font-weight:500;color:var(--m-input-color, var(--m-mm));display:flex;align-items:center;gap:.5em}.color-picker-box .suggested-colors .color-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(24px,1fr));gap:8px;width:100%;padding:.25rem}.color-picker-box .suggested-colors .color-grid .color-option{width:24px;height:24px;border-radius:.25rem;cursor:pointer;border:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));transition:transform .15s ease,box-shadow .15s ease;margin:auto;position:relative;padding:0}.color-picker-box .suggested-colors .color-grid .color-option:hover{transform:scale(1.1);z-index:1;box-shadow:0 2px 4px #0003}.color-picker-box .suggested-colors .color-grid .color-option:active{transform:scale(.95)}.color-picker-box .suggested-colors .color-grid .color-option[data-alpha]{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0px}@keyframes color-picker-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}\n"],
21212
+ 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)}}.color-picker-box{width:100%;box-sizing:border-box;background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);overflow:hidden;box-shadow:0 .75rem 2rem var(--m-backdrop-shadow);animation:color-picker-in .2s ease-out}.color-picker-box .color-picker-box-header{position:sticky;display:flex;flex-direction:row;top:0;left:0;width:100%;z-index:10;align-items:center;justify-content:space-between;background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));border-bottom:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)))}.color-picker-box .color-picker-box-header .color-preview{height:2em;width:2em;border-radius:calc(var(--m-input-radius, .5rem) * .6);margin:.5em}.color-picker-box .color-picker-box-header .color-header{flex:1;padding:0 .5em}.color-picker-box .color-area{position:relative;width:100%;height:5em;overflow:hidden}.color-picker-box .color-area .color-base{position:absolute;inset:0;width:100%;height:100%;background:linear-gradient(180deg,#fff,#fff0,#000),linear-gradient(90deg,gray,#fff0);pointer-events:none}.color-picker-box .color-area .saturation-gradient{position:absolute;inset:0;background:linear-gradient(90deg,rgb(128,128,128) 0%,transparent 100%)}.color-picker-box .color-area .brightness-gradient{position:absolute;inset:0;background:linear-gradient(180deg,#ffffff 0%,transparent 50%,#000000 100%)}.color-picker-box .color-area .color-pointer{position:absolute;width:12px;height:12px;border:2px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #0000004d;cursor:pointer;z-index:1}.color-picker-box .color-sliders{display:flex;flex-direction:column;gap:.5em;padding:.5em .75em;box-sizing:border-box}.color-picker-box .color-sliders .hue-slider,.color-picker-box .color-sliders .opacity-slider{height:.5em;position:relative;border-radius:.5em}.color-picker-box .color-sliders .hue-slider .pointer,.color-picker-box .color-sliders .opacity-slider .pointer{width:.5em;height:.5em;border-radius:50%;transform:translate(-50%,calc(-50% + 4px));box-shadow:0 1px 3px #0003;cursor:pointer;margin:0;padding:0;border:2px solid white;transition:scale .2s ease}.color-picker-box .color-sliders .hue-slider .pointer:hover,.color-picker-box .color-sliders .opacity-slider .pointer:hover{scale:1.2;box-shadow:0 2px 4px #0003}.color-picker-box .color-sliders .hue-slider{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.color-picker-box .suggested-colors{padding:.375rem;box-sizing:border-box;width:100%}.color-picker-box .suggested-colors .suggested-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.375em;padding:.25em .375em;border-bottom:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)))}.color-picker-box .suggested-colors .suggested-header span{font-size:.75em;font-weight:500;color:var(--m-input-color, var(--m-mm));display:flex;align-items:center;gap:.5em}.color-picker-box .suggested-colors .color-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(24px,1fr));gap:8px;width:100%;padding:.25rem}.color-picker-box .suggested-colors .color-grid .color-option{width:24px;height:24px;border-radius:.25rem;cursor:pointer;border:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));transition:transform .15s ease,box-shadow .15s ease;margin:auto;position:relative;padding:0}.color-picker-box .suggested-colors .color-grid .color-option:hover{transform:scale(1.1);z-index:1;box-shadow:0 2px 4px #0003}.color-picker-box .suggested-colors .color-grid .color-option:active{transform:scale(.95)}.color-picker-box .suggested-colors .color-grid .color-option[data-alpha]{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0px}@keyframes color-picker-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}\n"],
21133
21213
  dependencies: [
21134
21214
  {
21135
21215
  kind: "directive",
@@ -21190,6 +21270,7 @@ var ColorPickerBoxComponent = class ColorPickerBoxComponent {
21190
21270
  "disableRule",
21191
21271
  "extraData",
21192
21272
  "align",
21273
+ "badge",
21193
21274
  "showBack",
21194
21275
  "actionButton",
21195
21276
  "actionLabel",
@@ -21353,7 +21434,7 @@ i0.ɵɵngDeclareClassMetadata({
21353
21434
  </m-section>
21354
21435
  </div>`,
21355
21436
  changeDetection: ChangeDetectionStrategy.OnPush,
21356
- 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)}}.color-picker-box{width:100%;box-sizing:border-box;background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);overflow:hidden;box-shadow:0 .75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);animation:color-picker-in .2s ease-out}.color-picker-box .color-picker-box-header{position:sticky;display:flex;flex-direction:row;top:0;left:0;width:100%;z-index:10;align-items:center;justify-content:space-between;background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));border-bottom:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)))}.color-picker-box .color-picker-box-header .color-preview{height:2em;width:2em;border-radius:calc(var(--m-input-radius, .5rem) * .6);margin:.5em}.color-picker-box .color-picker-box-header .color-header{flex:1;padding:0 .5em}.color-picker-box .color-area{position:relative;width:100%;height:5em;overflow:hidden}.color-picker-box .color-area .color-base{position:absolute;inset:0;width:100%;height:100%;background:linear-gradient(180deg,#fff,#fff0,#000),linear-gradient(90deg,gray,#fff0);pointer-events:none}.color-picker-box .color-area .saturation-gradient{position:absolute;inset:0;background:linear-gradient(90deg,rgb(128,128,128) 0%,transparent 100%)}.color-picker-box .color-area .brightness-gradient{position:absolute;inset:0;background:linear-gradient(180deg,#ffffff 0%,transparent 50%,#000000 100%)}.color-picker-box .color-area .color-pointer{position:absolute;width:12px;height:12px;border:2px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #0000004d;cursor:pointer;z-index:1}.color-picker-box .color-sliders{display:flex;flex-direction:column;gap:.5em;padding:.5em .75em;box-sizing:border-box}.color-picker-box .color-sliders .hue-slider,.color-picker-box .color-sliders .opacity-slider{height:.5em;position:relative;border-radius:.5em}.color-picker-box .color-sliders .hue-slider .pointer,.color-picker-box .color-sliders .opacity-slider .pointer{width:.5em;height:.5em;border-radius:50%;transform:translate(-50%,calc(-50% + 4px));box-shadow:0 1px 3px #0003;cursor:pointer;margin:0;padding:0;border:2px solid white;transition:scale .2s ease}.color-picker-box .color-sliders .hue-slider .pointer:hover,.color-picker-box .color-sliders .opacity-slider .pointer:hover{scale:1.2;box-shadow:0 2px 4px #0003}.color-picker-box .color-sliders .hue-slider{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.color-picker-box .suggested-colors{padding:.375rem;box-sizing:border-box;width:100%}.color-picker-box .suggested-colors .suggested-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.375em;padding:.25em .375em;border-bottom:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)))}.color-picker-box .suggested-colors .suggested-header span{font-size:.75em;font-weight:500;color:var(--m-input-color, var(--m-mm));display:flex;align-items:center;gap:.5em}.color-picker-box .suggested-colors .color-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(24px,1fr));gap:8px;width:100%;padding:.25rem}.color-picker-box .suggested-colors .color-grid .color-option{width:24px;height:24px;border-radius:.25rem;cursor:pointer;border:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));transition:transform .15s ease,box-shadow .15s ease;margin:auto;position:relative;padding:0}.color-picker-box .suggested-colors .color-grid .color-option:hover{transform:scale(1.1);z-index:1;box-shadow:0 2px 4px #0003}.color-picker-box .suggested-colors .color-grid .color-option:active{transform:scale(.95)}.color-picker-box .suggested-colors .color-grid .color-option[data-alpha]{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0px}@keyframes color-picker-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}\n"]
21437
+ 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)}}.color-picker-box{width:100%;box-sizing:border-box;background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));border:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));border-radius:var(--m-input-radius, .5rem);overflow:hidden;box-shadow:0 .75rem 2rem var(--m-backdrop-shadow);animation:color-picker-in .2s ease-out}.color-picker-box .color-picker-box-header{position:sticky;display:flex;flex-direction:row;top:0;left:0;width:100%;z-index:10;align-items:center;justify-content:space-between;background:color-mix(in srgb,var(--m-focus) 2%,var(--m-background));border-bottom:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)))}.color-picker-box .color-picker-box-header .color-preview{height:2em;width:2em;border-radius:calc(var(--m-input-radius, .5rem) * .6);margin:.5em}.color-picker-box .color-picker-box-header .color-header{flex:1;padding:0 .5em}.color-picker-box .color-area{position:relative;width:100%;height:5em;overflow:hidden}.color-picker-box .color-area .color-base{position:absolute;inset:0;width:100%;height:100%;background:linear-gradient(180deg,#fff,#fff0,#000),linear-gradient(90deg,gray,#fff0);pointer-events:none}.color-picker-box .color-area .saturation-gradient{position:absolute;inset:0;background:linear-gradient(90deg,rgb(128,128,128) 0%,transparent 100%)}.color-picker-box .color-area .brightness-gradient{position:absolute;inset:0;background:linear-gradient(180deg,#ffffff 0%,transparent 50%,#000000 100%)}.color-picker-box .color-area .color-pointer{position:absolute;width:12px;height:12px;border:2px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #0000004d;cursor:pointer;z-index:1}.color-picker-box .color-sliders{display:flex;flex-direction:column;gap:.5em;padding:.5em .75em;box-sizing:border-box}.color-picker-box .color-sliders .hue-slider,.color-picker-box .color-sliders .opacity-slider{height:.5em;position:relative;border-radius:.5em}.color-picker-box .color-sliders .hue-slider .pointer,.color-picker-box .color-sliders .opacity-slider .pointer{width:.5em;height:.5em;border-radius:50%;transform:translate(-50%,calc(-50% + 4px));box-shadow:0 1px 3px #0003;cursor:pointer;margin:0;padding:0;border:2px solid white;transition:scale .2s ease}.color-picker-box .color-sliders .hue-slider .pointer:hover,.color-picker-box .color-sliders .opacity-slider .pointer:hover{scale:1.2;box-shadow:0 2px 4px #0003}.color-picker-box .color-sliders .hue-slider{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.color-picker-box .suggested-colors{padding:.375rem;box-sizing:border-box;width:100%}.color-picker-box .suggested-colors .suggested-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.375em;padding:.25em .375em;border-bottom:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)))}.color-picker-box .suggested-colors .suggested-header span{font-size:.75em;font-weight:500;color:var(--m-input-color, var(--m-mm));display:flex;align-items:center;gap:.5em}.color-picker-box .suggested-colors .color-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(24px,1fr));gap:8px;width:100%;padding:.25rem}.color-picker-box .suggested-colors .color-grid .color-option{width:24px;height:24px;border-radius:.25rem;cursor:pointer;border:1px solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));transition:transform .15s ease,box-shadow .15s ease;margin:auto;position:relative;padding:0}.color-picker-box .suggested-colors .color-grid .color-option:hover{transform:scale(1.1);z-index:1;box-shadow:0 2px 4px #0003}.color-picker-box .suggested-colors .color-grid .color-option:active{transform:scale(.95)}.color-picker-box .suggested-colors .color-grid .color-option[data-alpha]{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:10px 10px;background-position:0 0,0 5px,5px -5px,-5px 0px}@keyframes color-picker-in{0%{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}\n"]
21357
21438
  }]
21358
21439
  }],
21359
21440
  ctorParameters: () => [],
@@ -38584,6 +38665,7 @@ var TimelineComponent = class TimelineComponent extends ConfigComponent {
38584
38665
  "disableRule",
38585
38666
  "extraData",
38586
38667
  "align",
38668
+ "badge",
38587
38669
  "showBack",
38588
38670
  "actionButton",
38589
38671
  "actionLabel",
@@ -38972,7 +39054,7 @@ var ScrollComponent = class ScrollComponent {
38972
39054
  <div class="scroll__fade" [class.visible]="_hasFade()"></div>
38973
39055
  `,
38974
39056
  isInline: true,
38975
- 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;flex:1;min-height:0;position:relative;overflow:hidden}.scroll__inner{height:100%;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}@media(max-width:1199px){.scroll__inner{scrollbar-width:none}.scroll__inner::-webkit-scrollbar{display:none}}@media(min-width:1200px){.scroll__inner{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.12) transparent}.scroll__inner::-webkit-scrollbar{width:3px}.scroll__inner::-webkit-scrollbar-track{background:transparent}.scroll__inner::-webkit-scrollbar-thumb{background:#0000001f;border-radius:2px;transition:background .2s}.scroll__inner::-webkit-scrollbar-thumb:hover{background:#00000047}}.scroll__fade{position:absolute;bottom:0;left:0;right:0;height:4rem;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.92));pointer-events:none;opacity:0;transition:opacity .25s ease;z-index:1}.scroll__fade.visible{opacity:1}\n"],
39057
+ 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;flex:1;min-height:0;position:relative;overflow:hidden}.scroll__inner{height:100%;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}@media(max-width:1199px){.scroll__inner{scrollbar-width:none}.scroll__inner::-webkit-scrollbar{display:none}}@media(min-width:1200px){.scroll__inner{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.12) transparent}.scroll__inner::-webkit-scrollbar{width:3px}.scroll__inner::-webkit-scrollbar-track{background:transparent}.scroll__inner::-webkit-scrollbar-thumb{background:#0000001f;border-radius:2px;transition:background .2s}.scroll__inner::-webkit-scrollbar-thumb:hover{background:#00000047}}.scroll__fade{position:absolute;bottom:0;left:0;right:0;height:4rem;background:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--m-background) 92%,transparent));pointer-events:none;opacity:0;transition:opacity .25s ease;z-index:1}.scroll__fade.visible{opacity:1}\n"],
38976
39058
  changeDetection: i0.ChangeDetectionStrategy.OnPush
38977
39059
  });
38978
39060
  };
@@ -38992,7 +39074,7 @@ i0.ɵɵngDeclareClassMetadata({
38992
39074
  </div>
38993
39075
  <div class="scroll__fade" [class.visible]="_hasFade()"></div>
38994
39076
  `,
38995
- 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;flex:1;min-height:0;position:relative;overflow:hidden}.scroll__inner{height:100%;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}@media(max-width:1199px){.scroll__inner{scrollbar-width:none}.scroll__inner::-webkit-scrollbar{display:none}}@media(min-width:1200px){.scroll__inner{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.12) transparent}.scroll__inner::-webkit-scrollbar{width:3px}.scroll__inner::-webkit-scrollbar-track{background:transparent}.scroll__inner::-webkit-scrollbar-thumb{background:#0000001f;border-radius:2px;transition:background .2s}.scroll__inner::-webkit-scrollbar-thumb:hover{background:#00000047}}.scroll__fade{position:absolute;bottom:0;left:0;right:0;height:4rem;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.92));pointer-events:none;opacity:0;transition:opacity .25s ease;z-index:1}.scroll__fade.visible{opacity:1}\n"]
39077
+ 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;flex:1;min-height:0;position:relative;overflow:hidden}.scroll__inner{height:100%;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}@media(max-width:1199px){.scroll__inner{scrollbar-width:none}.scroll__inner::-webkit-scrollbar{display:none}}@media(min-width:1200px){.scroll__inner{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.12) transparent}.scroll__inner::-webkit-scrollbar{width:3px}.scroll__inner::-webkit-scrollbar-track{background:transparent}.scroll__inner::-webkit-scrollbar-thumb{background:#0000001f;border-radius:2px;transition:background .2s}.scroll__inner::-webkit-scrollbar-thumb:hover{background:#00000047}}.scroll__fade{position:absolute;bottom:0;left:0;right:0;height:4rem;background:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--m-background) 92%,transparent));pointer-events:none;opacity:0;transition:opacity .25s ease;z-index:1}.scroll__fade.visible{opacity:1}\n"]
38996
39078
  }]
38997
39079
  }],
38998
39080
  ctorParameters: () => [],
@@ -40673,7 +40755,7 @@ var PanelComponent = class PanelComponent {
40673
40755
  </div>
40674
40756
  `,
40675
40757
  isInline: true,
40676
- 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;height:100%}:host.is-nav-hidden{display:none}.side-panel{height:100%;background:var(--m-background);display:flex;flex-direction:column;overflow:hidden;position:relative;animation:panel-slide-right .3s cubic-bezier(.2,0,0,1) forwards;border-left:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:-.75rem 0 2rem color-mix(in srgb,var(--m-text) 12%,transparent)}.side-panel--docked{border-left:1px dashed var(--m-border);box-shadow:none}.side-panel--left{animation-name:panel-slide-left;border-left:none;border-right:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:.75rem 0 2rem color-mix(in srgb,var(--m-text) 12%,transparent)}.side-panel--left.side-panel--docked{border-left:none;border-right:1px dashed var(--m-border);box-shadow:none}.side-panel__close{position:absolute;top:0;right:0;padding:.25em;z-index:20}.side-panel__content{flex:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto}@media(max-width:767px){.side-panel{animation-name:panel-slide-bottom;border-left:none;border-right:none;border-top:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:0 -.75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);overflow-y:auto}}@keyframes panel-slide-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panel-slide-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes panel-slide-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}\n"],
40758
+ 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;height:100%}:host.is-nav-hidden{display:none}.side-panel{height:100%;background:var(--m-background);display:flex;flex-direction:column;overflow:hidden;position:relative;animation:panel-slide-right .3s cubic-bezier(.2,0,0,1) forwards;border-left:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:-.75rem 0 2rem var(--m-backdrop-shadow)}.side-panel--docked{border-left:1px dashed var(--m-border);box-shadow:none}.side-panel--left{animation-name:panel-slide-left;border-left:none;border-right:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:.75rem 0 2rem var(--m-backdrop-shadow)}.side-panel--left.side-panel--docked{border-left:none;border-right:1px dashed var(--m-border);box-shadow:none}.side-panel__close{position:absolute;top:0;right:0;padding:.25em;z-index:20}.side-panel__content{flex:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto}@media(max-width:767px){.side-panel{animation-name:panel-slide-bottom;border-left:none;border-right:none;border-top:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:0 -.75rem 2rem var(--m-backdrop-shadow);overflow-y:auto}}@keyframes panel-slide-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panel-slide-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes panel-slide-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}\n"],
40677
40759
  dependencies: [{
40678
40760
  kind: "component",
40679
40761
  type: ButtonComponent,
@@ -40747,7 +40829,7 @@ i0.ɵɵngDeclareClassMetadata({
40747
40829
  useValue: true
40748
40830
  }],
40749
40831
  host: { "[class.is-nav-hidden]": "navOpen()" },
40750
- 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;height:100%}:host.is-nav-hidden{display:none}.side-panel{height:100%;background:var(--m-background);display:flex;flex-direction:column;overflow:hidden;position:relative;animation:panel-slide-right .3s cubic-bezier(.2,0,0,1) forwards;border-left:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:-.75rem 0 2rem color-mix(in srgb,var(--m-text) 12%,transparent)}.side-panel--docked{border-left:1px dashed var(--m-border);box-shadow:none}.side-panel--left{animation-name:panel-slide-left;border-left:none;border-right:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:.75rem 0 2rem color-mix(in srgb,var(--m-text) 12%,transparent)}.side-panel--left.side-panel--docked{border-left:none;border-right:1px dashed var(--m-border);box-shadow:none}.side-panel__close{position:absolute;top:0;right:0;padding:.25em;z-index:20}.side-panel__content{flex:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto}@media(max-width:767px){.side-panel{animation-name:panel-slide-bottom;border-left:none;border-right:none;border-top:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:0 -.75rem 2rem color-mix(in srgb,var(--m-text) 12%,transparent);overflow-y:auto}}@keyframes panel-slide-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panel-slide-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes panel-slide-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}\n"]
40832
+ 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;height:100%}:host.is-nav-hidden{display:none}.side-panel{height:100%;background:var(--m-background);display:flex;flex-direction:column;overflow:hidden;position:relative;animation:panel-slide-right .3s cubic-bezier(.2,0,0,1) forwards;border-left:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:-.75rem 0 2rem var(--m-backdrop-shadow)}.side-panel--docked{border-left:1px dashed var(--m-border);box-shadow:none}.side-panel--left{animation-name:panel-slide-left;border-left:none;border-right:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:.75rem 0 2rem var(--m-backdrop-shadow)}.side-panel--left.side-panel--docked{border-left:none;border-right:1px dashed var(--m-border);box-shadow:none}.side-panel__close{position:absolute;top:0;right:0;padding:.25em;z-index:20}.side-panel__content{flex:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto}@media(max-width:767px){.side-panel{animation-name:panel-slide-bottom;border-left:none;border-right:none;border-top:var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, var(--m-text) 18%, var(--m-background)));box-shadow:0 -.75rem 2rem var(--m-backdrop-shadow);overflow-y:auto}}@keyframes panel-slide-right{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panel-slide-left{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes panel-slide-bottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}\n"]
40751
40833
  }]
40752
40834
  }],
40753
40835
  propDecorators: {
@@ -42075,7 +42157,7 @@ var NavHeaderComponent = class NavHeaderComponent {
42075
42157
  classAttribute: "m-nav-header"
42076
42158
  },
42077
42159
  ngImport: i0,
42078
- 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 <!-- The title follows its own Nav, as a menu row naming it would: the\n panel lists that Nav's rows, so its Page is the one they hang from.\n `role=\"button\"` also keeps the sheet's drag from starting on it. -->\n @if (h.appLogo; as logo) {\n <!-- A mounted app's header draws its AppLogo in the icon's place. -->\n <m-section-header\n class=\"nav-header__title\"\n role=\"button\"\n tabindex=\"0\"\n [label]=\"h.label\"\n (click)=\"_followHeader()\"\n (keydown.enter)=\"_followHeader()\"\n >\n <m-app-logo class=\"nav-header__app-logo\" [glyph]=\"logo.glyph\" [appColor]=\"logo.color\" [name]=\"logo.name\" />\n </m-section-header>\n } @else {\n <m-section-header\n class=\"nav-header__title\"\n role=\"button\"\n tabindex=\"0\"\n [icon]=\"h.icon\"\n [label]=\"h.label\"\n (click)=\"_followHeader()\"\n (keydown.enter)=\"_followHeader()\"\n />\n }\n }\n }\n</m-section>\n",
42160
+ 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 <!-- The title follows its own Nav, as a menu row naming it would: the\n panel lists that Nav's rows, so its Page is the one they hang from.\n `role=\"button\"` also keeps the sheet's drag from starting on it. -->\n @if (h.appLogo; as logo) {\n <!-- A mounted app's header draws its AppLogo in the icon's place. -->\n <m-section-header\n class=\"nav-header__title\"\n role=\"button\"\n tabindex=\"0\"\n [label]=\"h.label\"\n [badge]=\"h.badge\"\n (click)=\"_followHeader()\"\n (keydown.enter)=\"_followHeader()\"\n >\n <m-app-logo class=\"nav-header__app-logo\" [glyph]=\"logo.glyph\" [appColor]=\"logo.color\" [name]=\"logo.name\" />\n </m-section-header>\n } @else {\n <m-section-header\n class=\"nav-header__title\"\n role=\"button\"\n tabindex=\"0\"\n [icon]=\"h.icon\"\n [label]=\"h.label\"\n [badge]=\"h.badge\"\n (click)=\"_followHeader()\"\n (keydown.enter)=\"_followHeader()\"\n />\n }\n }\n }\n</m-section>\n",
42079
42161
  styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.nav-header__user{display:block;padding:1rem}.nav-header__username{font-size:.6875rem;font-weight:600;color:var(--m-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}m-section-search.nav-header__search{--_nav-row-height: var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));min-height:var(--_nav-row-height);padding-block:0;--m-input-clear-height: calc(var(--_nav-row-height) - .5rem);--m-input-clear-min-height: calc(var(--_nav-row-height) - .5rem)}.nav-header__title{cursor:pointer}.nav-header__title:hover,.nav-header__title:focus-visible{background:color-mix(in srgb,var(--m-text) 8%,transparent);outline:none}.nav-header__title .nav-header__app-logo{flex-shrink:0;align-self:flex-start;width:var(--m-section-header-icon-box, 1.5125rem);height:var(--m-section-header-icon-box, 1.5125rem)}\n"],
42080
42162
  dependencies: [
42081
42163
  {
@@ -42120,6 +42202,7 @@ var NavHeaderComponent = class NavHeaderComponent {
42120
42202
  "disableRule",
42121
42203
  "extraData",
42122
42204
  "align",
42205
+ "badge",
42123
42206
  "showBack",
42124
42207
  "actionButton",
42125
42208
  "actionLabel",
@@ -42280,7 +42363,7 @@ i0.ɵɵngDeclareClassMetadata({
42280
42363
  "[style.display]": "\"block\"",
42281
42364
  "[style.--m-section-min-height]": "\"0\""
42282
42365
  },
42283
- 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 <!-- The title follows its own Nav, as a menu row naming it would: the\n panel lists that Nav's rows, so its Page is the one they hang from.\n `role=\"button\"` also keeps the sheet's drag from starting on it. -->\n @if (h.appLogo; as logo) {\n <!-- A mounted app's header draws its AppLogo in the icon's place. -->\n <m-section-header\n class=\"nav-header__title\"\n role=\"button\"\n tabindex=\"0\"\n [label]=\"h.label\"\n (click)=\"_followHeader()\"\n (keydown.enter)=\"_followHeader()\"\n >\n <m-app-logo class=\"nav-header__app-logo\" [glyph]=\"logo.glyph\" [appColor]=\"logo.color\" [name]=\"logo.name\" />\n </m-section-header>\n } @else {\n <m-section-header\n class=\"nav-header__title\"\n role=\"button\"\n tabindex=\"0\"\n [icon]=\"h.icon\"\n [label]=\"h.label\"\n (click)=\"_followHeader()\"\n (keydown.enter)=\"_followHeader()\"\n />\n }\n }\n }\n</m-section>\n",
42366
+ 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 <!-- The title follows its own Nav, as a menu row naming it would: the\n panel lists that Nav's rows, so its Page is the one they hang from.\n `role=\"button\"` also keeps the sheet's drag from starting on it. -->\n @if (h.appLogo; as logo) {\n <!-- A mounted app's header draws its AppLogo in the icon's place. -->\n <m-section-header\n class=\"nav-header__title\"\n role=\"button\"\n tabindex=\"0\"\n [label]=\"h.label\"\n [badge]=\"h.badge\"\n (click)=\"_followHeader()\"\n (keydown.enter)=\"_followHeader()\"\n >\n <m-app-logo class=\"nav-header__app-logo\" [glyph]=\"logo.glyph\" [appColor]=\"logo.color\" [name]=\"logo.name\" />\n </m-section-header>\n } @else {\n <m-section-header\n class=\"nav-header__title\"\n role=\"button\"\n tabindex=\"0\"\n [icon]=\"h.icon\"\n [label]=\"h.label\"\n [badge]=\"h.badge\"\n (click)=\"_followHeader()\"\n (keydown.enter)=\"_followHeader()\"\n />\n }\n }\n }\n</m-section>\n",
42284
42367
  styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.nav-header__user{display:block;padding:1rem}.nav-header__username{font-size:.6875rem;font-weight:600;color:var(--m-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}m-section-search.nav-header__search{--_nav-row-height: var(--section-header-min-height, calc(var(--section-header-py, .5rem) * 2 + 1.25rem));min-height:var(--_nav-row-height);padding-block:0;--m-input-clear-height: calc(var(--_nav-row-height) - .5rem);--m-input-clear-min-height: calc(var(--_nav-row-height) - .5rem)}.nav-header__title{cursor:pointer}.nav-header__title:hover,.nav-header__title:focus-visible{background:color-mix(in srgb,var(--m-text) 8%,transparent);outline:none}.nav-header__title .nav-header__app-logo{flex-shrink:0;align-self:flex-start;width:var(--m-section-header-icon-box, 1.5125rem);height:var(--m-section-header-icon-box, 1.5125rem)}\n"]
42285
42368
  }]
42286
42369
  }],
@@ -42344,6 +42427,7 @@ var NavMenuComponent = class NavMenuComponent {
42344
42427
  browse = (item) => {
42345
42428
  if (item.nav) this._navRef?.browse?.(item.nav, item.navParams);
42346
42429
  };
42430
+ formatBadgeCount = (count, max = 99) => formatBadgeCount(count, max);
42347
42431
  rows = computed(() => (this.navList() ?? []).map((item, index) => ({
42348
42432
  id: `${item.nav ?? item.href ?? item.label}-${index}`,
42349
42433
  row: item
@@ -42395,6 +42479,18 @@ var NavMenuComponent = class NavMenuComponent {
42395
42479
  <m-icon [name]="item.icon || 'menu'" [baseUrl]="baseUrl()" />
42396
42480
  }
42397
42481
  </ng-template>
42482
+ <!-- A row's count, drawn beside the row's own word rather than pushed to
42483
+ the row's end: it is the same figure the panel's header wears and part
42484
+ of the label, not a column of figures the list is scanned by. -->
42485
+ <ng-template #badgeTemplate let-item>
42486
+ @if (item.badge; as badge) {
42487
+ <m-badge
42488
+ class="nav-menu__badge"
42489
+ [config]="{ variant: badge.variant ?? 'danger' }"
42490
+ >{{ formatBadgeCount(badge.count) }}</m-badge
42491
+ >
42492
+ }
42493
+ </ng-template>
42398
42494
  <ng-template #menuTemplate let-item="row">
42399
42495
  <div class="nav-menu__item">
42400
42496
  @if (item.nav; as nav) {
@@ -42410,7 +42506,10 @@ var NavMenuComponent = class NavMenuComponent {
42410
42506
  <span class="nav-menu__icon">
42411
42507
  <ng-container *ngTemplateOutlet="iconTemplate; context: { $implicit: item }" />
42412
42508
  </span>
42413
- <span class="nav-menu__label">{{ item.label | translate }}</span>
42509
+ <span class="nav-menu__label">
42510
+ {{ item.label | translate }}
42511
+ <ng-container *ngTemplateOutlet="badgeTemplate; context: { $implicit: item }" />
42512
+ </span>
42414
42513
  </a>
42415
42514
  <!-- The row follows the Nav; the chevron only Browses into it. -->
42416
42515
  @if (item.browsable) {
@@ -42428,7 +42527,10 @@ var NavMenuComponent = class NavMenuComponent {
42428
42527
  <span class="nav-menu__icon">
42429
42528
  <ng-container *ngTemplateOutlet="iconTemplate; context: { $implicit: item }" />
42430
42529
  </span>
42431
- <span class="nav-menu__label">{{ item.label | translate }}</span>
42530
+ <span class="nav-menu__label">
42531
+ {{ item.label | translate }}
42532
+ <ng-container *ngTemplateOutlet="badgeTemplate; context: { $implicit: item }" />
42533
+ </span>
42432
42534
  </a>
42433
42535
  } @else {
42434
42536
  <span class="nav-menu__icon">
@@ -42436,6 +42538,7 @@ var NavMenuComponent = class NavMenuComponent {
42436
42538
  </span>
42437
42539
  <span class="nav-menu__label">
42438
42540
  <span class="nav-menu__text">{{ item.label | translate }}</span>
42541
+ <ng-container *ngTemplateOutlet="badgeTemplate; context: { $implicit: item }" />
42439
42542
  </span>
42440
42543
  }
42441
42544
  </div>
@@ -42445,7 +42548,7 @@ var NavMenuComponent = class NavMenuComponent {
42445
42548
  </div>
42446
42549
  `,
42447
42550
  isInline: true,
42448
- styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__browse{flex:none;margin-inline-end:.5rem;color:var(--m-text-tertiary)}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__app-logo{display:block;width:100%;height:100%}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"],
42551
+ styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__browse{flex:none;margin-inline-end:.5rem;color:var(--m-text-tertiary)}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__app-logo{display:block;width:100%;height:100%}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__badge{--m-badge-height: 1.5em;--m-badge-min-width: 1.5em;--m-badge-padding: 0 .3em;--m-badge-gap: .1em;vertical-align:middle;margin-inline-start:.15rem}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"],
42449
42552
  dependencies: [
42450
42553
  {
42451
42554
  kind: "directive",
@@ -42487,6 +42590,13 @@ var NavMenuComponent = class NavMenuComponent {
42487
42590
  "size"
42488
42591
  ]
42489
42592
  },
42593
+ {
42594
+ kind: "component",
42595
+ type: BadgeComponent,
42596
+ selector: "m-badge",
42597
+ inputs: ["config"],
42598
+ outputs: ["configChange"]
42599
+ },
42490
42600
  {
42491
42601
  kind: "directive",
42492
42602
  type: MRefDirective,
@@ -42576,6 +42686,18 @@ i0.ɵɵngDeclareClassMetadata({
42576
42686
  <m-icon [name]="item.icon || 'menu'" [baseUrl]="baseUrl()" />
42577
42687
  }
42578
42688
  </ng-template>
42689
+ <!-- A row's count, drawn beside the row's own word rather than pushed to
42690
+ the row's end: it is the same figure the panel's header wears and part
42691
+ of the label, not a column of figures the list is scanned by. -->
42692
+ <ng-template #badgeTemplate let-item>
42693
+ @if (item.badge; as badge) {
42694
+ <m-badge
42695
+ class="nav-menu__badge"
42696
+ [config]="{ variant: badge.variant ?? 'danger' }"
42697
+ >{{ formatBadgeCount(badge.count) }}</m-badge
42698
+ >
42699
+ }
42700
+ </ng-template>
42579
42701
  <ng-template #menuTemplate let-item="row">
42580
42702
  <div class="nav-menu__item">
42581
42703
  @if (item.nav; as nav) {
@@ -42591,7 +42713,10 @@ i0.ɵɵngDeclareClassMetadata({
42591
42713
  <span class="nav-menu__icon">
42592
42714
  <ng-container *ngTemplateOutlet="iconTemplate; context: { $implicit: item }" />
42593
42715
  </span>
42594
- <span class="nav-menu__label">{{ item.label | translate }}</span>
42716
+ <span class="nav-menu__label">
42717
+ {{ item.label | translate }}
42718
+ <ng-container *ngTemplateOutlet="badgeTemplate; context: { $implicit: item }" />
42719
+ </span>
42595
42720
  </a>
42596
42721
  <!-- The row follows the Nav; the chevron only Browses into it. -->
42597
42722
  @if (item.browsable) {
@@ -42609,7 +42734,10 @@ i0.ɵɵngDeclareClassMetadata({
42609
42734
  <span class="nav-menu__icon">
42610
42735
  <ng-container *ngTemplateOutlet="iconTemplate; context: { $implicit: item }" />
42611
42736
  </span>
42612
- <span class="nav-menu__label">{{ item.label | translate }}</span>
42737
+ <span class="nav-menu__label">
42738
+ {{ item.label | translate }}
42739
+ <ng-container *ngTemplateOutlet="badgeTemplate; context: { $implicit: item }" />
42740
+ </span>
42613
42741
  </a>
42614
42742
  } @else {
42615
42743
  <span class="nav-menu__icon">
@@ -42617,6 +42745,7 @@ i0.ɵɵngDeclareClassMetadata({
42617
42745
  </span>
42618
42746
  <span class="nav-menu__label">
42619
42747
  <span class="nav-menu__text">{{ item.label | translate }}</span>
42748
+ <ng-container *ngTemplateOutlet="badgeTemplate; context: { $implicit: item }" />
42620
42749
  </span>
42621
42750
  }
42622
42751
  </div>
@@ -42630,12 +42759,13 @@ i0.ɵɵngDeclareClassMetadata({
42630
42759
  NgTemplateOutlet,
42631
42760
  IconComponent,
42632
42761
  AppLogoComponent,
42762
+ BadgeComponent,
42633
42763
  MRefDirective,
42634
42764
  TranslatePipe,
42635
42765
  ListComponent,
42636
42766
  ButtonComponent
42637
42767
  ],
42638
- styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__browse{flex:none;margin-inline-end:.5rem;color:var(--m-text-tertiary)}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__app-logo{display:block;width:100%;height:100%}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"]
42768
+ styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__browse{flex:none;margin-inline-end:.5rem;color:var(--m-text-tertiary)}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__app-logo{display:block;width:100%;height:100%}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__badge{--m-badge-height: 1.5em;--m-badge-min-width: 1.5em;--m-badge-padding: 0 .3em;--m-badge-gap: .1em;vertical-align:middle;margin-inline-start:.15rem}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"]
42639
42769
  }]
42640
42770
  }],
42641
42771
  propDecorators: {
@@ -47118,16 +47248,16 @@ const platformNavWidgets = () => ({
47118
47248
  });
47119
47249
  const providePlatformNavWidgets = () => provideNavWidgets(platformNavWidgets());
47120
47250
  function provideAppContext() {
47121
- const navStore = inject(NavStore);
47251
+ const ownAppLink = inject(APP_LINK);
47122
47252
  const authStore = inject(AuthStore);
47123
47253
  const agreementGate = inject(AgreementGate);
47124
47254
  const relationType = signal(null, ...ngDevMode ? [{ debugName: "relationType" }] : /* istanbul ignore next */ []);
47125
47255
  effect(() => {
47126
- const appLink = navStore.appLink();
47256
+ const appLink = ownAppLink();
47127
47257
  const isLoggedIn = authStore.isLoggedIn();
47128
47258
  agreementGate.revision();
47129
47259
  if (appLink && isLoggedIn) {
47130
- const current = () => untracked(navStore.appLink) === appLink;
47260
+ const current = () => untracked(ownAppLink) === appLink;
47131
47261
  agreementGate.view(appLink).then((view) => current() && relationType.set(view.type), () => current() && relationType.set(null));
47132
47262
  } else relationType.set(null);
47133
47263
  });
@@ -48594,6 +48724,7 @@ var SvgGeneratorToolBoxComponent = class SvgGeneratorToolBoxComponent {
48594
48724
  "disableRule",
48595
48725
  "extraData",
48596
48726
  "align",
48727
+ "badge",
48597
48728
  "showBack",
48598
48729
  "actionButton",
48599
48730
  "actionLabel",
@@ -51697,6 +51828,6 @@ i0.ɵɵngDeclareClassMetadata({
51697
51828
  }]
51698
51829
  }
51699
51830
  });
51700
- export { ACCESS_DOMAINS, APP_CONTEXT_REF, APP_LINK, APP_LOGO_ICON, APP_LOGO_SOURCE, APP_THEME_COLOR, ASSET_BASE_URL, AUDIENCE_ICONS, AUDIENCE_LEVELS, AccordionBodyDirective, AccordionComponent, AccordionGroupComponent, ActionComponent, AnimatedGraphsComponent, AppAvailability, AppCardComponent, AppIdentityService, AppLogoComponent, AppLogoState, AppRelationType, AppTileComponent, AssetStore, AssetUrlPipe, Assets, AudiencePickerBoxComponent, AudiencePickerComponent, AuthActivityPageComponent, AuthApiService, AuthStore, AutosizeDirective, BadgeComponent, BandingComponent, BaseArrayInputComponent, BaseRootWebComponent, BaseWebComponent, BrowserLocaleService, ButtonComponent, ButtonGroupComponent, CALLING_APP_HEADER, COMPONENT_INPUT_REGISTRY, CardComponent, CardWrapperComponent, CarouselComponent, ChartComponent, ChatBubbleComponent, CheckboxGroupComponent, CheckboxInputComponent, ClearableInputComponent, ClipboardService, ColComponent, ColorPickerInputComponent, CommentItemComponent, CommentsApiService, CommentsComponent, CommentsStore, CompactNumberPipe, ComponentInputComponent, ComponentStepperComponent, ConfigComponent, ConfirmComponent, ContextMenuComponent, CustomIconClass, CustomIconEditComponent, DEFAULT_AUDIENCE, DEFAULT_DENIAL, DEFAULT_DOC_ALIGN, DEFAULT_DOC_DENSITY, DEFAULT_DOC_VARIANT, DEFAULT_FILTER_RANGE_MODE, DEFAULT_FILTER_VARIANT, DEFAULT_NAV_PARAM, DEFAULT_NAV_SEGMENT, DEFAULT_SIZE, DOCK_MIN_PAGE_REMAINDER, DOCS_FOLDER, DOC_ACTION_ICONS, DOC_ALIGNS, DOC_DENSITIES, DOC_EDIT_ACTIONS, DOC_TOOLBAR_GROUPS, DOC_VARIANTS, DashboardCardComponent, DateInputComponent, DatePickerComponent, DeviceService, DocComponent, DocEditorComponent, DomService, Domain, DotGridComponent, DragListDirective, DragListItemDirective, DraggableDirective, DropdownInputComponent, FILTER_GROUP_CONTEXT, FILTER_RANGE_MODES, FILTER_VARIANTS, FLEX_VARIANTS, FOLDER_PICK_LISTENER, FORM_ASSET_FOLDER, FileService, FileUploadDirective, FileUploadInputComponent, FlexComponent, FlexItemComponent, FormGroupComponent, FrameComponent, FreezeService, GRID_BREAKPOINTS, GetNavService, HOST_SESSION, HeaderComponent, HighlightDirective, HttpService, HttpSharingClient, ICON_SOURCE, IS_DESIGN_MODE, IS_SIDE_PANEL, IconComponent, ImgComponent, InputType, InstrumentScoreComponent, InterceptorObservables, JumbotronComponent, KeyValueComponent, LAYOUT_ASSET_FOLDER, LOADING_ACTIONS_REF, LOGIN_COMPONENT, LOGIN_STORE, LOGO_GLYPH_MAX_BYTES, LanguageComponent, ListComponent, LogoComponent, LogoGlyphInputComponent, MAG_SOCKET_EVENT, MHeroColorDirective, MHeroComponent, MODAL_REF, MODAL_STORE_REF, MOUNT_STATIC_SEGMENT, MOUNT_TOKEN, MRefDirective, MStepComponent, MURL_PARAM, MURL_SEP, ManifestEnrichmentService, MarginDirective, MenuComponent, ModalDirective, ModalRef, ModalStore, MoneyPipe, MultiRangeInputComponent, MultiselectInputComponent, MurlUrlSerializer, NAV_DEFAULT_MURL, NAV_ID_SEP, NAV_MAIN_BUTTONS, NAV_SEGMENT_RE, NAV_STORE_REF, NAV_WC_COMPONENTS, NAV_WIDGET_MAP, NavComponent, NavDetailsComponent, NavHeaderComponent, NavMenuComponent, NavStore, NavTrailComponent, NothingComponent, NotificationElementComponent, NotificationGroupComponent, NotificationPopupComponent, NotificationService, NotificationStore, NotificationType, NotificationWidgetComponent, ONE_ASSET_BASE_URL, OPTIONS_SOURCE, OVERLAY_WIDGETS, OneApp, OptionsSourceDirective, OverlayBodyComponent, OverlayRef, OverlayService, PLATFORM_BUTTON_NAV_IDS, PLATFORM_EXTENSIBLE_NAV_IDS, PLATFORM_NAV_MAP, PLATFORM_ROOT_CHILDREN, PLUGIN_FALLBACK_LANG, PLUGIN_OUTPUT_EVENT, PLUGIN_SCREENS, PaddingDirective, PaginationComponent, PanelComponent, PercentagePipe, PlaygroundComponent, PluginComponent, PluginInputComponent, PluginOutputComponent, PositionDirective, PwaInstallComponent, RECENT_SEARCH_LIMIT, REMOTE_BOOT_TIMEOUT_MS, REMOTE_PAGE_RELOAD, ROOT_NAV, RadioGroupComponent, RadioInputComponent, RangeInputComponent, RatingInputComponent, ReactiveElementComponent, RemoteComponent, RemoteLoaderService, ResizeElementComponent, RouteContainer, RowComponent, SEARCH_ANSWER_KEY, SEARCH_LABEL_KEY, SEARCH_QUERY, SEARCH_RESULTS_EVENT, SECTION_ACCORDION_GROUP, SECTION_FORM_CONTEXT, SECTION_TABLE_VARIANTS, SHARED_ICONS, SHARING_CLIENT, SIZE_CONTEXT, SPACING_INWARD, SPLASH_ID, ScoreComponent, ScrollComponent, ScrollService, SearchPanelComponent, SearchStore, SearchUserPanelComponent, SectionAccordionDirective, SectionAccordionGroupDirective, SectionBackComponent, SectionBadgesComponent, SectionButtonGroupComponent, SectionCardComponent, SectionCarouselComponent, SectionComponent, SectionFilterComponent, SectionFilterGroupComponent, SectionFilterMenuComponent, SectionFilterPanelComponent, SectionFilterRangePanelComponent, SectionFooterComponent, SectionFormComponent, SectionFormItemComponent, SectionHeaderComponent, SectionHeroComponent, SectionPaginationComponent, SectionSearchComponent, SectionStepperComponent, SectionTableCellComponent, SectionTableComponent, SectionTableRowComponent, SectionTableSortPipe, SectionTabsComponent, SectionToggleComponent, SectionToggleItemDirective, SelectableCardInputComponent, SelectorDirective, SettingsSearchBarComponent, SettingsSearchService, ShapeComponent, SharedStoreRegistry, SidePanelDirective, Size, SocketStore, SortComponent, StatComponent, StepComponent, StepperComponent, StepsComponent, StorageService, StrokeLinecap, StrokeLinejoin, SummaryComponent, SvgGeneratorComponent, SvgGeneratorService, SvgService, TOTAL_COLUMNS, TRANSLATION_SOURCE, TableComponent, TechnicalMeterComponent, TextInputComponent, TextOutputComponent, TextareaInputComponent, ThemeComponent, ThemeDataService, ThemeService, ThemeStore, TimeAgoPipe, TimelineComponent, ToggleButtonComponent, ToggleInputComponent, ToggleRadioInputComponent, ToolTipDirective, TooltipComponent, TranslatePipe, TranslateService, TreeGridComponent, URL_SEP, USER_STORE_REF, USER_TAB_MAP, UniverseComponent, UserApiService, UserAvatarComponent, UserComponent, UserNavComponent, UserSettingsComponent, UserStore, WC_BUNDLE, WC_NAVIGATE_EVENT, WC_ROUTE_CHANGED_EVENT, WC_SEARCH_GROUPS, WIN_USER_TAB_HOOK, WIN_USER_TAB_KEY, WatermarkComponent, WcRouterStore, WrapperInputComponent, activeElementWithin, allowedCodes, anchorNavId, appColorBrand, appLogoShadowColor, appThemeColorFactory, applyColorsToElement, applyDocEdit, assetOptions, baseUnderHost, bootstrapMagApp, bootstrapPwaInstall, browserLocale, buildWcBaseUrl, calculateLuminance, calculateRanks, cellText, checkDoc, checkFilterCondition, childNavId, claimDenial, classListSignal, coerceSize, cornerEdge, cornerSide, createLoadingState, createMap, createPlatformNavMap, createPluginElement, definePluginScreens, definedWcBundleOf, definedWcTierOf, deriveAvatarGradient, deriveContrastColor, deriveOppositeColor, derivePropertyName, docActionKey, docAssetCandidates, docProblemKey, docRemotePath, emailValidation, escapeHtml, 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, isReadableOn, isSize, isTierPreview, isUrlLocalhost, isValidNavId, isValidNavSegment, isWebComponent, linkToId, linkToNav, loadingActions, logoGlyphMaskUrl, mInterceptor, manualValidation, matchFieldValidation, matchMount, maxLengthValidation, maxValidation, mergePlatformNav, mergeUnique, mergeUniqueBy, mergeUniqueWith, minAgeValidation, minLengthValidation, minValidation, miniMarkInlineToHtml, miniMarkToHtml, mountFor, mountPatternProblem, mountPatternText, mountSegmentOf, mountTokenOf, navIdChain, navIdFor, navIdSegment, navIdToRoutePath, navIdToSegments, navParamOf, navTailMatcher, navToId, navVisibilityGuard, nextSectionTableSort, normalizeAppColor, normalizeAssetOptions, offsetOfLine, outletPathOf, outletSegmentsOf, paintAppColor, parentNavId, parseAddress, parseColor, parseMountPattern, parsePatternNames, patternValidation, patternsValidation, permissionRefusal, pickCount, pickSupportedLanguage, picksMembers, platformNavWidgets, pluginTag, presetDefaultOption, privateGuard, processImageToSvg, provideAppContext, provideMagAppConfig, provideMagWcConfig, provideMagWcRoutes, provideModalComponents, provideMurlUrlSerializer, provideNavWidgets, provideOverlayWidgets, providePlatformNavWidgets, providePluginRuntime, provideSearch, provideSizeContext, provideUserTabs, publicGuard, readFieldPatterns, readableAppColor, rebuildLogoGlyph, recordDefinedWcTier, registerSessionRenewal, remoteOutletRoute, renderAddress, renderDocument, requiredValidation, resolveConfigAsset, resolveIconSize, resolvePallet, resolvePatternRules, resolveSize, resolveSpacing, rgbToHex, rgbToHsl, rowHasChildren, samePatterns, sectionTableColumnId, sectionTableColumnWidths, sectionTableFrozenCount, segmentsToNavId, setProperty, setTreeGridChildren, setWcLocalPort, setWcTier, settingsWidgets, shouldShowBadge, sortSectionTableRows, splashHtml, splitNavId, splitOnMatch, splitPath, stringToColor, tailRouteOf, toAttrBool, toAttrNumber, toCssLength, toHostNavId, toLength, toLocalNavId, toggleGroup, toggleTreeGridRow, toggleUid, unfetchedPlatformNav, ungroupedDocActions, urlValidation, wcLocalBaseOf, wcTierOf, withLevel };
51831
+ export { ACCESS_DOMAINS, APP_CONTEXT_REF, APP_LINK, APP_LOGO_ICON, APP_LOGO_SOURCE, APP_THEME_COLOR, ASSET_BASE_URL, AUDIENCE_ICONS, AUDIENCE_LEVELS, AccordionBodyDirective, AccordionComponent, AccordionGroupComponent, ActionComponent, AnimatedGraphsComponent, AppAvailability, AppCardComponent, AppIdentityService, AppLogoComponent, AppLogoState, AppRelationType, AppTileComponent, AssetStore, AssetUrlPipe, Assets, AudiencePickerBoxComponent, AudiencePickerComponent, AuthActivityPageComponent, AuthApiService, AuthStore, AutosizeDirective, BadgeComponent, BandingComponent, BaseArrayInputComponent, BaseRootWebComponent, BaseWebComponent, BrowserLocaleService, ButtonComponent, ButtonGroupComponent, CALLING_APP_HEADER, COMPONENT_INPUT_REGISTRY, CardComponent, CardWrapperComponent, CarouselComponent, ChartComponent, ChatBubbleComponent, CheckboxGroupComponent, CheckboxInputComponent, ClearableInputComponent, ClipboardService, ColComponent, ColorPickerInputComponent, CommentItemComponent, CommentsApiService, CommentsComponent, CommentsStore, CompactNumberPipe, ComponentInputComponent, ComponentStepperComponent, ConfigComponent, ConfirmComponent, ContextMenuComponent, CustomIconClass, CustomIconEditComponent, DEFAULT_AUDIENCE, DEFAULT_DENIAL, DEFAULT_DOC_ALIGN, DEFAULT_DOC_DENSITY, DEFAULT_DOC_VARIANT, DEFAULT_FILTER_RANGE_MODE, DEFAULT_FILTER_VARIANT, DEFAULT_NAV_PARAM, DEFAULT_NAV_SEGMENT, DEFAULT_SIZE, DOCK_MIN_PAGE_REMAINDER, DOCS_FOLDER, DOC_ACTION_ICONS, DOC_ALIGNS, DOC_DENSITIES, DOC_EDIT_ACTIONS, DOC_TOOLBAR_GROUPS, DOC_VARIANTS, DashboardCardComponent, DateInputComponent, DatePickerComponent, DeviceService, DocComponent, DocEditorComponent, DomService, Domain, DotGridComponent, DragListDirective, DragListItemDirective, DraggableDirective, DropdownInputComponent, FILTER_GROUP_CONTEXT, FILTER_RANGE_MODES, FILTER_VARIANTS, FLEX_VARIANTS, FOLDER_PICK_LISTENER, FORM_ASSET_FOLDER, FileService, FileUploadDirective, FileUploadInputComponent, FlexComponent, FlexItemComponent, FormGroupComponent, FrameComponent, FreezeService, GRID_BREAKPOINTS, GetNavService, HOST_SESSION, HeaderComponent, HighlightDirective, HttpService, HttpSharingClient, ICON_SOURCE, IS_DESIGN_MODE, IS_SIDE_PANEL, IconComponent, ImgComponent, InputType, InstrumentScoreComponent, InterceptorObservables, JumbotronComponent, KeyValueComponent, LAYOUT_ASSET_FOLDER, LOADING_ACTIONS_REF, LOGIN_COMPONENT, LOGIN_STORE, LOGO_GLYPH_MAX_BYTES, LanguageComponent, ListComponent, LogoComponent, LogoGlyphInputComponent, MAG_SOCKET_EVENT, MHeroColorDirective, MHeroComponent, MODAL_REF, MODAL_STORE_REF, MOUNT_STATIC_SEGMENT, MOUNT_TOKEN, MRefDirective, MStepComponent, MURL_PARAM, MURL_SEP, ManifestEnrichmentService, MarginDirective, MenuComponent, ModalDirective, ModalRef, ModalStore, MoneyPipe, MultiRangeInputComponent, MultiselectInputComponent, MurlUrlSerializer, NAV_DEFAULT_MURL, NAV_ID_SEP, NAV_MAIN_BUTTONS, NAV_SEGMENT_RE, NAV_STORE_REF, NAV_WC_COMPONENTS, NAV_WIDGET_MAP, NavComponent, NavDetailsComponent, NavHeaderComponent, NavMenuComponent, NavStore, NavTrailComponent, NothingComponent, NotificationElementComponent, NotificationGroupComponent, NotificationPopupComponent, NotificationService, NotificationStore, NotificationType, NotificationWidgetComponent, ONE_ASSET_BASE_URL, OPTIONS_SOURCE, OVERLAY_WIDGETS, OneApp, OptionsSourceDirective, OverlayBodyComponent, OverlayRef, OverlayService, PLATFORM_BUTTON_NAV_IDS, PLATFORM_EXTENSIBLE_NAV_IDS, PLATFORM_NAV_MAP, PLATFORM_ROOT_CHILDREN, PLUGIN_FALLBACK_LANG, PLUGIN_OUTPUT_EVENT, PLUGIN_SCREENS, PaddingDirective, PaginationComponent, PanelComponent, PercentagePipe, PlaygroundComponent, PluginComponent, PluginInputComponent, PluginOutputComponent, PositionDirective, PwaInstallComponent, RECENT_SEARCH_LIMIT, REMOTE_BOOT_TIMEOUT_MS, REMOTE_PAGE_RELOAD, ROOT_NAV, RadioGroupComponent, RadioInputComponent, RangeInputComponent, RatingInputComponent, ReactiveElementComponent, RemoteComponent, RemoteLoaderService, ResizeElementComponent, RouteContainer, RowComponent, SEARCH_ANSWER_KEY, SEARCH_LABEL_KEY, SEARCH_QUERY, SEARCH_RESULTS_EVENT, SECTION_ACCORDION_GROUP, SECTION_FORM_CONTEXT, SECTION_TABLE_VARIANTS, SHARED_ICONS, SHARING_CLIENT, SIZE_CONTEXT, SPACING_INWARD, SPLASH_ID, ScoreComponent, ScrollComponent, ScrollService, SearchPanelComponent, SearchStore, SearchUserPanelComponent, SectionAccordionDirective, SectionAccordionGroupDirective, SectionBackComponent, SectionBadgesComponent, SectionButtonGroupComponent, SectionCardComponent, SectionCarouselComponent, SectionComponent, SectionFilterComponent, SectionFilterGroupComponent, SectionFilterMenuComponent, SectionFilterPanelComponent, SectionFilterRangePanelComponent, SectionFooterComponent, SectionFormComponent, SectionFormItemComponent, SectionHeaderComponent, SectionHeroComponent, SectionPaginationComponent, SectionSearchComponent, SectionStepperComponent, SectionTableCellComponent, SectionTableComponent, SectionTableRowComponent, SectionTableSortPipe, SectionTabsComponent, SectionToggleComponent, SectionToggleItemDirective, SelectableCardInputComponent, SelectorDirective, SettingsSearchBarComponent, SettingsSearchService, ShapeComponent, SharedStoreRegistry, SidePanelDirective, Size, SocketStore, SortComponent, StatComponent, StepComponent, StepperComponent, StepsComponent, StorageService, StrokeLinecap, StrokeLinejoin, SummaryComponent, SvgGeneratorComponent, SvgGeneratorService, SvgService, TOTAL_COLUMNS, TRANSLATION_SOURCE, TableComponent, TechnicalMeterComponent, TextInputComponent, TextOutputComponent, TextareaInputComponent, ThemeComponent, ThemeDataService, ThemeService, ThemeStore, TimeAgoPipe, TimelineComponent, ToggleButtonComponent, ToggleInputComponent, ToggleRadioInputComponent, ToolTipDirective, TooltipComponent, TranslatePipe, TranslateService, TreeGridComponent, URL_SEP, USER_STORE_REF, USER_TAB_MAP, UniverseComponent, UserApiService, UserAvatarComponent, UserComponent, UserNavComponent, UserSettingsComponent, UserStore, WC_BUNDLE, WC_NAVIGATE_EVENT, WC_ROUTE_CHANGED_EVENT, WC_SEARCH_GROUPS, WIN_USER_TAB_HOOK, WIN_USER_TAB_KEY, WatermarkComponent, WcRouterStore, WrapperInputComponent, activeElementWithin, allowedCodes, anchorNavId, appColorBrand, appLogoShadowColor, appThemeColorFactory, applyColorsToElement, applyDocEdit, assetOptions, baseUnderHost, bootstrapMagApp, bootstrapPwaInstall, browserLocale, buildWcBaseUrl, calculateLuminance, calculateRanks, cellText, checkDoc, checkFilterCondition, childNavId, claimDenial, classListSignal, coerceSize, cornerEdge, cornerSide, createLoadingState, createMap, createPlatformNavMap, createPluginElement, definePluginScreens, definedWcBundleOf, definedWcTierOf, deriveAvatarGradient, deriveContrastColor, deriveOppositeColor, derivePropertyName, docActionKey, docAssetCandidates, docProblemKey, docRemotePath, emailValidation, escapeHtml, 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, isNavCountConfig, isNavInstanceConfig, isNavMenuConfig, isNavRowsConfig, isNavVisibilityConfig, isPlatformNavId, isPlatformPanelNavId, isReadableOn, isSize, isTierPreview, isUrlLocalhost, isValidNavId, isValidNavSegment, isWebComponent, linkToId, linkToNav, loadingActions, logoGlyphMaskUrl, mInterceptor, manualValidation, matchFieldValidation, matchMount, maxLengthValidation, maxValidation, mergePlatformNav, mergeUnique, mergeUniqueBy, mergeUniqueWith, minAgeValidation, minLengthValidation, minValidation, miniMarkInlineToHtml, miniMarkToHtml, mountFor, mountPatternProblem, mountPatternText, mountSegmentOf, mountTokenOf, navIdChain, navIdFor, navIdSegment, navIdToRoutePath, navIdToSegments, navParamOf, navTailMatcher, navToId, navVisibilityGuard, nextSectionTableSort, normalizeAppColor, normalizeAssetOptions, offsetOfLine, outletPathOf, outletSegmentsOf, paintAppColor, parentNavId, parseAddress, parseColor, parseMountPattern, parsePatternNames, patternValidation, patternsValidation, permissionRefusal, pickCount, pickSupportedLanguage, picksMembers, platformNavWidgets, pluginTag, presetDefaultOption, privateGuard, processImageToSvg, provideAppContext, provideMagAppConfig, provideMagWcConfig, provideMagWcRoutes, provideModalComponents, provideMurlUrlSerializer, provideNavWidgets, provideOverlayWidgets, providePlatformNavWidgets, providePluginRuntime, provideSearch, provideSizeContext, provideUserTabs, publicGuard, readFieldPatterns, readableAppColor, rebuildLogoGlyph, recordDefinedWcTier, registerSessionRenewal, remoteOutletRoute, renderAddress, renderDocument, requiredValidation, resolveConfigAsset, resolveIconSize, resolvePallet, resolvePatternRules, resolveSize, resolveSpacing, rgbToHex, rgbToHsl, rowHasChildren, samePatterns, sectionTableColumnId, sectionTableColumnWidths, sectionTableFrozenCount, segmentsToNavId, setProperty, setTreeGridChildren, setWcLocalPort, setWcTier, settingsWidgets, shouldShowBadge, sortSectionTableRows, splashHtml, splitNavId, splitOnMatch, splitPath, stringToColor, tailRouteOf, toAttrBool, toAttrNumber, toCssLength, toHostNavId, toLength, toLocalNavId, toggleGroup, toggleTreeGridRow, toggleUid, unfetchedPlatformNav, ungroupedDocActions, urlValidation, wcLocalBaseOf, wcTierOf, withLevel };
51701
51832
 
51702
51833
  //# sourceMappingURL=magmonium-one.mjs.map