@magmonium/one 0.3.11 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +1 -0
- package/fesm2022/{magmonium-one-image-editor-CTLKPEYj.mjs → magmonium-one-image-editor-CurYe_Mb.mjs} +2 -2
- package/fesm2022/{magmonium-one-image-editor-CTLKPEYj.mjs.map → magmonium-one-image-editor-CurYe_Mb.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-magmonium-one-BgAGVxz7.mjs → magmonium-one-magmonium-one-Dr2fBHOB.mjs} +224 -81
- package/fesm2022/magmonium-one-magmonium-one-Dr2fBHOB.mjs.map +1 -0
- package/fesm2022/{magmonium-one-otp-BdLmLccY.mjs → magmonium-one-otp-B-NBB6PF.mjs} +2 -2
- package/fesm2022/{magmonium-one-otp-BdLmLccY.mjs.map → magmonium-one-otp-B-NBB6PF.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-password-DFVMbkqp.mjs → magmonium-one-password-yXiSYlMS.mjs} +2 -2
- package/fesm2022/{magmonium-one-password-DFVMbkqp.mjs.map → magmonium-one-password-yXiSYlMS.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-toggle-CkbYy8Pd.mjs → magmonium-one-toggle-atjxl_R_.mjs} +2 -2
- package/fesm2022/{magmonium-one-toggle-CkbYy8Pd.mjs.map → magmonium-one-toggle-atjxl_R_.mjs.map} +1 -1
- package/fesm2022/magmonium-one.mjs +1 -1
- package/package.json +1 -1
- package/types/magmonium-one.d.ts +57 -2
- package/fesm2022/magmonium-one-magmonium-one-BgAGVxz7.mjs.map +0 -1
|
@@ -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
|
-
|
|
4089
|
+
{
|
|
4090
|
+
...toTrailItem(childId, navMap, anchor, undefined, navParamsFor(childId, navMap, routeParams)),
|
|
4091
|
+
...browsable,
|
|
4092
|
+
},
|
|
4073
4093
|
];
|
|
4074
4094
|
}
|
|
4075
|
-
return resolved.rows.map((row) =>
|
|
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
|
|
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();
|
|
@@ -4424,25 +4457,42 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4424
4457
|
.filter((m) => m.createMenu &&
|
|
4425
4458
|
(m.urlMode === 'tail' ||
|
|
4426
4459
|
(m.urlMode === 'outlet' && outlets.includes(m.name))))
|
|
4427
|
-
.map((m) => ({
|
|
4460
|
+
.map((m) => ({
|
|
4461
|
+
name: m.name,
|
|
4462
|
+
appNavId: m.appNavId,
|
|
4463
|
+
link: m.link,
|
|
4464
|
+
urlMode: m.urlMode,
|
|
4465
|
+
}));
|
|
4428
4466
|
const unclaimed = outlets
|
|
4429
4467
|
.filter((name) => !store.mounts()[name])
|
|
4430
4468
|
.map((name) => ({
|
|
4431
4469
|
name,
|
|
4432
4470
|
appNavId: `root_app_${name}`,
|
|
4433
4471
|
link: undefined,
|
|
4472
|
+
urlMode: 'outlet',
|
|
4434
4473
|
}));
|
|
4435
4474
|
return [...listed, ...unclaimed];
|
|
4436
4475
|
}, ...(ngDevMode ? [{ debugName: "menuMounts" }] : /* istanbul ignore next */ []));
|
|
4437
|
-
/**
|
|
4476
|
+
/**
|
|
4477
|
+
* The map the menu reads: the tree, with each listed app hung where the
|
|
4478
|
+
* User reaches it. A `tail` app stands on the Nav that routes its AppLink —
|
|
4479
|
+
* `root_app` for `/app/<link>` — so its node is that Nav's child; listing it
|
|
4480
|
+
* at root too drew one app twice. A side app's segment belongs to no Nav,
|
|
4481
|
+
* and neither does a tail app whose host Nav the tree does not hold, so
|
|
4482
|
+
* those hang under root (ADR 0038).
|
|
4483
|
+
*/
|
|
4438
4484
|
const menuNavMap = computed(() => {
|
|
4439
4485
|
const navMap = store.navMap();
|
|
4440
4486
|
const listed = menuMounts();
|
|
4441
4487
|
if (!listed.length)
|
|
4442
4488
|
return navMap;
|
|
4443
4489
|
const configs = store.wcConfigMap();
|
|
4444
|
-
const
|
|
4445
|
-
|
|
4490
|
+
const parentOf = ({ appNavId, urlMode, }) => {
|
|
4491
|
+
const host = parentNavId(appNavId);
|
|
4492
|
+
return urlMode === 'tail' && host && navMap[host] ? host : ROOT_NAV$1;
|
|
4493
|
+
};
|
|
4494
|
+
const extra = listed.map((mount) => {
|
|
4495
|
+
const { name, appNavId, link } = mount;
|
|
4446
4496
|
const fetched = navMap[appNavId];
|
|
4447
4497
|
const config = link ? configs[link] : undefined;
|
|
4448
4498
|
const node = {
|
|
@@ -4451,18 +4501,31 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4451
4501
|
title: config?.app ?? fetched?.title ?? name,
|
|
4452
4502
|
...(config?.logo ? { logo: config.logo } : {}),
|
|
4453
4503
|
};
|
|
4454
|
-
return node;
|
|
4504
|
+
return { node, parent: parentOf(mount) };
|
|
4455
4505
|
});
|
|
4506
|
+
// A host Nav that declares no children lists its own by NavId prefix,
|
|
4507
|
+
// which already finds the node — declaring it alone would hide every
|
|
4508
|
+
// sibling that prefix found. Root always declares.
|
|
4509
|
+
const parents = [...new Set(extra.map(({ parent }) => parent))].filter((id) => id === ROOT_NAV$1 || !!navMap[id]?.children?.length);
|
|
4456
4510
|
return {
|
|
4457
4511
|
...navMap,
|
|
4458
|
-
...Object.fromEntries(extra.map((node) => [node.navId, node])),
|
|
4459
|
-
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4465
|
-
|
|
4512
|
+
...Object.fromEntries(extra.map(({ node }) => [node.navId, node])),
|
|
4513
|
+
...Object.fromEntries(parents.map((parentId) => {
|
|
4514
|
+
const parent = navMap[parentId];
|
|
4515
|
+
const hung = extra
|
|
4516
|
+
.filter(({ parent: p }) => p === parentId)
|
|
4517
|
+
.map(({ node }) => node.navId);
|
|
4518
|
+
return [
|
|
4519
|
+
parentId,
|
|
4520
|
+
{
|
|
4521
|
+
...parent,
|
|
4522
|
+
children: [
|
|
4523
|
+
...(parent?.children ?? []).filter((id) => !hung.includes(id)),
|
|
4524
|
+
...hung,
|
|
4525
|
+
],
|
|
4526
|
+
},
|
|
4527
|
+
];
|
|
4528
|
+
})),
|
|
4466
4529
|
};
|
|
4467
4530
|
}, ...(ngDevMode ? [{ debugName: "menuNavMap" }] : /* istanbul ignore next */ []));
|
|
4468
4531
|
const hasMurl = computed(() => store.murl().length > 0, ...(ngDevMode ? [{ debugName: "hasMurl" }] : /* istanbul ignore next */ []));
|
|
@@ -4510,14 +4573,15 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4510
4573
|
}
|
|
4511
4574
|
return undefined;
|
|
4512
4575
|
};
|
|
4513
|
-
const
|
|
4514
|
-
for (const candidate of
|
|
4576
|
+
const firstEntry = (keys) => {
|
|
4577
|
+
for (const candidate of keys) {
|
|
4515
4578
|
const hit = entryAt(candidate);
|
|
4516
4579
|
if (hit)
|
|
4517
4580
|
return { ...hit, navId: candidate };
|
|
4518
4581
|
}
|
|
4519
4582
|
return undefined;
|
|
4520
|
-
}
|
|
4583
|
+
};
|
|
4584
|
+
const widgetEntry = computed(() => firstEntry(widgetNavIds()), ...(ngDevMode ? [{ debugName: "widgetEntry" }] : /* istanbul ignore next */ []));
|
|
4521
4585
|
/**
|
|
4522
4586
|
* Every `dynamic` Nav with a NavRowSource behind it, resolved. Walks the
|
|
4523
4587
|
* whole map rather than the open panel's own descent: the rows are drawn by
|
|
@@ -4539,10 +4603,22 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4539
4603
|
}
|
|
4540
4604
|
return out;
|
|
4541
4605
|
}, ...(ngDevMode ? [{ debugName: "dynamicRows" }] : /* istanbul ignore next */ []));
|
|
4606
|
+
/**
|
|
4607
|
+
* The instances the panel is drawn for: the Browse's while one is open —
|
|
4608
|
+
* the Router still describes the Page behind the panel, not the Nav the
|
|
4609
|
+
* User is looking into — and the Router's otherwise (CONTEXT.md Browse).
|
|
4610
|
+
*/
|
|
4611
|
+
const panelParams = computed(() => store.menuNavId()
|
|
4612
|
+
? Object.fromEntries(Object.entries(store.menuParams() ?? {}).map(([name, value]) => [
|
|
4613
|
+
name,
|
|
4614
|
+
String(value),
|
|
4615
|
+
]))
|
|
4616
|
+
: store.routeParams(), ...(ngDevMode ? [{ debugName: "panelParams" }] : /* istanbul ignore next */ []));
|
|
4542
4617
|
/**
|
|
4543
4618
|
* Every `dynamic` Nav with a NavInstanceSource behind it, resolved against
|
|
4544
|
-
* the parameters the
|
|
4545
|
-
*
|
|
4619
|
+
* the parameters the panel is drawn for (ADR 0030) — a Browse's own, so the
|
|
4620
|
+
* trail names the book being looked into rather than the Page's. The whole
|
|
4621
|
+
* parameter record goes in, not just this Nav's own value: a resolver
|
|
4546
4622
|
* for an issue is routinely a lookup keyed by the book above it, and the
|
|
4547
4623
|
* design tool binds arguments by parameter name.
|
|
4548
4624
|
*
|
|
@@ -4553,7 +4629,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4553
4629
|
*/
|
|
4554
4630
|
const dynamicInstances = computed(() => {
|
|
4555
4631
|
const out = {};
|
|
4556
|
-
const params =
|
|
4632
|
+
const params = panelParams();
|
|
4557
4633
|
for (const nav of Object.values(store.navMap())) {
|
|
4558
4634
|
if (nav.presentation !== 'dynamic')
|
|
4559
4635
|
continue;
|
|
@@ -4577,7 +4653,9 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4577
4653
|
* here is what makes the menu recompute when the store behind it fills.
|
|
4578
4654
|
*/
|
|
4579
4655
|
const visibilityReads = computed(() => {
|
|
4580
|
-
|
|
4656
|
+
// The panel's instances: a gate is a question about the book the User
|
|
4657
|
+
// is looking into, which a Browse may have moved off the Page's.
|
|
4658
|
+
const params = panelParams();
|
|
4581
4659
|
const out = [];
|
|
4582
4660
|
for (const nav of Object.values(store.navMap())) {
|
|
4583
4661
|
const hit = entryAt(nav.navId);
|
|
@@ -4603,7 +4681,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4603
4681
|
* missing would make the trigger depend on the thing it triggers.
|
|
4604
4682
|
*/
|
|
4605
4683
|
const visibilityLoaders = computed(() => {
|
|
4606
|
-
const params =
|
|
4684
|
+
const params = panelParams();
|
|
4607
4685
|
const out = [];
|
|
4608
4686
|
for (const nav of Object.values(store.navMap())) {
|
|
4609
4687
|
const hit = entryAt(nav.navId);
|
|
@@ -4715,8 +4793,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4715
4793
|
* the anchored key would title the global panel after the page it opened
|
|
4716
4794
|
* over.
|
|
4717
4795
|
*/
|
|
4718
|
-
const
|
|
4719
|
-
const hit = widgetEntry();
|
|
4796
|
+
const answeringNavId = (candidates, hit) => {
|
|
4720
4797
|
if (hit)
|
|
4721
4798
|
return hit.navId;
|
|
4722
4799
|
// Nothing registered under either key, so the panel is a *menu*: the
|
|
@@ -4724,7 +4801,6 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4724
4801
|
// global settings list, and reading it off the anchored key — a NavId no
|
|
4725
4802
|
// asset holds — left the page's own menu up under its own header.
|
|
4726
4803
|
const map = store.navMap();
|
|
4727
|
-
const candidates = widgetNavIds();
|
|
4728
4804
|
const rows = dynamicRows();
|
|
4729
4805
|
return (candidates.find((c) => menuChildIds(c, map, rows, dynamicInstances(), hiddenNavIds())
|
|
4730
4806
|
.length) ??
|
|
@@ -4733,8 +4809,18 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4733
4809
|
// the panel back to *settings*, whose row it is, rather than climbing
|
|
4734
4810
|
// an anchored key the map has never heard of all the way to root.
|
|
4735
4811
|
candidates.find((c) => !!map[c]) ??
|
|
4736
|
-
|
|
4737
|
-
}
|
|
4812
|
+
candidates[0]);
|
|
4813
|
+
};
|
|
4814
|
+
const panelNavId = computed(() => answeringNavId(widgetNavIds(), widgetEntry()), ...(ngDevMode ? [{ debugName: "panelNavId" }] : /* istanbul ignore next */ []));
|
|
4815
|
+
/**
|
|
4816
|
+
* The Nav the User stands on as the panel reads it — `panelNavId` with any
|
|
4817
|
+
* Browse left out. The panel is where the User looks and the Address where
|
|
4818
|
+
* they stand (CONTEXT.md Browse): a row marks itself against this, so the
|
|
4819
|
+
* row they came through stays marked however far they Browse.
|
|
4820
|
+
*/
|
|
4821
|
+
const standingNavId = computed(() => store.menuNavId()
|
|
4822
|
+
? answeringNavId(addressNavIds(), firstEntry(addressNavIds()))
|
|
4823
|
+
: panelNavId(), ...(ngDevMode ? [{ debugName: "standingNavId" }] : /* istanbul ignore next */ []));
|
|
4738
4824
|
const breadcrumbResult = computed(() => {
|
|
4739
4825
|
const menuConfig = resolvedNavMenuConfig();
|
|
4740
4826
|
const widgetConfig = resolvedWidget();
|
|
@@ -4746,7 +4832,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4746
4832
|
dynamicRows: dynamicRows(),
|
|
4747
4833
|
instances: dynamicInstances(),
|
|
4748
4834
|
hidden: hiddenNavIds(),
|
|
4749
|
-
routeParams:
|
|
4835
|
+
routeParams: panelParams(),
|
|
4750
4836
|
breadcrumb: menuConfig?.breadcramb?.() ??
|
|
4751
4837
|
(typeof widgetConfig?.breadcramb === 'function'
|
|
4752
4838
|
? widgetConfig.breadcramb()
|
|
@@ -4784,6 +4870,8 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4784
4870
|
allMounts,
|
|
4785
4871
|
menuMounts,
|
|
4786
4872
|
panelNavId,
|
|
4873
|
+
standingNavId,
|
|
4874
|
+
panelParams,
|
|
4787
4875
|
hasMurl,
|
|
4788
4876
|
isNavOpened,
|
|
4789
4877
|
isMNavOpened,
|
|
@@ -4965,7 +5053,17 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
4965
5053
|
});
|
|
4966
5054
|
});
|
|
4967
5055
|
})));
|
|
4968
|
-
|
|
5056
|
+
/**
|
|
5057
|
+
* Whether following `navId` would land on the Page already stood on. The
|
|
5058
|
+
* Router ignores a navigation to the URL it is on, so following it left the
|
|
5059
|
+
* panel up over a Page that never moved (CONTEXT.md Browse).
|
|
5060
|
+
*/
|
|
5061
|
+
const standsOn = (navId, params) => !untracked(() => splitNavId(navId, store.navMap())).murl.length &&
|
|
5062
|
+
untracked(() => addressFor(navId, params)) ===
|
|
5063
|
+
untracked(() => store.path());
|
|
5064
|
+
const setSelected = (navId, params) => navId && !standsOn(navId, params)
|
|
5065
|
+
? goToNav(navId, params)
|
|
5066
|
+
: closePanel();
|
|
4969
5067
|
/**
|
|
4970
5068
|
* The one click that derives its own target instead of naming one. With no
|
|
4971
5069
|
* default Murl it opens the panel without touching the address — that state
|
|
@@ -5046,45 +5144,29 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
5046
5144
|
}));
|
|
5047
5145
|
};
|
|
5048
5146
|
/**
|
|
5049
|
-
* In-panel "up"
|
|
5050
|
-
*
|
|
5051
|
-
*
|
|
5052
|
-
*
|
|
5147
|
+
* In-panel "up", and a Browse like the trail's: it steps above the menu
|
|
5148
|
+
* actually shown — a leaf may already be showing its ancestor's rows, and
|
|
5149
|
+
* a Browse may already have moved the panel off the Address — and never
|
|
5150
|
+
* writes the Address, in menu space as in route space (CONTEXT.md Browse).
|
|
5151
|
+
* With no history entry of its own, the browser back button still closes
|
|
5152
|
+
* the whole panel.
|
|
5053
5153
|
*/
|
|
5054
5154
|
const back = () => {
|
|
5055
5155
|
if (!untracked(() => store.isNavOpened()))
|
|
5056
5156
|
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
5157
|
const owner = untracked(() => store.breadcrumb().header?.id);
|
|
5084
5158
|
const parent = owner ? parentNavId(owner) : undefined;
|
|
5085
5159
|
if (!parent)
|
|
5086
5160
|
return;
|
|
5087
|
-
|
|
5161
|
+
browse(visibleNavId(parent), untracked(() => store.panelParams()));
|
|
5162
|
+
};
|
|
5163
|
+
/**
|
|
5164
|
+
* Moves the open panel onto another Nav and never the User: the Address,
|
|
5165
|
+
* and the Page behind the panel, stay put (CONTEXT.md Browse). What the
|
|
5166
|
+
* trail and a row's chevron call — only following a menu row moves.
|
|
5167
|
+
*/
|
|
5168
|
+
const browse = (navId, params) => {
|
|
5169
|
+
patchState(store, { menuNavId: navId, menuParams: params });
|
|
5088
5170
|
};
|
|
5089
5171
|
const loadNav = rxMethod(pipe(filter((req) => !!req.navId), tap(() => untracked(() => patchState(store, { navLoading: true }))), switchMap$1(({ navId, appNavId }) => getNavService
|
|
5090
5172
|
.getNav(navId, untracked(() => store.navMap()), {
|
|
@@ -5131,6 +5213,7 @@ const NavStore = signalStore({ providedIn: 'root' }, withState(initialState$3),
|
|
|
5131
5213
|
loadNav,
|
|
5132
5214
|
registerWidgets,
|
|
5133
5215
|
back,
|
|
5216
|
+
browse,
|
|
5134
5217
|
resolveUrl,
|
|
5135
5218
|
setNavScrolledDown,
|
|
5136
5219
|
routePathFor: (navId) => navIdToRoutePath(navId, store.navMap()),
|
|
@@ -6496,9 +6579,10 @@ class MRefDirective {
|
|
|
6496
6579
|
#renderer = inject(Renderer2);
|
|
6497
6580
|
#elementRef = inject(ElementRef);
|
|
6498
6581
|
/**
|
|
6499
|
-
*
|
|
6500
|
-
*
|
|
6501
|
-
*
|
|
6582
|
+
* The Nav the panel shows — the one that answered the address rather than
|
|
6583
|
+
* the address's own key, so a row still knows itself when the panel was
|
|
6584
|
+
* opened over a page (`/page|settings` → `root_settings`), or the one a
|
|
6585
|
+
* Browse moved it onto.
|
|
6502
6586
|
*/
|
|
6503
6587
|
#currentNavId = computed(() => this.#navRef?.panelNavId?.() ?? this.#navRef?.id(), ...(ngDevMode ? [{ debugName: "#currentNavId" }] : /* istanbul ignore next */ []));
|
|
6504
6588
|
/**
|
|
@@ -6518,6 +6602,12 @@ class MRefDirective {
|
|
|
6518
6602
|
}, ...(ngDevMode ? [{ debugName: "#paramsMatch" }] : /* istanbul ignore next */ []));
|
|
6519
6603
|
/** Exact hit only — what a toggle re-clicks, and never an ancestor. */
|
|
6520
6604
|
#currentlySelected = computed(() => this.mRef() === this.#currentNavId() && this.#paramsMatch(), ...(ngDevMode ? [{ debugName: "#currentlySelected" }] : /* istanbul ignore next */ []));
|
|
6605
|
+
/**
|
|
6606
|
+
* Where the User stands, which a Browse does not move: the panel may be
|
|
6607
|
+
* showing root's rows while the Address still stands under one of them, and
|
|
6608
|
+
* that row stays marked (CONTEXT.md Browse).
|
|
6609
|
+
*/
|
|
6610
|
+
#standingNavId = computed(() => this.#navRef?.standingNavId?.() ?? this.#currentNavId(), ...(ngDevMode ? [{ debugName: "#standingNavId" }] : /* istanbul ignore next */ []));
|
|
6521
6611
|
/**
|
|
6522
6612
|
* The row the open Nav came through. A menu lists the Nav Menu Owner's
|
|
6523
6613
|
* children, and the User may be standing deeper than a row — on a leaf that
|
|
@@ -6527,7 +6617,7 @@ class MRefDirective {
|
|
|
6527
6617
|
*/
|
|
6528
6618
|
#currentlyActive = computed(() => {
|
|
6529
6619
|
const target = this.mRef();
|
|
6530
|
-
const current = this.#
|
|
6620
|
+
const current = this.#standingNavId();
|
|
6531
6621
|
if (!target || !current)
|
|
6532
6622
|
return false;
|
|
6533
6623
|
if (current !== target && !current.startsWith(`${target}_`))
|
|
@@ -7691,7 +7781,7 @@ class SectionFormItemComponent extends ConfigComponent {
|
|
|
7691
7781
|
break;
|
|
7692
7782
|
}
|
|
7693
7783
|
case InputType.TOGGLE: {
|
|
7694
|
-
const { ToggleInputComponent } = await import('./magmonium-one-toggle-
|
|
7784
|
+
const { ToggleInputComponent } = await import('./magmonium-one-toggle-atjxl_R_.mjs');
|
|
7695
7785
|
this.createDynamicComponent(seq, ToggleInputComponent, [], true);
|
|
7696
7786
|
break;
|
|
7697
7787
|
}
|
|
@@ -7703,12 +7793,12 @@ class SectionFormItemComponent extends ConfigComponent {
|
|
|
7703
7793
|
break;
|
|
7704
7794
|
}
|
|
7705
7795
|
case InputType.PASSWORD: {
|
|
7706
|
-
const { PasswordInputComponent } = await import('./magmonium-one-password-
|
|
7796
|
+
const { PasswordInputComponent } = await import('./magmonium-one-password-yXiSYlMS.mjs');
|
|
7707
7797
|
this.createDynamicComponent(seq, PasswordInputComponent);
|
|
7708
7798
|
break;
|
|
7709
7799
|
}
|
|
7710
7800
|
case InputType.OTP: {
|
|
7711
|
-
const { OtpInputComponent } = await import('./magmonium-one-otp-
|
|
7801
|
+
const { OtpInputComponent } = await import('./magmonium-one-otp-B-NBB6PF.mjs');
|
|
7712
7802
|
this.createDynamicComponent(seq, OtpInputComponent);
|
|
7713
7803
|
break;
|
|
7714
7804
|
}
|
|
@@ -22446,7 +22536,7 @@ class WrapperInputComponent extends ConfigComponent {
|
|
|
22446
22536
|
break;
|
|
22447
22537
|
}
|
|
22448
22538
|
case InputType.TOGGLE: {
|
|
22449
|
-
const { ToggleInputComponent } = await import('./magmonium-one-toggle-
|
|
22539
|
+
const { ToggleInputComponent } = await import('./magmonium-one-toggle-atjxl_R_.mjs');
|
|
22450
22540
|
this.createDynamicComponent(seq, ToggleInputComponent, [], true);
|
|
22451
22541
|
break;
|
|
22452
22542
|
}
|
|
@@ -22458,12 +22548,12 @@ class WrapperInputComponent extends ConfigComponent {
|
|
|
22458
22548
|
break;
|
|
22459
22549
|
}
|
|
22460
22550
|
case InputType.PASSWORD: {
|
|
22461
|
-
const { PasswordInputComponent } = await import('./magmonium-one-password-
|
|
22551
|
+
const { PasswordInputComponent } = await import('./magmonium-one-password-yXiSYlMS.mjs');
|
|
22462
22552
|
this.createDynamicComponent(seq, PasswordInputComponent);
|
|
22463
22553
|
break;
|
|
22464
22554
|
}
|
|
22465
22555
|
case InputType.OTP: {
|
|
22466
|
-
const { OtpInputComponent } = await import('./magmonium-one-otp-
|
|
22556
|
+
const { OtpInputComponent } = await import('./magmonium-one-otp-B-NBB6PF.mjs');
|
|
22467
22557
|
this.createDynamicComponent(seq, OtpInputComponent);
|
|
22468
22558
|
break;
|
|
22469
22559
|
}
|
|
@@ -24170,7 +24260,7 @@ class FileUploadInputComponent extends BaseInputComponent {
|
|
|
24170
24260
|
const modalStore = this.modalStore;
|
|
24171
24261
|
if (!modalStore)
|
|
24172
24262
|
return undefined;
|
|
24173
|
-
const { ImageEditorComponent } = await import('./magmonium-one-image-editor-
|
|
24263
|
+
const { ImageEditorComponent } = await import('./magmonium-one-image-editor-CurYe_Mb.mjs');
|
|
24174
24264
|
const ratio = String(this.config()?.ratio ?? '');
|
|
24175
24265
|
return new Promise((resolve) => {
|
|
24176
24266
|
const modalRef = new ModalRef();
|
|
@@ -33578,6 +33668,11 @@ class NavTrailComponent {
|
|
|
33578
33668
|
navStore = inject(NavStore);
|
|
33579
33669
|
headerColor = computed(() => this.themeStore.color()?.mm ?? '#fff', ...(ngDevMode ? [{ debugName: "headerColor" }] : /* istanbul ignore next */ []));
|
|
33580
33670
|
fromUrl = computed(() => !!this.navStore.id(), ...(ngDevMode ? [{ debugName: "fromUrl" }] : /* istanbul ignore next */ []));
|
|
33671
|
+
/**
|
|
33672
|
+
* Moves the panel onto the entry's Nav and leaves the Address, and the Page
|
|
33673
|
+
* behind the panel, where they are (CONTEXT.md Browse).
|
|
33674
|
+
*/
|
|
33675
|
+
browse = (navId, params) => this.navStore.browse(navId, params);
|
|
33581
33676
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NavTrailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
33582
33677
|
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
33678
|
@if (config(); as trail) {
|
|
@@ -33585,7 +33680,14 @@ class NavTrailComponent {
|
|
|
33585
33680
|
@for (item of trail; track item.id; let i = $index; let last = $last) {
|
|
33586
33681
|
<div class="trail-item" [style.animation-delay.ms]="i * 50">
|
|
33587
33682
|
@if (item.nav; as nav) {
|
|
33588
|
-
|
|
33683
|
+
<!-- Browses: the trail moves the panel, never the User. -->
|
|
33684
|
+
<a
|
|
33685
|
+
class="trail-link"
|
|
33686
|
+
role="button"
|
|
33687
|
+
tabindex="0"
|
|
33688
|
+
(click)="browse(nav, item.navParams)"
|
|
33689
|
+
(keydown.enter)="browse(nav, item.navParams)"
|
|
33690
|
+
>
|
|
33589
33691
|
{{ item.label | translate }}
|
|
33590
33692
|
</a>
|
|
33591
33693
|
} @else if (item.href; as href) {
|
|
@@ -33602,7 +33704,7 @@ class NavTrailComponent {
|
|
|
33602
33704
|
}
|
|
33603
33705
|
</nav>
|
|
33604
33706
|
}
|
|
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: "
|
|
33707
|
+
`, 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
33708
|
}
|
|
33607
33709
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NavTrailComponent, decorators: [{
|
|
33608
33710
|
type: Component,
|
|
@@ -33612,7 +33714,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
33612
33714
|
@for (item of trail; track item.id; let i = $index; let last = $last) {
|
|
33613
33715
|
<div class="trail-item" [style.animation-delay.ms]="i * 50">
|
|
33614
33716
|
@if (item.nav; as nav) {
|
|
33615
|
-
|
|
33717
|
+
<!-- Browses: the trail moves the panel, never the User. -->
|
|
33718
|
+
<a
|
|
33719
|
+
class="trail-link"
|
|
33720
|
+
role="button"
|
|
33721
|
+
tabindex="0"
|
|
33722
|
+
(click)="browse(nav, item.navParams)"
|
|
33723
|
+
(keydown.enter)="browse(nav, item.navParams)"
|
|
33724
|
+
>
|
|
33616
33725
|
{{ item.label | translate }}
|
|
33617
33726
|
</a>
|
|
33618
33727
|
} @else if (item.href; as href) {
|
|
@@ -33629,7 +33738,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
33629
33738
|
}
|
|
33630
33739
|
</nav>
|
|
33631
33740
|
}
|
|
33632
|
-
`, imports: [
|
|
33741
|
+
`, imports: [TranslatePipe, IconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
33633
33742
|
class: 'm-nav-trail',
|
|
33634
33743
|
}, 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
33744
|
}], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }] } });
|
|
@@ -33773,6 +33882,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
33773
33882
|
*/
|
|
33774
33883
|
class NavMenuComponent {
|
|
33775
33884
|
_settingsSearch = inject(SettingsSearchService);
|
|
33885
|
+
_navRef = inject(NAV_STORE_REF, { optional: true });
|
|
33776
33886
|
items = input(...(ngDevMode ? [undefined, { debugName: "items" }] : /* istanbul ignore next */ []));
|
|
33777
33887
|
baseUrl = input(...(ngDevMode ? [undefined, { debugName: "baseUrl" }] : /* istanbul ignore next */ []));
|
|
33778
33888
|
filterBySearch = input(false, ...(ngDevMode ? [{ debugName: "filterBySearch" }] : /* istanbul ignore next */ []));
|
|
@@ -33788,6 +33898,11 @@ class NavMenuComponent {
|
|
|
33788
33898
|
return rawList;
|
|
33789
33899
|
return rawList.filter((item) => item.label?.toLowerCase().includes(q));
|
|
33790
33900
|
}, ...(ngDevMode ? [{ debugName: "navList" }] : /* istanbul ignore next */ []));
|
|
33901
|
+
/** Looks inside the row's Nav without following it (CONTEXT.md Browse). */
|
|
33902
|
+
browse = (item) => {
|
|
33903
|
+
if (item.nav)
|
|
33904
|
+
this._navRef?.browse?.(item.nav, item.navParams);
|
|
33905
|
+
};
|
|
33791
33906
|
// A List draws rows it was handed as ListItems; a NavRef reaches the row
|
|
33792
33907
|
// body through `row`, which is what the template reads through `let-item`.
|
|
33793
33908
|
rows = computed(() => (this.navList() ?? []).map((item, index) => ({
|
|
@@ -33815,6 +33930,17 @@ class NavMenuComponent {
|
|
|
33815
33930
|
</span>
|
|
33816
33931
|
<span class="nav-menu__label">{{ item.label | translate }}</span>
|
|
33817
33932
|
</a>
|
|
33933
|
+
<!-- The row follows the Nav; the chevron only Browses into it. -->
|
|
33934
|
+
@if (item.browsable) {
|
|
33935
|
+
<m-button
|
|
33936
|
+
class="nav-menu__browse"
|
|
33937
|
+
icon="chevron-right"
|
|
33938
|
+
iconOnly
|
|
33939
|
+
variant="ghost"
|
|
33940
|
+
label="nav-browse-into"
|
|
33941
|
+
(clicked)="browse(item)"
|
|
33942
|
+
/>
|
|
33943
|
+
}
|
|
33818
33944
|
} @else if (item.href; as href) {
|
|
33819
33945
|
<a [href]="href" class="nav-menu__link">
|
|
33820
33946
|
<span class="nav-menu__icon">
|
|
@@ -33835,7 +33961,7 @@ class NavMenuComponent {
|
|
|
33835
33961
|
<div class="nav-menu">
|
|
33836
33962
|
<m-list variant="menu" [data]="rows()" [template]="menuTemplate" />
|
|
33837
33963
|
</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 });
|
|
33964
|
+
`, 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
33965
|
}
|
|
33840
33966
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NavMenuComponent, decorators: [{
|
|
33841
33967
|
type: Component,
|
|
@@ -33857,6 +33983,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
33857
33983
|
</span>
|
|
33858
33984
|
<span class="nav-menu__label">{{ item.label | translate }}</span>
|
|
33859
33985
|
</a>
|
|
33986
|
+
<!-- The row follows the Nav; the chevron only Browses into it. -->
|
|
33987
|
+
@if (item.browsable) {
|
|
33988
|
+
<m-button
|
|
33989
|
+
class="nav-menu__browse"
|
|
33990
|
+
icon="chevron-right"
|
|
33991
|
+
iconOnly
|
|
33992
|
+
variant="ghost"
|
|
33993
|
+
label="nav-browse-into"
|
|
33994
|
+
(clicked)="browse(item)"
|
|
33995
|
+
/>
|
|
33996
|
+
}
|
|
33860
33997
|
} @else if (item.href; as href) {
|
|
33861
33998
|
<a [href]="href" class="nav-menu__link">
|
|
33862
33999
|
<span class="nav-menu__icon">
|
|
@@ -33877,7 +34014,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
33877
34014
|
<div class="nav-menu">
|
|
33878
34015
|
<m-list variant="menu" [data]="rows()" [template]="menuTemplate" />
|
|
33879
34016
|
</div>
|
|
33880
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
34017
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
34018
|
+
IconComponent,
|
|
34019
|
+
MRefDirective,
|
|
34020
|
+
TranslatePipe,
|
|
34021
|
+
ListComponent,
|
|
34022
|
+
ButtonComponent,
|
|
34023
|
+
], 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
34024
|
}], 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
34025
|
|
|
33883
34026
|
class SettingsSearchBarComponent {
|
|
@@ -39513,4 +39656,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
39513
39656
|
*/
|
|
39514
39657
|
|
|
39515
39658
|
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-
|
|
39659
|
+
//# sourceMappingURL=magmonium-one-magmonium-one-Dr2fBHOB.mjs.map
|