@magmonium/one 0.3.11 → 0.3.13

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.
@@ -4047,6 +4047,20 @@ const navMenuOwnerId = (navId, navMap, hasOwnContent = false, dynamicRows = {},
4047
4047
  }
4048
4048
  return visible;
4049
4049
  };
4050
+ /**
4051
+ * Whether a menu row earns the chevron that Browses into it: a Url whose Nav
4052
+ * would draw rows of its own. A Murl row already opens its panel over the same
4053
+ * Page, so a chevron would only repeat the row (CONTEXT.md Browse).
4054
+ *
4055
+ * A row source counts as though still answering: its rows arrive whenever the
4056
+ * store behind it fills, and a chevron waiting on them would pop in late or
4057
+ * not at all. One that resolves nothing leaves the Browse on the empty state.
4058
+ */
4059
+ const isBrowsable = (navId, navMap, dynamicRows, instances, hidden) => navMap[navId]?.kind === 'url' &&
4060
+ menuChildIds(navId, navMap, Object.fromEntries(Object.entries(dynamicRows).map(([id, rows]) => [
4061
+ id,
4062
+ { ...rows, loading: true },
4063
+ ])), instances, hidden).length > 0;
4050
4064
  /**
4051
4065
  * The rows one panel draws. A `dynamic` child with a NavRowSource behind it is
4052
4066
  * **transparent** the way a Default Nav is: its resolved rows are spliced where
@@ -4067,12 +4081,21 @@ const buildNavMenus = (navId, navMap, anchor, dynamicRows = {}, routeParams, ins
4067
4081
  // the rows a source resolved: a panel drawn beneath a dynamic Nav is a
4068
4082
  // panel every entry in it routes behind.
4069
4083
  const inherited = navParamsFor(parentNavId(childId) ?? childId, navMap, routeParams);
4084
+ const browsable = isBrowsable(childId, navMap, dynamicRows, instances, hidden)
4085
+ ? { browsable: true }
4086
+ : {};
4070
4087
  if (!nav || nav.presentation !== 'dynamic' || !resolved) {
4071
4088
  return [
4072
- toTrailItem(childId, navMap, anchor, undefined, navParamsFor(childId, navMap, routeParams)),
4089
+ {
4090
+ ...toTrailItem(childId, navMap, anchor, undefined, navParamsFor(childId, navMap, routeParams)),
4091
+ ...browsable,
4092
+ },
4073
4093
  ];
4074
4094
  }
4075
- return resolved.rows.map((row) => navRowTrailItem(childId, nav, row, navMap, anchor, inherited));
4095
+ return resolved.rows.map((row) => ({
4096
+ ...navRowTrailItem(childId, nav, row, navMap, anchor, inherited),
4097
+ ...browsable,
4098
+ }));
4076
4099
  });
4077
4100
  /**
4078
4101
  * Merges a widget's emitted trail over the derived one, matching by depth.
@@ -4289,6 +4312,7 @@ const initialState$3 = {
4289
4312
  outlets: [],
4290
4313
  navOpenedByUser: false,
4291
4314
  menuNavId: undefined,
4315
+ menuParams: undefined,
4292
4316
  keepPanelOnPathChange: false,
4293
4317
  panelPushed: false,
4294
4318
  navScrolledDown: false,
@@ -4394,15 +4418,24 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4394
4418
  * it: with nothing registered for `/page|search`, the global `root_search`
4395
4419
  * is what that address meant, and falling through to it beats leaving the
4396
4420
  * page's own menu up while a panel is addressed.
4421
+ *
4422
+ * A Browse is the one key: it names a Nav the map knows, not an Address,
4423
+ * and falling through to the Address's own panel would put back exactly
4424
+ * what the User browsed away from.
4397
4425
  */
4398
- const widgetNavIds = computed(() => {
4399
- const anchored = id();
4426
+ const lookupKeys = (anchored) => {
4400
4427
  const murl = store.murl();
4401
4428
  if (!murl.length)
4402
4429
  return [anchored];
4403
4430
  const rooted = navIdFor(ROOT_NAV$1, murl);
4404
4431
  return anchored === rooted ? [anchored] : [anchored, rooted];
4432
+ };
4433
+ const widgetNavIds = computed(() => {
4434
+ const browsed = store.menuNavId();
4435
+ return browsed ? [browsed] : lookupKeys(id());
4405
4436
  }, ...(ngDevMode ? [{ debugName: "widgetNavIds" }] : /* istanbul ignore next */ []));
4437
+ /** The keys the Address alone names, whatever a Browse is showing. */
4438
+ const addressNavIds = computed(() => lookupKeys(navIdFor(anchorRouteNavId(), store.murl())), ...(ngDevMode ? [{ debugName: "addressNavIds" }] : /* istanbul ignore next */ []));
4406
4439
  /** The m-ui slot first, then every named mount (ADR 0036). */
4407
4440
  const allMounts = computed(() => {
4408
4441
  const appLink = store.appLink();
@@ -4510,14 +4543,15 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4510
4543
  }
4511
4544
  return undefined;
4512
4545
  };
4513
- const widgetEntry = computed(() => {
4514
- for (const candidate of widgetNavIds()) {
4546
+ const firstEntry = (keys) => {
4547
+ for (const candidate of keys) {
4515
4548
  const hit = entryAt(candidate);
4516
4549
  if (hit)
4517
4550
  return { ...hit, navId: candidate };
4518
4551
  }
4519
4552
  return undefined;
4520
- }, ...(ngDevMode ? [{ debugName: "widgetEntry" }] : /* istanbul ignore next */ []));
4553
+ };
4554
+ const widgetEntry = computed(() => firstEntry(widgetNavIds()), ...(ngDevMode ? [{ debugName: "widgetEntry" }] : /* istanbul ignore next */ []));
4521
4555
  /**
4522
4556
  * Every `dynamic` Nav with a NavRowSource behind it, resolved. Walks the
4523
4557
  * whole map rather than the open panel's own descent: the rows are drawn by
@@ -4539,10 +4573,22 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4539
4573
  }
4540
4574
  return out;
4541
4575
  }, ...(ngDevMode ? [{ debugName: "dynamicRows" }] : /* istanbul ignore next */ []));
4576
+ /**
4577
+ * The instances the panel is drawn for: the Browse's while one is open —
4578
+ * the Router still describes the Page behind the panel, not the Nav the
4579
+ * User is looking into — and the Router's otherwise (CONTEXT.md Browse).
4580
+ */
4581
+ const panelParams = computed(() => store.menuNavId()
4582
+ ? Object.fromEntries(Object.entries(store.menuParams() ?? {}).map(([name, value]) => [
4583
+ name,
4584
+ String(value),
4585
+ ]))
4586
+ : store.routeParams(), ...(ngDevMode ? [{ debugName: "panelParams" }] : /* istanbul ignore next */ []));
4542
4587
  /**
4543
4588
  * Every `dynamic` Nav with a NavInstanceSource behind it, resolved against
4544
- * the parameters the Router currently holds (ADR 0030). The whole
4545
- * `routeParams` record goes in, not just this Nav's own value: a resolver
4589
+ * the parameters the panel is drawn for (ADR 0030) — a Browse's own, so the
4590
+ * trail names the book being looked into rather than the Page's. The whole
4591
+ * parameter record goes in, not just this Nav's own value: a resolver
4546
4592
  * for an issue is routinely a lookup keyed by the book above it, and the
4547
4593
  * design tool binds arguments by parameter name.
4548
4594
  *
@@ -4553,7 +4599,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4553
4599
  */
4554
4600
  const dynamicInstances = computed(() => {
4555
4601
  const out = {};
4556
- const params = store.routeParams();
4602
+ const params = panelParams();
4557
4603
  for (const nav of Object.values(store.navMap())) {
4558
4604
  if (nav.presentation !== 'dynamic')
4559
4605
  continue;
@@ -4577,7 +4623,9 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4577
4623
  * here is what makes the menu recompute when the store behind it fills.
4578
4624
  */
4579
4625
  const visibilityReads = computed(() => {
4580
- const params = store.routeParams();
4626
+ // The panel's instances: a gate is a question about the book the User
4627
+ // is looking into, which a Browse may have moved off the Page's.
4628
+ const params = panelParams();
4581
4629
  const out = [];
4582
4630
  for (const nav of Object.values(store.navMap())) {
4583
4631
  const hit = entryAt(nav.navId);
@@ -4603,7 +4651,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4603
4651
  * missing would make the trigger depend on the thing it triggers.
4604
4652
  */
4605
4653
  const visibilityLoaders = computed(() => {
4606
- const params = store.routeParams();
4654
+ const params = panelParams();
4607
4655
  const out = [];
4608
4656
  for (const nav of Object.values(store.navMap())) {
4609
4657
  const hit = entryAt(nav.navId);
@@ -4715,8 +4763,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4715
4763
  * the anchored key would title the global panel after the page it opened
4716
4764
  * over.
4717
4765
  */
4718
- const panelNavId = computed(() => {
4719
- const hit = widgetEntry();
4766
+ const answeringNavId = (candidates, hit) => {
4720
4767
  if (hit)
4721
4768
  return hit.navId;
4722
4769
  // Nothing registered under either key, so the panel is a *menu*: the
@@ -4724,7 +4771,6 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4724
4771
  // global settings list, and reading it off the anchored key — a NavId no
4725
4772
  // asset holds — left the page's own menu up under its own header.
4726
4773
  const map = store.navMap();
4727
- const candidates = widgetNavIds();
4728
4774
  const rows = dynamicRows();
4729
4775
  return (candidates.find((c) => menuChildIds(c, map, rows, dynamicInstances(), hiddenNavIds())
4730
4776
  .length) ??
@@ -4733,8 +4779,18 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4733
4779
  // the panel back to *settings*, whose row it is, rather than climbing
4734
4780
  // an anchored key the map has never heard of all the way to root.
4735
4781
  candidates.find((c) => !!map[c]) ??
4736
- id());
4737
- }, ...(ngDevMode ? [{ debugName: "panelNavId" }] : /* istanbul ignore next */ []));
4782
+ candidates[0]);
4783
+ };
4784
+ const panelNavId = computed(() => answeringNavId(widgetNavIds(), widgetEntry()), ...(ngDevMode ? [{ debugName: "panelNavId" }] : /* istanbul ignore next */ []));
4785
+ /**
4786
+ * The Nav the User stands on as the panel reads it — `panelNavId` with any
4787
+ * Browse left out. The panel is where the User looks and the Address where
4788
+ * they stand (CONTEXT.md Browse): a row marks itself against this, so the
4789
+ * row they came through stays marked however far they Browse.
4790
+ */
4791
+ const standingNavId = computed(() => store.menuNavId()
4792
+ ? answeringNavId(addressNavIds(), firstEntry(addressNavIds()))
4793
+ : panelNavId(), ...(ngDevMode ? [{ debugName: "standingNavId" }] : /* istanbul ignore next */ []));
4738
4794
  const breadcrumbResult = computed(() => {
4739
4795
  const menuConfig = resolvedNavMenuConfig();
4740
4796
  const widgetConfig = resolvedWidget();
@@ -4746,7 +4802,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4746
4802
  dynamicRows: dynamicRows(),
4747
4803
  instances: dynamicInstances(),
4748
4804
  hidden: hiddenNavIds(),
4749
- routeParams: store.routeParams(),
4805
+ routeParams: panelParams(),
4750
4806
  breadcrumb: menuConfig?.breadcramb?.() ??
4751
4807
  (typeof widgetConfig?.breadcramb === 'function'
4752
4808
  ? widgetConfig.breadcramb()
@@ -4784,6 +4840,8 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4784
4840
  allMounts,
4785
4841
  menuMounts,
4786
4842
  panelNavId,
4843
+ standingNavId,
4844
+ panelParams,
4787
4845
  hasMurl,
4788
4846
  isNavOpened,
4789
4847
  isMNavOpened,
@@ -4965,7 +5023,17 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
4965
5023
  });
4966
5024
  });
4967
5025
  })));
4968
- const setSelected = (navId, params) => (navId ? goToNav(navId, params) : closePanel());
5026
+ /**
5027
+ * Whether following `navId` would land on the Page already stood on. The
5028
+ * Router ignores a navigation to the URL it is on, so following it left the
5029
+ * panel up over a Page that never moved (CONTEXT.md Browse).
5030
+ */
5031
+ const standsOn = (navId, params) => !untracked(() => splitNavId(navId, store.navMap())).murl.length &&
5032
+ untracked(() => addressFor(navId, params)) ===
5033
+ untracked(() => store.path());
5034
+ const setSelected = (navId, params) => navId && !standsOn(navId, params)
5035
+ ? goToNav(navId, params)
5036
+ : closePanel();
4969
5037
  /**
4970
5038
  * The one click that derives its own target instead of naming one. With no
4971
5039
  * default Murl it opens the panel without touching the address — that state
@@ -5046,45 +5114,29 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
5046
5114
  }));
5047
5115
  };
5048
5116
  /**
5049
- * In-panel "up". Murl steps replace the Address, so
5050
- * the browser back button still closes the whole panel. Leaving Murl
5051
- * space (or stepping while icon-opened) keeps the panel open so the menu
5052
- * follows the trail instead of closing (same exception as AppLogo).
5117
+ * In-panel "up", and a Browse like the trail's: it steps above the menu
5118
+ * actually shown — a leaf may already be showing its ancestor's rows, and
5119
+ * a Browse may already have moved the panel off the Address — and never
5120
+ * writes the Address, in menu space as in route space (CONTEXT.md Browse).
5121
+ * With no history entry of its own, the browser back button still closes
5122
+ * the whole panel.
5053
5123
  */
5054
5124
  const back = () => {
5055
5125
  if (!untracked(() => store.isNavOpened()))
5056
5126
  return;
5057
- const murl = untracked(() => store.murl());
5058
- // One Murl segment off the Address we are on, keeping the Anchor. Read
5059
- // from the Address rather than resolved through the map: an anchored
5060
- // panel's NavId (`root_page_settings_user`) names no node, so asking the
5061
- // map whether the parent is still a Murl answered no and sent a route
5062
- // path nothing matched — the `**` redirect then landed on home.
5063
- if (murl.length > 1) {
5064
- const path = untracked(() => store.path());
5065
- const base = path === URL_SEP ? URL_SEP : path.replace(/\/$/, '');
5066
- router.navigateByUrl(`${base}${MURL_SEP}${murl.slice(0, -1).join(MURL_SEP)}`, { replaceUrl: true });
5067
- return;
5068
- }
5069
- // The last Murl closes menu space and leaves the page we opened over,
5070
- // panel still up so the menu follows the trail instead of vanishing.
5071
- if (murl.length === 1) {
5072
- patchState(store, {
5073
- navOpenedByUser: true,
5074
- keepPanelOnPathChange: true,
5075
- });
5076
- router.navigateByUrl(untracked(() => store.path()), {
5077
- replaceUrl: true,
5078
- });
5079
- return;
5080
- }
5081
- // Start above the menu actually shown: a leaf may already be showing
5082
- // its ancestor's rows. Browsing that menu leaves the page in place.
5083
5127
  const owner = untracked(() => store.breadcrumb().header?.id);
5084
5128
  const parent = owner ? parentNavId(owner) : undefined;
5085
5129
  if (!parent)
5086
5130
  return;
5087
- patchState(store, { menuNavId: visibleNavId(parent) });
5131
+ browse(visibleNavId(parent), untracked(() => store.panelParams()));
5132
+ };
5133
+ /**
5134
+ * Moves the open panel onto another Nav and never the User: the Address,
5135
+ * and the Page behind the panel, stay put (CONTEXT.md Browse). What the
5136
+ * trail and a row's chevron call — only following a menu row moves.
5137
+ */
5138
+ const browse = (navId, params) => {
5139
+ patchState(store, { menuNavId: navId, menuParams: params });
5088
5140
  };
5089
5141
  const loadNav = rxMethod(pipe(filter((req) => !!req.navId), tap(() => untracked(() => patchState(store, { navLoading: true }))), switchMap$1(({ navId, appNavId }) => getNavService
5090
5142
  .getNav(navId, untracked(() => store.navMap()), {
@@ -5131,6 +5183,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
5131
5183
  loadNav,
5132
5184
  registerWidgets,
5133
5185
  back,
5186
+ browse,
5134
5187
  resolveUrl,
5135
5188
  setNavScrolledDown,
5136
5189
  routePathFor: (navId) => navIdToRoutePath(navId, store.navMap()),
@@ -6496,9 +6549,10 @@ class MRefDirective {
6496
6549
  #renderer = inject(Renderer2);
6497
6550
  #elementRef = inject(ElementRef);
6498
6551
  /**
6499
- * Where the User stands as the panel reads it — the Nav that answered the
6500
- * address rather than the address's own key, so a row still knows itself
6501
- * when the panel was opened over a page (`/page|settings` → `root_settings`).
6552
+ * The Nav the panel shows — the one that answered the address rather than
6553
+ * the address's own key, so a row still knows itself when the panel was
6554
+ * opened over a page (`/page|settings` → `root_settings`), or the one a
6555
+ * Browse moved it onto.
6502
6556
  */
6503
6557
  #currentNavId = computed(() => this.#navRef?.panelNavId?.() ?? this.#navRef?.id(), ...(ngDevMode ? [{ debugName: "#currentNavId" }] : /* istanbul ignore next */ []));
6504
6558
  /**
@@ -6518,6 +6572,12 @@ class MRefDirective {
6518
6572
  }, ...(ngDevMode ? [{ debugName: "#paramsMatch" }] : /* istanbul ignore next */ []));
6519
6573
  /** Exact hit only — what a toggle re-clicks, and never an ancestor. */
6520
6574
  #currentlySelected = computed(() => this.mRef() === this.#currentNavId() && this.#paramsMatch(), ...(ngDevMode ? [{ debugName: "#currentlySelected" }] : /* istanbul ignore next */ []));
6575
+ /**
6576
+ * Where the User stands, which a Browse does not move: the panel may be
6577
+ * showing root's rows while the Address still stands under one of them, and
6578
+ * that row stays marked (CONTEXT.md Browse).
6579
+ */
6580
+ #standingNavId = computed(() => this.#navRef?.standingNavId?.() ?? this.#currentNavId(), ...(ngDevMode ? [{ debugName: "#standingNavId" }] : /* istanbul ignore next */ []));
6521
6581
  /**
6522
6582
  * The row the open Nav came through. A menu lists the Nav Menu Owner's
6523
6583
  * children, and the User may be standing deeper than a row — on a leaf that
@@ -6527,7 +6587,7 @@ class MRefDirective {
6527
6587
  */
6528
6588
  #currentlyActive = computed(() => {
6529
6589
  const target = this.mRef();
6530
- const current = this.#currentNavId();
6590
+ const current = this.#standingNavId();
6531
6591
  if (!target || !current)
6532
6592
  return false;
6533
6593
  if (current !== target && !current.startsWith(`${target}_`))
@@ -7691,7 +7751,7 @@ class SectionFormItemComponent extends ConfigComponent {
7691
7751
  break;
7692
7752
  }
7693
7753
  case InputType.TOGGLE: {
7694
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-CkbYy8Pd.mjs');
7754
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-DJwF5ohL.mjs');
7695
7755
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
7696
7756
  break;
7697
7757
  }
@@ -7703,12 +7763,12 @@ class SectionFormItemComponent extends ConfigComponent {
7703
7763
  break;
7704
7764
  }
7705
7765
  case InputType.PASSWORD: {
7706
- const { PasswordInputComponent } = await import('./magmonium-one-password-DFVMbkqp.mjs');
7766
+ const { PasswordInputComponent } = await import('./magmonium-one-password-DajHayGu.mjs');
7707
7767
  this.createDynamicComponent(seq, PasswordInputComponent);
7708
7768
  break;
7709
7769
  }
7710
7770
  case InputType.OTP: {
7711
- const { OtpInputComponent } = await import('./magmonium-one-otp-BdLmLccY.mjs');
7771
+ const { OtpInputComponent } = await import('./magmonium-one-otp-8373mtJP.mjs');
7712
7772
  this.createDynamicComponent(seq, OtpInputComponent);
7713
7773
  break;
7714
7774
  }
@@ -22446,7 +22506,7 @@ class WrapperInputComponent extends ConfigComponent {
22446
22506
  break;
22447
22507
  }
22448
22508
  case InputType.TOGGLE: {
22449
- const { ToggleInputComponent } = await import('./magmonium-one-toggle-CkbYy8Pd.mjs');
22509
+ const { ToggleInputComponent } = await import('./magmonium-one-toggle-DJwF5ohL.mjs');
22450
22510
  this.createDynamicComponent(seq, ToggleInputComponent, [], true);
22451
22511
  break;
22452
22512
  }
@@ -22458,12 +22518,12 @@ class WrapperInputComponent extends ConfigComponent {
22458
22518
  break;
22459
22519
  }
22460
22520
  case InputType.PASSWORD: {
22461
- const { PasswordInputComponent } = await import('./magmonium-one-password-DFVMbkqp.mjs');
22521
+ const { PasswordInputComponent } = await import('./magmonium-one-password-DajHayGu.mjs');
22462
22522
  this.createDynamicComponent(seq, PasswordInputComponent);
22463
22523
  break;
22464
22524
  }
22465
22525
  case InputType.OTP: {
22466
- const { OtpInputComponent } = await import('./magmonium-one-otp-BdLmLccY.mjs');
22526
+ const { OtpInputComponent } = await import('./magmonium-one-otp-8373mtJP.mjs');
22467
22527
  this.createDynamicComponent(seq, OtpInputComponent);
22468
22528
  break;
22469
22529
  }
@@ -24170,7 +24230,7 @@ class FileUploadInputComponent extends BaseInputComponent {
24170
24230
  const modalStore = this.modalStore;
24171
24231
  if (!modalStore)
24172
24232
  return undefined;
24173
- const { ImageEditorComponent } = await import('./magmonium-one-image-editor-CTLKPEYj.mjs');
24233
+ const { ImageEditorComponent } = await import('./magmonium-one-image-editor-C7CEM4H4.mjs');
24174
24234
  const ratio = String(this.config()?.ratio ?? '');
24175
24235
  return new Promise((resolve) => {
24176
24236
  const modalRef = new ModalRef();
@@ -33578,6 +33638,11 @@ class NavTrailComponent {
33578
33638
  navStore = inject(NavStore);
33579
33639
  headerColor = computed(() => this.themeStore.color()?.mm ?? '#fff', ...(ngDevMode ? [{ debugName: "headerColor" }] : /* istanbul ignore next */ []));
33580
33640
  fromUrl = computed(() => !!this.navStore.id(), ...(ngDevMode ? [{ debugName: "fromUrl" }] : /* istanbul ignore next */ []));
33641
+ /**
33642
+ * Moves the panel onto the entry's Nav and leaves the Address, and the Page
33643
+ * behind the panel, where they are (CONTEXT.md Browse).
33644
+ */
33645
+ browse = (navId, params) => this.navStore.browse(navId, params);
33581
33646
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NavTrailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33582
33647
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: NavTrailComponent, isStandalone: true, selector: "m-nav-trail", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "m-nav-trail" }, ngImport: i0, template: `
33583
33648
  @if (config(); as trail) {
@@ -33585,7 +33650,14 @@ class NavTrailComponent {
33585
33650
  @for (item of trail; track item.id; let i = $index; let last = $last) {
33586
33651
  <div class="trail-item" [style.animation-delay.ms]="i * 50">
33587
33652
  @if (item.nav; as nav) {
33588
- <a [mRef]="nav" [mRefParams]="item.navParams" class="trail-link">
33653
+ <!-- Browses: the trail moves the panel, never the User. -->
33654
+ <a
33655
+ class="trail-link"
33656
+ role="button"
33657
+ tabindex="0"
33658
+ (click)="browse(nav, item.navParams)"
33659
+ (keydown.enter)="browse(nav, item.navParams)"
33660
+ >
33589
33661
  {{ item.label | translate }}
33590
33662
  </a>
33591
33663
  } @else if (item.href; as href) {
@@ -33602,7 +33674,7 @@ class NavTrailComponent {
33602
33674
  }
33603
33675
  </nav>
33604
33676
  }
33605
- `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.m-nav-trail{display:block;flex:1;min-width:0}.nav-trail{display:flex;align-items:center;gap:.6rem;font-size:.725rem;letter-spacing:.04em;color:var(--m-text-tertiary);-webkit-user-select:none;user-select:none;font-weight:600}.trail-item{display:flex;align-items:center;gap:.6rem;animation:slide-in-trail .5s cubic-bezier(.16,1,.3,1)}.trail-link{color:inherit;text-decoration:none;padding:.25rem .6rem;border-radius:6px;transition:all .3s cubic-bezier(.16,1,.3,1);cursor:pointer;white-space:nowrap}.trail-link:hover{color:var(--m-mm);background:color-mix(in srgb,var(--m-mm) 6%,transparent);transform:translateY(-1px)}.trail-link:active{transform:scale(.96) translateY(0)}.trail-separator{display:flex;align-items:center;justify-content:center;opacity:.35;color:var(--m-text-tertiary);pointer-events:none;font-size:.625rem}.trail-separator .m-icon{--m-icon-size: .625rem;display:flex;align-items:center;justify-content:center}@keyframes slide-in-trail{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}\n"], dependencies: [{ kind: "directive", type: MRefDirective, selector: "[mRef]", inputs: ["mRef", "mRefLinkActive", "mRefToggle", "mRefParams"] }, { kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
33677
+ `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.m-nav-trail{display:block;flex:1;min-width:0}.nav-trail{display:flex;align-items:center;gap:.6rem;font-size:.725rem;letter-spacing:.04em;color:var(--m-text-tertiary);-webkit-user-select:none;user-select:none;font-weight:600}.trail-item{display:flex;align-items:center;gap:.6rem;animation:slide-in-trail .5s cubic-bezier(.16,1,.3,1)}.trail-link{color:inherit;text-decoration:none;padding:.25rem .6rem;border-radius:6px;transition:all .3s cubic-bezier(.16,1,.3,1);cursor:pointer;white-space:nowrap}.trail-link:hover{color:var(--m-mm);background:color-mix(in srgb,var(--m-mm) 6%,transparent);transform:translateY(-1px)}.trail-link:active{transform:scale(.96) translateY(0)}.trail-separator{display:flex;align-items:center;justify-content:center;opacity:.35;color:var(--m-text-tertiary);pointer-events:none;font-size:.625rem}.trail-separator .m-icon{--m-icon-size: .625rem;display:flex;align-items:center;justify-content:center}@keyframes slide-in-trail{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
33606
33678
  }
33607
33679
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NavTrailComponent, decorators: [{
33608
33680
  type: Component,
@@ -33612,7 +33684,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33612
33684
  @for (item of trail; track item.id; let i = $index; let last = $last) {
33613
33685
  <div class="trail-item" [style.animation-delay.ms]="i * 50">
33614
33686
  @if (item.nav; as nav) {
33615
- <a [mRef]="nav" [mRefParams]="item.navParams" class="trail-link">
33687
+ <!-- Browses: the trail moves the panel, never the User. -->
33688
+ <a
33689
+ class="trail-link"
33690
+ role="button"
33691
+ tabindex="0"
33692
+ (click)="browse(nav, item.navParams)"
33693
+ (keydown.enter)="browse(nav, item.navParams)"
33694
+ >
33616
33695
  {{ item.label | translate }}
33617
33696
  </a>
33618
33697
  } @else if (item.href; as href) {
@@ -33629,7 +33708,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33629
33708
  }
33630
33709
  </nav>
33631
33710
  }
33632
- `, imports: [MRefDirective, TranslatePipe, IconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
33711
+ `, imports: [TranslatePipe, IconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
33633
33712
  class: 'm-nav-trail',
33634
33713
  }, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}.m-nav-trail{display:block;flex:1;min-width:0}.nav-trail{display:flex;align-items:center;gap:.6rem;font-size:.725rem;letter-spacing:.04em;color:var(--m-text-tertiary);-webkit-user-select:none;user-select:none;font-weight:600}.trail-item{display:flex;align-items:center;gap:.6rem;animation:slide-in-trail .5s cubic-bezier(.16,1,.3,1)}.trail-link{color:inherit;text-decoration:none;padding:.25rem .6rem;border-radius:6px;transition:all .3s cubic-bezier(.16,1,.3,1);cursor:pointer;white-space:nowrap}.trail-link:hover{color:var(--m-mm);background:color-mix(in srgb,var(--m-mm) 6%,transparent);transform:translateY(-1px)}.trail-link:active{transform:scale(.96) translateY(0)}.trail-separator{display:flex;align-items:center;justify-content:center;opacity:.35;color:var(--m-text-tertiary);pointer-events:none;font-size:.625rem}.trail-separator .m-icon{--m-icon-size: .625rem;display:flex;align-items:center;justify-content:center}@keyframes slide-in-trail{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}\n"] }]
33635
33714
  }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }] } });
@@ -33773,6 +33852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33773
33852
  */
33774
33853
  class NavMenuComponent {
33775
33854
  _settingsSearch = inject(SettingsSearchService);
33855
+ _navRef = inject(NAV_STORE_REF, { optional: true });
33776
33856
  items = input(...(ngDevMode ? [undefined, { debugName: "items" }] : /* istanbul ignore next */ []));
33777
33857
  baseUrl = input(...(ngDevMode ? [undefined, { debugName: "baseUrl" }] : /* istanbul ignore next */ []));
33778
33858
  filterBySearch = input(false, ...(ngDevMode ? [{ debugName: "filterBySearch" }] : /* istanbul ignore next */ []));
@@ -33788,6 +33868,11 @@ class NavMenuComponent {
33788
33868
  return rawList;
33789
33869
  return rawList.filter((item) => item.label?.toLowerCase().includes(q));
33790
33870
  }, ...(ngDevMode ? [{ debugName: "navList" }] : /* istanbul ignore next */ []));
33871
+ /** Looks inside the row's Nav without following it (CONTEXT.md Browse). */
33872
+ browse = (item) => {
33873
+ if (item.nav)
33874
+ this._navRef?.browse?.(item.nav, item.navParams);
33875
+ };
33791
33876
  // A List draws rows it was handed as ListItems; a NavRef reaches the row
33792
33877
  // body through `row`, which is what the template reads through `let-item`.
33793
33878
  rows = computed(() => (this.navList() ?? []).map((item, index) => ({
@@ -33815,6 +33900,17 @@ class NavMenuComponent {
33815
33900
  </span>
33816
33901
  <span class="nav-menu__label">{{ item.label | translate }}</span>
33817
33902
  </a>
33903
+ <!-- The row follows the Nav; the chevron only Browses into it. -->
33904
+ @if (item.browsable) {
33905
+ <m-button
33906
+ class="nav-menu__browse"
33907
+ icon="chevron-right"
33908
+ iconOnly
33909
+ variant="ghost"
33910
+ label="nav-browse-into"
33911
+ (clicked)="browse(item)"
33912
+ />
33913
+ }
33818
33914
  } @else if (item.href; as href) {
33819
33915
  <a [href]="href" class="nav-menu__link">
33820
33916
  <span class="nav-menu__icon">
@@ -33835,7 +33931,7 @@ class NavMenuComponent {
33835
33931
  <div class="nav-menu">
33836
33932
  <m-list variant="menu" [data]="rows()" [template]="menuTemplate" />
33837
33933
  </div>
33838
- `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "directive", type: MRefDirective, selector: "[mRef]", inputs: ["mRef", "mRefLinkActive", "mRefToggle", "mRefParams"] }, { kind: "component", type: ListComponent, selector: "m-list, m-one-list", inputs: ["data", "element", "template", "variant", "orientation", "gap", "startIcon", "items", "noTranslate"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
33934
+ `, isInline: true, styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__browse{flex:none;margin-inline-end:.5rem;color:var(--m-text-tertiary)}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "m-icon, m-one-icon", inputs: ["config", "name", "color", "size", "one", "baseUrl", "remote"], outputs: ["configChange"] }, { kind: "directive", type: MRefDirective, selector: "[mRef]", inputs: ["mRef", "mRefLinkActive", "mRefToggle", "mRefParams"] }, { kind: "component", type: ListComponent, selector: "m-list, m-one-list", inputs: ["data", "element", "template", "variant", "orientation", "gap", "startIcon", "items", "noTranslate"] }, { kind: "component", type: ButtonComponent, selector: "m-button,m-one-button", inputs: ["config", "color", "labelClass", "fullWidth", "nav", "navParams", "href", "disabled", "variant", "name", "baseUrl", "one", "remote", "label", "noTranslate", "params", "noNative", "icon", "isRightIcon", "iconOnly", "stacked", "imgSrc", "nonClickable", "inverted", "isSubmit", "tabindex"], outputs: ["configChange", "clicked"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
33839
33935
  }
33840
33936
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NavMenuComponent, decorators: [{
33841
33937
  type: Component,
@@ -33857,6 +33953,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33857
33953
  </span>
33858
33954
  <span class="nav-menu__label">{{ item.label | translate }}</span>
33859
33955
  </a>
33956
+ <!-- The row follows the Nav; the chevron only Browses into it. -->
33957
+ @if (item.browsable) {
33958
+ <m-button
33959
+ class="nav-menu__browse"
33960
+ icon="chevron-right"
33961
+ iconOnly
33962
+ variant="ghost"
33963
+ label="nav-browse-into"
33964
+ (clicked)="browse(item)"
33965
+ />
33966
+ }
33860
33967
  } @else if (item.href; as href) {
33861
33968
  <a [href]="href" class="nav-menu__link">
33862
33969
  <span class="nav-menu__icon">
@@ -33877,7 +33984,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
33877
33984
  <div class="nav-menu">
33878
33985
  <m-list variant="menu" [data]="rows()" [template]="menuTemplate" />
33879
33986
  </div>
33880
- `, changeDetection: ChangeDetectionStrategy.OnPush, imports: [IconComponent, MRefDirective, TranslatePipe, ListComponent], 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__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"] }]
33987
+ `, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
33988
+ IconComponent,
33989
+ MRefDirective,
33990
+ TranslatePipe,
33991
+ ListComponent,
33992
+ ButtonComponent,
33993
+ ], styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;width:100%}.nav-menu{padding:0;margin:0}.nav-menu ul{display:flex;flex-direction:column;gap:0;padding:0;margin:0}.nav-menu li{padding:0;list-style:none;width:100%;border-bottom:1px solid rgba(0,0,0,.02)}.nav-menu li:last-child{border-bottom:none}.nav-menu__item{display:flex;align-items:center;gap:.75rem;width:100%;position:relative;color:var(--m-text-secondary);background:transparent}.nav-menu__item:not(:has(.nav-menu__link)){padding:.625rem 1rem}.nav-menu__link{display:flex;align-items:center;gap:.75rem;padding:.625rem 1rem;border-radius:0;transition:all .15s cubic-bezier(.4,0,.2,1);cursor:pointer;width:100%;color:inherit;text-decoration:none}.nav-menu__link:hover{background:#00000008;color:var(--m-text)}.nav-menu__link:hover .nav-menu__icon{color:var(--m-text)}.nav-menu__link:hover .nav-menu__label{color:var(--m-text);font-weight:600}.nav-menu__browse{flex:none;margin-inline-end:.5rem;color:var(--m-text-tertiary)}.nav-menu__icon{display:flex;align-items:center;justify-content:center;color:var(--m-text-tertiary);transition:color .15s ease;width:1.15rem;height:1.15rem}.nav-menu__icon .m-icon{display:flex;align-items:center}.nav-menu__label{flex:1;display:block;width:100%;font-size:.8125rem;font-weight:500;letter-spacing:.01em;color:inherit;text-decoration:none}.nav-menu__item:has(.active){background:linear-gradient(90deg,color-mix(in srgb,var(--m-mm) 6%,transparent) 0%,color-mix(in srgb,var(--m-mm) 2%,transparent) 60%,transparent 100%);color:var(--m-mm);border-radius:0}.nav-menu__item:has(.active):after{content:\"\";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,.05) 50%,transparent 100%);z-index:3}.nav-menu__item:has(.active) .nav-menu__icon{color:var(--m-mm);filter:drop-shadow(0 0 3px color-mix(in srgb,var(--m-mm) 20%,transparent))}.nav-menu__item:has(.active) .nav-menu__label{color:var(--m-mm);font-weight:700;letter-spacing:.015em}\n"] }]
33881
33994
  }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], baseUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "baseUrl", required: false }] }], filterBySearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterBySearch", required: false }] }] } });
33882
33995
 
33883
33996
  class SettingsSearchBarComponent {
@@ -39513,4 +39626,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
39513
39626
  */
39514
39627
 
39515
39628
  export { ClipboardService as $, ACCESS_DOMAINS as A, ButtonComponent as B, Assets as C, AuthActivityPageComponent as D, AuthApiService as E, AuthStore as F, AutosizeDirective as G, HeaderComponent$1 as H, InputType as I, BadgeComponent as J, BandingComponent as K, LabelComponent as L, MODAL_REF as M, BaseArrayInputComponent as N, BaseRootWebComponent as O, BaseWebComponent as P, ButtonGroupComponent as Q, RangeInputComponent as R, COMPONENT_INPUT_REGISTRY as S, TranslatePipe as T, CardComponent as U, CardWrapperComponent as V, CarouselComponent as W, ChartComponent as X, ChatBubbleComponent as Y, CheckboxInputComponent as Z, ClearableInputComponent as _, MIN_ZOOM as a, ImgComponent as a$, ColComponent as a0, ColorPickerInputComponent as a1, CommentItemComponent as a2, CommentsApiService as a3, CommentsComponent as a4, CommentsStore as a5, CompactNumberPipe as a6, ComponentInputComponent as a7, ComponentStepperComponent as a8, ConfigComponent as a9, Domain as aA, DotGridComponent as aB, DragListDirective as aC, DragListItemDirective as aD, DraggableDirective as aE, DropdownInputComponent as aF, FILTER_GROUP_CONTEXT as aG, FILTER_RANGE_MODES as aH, FILTER_VARIANTS as aI, FLEX_VARIANTS as aJ, FOLDER_PICK_LISTENER as aK, FORM_ASSET_FOLDER as aL, FileService as aM, FileUploadDirective as aN, FileUploadInputComponent as aO, FlexComponent as aP, FlexItemComponent as aQ, FormGroupComponent as aR, FrameComponent as aS, FreezeService as aT, GRID_BREAKPOINTS as aU, GetNavService as aV, HighlightDirective as aW, HttpService as aX, ICON_SOURCE as aY, IS_SIDE_PANEL as aZ, IconComponent as a_, ConfirmComponent as aa, ContextMenuComponent as ab, CustomIconClass as ac, CustomIconEditComponent as ad, DEFAULT_DENIAL as ae, DEFAULT_DOC_DENSITY as af, DEFAULT_DOC_VARIANT as ag, DEFAULT_FILTER_RANGE_MODE as ah, DEFAULT_FILTER_VARIANT as ai, DEFAULT_NAV_PARAM as aj, DEFAULT_NAV_SEGMENT as ak, DEFAULT_SIZE as al, DOCK_MIN_PAGE_REMAINDER as am, DOCS_FOLDER as an, DOC_ACTION_ICONS as ao, DOC_DENSITIES as ap, DOC_EDIT_ACTIONS as aq, DOC_TOOLBAR_GROUPS as ar, DOC_VARIANTS as as, DashboardCardComponent as at, DateInputComponent as au, DatePickerComponent as av, DeviceService as aw, DocComponent as ax, DocEditorComponent as ay, DomService as az, MAX_ZOOM as b, PercentagePipe as b$, InstrumentScoreComponent as b0, InterceptorObservables as b1, JumbotronComponent as b2, KeyValueComponent as b3, LAYOUT_ASSET_FOLDER as b4, LOGIN_COMPONENT as b5, LOGIN_STORE as b6, LanguageComponent as b7, ListComponent as b8, LogoComponent as b9, NavDetailsComponent as bA, NavHeaderComponent as bB, NavMenuComponent as bC, NavStore as bD, NavTrailComponent as bE, NothingComponent as bF, NotificationElementComponent as bG, NotificationGroupComponent as bH, NotificationPopupComponent as bI, NotificationService as bJ, NotificationStore as bK, NotificationType as bL, NotificationWidgetComponent as bM, ONE_ASSET_BASE_URL as bN, OPTIONS_SOURCE as bO, OVERLAY_WIDGETS as bP, OneApp as bQ, OptionsSourceDirective as bR, OverlayBodyComponent as bS, OverlayRef as bT, OverlayService as bU, PLATFORM_BUTTON_NAV_IDS as bV, PLATFORM_EXTENSIBLE_NAV_IDS as bW, PLATFORM_NAV_MAP as bX, PLATFORM_ROOT_CHILDREN as bY, PaginationComponent as bZ, PanelComponent as b_, MAG_SOCKET_EVENT as ba, MHeroColorDirective as bb, MHeroComponent as bc, MODAL_STORE_REF as bd, MOUNT_STATIC_SEGMENT as be, MOUNT_TOKEN as bf, MRefDirective as bg, MStepComponent as bh, MURL_PARAM as bi, MURL_SEP as bj, ManifestEnrichmentService as bk, MenuComponent as bl, ModalDirective as bm, ModalRef as bn, ModalStore as bo, MoneyPipe as bp, MultiRangeInputComponent as bq, MurlUrlSerializer as br, NAV_DEFAULT_MURL as bs, NAV_ID_SEP as bt, NAV_MAIN_BUTTONS as bu, NAV_SEGMENT_RE as bv, NAV_STORE_REF as bw, NAV_WC_COMPONENTS as bx, NAV_WIDGET_MAP as by, NavComponent as bz, cropRect as c, SocketStore as c$, PlaygroundComponent as c0, PositionDirective as c1, PwaInstallComponent as c2, REMOTE_PAGE_RELOAD as c3, ROOT_NAV$1 as c4, RadioGroupComponent as c5, RadioInputComponent as c6, RatingInputComponent as c7, ReactiveElementComponent as c8, RemoteComponent as c9, SectionFilterGroupComponent as cA, SectionFilterMenuComponent as cB, SectionFilterPanelComponent as cC, SectionFilterRangePanelComponent as cD, SectionFooterComponent as cE, SectionFormComponent as cF, SectionFormItemComponent as cG, SectionHeaderComponent as cH, SectionHeroComponent as cI, SectionPaginationComponent as cJ, SectionSearchComponent as cK, SectionStepperComponent as cL, SectionTableCellComponent as cM, SectionTableComponent as cN, SectionTableRowComponent as cO, SectionTableSortPipe as cP, SectionTabsComponent as cQ, SectionToggleComponent as cR, SectionToggleItemDirective as cS, SelectableCardInputComponent as cT, SelectorDirective as cU, SettingsSearchBarComponent as cV, SettingsSearchService as cW, ShapeComponent as cX, SharedStoreRegistry as cY, SidePanelDirective as cZ, Size as c_, RemoteLoaderService as ca, ResizeElementComponent as cb, RouteContainer as cc, RowComponent as cd, SEARCH_QUERY as ce, SEARCH_RESULTS_EVENT as cf, SECTION_ACCORDION_GROUP as cg, SECTION_FORM_CONTEXT as ch, SECTION_TABLE_VARIANTS as ci, SHARED_ICONS as cj, SIZE_CONTEXT as ck, ScoreComponent as cl, ScrollComponent as cm, ScrollService as cn, SearchPanelComponent as co, SearchStore as cp, SearchUserPanelComponent as cq, SectionAccordionDirective as cr, SectionAccordionGroupDirective as cs, SectionBackComponent as ct, SectionBadgesComponent as cu, SectionButtonGroupComponent as cv, SectionCardComponent as cw, SectionCarouselComponent as cx, SectionComponent as cy, SectionFilterComponent as cz, drawFramed as d, childNavId as d$, SortComponent as d0, StatComponent as d1, StepComponent as d2, StepperComponent as d3, StepsComponent as d4, StorageService as d5, StrokeLinecap as d6, StrokeLinejoin as d7, SummaryComponent as d8, SvgGeneratorComponent as d9, UserApiService as dA, UserAvatarComponent as dB, UserComponent as dC, UserNavComponent as dD, UserSettingsComponent as dE, UserStore as dF, WC_BUNDLE as dG, WC_NAVIGATE_EVENT as dH, WC_ROUTE_CHANGED_EVENT as dI, WC_SEARCH_GROUPS as dJ, WIN_USER_TAB_HOOK as dK, WIN_USER_TAB_KEY as dL, WatermarkComponent as dM, WcRouterStore as dN, WrapperInputComponent as dO, anchorNavId as dP, applyColorsToElement as dQ, applyDocEdit as dR, assetOptions as dS, bootstrapMagApp as dT, bootstrapPwaInstall as dU, buildWcBaseUrl as dV, calculateLuminance as dW, calculateRanks as dX, cellText as dY, checkDoc as dZ, checkFilterCondition as d_, SvgGeneratorService as da, SvgService as db, TOTAL_COLUMNS as dc, TRANSLATION_SOURCE as dd, TableComponent as de, TechnicalMeterComponent as df, TextInputComponent as dg, TextareaInputComponent as dh, ThemeComponent as di, ThemeDataService as dj, ThemeService as dk, ThemeStore as dl, TimeAgoPipe as dm, TimelineComponent as dn, ToggleButtonComponent as dp, ToggleInputComponent as dq, ToggleRadioInputComponent as dr, ToolTipDirective as ds, TooltipComponent as dt, TranslateService as du, TreeGridComponent as dv, URL_SEP as dw, USER_STORE_REF as dx, USER_TAB_MAP as dy, UniverseComponent as dz, encodeFramed as e, isExtensiblePlatformNavId as e$, claimDenial as e0, classListSignal as e1, coerceSize as e2, cornerEdge as e3, cornerSide as e4, createMap as e5, createPlatformNavMap as e6, definedWcTierOf as e7, deriveAvatarGradient as e8, deriveContrastColor as e9, flattenTreeGridRows as eA, formatBadgeCount as eB, fullName as eC, generateClipPath as eD, generateTransform as eE, getClassList as eF, getProperty as eG, getScrollParent as eH, getTierFromPreviewPath as eI, getTreeGridRow as eJ, getUniqueId as eK, getValue as eL, hasErrorComputed as eM, hexToRgb as eN, hslToRgb$1 as eO, initMagmoniumApp as eP, initialNotificationState as eQ, initialState$2 as eR, initials as eS, injectAuthenticate as eT, injectDefaultDenial as eU, injectInstallApp as eV, injectParentSize as eW, injectScrollSticky as eX, isBootRedirect as eY, isButtonName as eZ, isCancelledComputed as e_, deriveOppositeColor as ea, derivePropertyName as eb, docActionKey as ec, docAssetCandidates as ed, docProblemKey as ee, docRemotePath as ef, emailValidation as eg, evaluate as eh, evaluateBool as ei, fieldBoolean as ej, fieldNumber as ek, fieldString as el, filterHoldsList as em, filterHoldsOneBound as en, filterHoldsOptions as eo, filterHoldsRange as ep, filterList as eq, filterNumber as er, filterNumberList as es, filterOne as et, filterPanelOf as eu, filterPanelWidth as ev, filterRange as ew, filterTreeGridRows as ex, filterValueList as ey, filterValues as ez, clampFraming as f, provideModalComponents as f$, isJson as f0, isLoadingComputed as f1, isLocalhost as f2, isNavInstanceConfig as f3, isNavMenuConfig as f4, isNavRowsConfig as f5, isNavVisibilityConfig as f6, isPlatformNavId as f7, isSize as f8, isTierPreview as f9, navIdChain as fA, navIdFor as fB, navIdSegment as fC, navIdToRoutePath as fD, navIdToSegments as fE, navParamOf as fF, navTailMatcher as fG, navToId as fH, navVisibilityGuard as fI, nextSectionTableSort as fJ, normalizeAssetOptions as fK, offsetOfLine as fL, parentNavId as fM, parseAddress as fN, parseColor as fO, parseMountPattern as fP, parsePatternNames as fQ, patternValidation as fR, patternsValidation as fS, permissionRefusal as fT, platformNavWidgets as fU, privateGuard as fV, processImageToSvg as fW, provideAppContext as fX, provideMagAppConfig as fY, provideMagWcConfig as fZ, provideMagWcRoutes as f_, isUrlLocalhost as fa, isValidNavId as fb, isValidNavSegment as fc, isWebComponent as fd, linkToId as fe, linkToNav as ff, loadingActions as fg, mInterceptor as fh, manualValidation as fi, matchFieldValidation as fj, matchMount as fk, maxLengthValidation as fl, maxValidation as fm, mergePlatformNav as fn, mergeUnique as fo, mergeUniqueBy as fp, mergeUniqueWith as fq, minAgeValidation as fr, minLengthValidation as fs, minValidation as ft, miniMarkToHtml as fu, mountFor as fv, mountPatternProblem as fw, mountPatternText as fx, mountSegmentOf as fy, mountTokenOf as fz, BaseInputComponent as g, provideMurlUrlSerializer as g0, provideNavWidgets as g1, provideOverlayWidgets as g2, providePlatformNavWidgets as g3, provideSearch as g4, provideSizeContext as g5, provideUserTabs as g6, publicGuard as g7, readFieldPatterns as g8, recordDefinedWcTier as g9, toAttrBool as gA, toAttrNumber as gB, toCssLength as gC, toHostNavId as gD, toLength$1 as gE, toLocalNavId as gF, toggleTreeGridRow as gG, unfetchedPlatformNav as gH, ungroupedDocActions as gI, urlValidation as gJ, wcTierOf as gK, remoteOutletRoute as ga, renderAddress as gb, renderDocument as gc, requiredValidation as gd, resolveConfigAsset as ge, resolveIconSize as gf, resolvePallet as gg, resolvePatternRules as gh, resolveSize as gi, rgbToHex as gj, rgbToHsl as gk, rowHasChildren as gl, samePatterns as gm, sectionTableColumnId as gn, sectionTableColumnWidths as go, sectionTableFrozenCount as gp, segmentsToNavId as gq, setProperty as gr, setTreeGridChildren as gs, setWcTier as gt, settingsWidgets as gu, shouldShowBadge as gv, sortSectionTableRows as gw, splitNavId as gx, splitOnMatch as gy, stringToColor as gz, BaseTextInputComponent as h, initialFraming as i, TextOutputComponent as j, IS_DESIGN_MODE as k, APP_CONTEXT_REF as l, ASSET_BASE_URL as m, AccordionBodyDirective as n, outputSize as o, parseRatio as p, AccordionComponent as q, renameForType as r, AccordionGroupComponent as s, ActionComponent as t, AnimatedGraphsComponent as u, AppCardComponent as v, AppRelationType as w, AppTileComponent as x, AssetStore as y, AssetUrlPipe as z };
39516
- //# sourceMappingURL=magmonium-one-magmonium-one-BgAGVxz7.mjs.map
39629
+ //# sourceMappingURL=magmonium-one-magmonium-one-hJWPaKsU.mjs.map