@magmonium/one 0.4.86 → 0.4.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/assets/i18n/en.json +1 -0
  2. package/fesm2022/{magmonium-one-base-dropdown-9iIR64ME.mjs → magmonium-one-base-dropdown-2hgXcmhE.mjs} +4 -4
  3. package/fesm2022/{magmonium-one-base-dropdown-9iIR64ME.mjs.map → magmonium-one-base-dropdown-2hgXcmhE.mjs.map} +1 -1
  4. package/fesm2022/{magmonium-one-button-DO7FTwuF.mjs → magmonium-one-button-C5dk4R_m.mjs} +9 -3
  5. package/fesm2022/magmonium-one-button-C5dk4R_m.mjs.map +1 -0
  6. package/fesm2022/{magmonium-one-directives-DM6J1Hvs.mjs → magmonium-one-directives-hJ7wkmQn.mjs} +2 -2
  7. package/fesm2022/{magmonium-one-directives-DM6J1Hvs.mjs.map → magmonium-one-directives-hJ7wkmQn.mjs.map} +1 -1
  8. package/fesm2022/{magmonium-one-group-BsqCB8D2.mjs → magmonium-one-group-bRamdzPO.mjs} +3 -3
  9. package/fesm2022/{magmonium-one-group-BsqCB8D2.mjs.map → magmonium-one-group-bRamdzPO.mjs.map} +1 -1
  10. package/fesm2022/{magmonium-one-header-CgOV_m7w.mjs → magmonium-one-header-BZzD8uTJ.mjs} +2 -2
  11. package/fesm2022/{magmonium-one-header-CgOV_m7w.mjs.map → magmonium-one-header-BZzD8uTJ.mjs.map} +1 -1
  12. package/fesm2022/{magmonium-one-image-editor-B6eCXP9A.mjs → magmonium-one-image-editor-BLqlV2ki.mjs} +4 -4
  13. package/fesm2022/{magmonium-one-image-editor-B6eCXP9A.mjs.map → magmonium-one-image-editor-BLqlV2ki.mjs.map} +1 -1
  14. package/fesm2022/{magmonium-one-menu-CsoiLhVg.mjs → magmonium-one-menu-CJjjxFfu.mjs} +5 -5
  15. package/fesm2022/{magmonium-one-menu-CsoiLhVg.mjs.map → magmonium-one-menu-CJjjxFfu.mjs.map} +1 -1
  16. package/fesm2022/{magmonium-one-multi-range-RSLLKzLu.mjs → magmonium-one-multi-range-DL_JlKVL.mjs} +2 -2
  17. package/fesm2022/{magmonium-one-multi-range-RSLLKzLu.mjs.map → magmonium-one-multi-range-DL_JlKVL.mjs.map} +1 -1
  18. package/fesm2022/{magmonium-one-password-CJBa8k1l.mjs → magmonium-one-password-CvgWZkAX.mjs} +2 -2
  19. package/fesm2022/{magmonium-one-password-CJBa8k1l.mjs.map → magmonium-one-password-CvgWZkAX.mjs.map} +1 -1
  20. package/fesm2022/{magmonium-one-range-CqOSrC0Y.mjs → magmonium-one-range-DlQfnl9p.mjs} +2 -2
  21. package/fesm2022/{magmonium-one-range-CqOSrC0Y.mjs.map → magmonium-one-range-DlQfnl9p.mjs.map} +1 -1
  22. package/fesm2022/{magmonium-one-selector-CeqlecBa.mjs → magmonium-one-selector-BK48N5us.mjs} +4 -1
  23. package/fesm2022/{magmonium-one-selector-CeqlecBa.mjs.map → magmonium-one-selector-BK48N5us.mjs.map} +1 -1
  24. package/fesm2022/magmonium-one.mjs +1177 -34
  25. package/fesm2022/magmonium-one.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/types/magmonium-one.d.ts +524 -29
  28. package/fesm2022/magmonium-one-button-DO7FTwuF.mjs.map +0 -1
@@ -1,30 +1,30 @@
1
1
  import { t as __exportAll } from "./magmonium-one-rolldown-runtime-DpJrqANO.mjs";
2
2
  import { $ as SEARCH_RESULTS_EVENT, A as isLocalhost, B as FOLDER_PICK_LISTENER, C as definedWcTierOf, D as wcLocalBaseOf, E as setWcTier, F as APP_LINK, G as LOADING_ACTIONS_REF, H as ICON_SOURCE, I as ASSET_BASE_URL, J as MODAL_STORE_REF, K as LOGIN_COMPONENT, L as AppAvailability, M as isUrlLocalhost, N as isWebComponent, O as wcTierOf, P as APP_CONTEXT_REF, Q as SEARCH_QUERY, R as AppRelationType, S as definedWcBundleOf, T as setWcLocalPort, U as IS_DESIGN_MODE, V as HOST_SESSION, W as IS_SIDE_PANEL, X as ONE_ASSET_BASE_URL, Y as NAV_STORE_REF, Z as OPTIONS_SOURCE, _ as StorageService, a as resolveSpacing, at as LAYOUT_ASSET_FOLDER, b as HttpService, c as TranslatePipe, ct as Size, d as browserLocale, et as TRANSLATION_SOURCE, f as escapeHtml, g as SharedStoreRegistry, h as AssetStore, i as resolveSize, it as FORM_ASSET_FOLDER, j as isTierPreview, k as getTierFromPreviewPath, l as TranslateService, m as miniMarkToHtml, n as isSize, nt as WC_BUNDLE, o as toCssLength, ot as Assets, p as miniMarkInlineToHtml, q as LOGIN_STORE, r as resolveIconSize, rt as WC_SEARCH_GROUPS, s as toLength, st as DEFAULT_SIZE, t as coerceSize, tt as USER_STORE_REF, u as BrowserLocaleService, v as isJson, w as recordDefinedWcTier, x as buildWcBaseUrl, y as ACCESS_DOMAINS, z as COMPONENT_INPUT_REGISTRY } from "./magmonium-one-size-converter-BqkALIWA.mjs";
3
- import { a as OverlayService, c as DeviceService, i as OverlayRef, n as Direction, o as ScrollService, r as ThemeService, s as DomService, t as SelectorDirective } from "./magmonium-one-selector-CeqlecBa.mjs";
3
+ import { a as OverlayService, c as DeviceService, i as OverlayRef, n as Direction, o as ScrollService, r as ThemeService, s as DomService, t as SelectorDirective } from "./magmonium-one-selector-BK48N5us.mjs";
4
4
  import { t as FileService } from "./magmonium-one-file.service-D39FjShR.mjs";
5
5
  import { C as isLightAppColor, D as readableAppColor, E as normalizeAppColor, O as rebuildLogoGlyph, S as appLogoShadowColor, T as logoGlyphMaskUrl, _ as AppLogoState, a as calculateLuminance, b as LOGO_GLYPH_MAX_BYTES, c as hexToRgb, d as derivePropertyName, f as getProperty, g as APP_THEME_COLOR, h as APP_LOGO_SOURCE, i as deriveOppositeColor, k as ThemeDataService, l as hslToRgb, m as ThemeStore, n as resolvePallet, o as rgbToHex, p as setProperty, r as deriveContrastColor, s as rgbToHsl, t as applyColorsToElement, u as parseColor, v as appThemeColorFactory, w as isReadableOn, x as appColorBrand, y as paintAppColor } from "./magmonium-one-color-utl-BA51l-Rw.mjs";
6
6
  import "./magmonium-one-theme-BtQyLRdQ.mjs";
7
7
  import { _ as TimeAgoPipe, a as nextSectionTableSort, c as sectionTableFrozenCount, d as SectionTableSortDirection, f as AssetUrlPipe, g as MoneyPipe, h as PercentagePipe, i as defaultSectionTableSort, l as sortSectionTableRows, m as SignColorPipe, n as ToListPipe, o as sectionTableColumnId, p as CompactNumberPipe, r as SectionTableSortPipe, s as sectionTableColumnWidths, t as LabelComponent, u as SECTION_TABLE_VARIANTS } from "./magmonium-one-label-Dkis_mGP.mjs";
8
8
  import { a as SIZE_CONTEXT, c as SHARED_ICONS, i as APP_LOGO_ICON, n as CustomIconClass, o as injectParentSize, r as IconComponent, s as provideSizeContext, t as CustomIconEditComponent } from "./magmonium-one-icon-CH-g8CUR.mjs";
9
9
  import { i as resolveConfigAsset, n as toAttrNumber, r as ConfigComponent, t as toAttrBool } from "./magmonium-one-attribute-value-CPh-lJPV.mjs";
10
- import { a as actionName, c as ReactiveElementComponent, d as shouldShowBadge, l as BadgeComponent, n as SECTION_FORM_CONTEXT, o as isButtonName, r as ImgComponent, s as enumValue, t as ButtonComponent, u as formatBadgeCount } from "./magmonium-one-button-DO7FTwuF.mjs";
10
+ import { c as enumValue, d as formatBadgeCount, f as shouldShowBadge, i as ACTION_BUTTON_HOST, l as ReactiveElementComponent, n as SECTION_FORM_CONTEXT, o as actionName, r as ImgComponent, s as isButtonName, t as ButtonComponent, u as BadgeComponent } from "./magmonium-one-button-C5dk4R_m.mjs";
11
11
  import { t as MRefDirective } from "./magmonium-one-m-ref-DLIAzywu.mjs";
12
12
  import { i as OptionsSourceDirective, n as normalizeAssetOptions, r as presetDefaultOption, t as assetOptions } from "./magmonium-one-options-asset-BNd1hbLw.mjs";
13
13
  import { t as InputType } from "./magmonium-one-input-DqHPorA1.mjs";
14
14
  import { r as PLACED_CHECKBOX, t as CheckboxInputComponent } from "./magmonium-one-checkbox-a3Dwmu2X.mjs";
15
- import { a as ToolTipDirective, c as DragListItemDirective, d as MarginDirective, f as PaddingDirective, i as PositionDirective, l as DragListDirective, n as stringToColor, o as FileUploadDirective, p as SPACING_INWARD, r as HighlightDirective, s as AutosizeDirective, t as MHeroColorDirective, u as DraggableDirective } from "./magmonium-one-directives-DM6J1Hvs.mjs";
16
- import { t as HeaderComponent } from "./magmonium-one-header-CgOV_m7w.mjs";
17
- import { i as mergeUniqueWith, n as mergeUnique, r as mergeUniqueBy, t as ButtonGroupComponent } from "./magmonium-one-group-BsqCB8D2.mjs";
18
- import { n as ContextMenuBoxComponent, r as MenuComponent, t as ContextMenuComponent } from "./magmonium-one-menu-CsoiLhVg.mjs";
15
+ import { a as ToolTipDirective, c as DragListItemDirective, d as MarginDirective, f as PaddingDirective, i as PositionDirective, l as DragListDirective, n as stringToColor, o as FileUploadDirective, p as SPACING_INWARD, r as HighlightDirective, s as AutosizeDirective, t as MHeroColorDirective, u as DraggableDirective } from "./magmonium-one-directives-hJ7wkmQn.mjs";
16
+ import { t as HeaderComponent } from "./magmonium-one-header-BZzD8uTJ.mjs";
17
+ import { i as mergeUniqueWith, n as mergeUnique, r as mergeUniqueBy, t as ButtonGroupComponent } from "./magmonium-one-group-bRamdzPO.mjs";
18
+ import { n as ContextMenuBoxComponent, r as MenuComponent, t as ContextMenuComponent } from "./magmonium-one-menu-CJjjxFfu.mjs";
19
19
  import { t as BaseInputComponent } from "./magmonium-one-base-input-B92NOmxz.mjs";
20
20
  import { i as getScrollParent, n as activeElementWithin, r as classListSignal, t as BaseTextInputComponent } from "./magmonium-one-base-text-ChjG3GNw.mjs";
21
21
  import { t as TextOutputComponent } from "./magmonium-one-text-output-E6pe3IOL.mjs";
22
22
  import { t as BaseCheckboxInputComponent } from "./magmonium-one-base-checkbox-LdM6dqF_.mjs";
23
23
  import { t as RadioInputComponent } from "./magmonium-one-radio-DPz4-SAJ.mjs";
24
24
  import { t as TextInputComponent } from "./magmonium-one-text-vDPAhn74.mjs";
25
- import { r as BaseArrayInputComponent, t as MultiRangeInputComponent } from "./magmonium-one-multi-range-RSLLKzLu.mjs";
26
- import { t as RangeInputComponent } from "./magmonium-one-range-CqOSrC0Y.mjs";
27
- import { n as DROPDOWN_IMPORTS, r as DROPDOWN_TEMPLATE, t as BaseDropdownComponent } from "./magmonium-one-base-dropdown-9iIR64ME.mjs";
25
+ import { r as BaseArrayInputComponent, t as MultiRangeInputComponent } from "./magmonium-one-multi-range-DL_JlKVL.mjs";
26
+ import { t as RangeInputComponent } from "./magmonium-one-range-DlQfnl9p.mjs";
27
+ import { n as DROPDOWN_IMPORTS, r as DROPDOWN_TEMPLATE, t as BaseDropdownComponent } from "./magmonium-one-base-dropdown-2hgXcmhE.mjs";
28
28
  import { o as isEditableImage, s as outputSize } from "./magmonium-one-image-frame-BTSaUSAi.mjs";
29
29
  import * as i0 from "@angular/core";
30
30
  import { ApplicationRef, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, DOCUMENT, DestroyRef, Directive, ElementRef, EventEmitter, HostAttributeToken, HostBinding, HostListener, Injectable, InjectionToken, Injector, Input, LOCALE_ID, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation, afterEveryRender, afterNextRender, afterRenderEffect, booleanAttribute, computed, contentChild, contentChildren, createComponent, effect, forwardRef, inject, input, inputBinding, linkedSignal, makeEnvironmentProviders, model, numberAttribute, output, outputBinding, provideAppInitializer, provideBrowserGlobalErrorListeners, provideZonelessChangeDetection, reflectComponentType, runInInjectionContext, signal, twoWayBinding, untracked, viewChild, viewChildren } from "@angular/core";
@@ -759,7 +759,7 @@ var SectionFormItemComponent = class SectionFormItemComponent extends ConfigComp
759
759
  break;
760
760
  }
761
761
  case InputType.PASSWORD: {
762
- const { PasswordInputComponent } = await import("./magmonium-one-password-CJBa8k1l.mjs");
762
+ const { PasswordInputComponent } = await import("./magmonium-one-password-CvgWZkAX.mjs");
763
763
  this.createDynamicComponent(seq, PasswordInputComponent);
764
764
  break;
765
765
  }
@@ -789,12 +789,12 @@ var SectionFormItemComponent = class SectionFormItemComponent extends ConfigComp
789
789
  break;
790
790
  }
791
791
  case InputType.RANGE: {
792
- const { RangeInputComponent } = await import("./magmonium-one-range-CqOSrC0Y.mjs").then((n) => n.n);
792
+ const { RangeInputComponent } = await import("./magmonium-one-range-DlQfnl9p.mjs").then((n) => n.n);
793
793
  this.createDynamicComponent(seq, RangeInputComponent);
794
794
  break;
795
795
  }
796
796
  case InputType.MULTI_RANGE: {
797
- const { MultiRangeInputComponent } = await import("./magmonium-one-multi-range-RSLLKzLu.mjs").then((n) => n.n);
797
+ const { MultiRangeInputComponent } = await import("./magmonium-one-multi-range-DL_JlKVL.mjs").then((n) => n.n);
798
798
  this.createDynamicComponent(seq, MultiRangeInputComponent);
799
799
  break;
800
800
  }
@@ -3384,6 +3384,24 @@ const BREAKPOINTS$2 = [
3384
3384
  var ActionComponent = class ActionComponent extends ButtonGroupComponent {
3385
3385
  sticky = input(false, ...ngDevMode ? [{ debugName: "sticky" }] : /* istanbul ignore next */ []);
3386
3386
  isStuck = signal(false, ...ngDevMode ? [{ debugName: "isStuck" }] : /* istanbul ignore next */ []);
3387
+ projected = contentChildren(ButtonComponent, ...ngDevMode ? [{ debugName: "projected" }] : /* istanbul ignore next */ []);
3388
+ projectedButtons = computed(() => this.projected().map((child) => child.config()).filter((config) => !!config), ...ngDevMode ? [{ debugName: "projectedButtons" }] : /* istanbul ignore next */ []);
3389
+ projectedLinkTrees = computed(() => {
3390
+ const trees = /* @__PURE__ */ new Map();
3391
+ this.projected().forEach((child) => {
3392
+ const name = child.config()?.name;
3393
+ const link = child.routerLinkRef;
3394
+ if (!name || !link) return;
3395
+ try {
3396
+ const tree = link.urlTree;
3397
+ if (tree) trees.set(name, tree);
3398
+ } catch (error) {
3399
+ console.warn(`m-action: Button "${name}" links nowhere from here`, error);
3400
+ }
3401
+ });
3402
+ return trees;
3403
+ }, ...ngDevMode ? [{ debugName: "projectedLinkTrees" }] : /* istanbul ignore next */ []);
3404
+ sourceButtons = computed(() => [...this.mergedButtons(), ...this.projectedButtons()], ...ngDevMode ? [{ debugName: "sourceButtons" }] : /* istanbul ignore next */ []);
3387
3405
  variant = input(...ngDevMode ? [void 0, { debugName: "variant" }] : /* istanbul ignore next */ []);
3388
3406
  active = input(...ngDevMode ? [void 0, { debugName: "active" }] : /* istanbul ignore next */ []);
3389
3407
  renderIds = input(...ngDevMode ? [void 0, { debugName: "renderIds" }] : /* istanbul ignore next */ []);
@@ -3395,7 +3413,13 @@ var ActionComponent = class ActionComponent extends ButtonGroupComponent {
3395
3413
  linkTrees = computed(() => {
3396
3414
  const trees = /* @__PURE__ */ new Map();
3397
3415
  if (this.isDesignMode) return trees;
3416
+ const projected = this.projectedLinkTrees();
3398
3417
  this.actionButtons().forEach((button) => {
3418
+ const written = button.name ? projected.get(button.name) : void 0;
3419
+ if (written) {
3420
+ trees.set(button, written);
3421
+ return;
3422
+ }
3399
3423
  const link = button.routerLink;
3400
3424
  if (!link) return;
3401
3425
  try {
@@ -3407,7 +3431,14 @@ var ActionComponent = class ActionComponent extends ButtonGroupComponent {
3407
3431
  return trees;
3408
3432
  }, ...ngDevMode ? [{ debugName: "linkTrees" }] : /* istanbul ignore next */ []);
3409
3433
  linkOf(button) {
3410
- return this.linkTrees().has(button) ? button.routerLink : void 0;
3434
+ const tree = this.linkTrees().get(button);
3435
+ if (!tree) return void 0;
3436
+ return button.routerLink ?? tree;
3437
+ }
3438
+ isDisabled(name) {
3439
+ const own = super.isDisabled(name);
3440
+ if (own !== void 0 || !name) return own;
3441
+ return this.projectedButtons().find((b) => b.name === name)?.disabled;
3411
3442
  }
3412
3443
  linkActive = computed(() => {
3413
3444
  const active = /* @__PURE__ */ new Map();
@@ -3519,7 +3550,7 @@ var ActionComponent = class ActionComponent extends ButtonGroupComponent {
3519
3550
  destroyRef = inject(DestroyRef);
3520
3551
  actionButtonsResource = rxResource({
3521
3552
  params: () => {
3522
- const buttons = this.mergedButtons();
3553
+ const buttons = this.sourceButtons();
3523
3554
  if (!buttons.length) return void 0;
3524
3555
  return {
3525
3556
  buttons,
@@ -3537,7 +3568,7 @@ var ActionComponent = class ActionComponent extends ButtonGroupComponent {
3537
3568
  }));
3538
3569
  }
3539
3570
  });
3540
- actionButtons = computed(() => this.actionButtonsResource.value() ?? this.mergedButtons(), ...ngDevMode ? [{ debugName: "actionButtons" }] : /* istanbul ignore next */ []);
3571
+ actionButtons = computed(() => this.actionButtonsResource.value() ?? this.sourceButtons(), ...ngDevMode ? [{ debugName: "actionButtons" }] : /* istanbul ignore next */ []);
3541
3572
  constructor() {
3542
3573
  super();
3543
3574
  effect(this.announceDefault);
@@ -3630,6 +3661,15 @@ var ActionComponent = class ActionComponent extends ButtonGroupComponent {
3630
3661
  }
3631
3662
  },
3632
3663
  host: { properties: { "class.m-action--host-sticky": "sticky()" } },
3664
+ providers: [{
3665
+ provide: ACTION_BUTTON_HOST,
3666
+ useValue: true
3667
+ }],
3668
+ queries: [{
3669
+ propertyName: "projected",
3670
+ predicate: ButtonComponent,
3671
+ isSignal: true
3672
+ }],
3633
3673
  usesInheritance: true,
3634
3674
  ngImport: i0,
3635
3675
  template: "@let buttons = actionButtons();\n<!-- No `config()` guard: a bar the Design editor folded its Buttons into has no\n `button_groups/<name>.yml` behind it — they ride on `[buttons]` instead\n (ADR 0009, ADR 0010) — so what decides whether the row exists is whether\n there are Buttons in it. Empty, it draws only on the Canvas, where it is\n the drop space a Button lands on. -->\n@if (buttons.length || isDesignMode) {\n <div\n class=\"m-action\"\n [class.m-action--stuck]=\"isStuck()\"\n [class.m-action--toggle]=\"resolvedVariant() === 'toggle'\"\n >\n @for (button of visibleButtons(); track $index) {\n <!-- A routed Button is a real link, so the browser's own affordances —\n a middle-click, open in new tab, the URL on hover — reach it. A\n disabled one stays a <button>: an <a> cannot be disabled, and a\n RouterLink on one would still navigate. -->\n @let link = isDisabled(button.name) ? undefined : linkOf(button);\n @if (link) {\n <a\n class=\"m-action__btn\"\n [routerLink]=\"link\"\n [attr.data-testid]=\"(button.name || '') + '-btn'\"\n [class.active]=\"isActive(button)\"\n [class.m-action__btn--icon-only]=\"isLabelHidden(button)\"\n [attr.aria-label]=\"isLabelHidden(button) ? (button.label | translate) : null\"\n [attr.aria-current]=\"isActive(button) ? 'page' : null\"\n [style.--m-action-color]=\"fillColor(button)\"\n [style.--m-action-color-contrast]=\"contrastColor(button)\"\n [style.--m-action-label]=\"labelColor(button)\"\n (click)=\"select(button)\"\n >\n <ng-container\n *ngTemplateOutlet=\"buttonContent; context: { $implicit: button }\"\n />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"m-action__btn\"\n [attr.data-testid]=\"(button.name || '') + '-btn'\"\n [attr.render-id]=\"renderIds()?.[button.name ?? '']\"\n [class.active]=\"isActive(button)\"\n [class.m-action__btn--icon-only]=\"isLabelHidden(button)\"\n [attr.aria-label]=\"isLabelHidden(button) ? (button.label | translate) : null\"\n [style.--m-action-color]=\"fillColor(button)\"\n [style.--m-action-color-contrast]=\"contrastColor(button)\"\n [style.--m-action-label]=\"labelColor(button)\"\n [disabled]=\"isDisabled(button.name)\"\n (click)=\"select(button)\"\n >\n <ng-container\n *ngTemplateOutlet=\"buttonContent; context: { $implicit: button }\"\n />\n </button>\n }\n }\n @if (menuButtons().length) {\n <!-- The Buttons the bar could not fit. Squeezed rather than dropped:\n an action the User can still reach behind one press beats an action\n that silently stopped existing at 400px. -->\n <m-context-menu\n class=\"m-action__overflow\"\n [config]=\"squeezeMenu()\"\n [remote]=\"remote() ?? config()?.remote\"\n (action)=\"onMenuAction($event)\"\n />\n }\n @if (!buttons.length) {\n <!-- A bar with nothing in it has no box, and a slot with no box is a slot\n nothing can be dropped on — the same rect an empty projected Card is\n given (m-one-ui `.card-drop-space`). -->\n <span class=\"m-action__drop\"></span>\n }\n </div>\n}\n\n<ng-template #buttonContent let-button>\n @if (button.icon) {\n <m-icon\n [name]=\"button.icon\"\n [color]=\"iconColor(button)\"\n [remote]=\"remote() ?? config()?.remote\"\n />\n }\n @if (button.label && !isLabelHidden(button)) {\n <span class=\"m-action__label\">{{ button.label | translate }}</span>\n }\n</ng-template>\n",
@@ -3729,6 +3769,10 @@ i0.ɵɵngDeclareClassMetadata({
3729
3769
  changeDetection: ChangeDetectionStrategy.OnPush,
3730
3770
  encapsulation: ViewEncapsulation.None,
3731
3771
  host: { "[class.m-action--host-sticky]": "sticky()" },
3772
+ providers: [{
3773
+ provide: ACTION_BUTTON_HOST,
3774
+ useValue: true
3775
+ }],
3732
3776
  template: "@let buttons = actionButtons();\n<!-- No `config()` guard: a bar the Design editor folded its Buttons into has no\n `button_groups/<name>.yml` behind it — they ride on `[buttons]` instead\n (ADR 0009, ADR 0010) — so what decides whether the row exists is whether\n there are Buttons in it. Empty, it draws only on the Canvas, where it is\n the drop space a Button lands on. -->\n@if (buttons.length || isDesignMode) {\n <div\n class=\"m-action\"\n [class.m-action--stuck]=\"isStuck()\"\n [class.m-action--toggle]=\"resolvedVariant() === 'toggle'\"\n >\n @for (button of visibleButtons(); track $index) {\n <!-- A routed Button is a real link, so the browser's own affordances —\n a middle-click, open in new tab, the URL on hover — reach it. A\n disabled one stays a <button>: an <a> cannot be disabled, and a\n RouterLink on one would still navigate. -->\n @let link = isDisabled(button.name) ? undefined : linkOf(button);\n @if (link) {\n <a\n class=\"m-action__btn\"\n [routerLink]=\"link\"\n [attr.data-testid]=\"(button.name || '') + '-btn'\"\n [class.active]=\"isActive(button)\"\n [class.m-action__btn--icon-only]=\"isLabelHidden(button)\"\n [attr.aria-label]=\"isLabelHidden(button) ? (button.label | translate) : null\"\n [attr.aria-current]=\"isActive(button) ? 'page' : null\"\n [style.--m-action-color]=\"fillColor(button)\"\n [style.--m-action-color-contrast]=\"contrastColor(button)\"\n [style.--m-action-label]=\"labelColor(button)\"\n (click)=\"select(button)\"\n >\n <ng-container\n *ngTemplateOutlet=\"buttonContent; context: { $implicit: button }\"\n />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"m-action__btn\"\n [attr.data-testid]=\"(button.name || '') + '-btn'\"\n [attr.render-id]=\"renderIds()?.[button.name ?? '']\"\n [class.active]=\"isActive(button)\"\n [class.m-action__btn--icon-only]=\"isLabelHidden(button)\"\n [attr.aria-label]=\"isLabelHidden(button) ? (button.label | translate) : null\"\n [style.--m-action-color]=\"fillColor(button)\"\n [style.--m-action-color-contrast]=\"contrastColor(button)\"\n [style.--m-action-label]=\"labelColor(button)\"\n [disabled]=\"isDisabled(button.name)\"\n (click)=\"select(button)\"\n >\n <ng-container\n *ngTemplateOutlet=\"buttonContent; context: { $implicit: button }\"\n />\n </button>\n }\n }\n @if (menuButtons().length) {\n <!-- The Buttons the bar could not fit. Squeezed rather than dropped:\n an action the User can still reach behind one press beats an action\n that silently stopped existing at 400px. -->\n <m-context-menu\n class=\"m-action__overflow\"\n [config]=\"squeezeMenu()\"\n [remote]=\"remote() ?? config()?.remote\"\n (action)=\"onMenuAction($event)\"\n />\n }\n @if (!buttons.length) {\n <!-- A bar with nothing in it has no box, and a slot with no box is a slot\n nothing can be dropped on — the same rect an empty projected Card is\n given (m-one-ui `.card-drop-space`). -->\n <span class=\"m-action__drop\"></span>\n }\n </div>\n}\n\n<ng-template #buttonContent let-button>\n @if (button.icon) {\n <m-icon\n [name]=\"button.icon\"\n [color]=\"iconColor(button)\"\n [remote]=\"remote() ?? config()?.remote\"\n />\n }\n @if (button.label && !isLabelHidden(button)) {\n <span class=\"m-action__label\">{{ button.label | translate }}</span>\n }\n</ng-template>\n",
3733
3777
  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-action,m-one-action{display:block;width:100%;grid-column:1/-1}m-action.m-action--host-sticky,m-one-action.m-action--host-sticky{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--m-background) 92%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.m-action{display:flex;flex-wrap:nowrap;background:transparent;width:100%;border-bottom:1px solid var(--m-backdrop-border);--m-action-color: var(--m-button-color, var(--m-one-button-color, var(--m-mm)));--m-action-color-contrast: var(--m-button-color-contrast, var(--m-one-button-color-contrast, #ffffff))}.m-action--stuck{border-bottom-color:#00000014;box-shadow:0 2px 10px #0000000f}.m-action__btn{flex:1;min-width:0;padding:1rem 2rem;border:none;background:transparent;text-decoration:none;color:var(--m-action-label, var(--m-text));font-weight:300;font-size:.9rem;display:flex;align-items:center;justify-content:center;gap:.6rem;white-space:nowrap;overflow:hidden;cursor:pointer;border-right:1px solid var(--m-backdrop-border);transition:all .25s cubic-bezier(.4,0,.2,1)}.m-action__btn:last-child{border-right:none}.m-action__btn:hover{background:var(--m-background-lite);color:var(--m-action-color)}.m-action__btn .m-icon{transition:transform .2s ease}.m-action__btn:hover .m-icon{transform:scale(1.1)}.m-action__btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.m-action__btn.active{color:var(--m-action-color);font-weight:500}.m-action__btn.m-action__btn--icon-only{padding:1rem .5rem;gap:0}.m-action--toggle .m-action__btn{position:relative;filter:grayscale(100%);transition:all .25s cubic-bezier(.4,0,.2,1),filter .25s cubic-bezier(.4,0,.2,1)}.m-action--toggle .m-action__btn.active{filter:none}.m-action--toggle .m-action__btn.active:hover:not(:disabled){filter:none}.m-action__overflow{display:flex;align-items:center;padding:0 .5rem;flex:0 0 auto}.m-action__drop{display:block;flex:1;min-height:3.5rem;margin:.5rem;border:1px dashed currentColor;border-radius:.25rem;opacity:.4;pointer-events:none}.m-action__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}@container mag-grid (max-width: 767.98px){.m-action__btn{padding:1rem .75rem;gap:.4rem}}@container mag-grid (max-width: 575.98px){.m-action__btn{padding:.85rem .4rem;font-size:.8rem}}\n"]
3734
3778
  }]
@@ -3743,6 +3787,10 @@ i0.ɵɵngDeclareClassMetadata({
3743
3787
  required: false
3744
3788
  }]
3745
3789
  }],
3790
+ projected: [{
3791
+ type: i0.ContentChildren,
3792
+ args: [i0.forwardRef(() => ButtonComponent), { isSignal: true }]
3793
+ }],
3746
3794
  variant: [{
3747
3795
  type: i0.Input,
3748
3796
  args: [{
@@ -10987,6 +11035,10 @@ const ModalStore = signalStore({ providedIn: "root" }, withState({
10987
11035
  const viewportWidth = typeof window === "undefined" ? 0 : window.innerWidth;
10988
11036
  return hasRoomToDock(base.width, width, viewportWidth) ? baseId : void 0;
10989
11037
  };
11038
+ const replacePanel = (id) => {
11039
+ (state.panelTriggerMap()[id]?.providers?.find((p) => !!p && !Array.isArray(p) && "provide" in p && p.provide === MODAL_REF))?.useValue?.close(void 0);
11040
+ if (state.panelTriggerMap()[id]) closePanel(id);
11041
+ };
10990
11042
  const openPanel = (panelTrigger) => {
10991
11043
  const id = panelTrigger.id ?? getUniqueId();
10992
11044
  const side = panelTrigger.side ?? "right";
@@ -10995,7 +11047,10 @@ const ModalStore = signalStore({ providedIn: "root" }, withState({
10995
11047
  const isMobile = deviceService.isMobile();
10996
11048
  if (panelTrigger.dock) {
10997
11049
  const activeId = state.activePanel();
10998
- if (activeId && state.panelTriggerMap()[activeId]?.dockedOver) closePanel(activeId);
11050
+ if (activeId && state.panelTriggerMap()[activeId]?.dockedOver) replacePanel(activeId);
11051
+ } else if (panelTrigger.body !== void 0) {
11052
+ const sameId = Object.keys(state.panelTriggerMap()).find((key) => state.panelTriggerMap()[key]?.body === panelTrigger.body);
11053
+ if (sameId) replacePanel(sameId);
10999
11054
  }
11000
11055
  const dockedOver = panelTrigger.dock ? resolveDockTarget(side, width) : void 0;
11001
11056
  const styles = isMobile ? {
@@ -11143,7 +11198,8 @@ const ModalStore = signalStore({ providedIn: "root" }, withState({
11143
11198
  width: trigger.width,
11144
11199
  height: trigger.height,
11145
11200
  dock: trigger.dock,
11146
- closeProhibited: trigger.closeProhibited
11201
+ closeProhibited: trigger.closeProhibited,
11202
+ body: trigger.screen ?? trigger.widget
11147
11203
  });
11148
11204
  modalRef.onClose((result) => {
11149
11205
  trigger.onResult?.(result);
@@ -23915,7 +23971,7 @@ var WrapperInputComponent = class WrapperInputComponent extends ConfigComponent
23915
23971
  break;
23916
23972
  }
23917
23973
  case InputType.PASSWORD: {
23918
- const { PasswordInputComponent } = await import("./magmonium-one-password-CJBa8k1l.mjs");
23974
+ const { PasswordInputComponent } = await import("./magmonium-one-password-CvgWZkAX.mjs");
23919
23975
  this.createDynamicComponent(seq, PasswordInputComponent);
23920
23976
  break;
23921
23977
  }
@@ -23945,12 +24001,12 @@ var WrapperInputComponent = class WrapperInputComponent extends ConfigComponent
23945
24001
  break;
23946
24002
  }
23947
24003
  case InputType.RANGE: {
23948
- const { RangeInputComponent } = await import("./magmonium-one-range-CqOSrC0Y.mjs").then((n) => n.n);
24004
+ const { RangeInputComponent } = await import("./magmonium-one-range-DlQfnl9p.mjs").then((n) => n.n);
23949
24005
  this.createDynamicComponent(seq, RangeInputComponent);
23950
24006
  break;
23951
24007
  }
23952
24008
  case InputType.MULTI_RANGE: {
23953
- const { MultiRangeInputComponent } = await import("./magmonium-one-multi-range-RSLLKzLu.mjs").then((n) => n.n);
24009
+ const { MultiRangeInputComponent } = await import("./magmonium-one-multi-range-DL_JlKVL.mjs").then((n) => n.n);
23954
24010
  this.createDynamicComponent(seq, MultiRangeInputComponent);
23955
24011
  break;
23956
24012
  }
@@ -26391,7 +26447,7 @@ var FileUploadInputComponent = class FileUploadInputComponent extends BaseInputC
26391
26447
  openEditor = async (file, size) => {
26392
26448
  const modalStore = this.modalStore;
26393
26449
  if (!modalStore) return void 0;
26394
- const { ImageEditorComponent } = await import("./magmonium-one-image-editor-B6eCXP9A.mjs");
26450
+ const { ImageEditorComponent } = await import("./magmonium-one-image-editor-BLqlV2ki.mjs");
26395
26451
  const ratio = String(this.config()?.ratio ?? "");
26396
26452
  return new Promise((resolve) => {
26397
26453
  const modalRef = new ModalRef();
@@ -34741,7 +34797,7 @@ i0.ɵɵngDeclareClassMetadata({
34741
34797
  });
34742
34798
  const gapPct = (level, value) => (level / value - 1) * 100;
34743
34799
  const formatGap = (gap) => `${gap > 0 ? "+" : gap < 0 ? "−" : ""}${Math.abs(gap).toFixed(1)}%`;
34744
- const PAD = .04;
34800
+ const PAD$1 = .04;
34745
34801
  const ladderScale = ({ value, levels, forward = [], maxSpanPct }) => {
34746
34802
  const within = (v) => Math.abs(gapPct(v, value)) <= maxSpanPct;
34747
34803
  const values = [
@@ -34752,7 +34808,7 @@ const ladderScale = ({ value, levels, forward = [], maxSpanPct }) => {
34752
34808
  const min = Math.min(...values);
34753
34809
  const max = Math.max(...values);
34754
34810
  const span = max - min || Math.abs(max) * .02 || 1;
34755
- const lo = max === min ? min - span / 2 : min - span * PAD;
34811
+ const lo = max === min ? min - span / 2 : min - span * PAD$1;
34756
34812
  const width = max === min ? span : span * 1.08;
34757
34813
  const pos = (v) => (v - lo) / width * 100;
34758
34814
  return {
@@ -35215,8 +35271,8 @@ i0.ɵɵngDeclareClassMetadata({
35215
35271
  }
35216
35272
  });
35217
35273
  const LIST_BELOW_PX = 360;
35218
- const FALLBACK_PX = 640;
35219
- const LABEL_GAP_PX = 64;
35274
+ const FALLBACK_PX$1 = 640;
35275
+ const LABEL_GAP_PX$1 = 64;
35220
35276
  const price = (v) => typeof v === "number" && Number.isFinite(v) && v > 0 ? v : null;
35221
35277
  var PriceLadderComponent = class PriceLadderComponent {
35222
35278
  value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
@@ -35385,11 +35441,11 @@ var PriceLadderComponent = class PriceLadderComponent {
35385
35441
  maxSpanPct: this.maxSpanPct()
35386
35442
  });
35387
35443
  const at = new Map(marks.map((m) => [m.key, m]));
35388
- const widthPx = this.width() || FALLBACK_PX;
35444
+ const widthPx = this.width() || FALLBACK_PX$1;
35389
35445
  const labels = layoutLanes(marks.map((m) => ({
35390
35446
  key: m.key,
35391
35447
  x: scale.pos(m.value) / 100 * widthPx
35392
- })), LABEL_GAP_PX).map((label) => {
35448
+ })), LABEL_GAP_PX$1).map((label) => {
35393
35449
  const group = marks.filter((m) => label.keys.includes(m.key));
35394
35450
  const level = group.some((m) => m.kind === "level");
35395
35451
  return {
@@ -35420,11 +35476,11 @@ var PriceLadderComponent = class PriceLadderComponent {
35420
35476
  const from = at.get(pair?.from ?? "");
35421
35477
  const to = at.get(pair?.to ?? "");
35422
35478
  const cross = pair && from && to ? {
35423
- ...span(scale.pos(from.value), scale.pos(to.value)),
35479
+ ...span$1(scale.pos(from.value), scale.pos(to.value)),
35424
35480
  tone: pair.tone
35425
35481
  } : null;
35426
35482
  const ends = marks.filter((m) => m.kind === "bound");
35427
- const bounds = ends.length === 2 ? span(scale.pos(ends[0].value), scale.pos(ends[1].value)) : null;
35483
+ const bounds = ends.length === 2 ? span$1(scale.pos(ends[0].value), scale.pos(ends[1].value)) : null;
35428
35484
  return {
35429
35485
  valuePos,
35430
35486
  ticks: marks.map((m) => ({
@@ -35436,8 +35492,8 @@ var PriceLadderComponent = class PriceLadderComponent {
35436
35492
  labels,
35437
35493
  lanes: labels.some((l) => l.lane === 1) ? 2 : 1,
35438
35494
  target,
35439
- connector: target && fwd?.point != null ? span(valuePos, target.pos) : null,
35440
- band: fwd?.range ? span(scale.clamp(fwd.range.low), scale.clamp(fwd.range.high)) : null,
35495
+ connector: target && fwd?.point != null ? span$1(valuePos, target.pos) : null,
35496
+ band: fwd?.range ? span$1(scale.clamp(fwd.range.low), scale.clamp(fwd.range.high)) : null,
35441
35497
  cross,
35442
35498
  bounds
35443
35499
  };
@@ -35755,10 +35811,1096 @@ i0.ɵɵngDeclareClassMetadata({
35755
35811
  }]
35756
35812
  }
35757
35813
  });
35758
- const span = (a, b) => ({
35814
+ const span$1 = (a, b) => ({
35759
35815
  left: Math.min(a, b),
35760
35816
  width: Math.abs(b - a)
35761
35817
  });
35818
+ const PAD = .05;
35819
+ const scaleDomain = ({ values, primary, maxSpanPct, min, max }) => {
35820
+ const far = (v) => maxSpanPct != null && primary != null && primary !== 0 && Math.abs(gapPct(v, primary)) > maxSpanPct;
35821
+ const kept = values.filter((v) => !far(v));
35822
+ const low = kept.length ? Math.min(...kept) : 0;
35823
+ const high = kept.length ? Math.max(...kept) : 1;
35824
+ const span = high - low || Math.abs(high) * .1 || 1;
35825
+ const lo = min ?? (high === low ? low - span / 2 : low - span * PAD);
35826
+ const fitHi = max ?? (high === low ? high + span / 2 : high + span * PAD);
35827
+ const hi = fitHi > lo ? fitHi : lo + 1;
35828
+ const pin = (v) => {
35829
+ if (far(v)) return v > primary ? 1 : -1;
35830
+ return v < lo ? -1 : v > hi ? 1 : 0;
35831
+ };
35832
+ const pos = (v) => {
35833
+ const p = pin(v);
35834
+ return p === 1 ? 100 : p === -1 ? 0 : (v - lo) / (hi - lo) * 100;
35835
+ };
35836
+ return {
35837
+ lo,
35838
+ hi,
35839
+ pin,
35840
+ pos
35841
+ };
35842
+ };
35843
+ const NOT_HOLDING = {
35844
+ holds: false,
35845
+ left: null,
35846
+ right: null,
35847
+ gap: null
35848
+ };
35849
+ const ALWAYS = {
35850
+ ...NOT_HOLDING,
35851
+ holds: true
35852
+ };
35853
+ const parseKeys = (raw) => (typeof raw === "string" ? raw.split(/[\s,]+/) : [...raw ?? []]).filter(Boolean);
35854
+ const compare$1 = (op, l, r, gap, n) => {
35855
+ switch (op) {
35856
+ case "gt": return l > r;
35857
+ case "gte": return l >= r;
35858
+ case "lt": return l < r;
35859
+ case "lte": return l <= r;
35860
+ case "within": return gap !== null && n !== null && Math.abs(gap) <= n;
35861
+ case "beyond": return gap !== null && n !== null && Math.abs(gap) > n;
35862
+ }
35863
+ };
35864
+ const rightOf = (def, values) => {
35865
+ if (def.rightKind === "fixed") return def.rightValue;
35866
+ const mark = values.get(def.right);
35867
+ if (mark === void 0) return null;
35868
+ if (def.rightKind === "pct") return def.rightValue === null ? null : mark * def.rightValue / 100;
35869
+ return mark;
35870
+ };
35871
+ const evaluateRelations = (defs, values) => {
35872
+ const byKey = new Map(defs.map((d) => [d.key, d]));
35873
+ const done = /* @__PURE__ */ new Map();
35874
+ const evaluate = (key, stack) => {
35875
+ const known = done.get(key);
35876
+ if (known) return known;
35877
+ const def = byKey.get(key);
35878
+ if (!def || stack.has(key)) return NOT_HOLDING;
35879
+ const result = def.type === "always" ? ALWAYS : def.type === "combine" ? combine(def, /* @__PURE__ */ new Set([...stack, key])) : compareOf(def);
35880
+ done.set(key, result);
35881
+ return result;
35882
+ };
35883
+ const combine = (def, stack) => {
35884
+ const held = def.of.map((k) => evaluate(k, stack).holds);
35885
+ const holds = def.mode === "all" ? held.length > 0 && held.every(Boolean) : def.mode === "any" ? held.some(Boolean) : held.length > 0 && !held[0];
35886
+ return {
35887
+ ...NOT_HOLDING,
35888
+ holds
35889
+ };
35890
+ };
35891
+ const compareOf = (def) => {
35892
+ const left = values.get(def.left) ?? null;
35893
+ const right = rightOf(def, values);
35894
+ if (left === null || right === null) return NOT_HOLDING;
35895
+ const gap = right !== 0 ? gapPct(left, right) : null;
35896
+ return {
35897
+ holds: compare$1(def.op, left, right, gap, def.n),
35898
+ left,
35899
+ right,
35900
+ gap
35901
+ };
35902
+ };
35903
+ for (const def of defs) evaluate(def.key, /* @__PURE__ */ new Set());
35904
+ return done;
35905
+ };
35906
+ const spreadLabels = (items, gapPx, lengthPx) => {
35907
+ const out = [...items].sort((a, b) => a.y - b.y).map((i) => ({ ...i }));
35908
+ for (let i = 1; i < out.length; i++) out[i].y = Math.max(out[i].y, out[i - 1].y + gapPx);
35909
+ const last = out.length - 1;
35910
+ if (last >= 0 && out[last].y > lengthPx) {
35911
+ out[last].y = lengthPx;
35912
+ for (let i = last - 1; i >= 0; i--) out[i].y = Math.min(out[i].y, out[i + 1].y - gapPx);
35913
+ }
35914
+ if (out.length && out[0].y < 0) {
35915
+ out[0].y = 0;
35916
+ for (let i = 1; i < out.length; i++) out[i].y = Math.max(out[i].y, out[i - 1].y + gapPx);
35917
+ }
35918
+ return out;
35919
+ };
35920
+ const compare = (key, left, op, right, more = {}) => ({
35921
+ key,
35922
+ ...more.hidden ? {} : { label: key },
35923
+ tone: more.tone ?? "neutral",
35924
+ type: "compare",
35925
+ left,
35926
+ op,
35927
+ rightKind: more.pct === void 0 ? "mark" : "pct",
35928
+ right,
35929
+ ...more.pct === void 0 ? {} : { rightValue: more.pct },
35930
+ ...more.n === void 0 ? {} : { n: more.n },
35931
+ ...more.hidden ? { hidden: true } : {},
35932
+ ...more.bracket ? { bracket: true } : {}
35933
+ });
35934
+ const combine = (key, mode, of, tone = "neutral", hidden = false) => ({
35935
+ key,
35936
+ ...hidden ? {} : { label: key },
35937
+ tone,
35938
+ type: "combine",
35939
+ mode,
35940
+ of,
35941
+ ...hidden ? { hidden: true } : {}
35942
+ });
35943
+ const SMAS = [
35944
+ "sma10",
35945
+ "sma50",
35946
+ "sma100",
35947
+ "sma200"
35948
+ ];
35949
+ const CONVERGING = SMAS.flatMap((a) => SMAS.filter((b) => b !== a).map((b) => `${a}-under-103-of-${b}`));
35950
+ const PRICE_RULES = [
35951
+ compare("golden-cross", "sma50", "gte", "sma200", {
35952
+ tone: "gold",
35953
+ bracket: true
35954
+ }),
35955
+ compare("death-cross", "sma50", "lt", "sma200", {
35956
+ tone: "down",
35957
+ bracket: true
35958
+ }),
35959
+ combine("death-cross-near", "all", ["golden-cross", "cross-near"], "down"),
35960
+ combine("golden-cross-near", "all", ["death-cross", "cross-near"], "gold"),
35961
+ combine("bullish-alignment", "all", [
35962
+ "above-sma10",
35963
+ "sma10-above-sma50",
35964
+ "sma50-above-sma100",
35965
+ "sma100-above-sma200"
35966
+ ], "up"),
35967
+ combine("bearish-alignment", "all", [
35968
+ "below-sma10",
35969
+ "sma10-below-sma50",
35970
+ "sma50-below-sma100",
35971
+ "sma100-below-sma200"
35972
+ ], "down"),
35973
+ combine("strongly-bullish", "all", ["above-sma50", "above-sma200"], "up"),
35974
+ combine("bullish-support", "all", ["not-above-sma50", "above-sma200"], "up"),
35975
+ combine("recovering", "all", ["above-sma50", "not-above-sma200"]),
35976
+ combine("bearish-pressure", "all", ["not-above-sma50", "not-above-sma200"], "down"),
35977
+ compare("stretched", "current", "gt", "sma200", {
35978
+ tone: "warn",
35979
+ pct: 120
35980
+ }),
35981
+ compare("far-below-sma-200", "current", "lt", "sma200", {
35982
+ tone: "down",
35983
+ pct: 80
35984
+ }),
35985
+ combine("averages-converging", "all", CONVERGING, "warn"),
35986
+ compare("52w-breakout", "current", "gte", "high52w", { tone: "up" }),
35987
+ combine("near-52w-high", "all", ["below-52w-high", "within-3-of-52w-high"], "up"),
35988
+ compare("new-52w-low", "current", "lte", "low52w", { tone: "down" }),
35989
+ combine("near-52w-low", "all", ["above-52w-low", "within-3-of-52w-low"], "down"),
35990
+ combine("forecast-against-trend", "any", ["against-up", "against-down"], "warn"),
35991
+ compare("forecast-above-52w-high", "forecast", "gt", "high52w")
35992
+ ];
35993
+ const PRICE_HELPERS = [
35994
+ compare("cross-near", "sma50", "within", "sma200", {
35995
+ n: 1,
35996
+ hidden: true
35997
+ }),
35998
+ compare("above-sma10", "current", "gt", "sma10", { hidden: true }),
35999
+ compare("sma10-above-sma50", "sma10", "gt", "sma50", { hidden: true }),
36000
+ compare("sma50-above-sma100", "sma50", "gt", "sma100", { hidden: true }),
36001
+ compare("sma100-above-sma200", "sma100", "gt", "sma200", { hidden: true }),
36002
+ compare("below-sma10", "current", "lt", "sma10", { hidden: true }),
36003
+ compare("sma10-below-sma50", "sma10", "lt", "sma50", { hidden: true }),
36004
+ compare("sma50-below-sma100", "sma50", "lt", "sma100", { hidden: true }),
36005
+ compare("sma100-below-sma200", "sma100", "lt", "sma200", { hidden: true }),
36006
+ compare("above-sma50", "current", "gt", "sma50", { hidden: true }),
36007
+ compare("above-sma200", "current", "gt", "sma200", { hidden: true }),
36008
+ compare("not-above-sma50", "current", "lte", "sma50", { hidden: true }),
36009
+ compare("not-above-sma200", "current", "lte", "sma200", { hidden: true }),
36010
+ ...SMAS.flatMap((a) => SMAS.filter((b) => b !== a).map((b) => compare(`${a}-under-103-of-${b}`, a, "lt", b, {
36011
+ pct: 103,
36012
+ hidden: true
36013
+ }))),
36014
+ compare("below-52w-high", "current", "lt", "high52w", { hidden: true }),
36015
+ compare("within-3-of-52w-high", "current", "gt", "high52w", {
36016
+ pct: 100 / 1.03,
36017
+ hidden: true
36018
+ }),
36019
+ compare("above-52w-low", "current", "gt", "low52w", { hidden: true }),
36020
+ compare("within-3-of-52w-low", "current", "lt", "low52w", {
36021
+ pct: 103,
36022
+ hidden: true
36023
+ }),
36024
+ compare("forecast-up", "forecast", "gt", "current", { hidden: true }),
36025
+ compare("forecast-down", "forecast", "lt", "current", { hidden: true }),
36026
+ combine("bear-trend", "any", ["death-cross", "bearish-alignment"], "neutral", true),
36027
+ combine("bull-trend", "any", ["golden-cross", "bullish-alignment"], "neutral", true),
36028
+ combine("against-up", "all", ["forecast-up", "bear-trend"], "neutral", true),
36029
+ combine("against-down", "all", ["forecast-down", "bull-trend"], "neutral", true)
36030
+ ];
36031
+ const BY_KEY = new Map([...PRICE_RULES, ...PRICE_HELPERS].map((r) => [r.key, r]));
36032
+ const isPriceRule = (name) => typeof name === "string" && PRICE_RULES.some((r) => r.key === name);
36033
+ const asHidden = (relation) => {
36034
+ const rest = { ...relation };
36035
+ delete rest.label;
36036
+ delete rest.bracket;
36037
+ return {
36038
+ ...rest,
36039
+ hidden: true
36040
+ };
36041
+ };
36042
+ const priceRelationsFor = (rules) => {
36043
+ const asked = new Set(rules);
36044
+ const out = /* @__PURE__ */ new Map();
36045
+ const visit = (key) => {
36046
+ const relation = BY_KEY.get(key);
36047
+ if (!relation || out.has(key)) return;
36048
+ out.set(key, asked.has(key) ? relation : asHidden(relation));
36049
+ for (const k of relation.of ?? []) visit(k);
36050
+ };
36051
+ rules.forEach((key) => BY_KEY.has(key) && !out.has(key) && out.set(key, BY_KEY.get(key)));
36052
+ for (const key of rules) for (const k of BY_KEY.get(key)?.of ?? []) visit(k);
36053
+ return [...out.values()];
36054
+ };
36055
+ const PRICE_SCALE_RELATIONS = priceRelationsFor(PRICE_RULES.map((r) => r.key));
36056
+ var ScaleMarkComponent = class ScaleMarkComponent {
36057
+ key = input("", ...ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []);
36058
+ label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
36059
+ value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
36060
+ kind = input("level", ...ngDevMode ? [{ debugName: "kind" }] : /* istanbul ignore next */ []);
36061
+ low = input(null, ...ngDevMode ? [{ debugName: "low" }] : /* istanbul ignore next */ []);
36062
+ high = input(null, ...ngDevMode ? [{ debugName: "high" }] : /* istanbul ignore next */ []);
36063
+ primary = input(false, ...ngDevMode ? [{ debugName: "primary" }] : /* istanbul ignore next */ []);
36064
+ static ɵfac = i0.ɵɵngDeclareFactory({
36065
+ minVersion: "12.0.0",
36066
+ version: "22.2.1",
36067
+ ngImport: i0,
36068
+ type: ScaleMarkComponent,
36069
+ deps: [],
36070
+ target: i0.ɵɵFactoryTarget.Component
36071
+ });
36072
+ static ɵcmp = i0.ɵɵngDeclareComponent({
36073
+ minVersion: "17.1.0",
36074
+ version: "22.2.1",
36075
+ type: ScaleMarkComponent,
36076
+ isStandalone: true,
36077
+ selector: "m-scale-mark",
36078
+ inputs: {
36079
+ key: {
36080
+ classPropertyName: "key",
36081
+ publicName: "key",
36082
+ isSignal: true,
36083
+ isRequired: false,
36084
+ transformFunction: null
36085
+ },
36086
+ label: {
36087
+ classPropertyName: "label",
36088
+ publicName: "label",
36089
+ isSignal: true,
36090
+ isRequired: false,
36091
+ transformFunction: null
36092
+ },
36093
+ value: {
36094
+ classPropertyName: "value",
36095
+ publicName: "value",
36096
+ isSignal: true,
36097
+ isRequired: false,
36098
+ transformFunction: null
36099
+ },
36100
+ kind: {
36101
+ classPropertyName: "kind",
36102
+ publicName: "kind",
36103
+ isSignal: true,
36104
+ isRequired: false,
36105
+ transformFunction: null
36106
+ },
36107
+ low: {
36108
+ classPropertyName: "low",
36109
+ publicName: "low",
36110
+ isSignal: true,
36111
+ isRequired: false,
36112
+ transformFunction: null
36113
+ },
36114
+ high: {
36115
+ classPropertyName: "high",
36116
+ publicName: "high",
36117
+ isSignal: true,
36118
+ isRequired: false,
36119
+ transformFunction: null
36120
+ },
36121
+ primary: {
36122
+ classPropertyName: "primary",
36123
+ publicName: "primary",
36124
+ isSignal: true,
36125
+ isRequired: false,
36126
+ transformFunction: null
36127
+ }
36128
+ },
36129
+ host: { styleAttribute: "display: none" },
36130
+ ngImport: i0,
36131
+ template: "",
36132
+ isInline: true,
36133
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
36134
+ });
36135
+ };
36136
+ i0.ɵɵngDeclareClassMetadata({
36137
+ minVersion: "12.0.0",
36138
+ version: "22.2.1",
36139
+ ngImport: i0,
36140
+ type: ScaleMarkComponent,
36141
+ decorators: [{
36142
+ type: Component,
36143
+ args: [{
36144
+ selector: "m-scale-mark",
36145
+ template: "",
36146
+ changeDetection: ChangeDetectionStrategy.OnPush,
36147
+ host: { style: "display: none" }
36148
+ }]
36149
+ }],
36150
+ propDecorators: {
36151
+ key: [{
36152
+ type: i0.Input,
36153
+ args: [{
36154
+ isSignal: true,
36155
+ alias: "key",
36156
+ required: false
36157
+ }]
36158
+ }],
36159
+ label: [{
36160
+ type: i0.Input,
36161
+ args: [{
36162
+ isSignal: true,
36163
+ alias: "label",
36164
+ required: false
36165
+ }]
36166
+ }],
36167
+ value: [{
36168
+ type: i0.Input,
36169
+ args: [{
36170
+ isSignal: true,
36171
+ alias: "value",
36172
+ required: false
36173
+ }]
36174
+ }],
36175
+ kind: [{
36176
+ type: i0.Input,
36177
+ args: [{
36178
+ isSignal: true,
36179
+ alias: "kind",
36180
+ required: false
36181
+ }]
36182
+ }],
36183
+ low: [{
36184
+ type: i0.Input,
36185
+ args: [{
36186
+ isSignal: true,
36187
+ alias: "low",
36188
+ required: false
36189
+ }]
36190
+ }],
36191
+ high: [{
36192
+ type: i0.Input,
36193
+ args: [{
36194
+ isSignal: true,
36195
+ alias: "high",
36196
+ required: false
36197
+ }]
36198
+ }],
36199
+ primary: [{
36200
+ type: i0.Input,
36201
+ args: [{
36202
+ isSignal: true,
36203
+ alias: "primary",
36204
+ required: false
36205
+ }]
36206
+ }]
36207
+ }
36208
+ });
36209
+ var ScaleRelationComponent = class ScaleRelationComponent {
36210
+ key = input("", ...ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []);
36211
+ label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
36212
+ tone = input("neutral", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
36213
+ detail = input("", ...ngDevMode ? [{ debugName: "detail" }] : /* istanbul ignore next */ []);
36214
+ type = input("compare", ...ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []);
36215
+ left = input("", ...ngDevMode ? [{ debugName: "left" }] : /* istanbul ignore next */ []);
36216
+ op = input("gt", ...ngDevMode ? [{ debugName: "op" }] : /* istanbul ignore next */ []);
36217
+ right = input("", ...ngDevMode ? [{ debugName: "right" }] : /* istanbul ignore next */ []);
36218
+ rightKind = input("mark", ...ngDevMode ? [{ debugName: "rightKind" }] : /* istanbul ignore next */ []);
36219
+ rightValue = input(null, ...ngDevMode ? [{ debugName: "rightValue" }] : /* istanbul ignore next */ []);
36220
+ n = input(null, ...ngDevMode ? [{ debugName: "n" }] : /* istanbul ignore next */ []);
36221
+ mode = input("all", ...ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []);
36222
+ of = input(void 0, ...ngDevMode ? [{ debugName: "of" }] : /* istanbul ignore next */ []);
36223
+ hidden = input(false, ...ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []);
36224
+ bracket = input(false, ...ngDevMode ? [{ debugName: "bracket" }] : /* istanbul ignore next */ []);
36225
+ static ɵfac = i0.ɵɵngDeclareFactory({
36226
+ minVersion: "12.0.0",
36227
+ version: "22.2.1",
36228
+ ngImport: i0,
36229
+ type: ScaleRelationComponent,
36230
+ deps: [],
36231
+ target: i0.ɵɵFactoryTarget.Component
36232
+ });
36233
+ static ɵcmp = i0.ɵɵngDeclareComponent({
36234
+ minVersion: "17.1.0",
36235
+ version: "22.2.1",
36236
+ type: ScaleRelationComponent,
36237
+ isStandalone: true,
36238
+ selector: "m-scale-relation",
36239
+ inputs: {
36240
+ key: {
36241
+ classPropertyName: "key",
36242
+ publicName: "key",
36243
+ isSignal: true,
36244
+ isRequired: false,
36245
+ transformFunction: null
36246
+ },
36247
+ label: {
36248
+ classPropertyName: "label",
36249
+ publicName: "label",
36250
+ isSignal: true,
36251
+ isRequired: false,
36252
+ transformFunction: null
36253
+ },
36254
+ tone: {
36255
+ classPropertyName: "tone",
36256
+ publicName: "tone",
36257
+ isSignal: true,
36258
+ isRequired: false,
36259
+ transformFunction: null
36260
+ },
36261
+ detail: {
36262
+ classPropertyName: "detail",
36263
+ publicName: "detail",
36264
+ isSignal: true,
36265
+ isRequired: false,
36266
+ transformFunction: null
36267
+ },
36268
+ type: {
36269
+ classPropertyName: "type",
36270
+ publicName: "type",
36271
+ isSignal: true,
36272
+ isRequired: false,
36273
+ transformFunction: null
36274
+ },
36275
+ left: {
36276
+ classPropertyName: "left",
36277
+ publicName: "left",
36278
+ isSignal: true,
36279
+ isRequired: false,
36280
+ transformFunction: null
36281
+ },
36282
+ op: {
36283
+ classPropertyName: "op",
36284
+ publicName: "op",
36285
+ isSignal: true,
36286
+ isRequired: false,
36287
+ transformFunction: null
36288
+ },
36289
+ right: {
36290
+ classPropertyName: "right",
36291
+ publicName: "right",
36292
+ isSignal: true,
36293
+ isRequired: false,
36294
+ transformFunction: null
36295
+ },
36296
+ rightKind: {
36297
+ classPropertyName: "rightKind",
36298
+ publicName: "rightKind",
36299
+ isSignal: true,
36300
+ isRequired: false,
36301
+ transformFunction: null
36302
+ },
36303
+ rightValue: {
36304
+ classPropertyName: "rightValue",
36305
+ publicName: "rightValue",
36306
+ isSignal: true,
36307
+ isRequired: false,
36308
+ transformFunction: null
36309
+ },
36310
+ n: {
36311
+ classPropertyName: "n",
36312
+ publicName: "n",
36313
+ isSignal: true,
36314
+ isRequired: false,
36315
+ transformFunction: null
36316
+ },
36317
+ mode: {
36318
+ classPropertyName: "mode",
36319
+ publicName: "mode",
36320
+ isSignal: true,
36321
+ isRequired: false,
36322
+ transformFunction: null
36323
+ },
36324
+ of: {
36325
+ classPropertyName: "of",
36326
+ publicName: "of",
36327
+ isSignal: true,
36328
+ isRequired: false,
36329
+ transformFunction: null
36330
+ },
36331
+ hidden: {
36332
+ classPropertyName: "hidden",
36333
+ publicName: "hidden",
36334
+ isSignal: true,
36335
+ isRequired: false,
36336
+ transformFunction: null
36337
+ },
36338
+ bracket: {
36339
+ classPropertyName: "bracket",
36340
+ publicName: "bracket",
36341
+ isSignal: true,
36342
+ isRequired: false,
36343
+ transformFunction: null
36344
+ }
36345
+ },
36346
+ host: { styleAttribute: "display: none" },
36347
+ ngImport: i0,
36348
+ template: "",
36349
+ isInline: true,
36350
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
36351
+ });
36352
+ };
36353
+ i0.ɵɵngDeclareClassMetadata({
36354
+ minVersion: "12.0.0",
36355
+ version: "22.2.1",
36356
+ ngImport: i0,
36357
+ type: ScaleRelationComponent,
36358
+ decorators: [{
36359
+ type: Component,
36360
+ args: [{
36361
+ selector: "m-scale-relation",
36362
+ template: "",
36363
+ changeDetection: ChangeDetectionStrategy.OnPush,
36364
+ host: { style: "display: none" }
36365
+ }]
36366
+ }],
36367
+ propDecorators: {
36368
+ key: [{
36369
+ type: i0.Input,
36370
+ args: [{
36371
+ isSignal: true,
36372
+ alias: "key",
36373
+ required: false
36374
+ }]
36375
+ }],
36376
+ label: [{
36377
+ type: i0.Input,
36378
+ args: [{
36379
+ isSignal: true,
36380
+ alias: "label",
36381
+ required: false
36382
+ }]
36383
+ }],
36384
+ tone: [{
36385
+ type: i0.Input,
36386
+ args: [{
36387
+ isSignal: true,
36388
+ alias: "tone",
36389
+ required: false
36390
+ }]
36391
+ }],
36392
+ detail: [{
36393
+ type: i0.Input,
36394
+ args: [{
36395
+ isSignal: true,
36396
+ alias: "detail",
36397
+ required: false
36398
+ }]
36399
+ }],
36400
+ type: [{
36401
+ type: i0.Input,
36402
+ args: [{
36403
+ isSignal: true,
36404
+ alias: "type",
36405
+ required: false
36406
+ }]
36407
+ }],
36408
+ left: [{
36409
+ type: i0.Input,
36410
+ args: [{
36411
+ isSignal: true,
36412
+ alias: "left",
36413
+ required: false
36414
+ }]
36415
+ }],
36416
+ op: [{
36417
+ type: i0.Input,
36418
+ args: [{
36419
+ isSignal: true,
36420
+ alias: "op",
36421
+ required: false
36422
+ }]
36423
+ }],
36424
+ right: [{
36425
+ type: i0.Input,
36426
+ args: [{
36427
+ isSignal: true,
36428
+ alias: "right",
36429
+ required: false
36430
+ }]
36431
+ }],
36432
+ rightKind: [{
36433
+ type: i0.Input,
36434
+ args: [{
36435
+ isSignal: true,
36436
+ alias: "rightKind",
36437
+ required: false
36438
+ }]
36439
+ }],
36440
+ rightValue: [{
36441
+ type: i0.Input,
36442
+ args: [{
36443
+ isSignal: true,
36444
+ alias: "rightValue",
36445
+ required: false
36446
+ }]
36447
+ }],
36448
+ n: [{
36449
+ type: i0.Input,
36450
+ args: [{
36451
+ isSignal: true,
36452
+ alias: "n",
36453
+ required: false
36454
+ }]
36455
+ }],
36456
+ mode: [{
36457
+ type: i0.Input,
36458
+ args: [{
36459
+ isSignal: true,
36460
+ alias: "mode",
36461
+ required: false
36462
+ }]
36463
+ }],
36464
+ of: [{
36465
+ type: i0.Input,
36466
+ args: [{
36467
+ isSignal: true,
36468
+ alias: "of",
36469
+ required: false
36470
+ }]
36471
+ }],
36472
+ hidden: [{
36473
+ type: i0.Input,
36474
+ args: [{
36475
+ isSignal: true,
36476
+ alias: "hidden",
36477
+ required: false
36478
+ }]
36479
+ }],
36480
+ bracket: [{
36481
+ type: i0.Input,
36482
+ args: [{
36483
+ isSignal: true,
36484
+ alias: "bracket",
36485
+ required: false
36486
+ }]
36487
+ }]
36488
+ }
36489
+ });
36490
+ const BREAKPOINT_PX = {
36491
+ sm: 576,
36492
+ md: 768,
36493
+ lg: 992,
36494
+ xl: 1200,
36495
+ xxl: 1400
36496
+ };
36497
+ const FALLBACK_PX = 640;
36498
+ const LABEL_GAP_PX = 72;
36499
+ const ROW_PX = 28;
36500
+ const MIN_VERTICAL_PX = 200;
36501
+ const finite = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
36502
+ const span = (a, b) => ({
36503
+ from: Math.min(a, b),
36504
+ size: Math.abs(b - a)
36505
+ });
36506
+ var ScaleComponent = class ScaleComponent {
36507
+ label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
36508
+ format = input("number", ...ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []);
36509
+ currency = input("INR", ...ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []);
36510
+ unit = input("", ...ngDevMode ? [{ debugName: "unit" }] : /* istanbul ignore next */ []);
36511
+ breakpoint = input("sm", ...ngDevMode ? [{ debugName: "breakpoint" }] : /* istanbul ignore next */ []);
36512
+ orientation = input("auto", ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
36513
+ min = input(null, ...ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []);
36514
+ max = input(null, ...ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []);
36515
+ maxSpanPct = input(null, ...ngDevMode ? [{ debugName: "maxSpanPct" }] : /* istanbul ignore next */ []);
36516
+ markTags = contentChildren(ScaleMarkComponent, ...ngDevMode ? [{ debugName: "markTags" }] : /* istanbul ignore next */ []);
36517
+ relationTags = contentChildren(ScaleRelationComponent, ...ngDevMode ? [{ debugName: "relationTags" }] : /* istanbul ignore next */ []);
36518
+ translateService = inject(TranslateService);
36519
+ width = signal(0, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
36520
+ constructor() {
36521
+ const host = inject(ElementRef).nativeElement;
36522
+ const destroyRef = inject(DestroyRef);
36523
+ afterNextRender(() => {
36524
+ if (typeof ResizeObserver === "undefined") return;
36525
+ const observer = new ResizeObserver(([entry]) => this.width.set(entry.contentRect.width));
36526
+ observer.observe(host);
36527
+ destroyRef.onDestroy(() => observer.disconnect());
36528
+ });
36529
+ }
36530
+ t = (key) => this.translateService.translate(key);
36531
+ formatter = computed(() => {
36532
+ const format = this.format();
36533
+ if (format === "currency") return new Intl.NumberFormat("en-IN", {
36534
+ style: "currency",
36535
+ currency: this.currency() || "INR",
36536
+ maximumFractionDigits: 2
36537
+ });
36538
+ if (format === "percent") return new Intl.NumberFormat("en-IN", {
36539
+ style: "percent",
36540
+ maximumFractionDigits: 1
36541
+ });
36542
+ return new Intl.NumberFormat("en-IN", { maximumFractionDigits: 2 });
36543
+ }, ...ngDevMode ? [{ debugName: "formatter" }] : /* istanbul ignore next */ []);
36544
+ formatValue = (v) => {
36545
+ const format = this.format();
36546
+ const text = this.formatter().format(format === "percent" ? v / 100 : v);
36547
+ const unit = this.unit();
36548
+ return format === "number" && unit ? `${text} ${unit}` : text;
36549
+ };
36550
+ shownAs = computed(() => {
36551
+ const orientation = this.orientation();
36552
+ if (orientation !== "auto") return orientation;
36553
+ const w = this.width();
36554
+ return w > 0 && w < BREAKPOINT_PX[this.breakpoint()] ? "vertical" : "horizontal";
36555
+ }, ...ngDevMode ? [{ debugName: "shownAs" }] : /* istanbul ignore next */ []);
36556
+ marks = computed(() => this.markTags().flatMap((tag) => {
36557
+ const value = finite(tag.value());
36558
+ if (value === null) return [];
36559
+ return [{
36560
+ key: tag.key(),
36561
+ name: this.t(tag.label() || tag.key()),
36562
+ value,
36563
+ kind: tag.kind(),
36564
+ low: finite(tag.low()),
36565
+ high: finite(tag.high()),
36566
+ primary: tag.primary()
36567
+ }];
36568
+ }), ...ngDevMode ? [{ debugName: "marks" }] : /* istanbul ignore next */ []);
36569
+ primary = computed(() => this.marks().find((m) => m.primary) ?? null, ...ngDevMode ? [{ debugName: "primary" }] : /* istanbul ignore next */ []);
36570
+ relations = computed(() => this.relationTags().map((tag, i) => ({
36571
+ def: {
36572
+ key: tag.key() || `relation-${i}`,
36573
+ type: tag.type(),
36574
+ left: tag.left(),
36575
+ op: tag.op(),
36576
+ right: tag.right(),
36577
+ rightKind: tag.rightKind(),
36578
+ rightValue: finite(tag.rightValue()),
36579
+ n: finite(tag.n()),
36580
+ mode: tag.mode(),
36581
+ of: parseKeys(tag.of())
36582
+ },
36583
+ label: tag.label(),
36584
+ tone: tag.tone(),
36585
+ detail: tag.detail(),
36586
+ hidden: tag.hidden(),
36587
+ bracket: tag.bracket()
36588
+ })), ...ngDevMode ? [{ debugName: "relations" }] : /* istanbul ignore next */ []);
36589
+ results = computed(() => evaluateRelations(this.relations().map((r) => r.def), new Map(this.marks().map((m) => [m.key, m.value]))), ...ngDevMode ? [{ debugName: "results" }] : /* istanbul ignore next */ []);
36590
+ chips = computed(() => this.relations().flatMap((r) => {
36591
+ const result = this.results().get(r.def.key);
36592
+ if (!result?.holds || r.hidden) return [];
36593
+ const params = {
36594
+ left: result.left === null ? "" : this.formatValue(result.left),
36595
+ right: result.right === null ? "" : this.formatValue(result.right),
36596
+ gap: result.gap === null ? "" : formatGap(result.gap)
36597
+ };
36598
+ return [{
36599
+ key: r.def.key,
36600
+ label: this.t(r.label || r.def.key),
36601
+ tone: r.tone,
36602
+ detail: r.detail ? this.translateService.translate(r.detail, params) : ""
36603
+ }];
36604
+ }), ...ngDevMode ? [{ debugName: "chips" }] : /* istanbul ignore next */ []);
36605
+ domain = computed(() => {
36606
+ const values = this.marks().flatMap((m) => [m.value, ...m.kind === "target" ? [m.low, m.high] : []]);
36607
+ return scaleDomain({
36608
+ values: values.filter((v) => v !== null),
36609
+ primary: this.primary()?.value ?? null,
36610
+ maxSpanPct: finite(this.maxSpanPct()),
36611
+ min: finite(this.min()),
36612
+ max: finite(this.max())
36613
+ });
36614
+ }, ...ngDevMode ? [{ debugName: "domain" }] : /* istanbul ignore next */ []);
36615
+ verticalPx = computed(() => Math.max(MIN_VERTICAL_PX, this.marks().length * ROW_PX), ...ngDevMode ? [{ debugName: "verticalPx" }] : /* istanbul ignore next */ []);
36616
+ plot = computed(() => {
36617
+ const vertical = this.shownAs() === "vertical";
36618
+ const domain = this.domain();
36619
+ const at = (v) => vertical ? 100 - domain.pos(v) : domain.pos(v);
36620
+ const marks = this.marks();
36621
+ const ticks = marks.map((m) => {
36622
+ const pin = domain.pin(m.value);
36623
+ return {
36624
+ key: m.key,
36625
+ kind: m.kind,
36626
+ primary: m.primary,
36627
+ at: at(m.value),
36628
+ pin: pin === 0 ? "" : pin === 1 !== vertical ? "end" : "start"
36629
+ };
36630
+ });
36631
+ const bands = marks.filter((m) => m.kind === "target" && m.low !== null && m.high !== null).map((m) => ({
36632
+ key: m.key,
36633
+ ...span(at(m.low), at(m.high))
36634
+ }));
36635
+ const bounds = marks.filter((m) => m.kind === "bound").map((m) => m.value);
36636
+ const range = bounds.length >= 2 ? span(at(Math.min(...bounds)), at(Math.max(...bounds))) : null;
36637
+ const brackets = this.relations().flatMap((r) => {
36638
+ const result = this.results().get(r.def.key);
36639
+ if (!r.bracket || r.def.type !== "compare" || !result?.holds || result.left === null || result.right === null) return [];
36640
+ return [{
36641
+ key: r.def.key,
36642
+ tone: r.tone,
36643
+ label: this.t(r.label || r.def.key),
36644
+ ...span(at(result.left), at(result.right))
36645
+ }];
36646
+ }).map((b, row) => ({
36647
+ ...b,
36648
+ row
36649
+ }));
36650
+ const byKey = new Map(marks.map((m) => [m.key, m]));
36651
+ const text = (keys) => {
36652
+ const group = keys.map((k) => byKey.get(k));
36653
+ return {
36654
+ name: group.map((m) => m.name).join(" · "),
36655
+ valueText: group.map((m) => this.formatValue(m.value)).join(" · "),
36656
+ primary: group.some((m) => m.primary),
36657
+ target: group.every((m) => m.kind === "target")
36658
+ };
36659
+ };
36660
+ if (vertical) {
36661
+ const length = this.verticalPx();
36662
+ return {
36663
+ ticks,
36664
+ bands,
36665
+ range,
36666
+ brackets,
36667
+ labels: spreadLabels(ticks.map((t) => ({
36668
+ key: t.key,
36669
+ y: t.at / 100 * length
36670
+ })), ROW_PX * .75, length).map((l) => ({
36671
+ key: l.key,
36672
+ lane: 0,
36673
+ at: l.y / length * 100,
36674
+ ...text([l.key])
36675
+ })),
36676
+ lanes: 1
36677
+ };
36678
+ }
36679
+ const widthPx = this.width() || FALLBACK_PX;
36680
+ const labels = layoutLanes(ticks.map((t) => ({
36681
+ key: t.key,
36682
+ x: t.at / 100 * widthPx
36683
+ })), LABEL_GAP_PX).map((l) => ({
36684
+ key: l.keys.join("+"),
36685
+ lane: l.lane,
36686
+ at: l.x / widthPx * 100,
36687
+ ...text(l.keys)
36688
+ }));
36689
+ return {
36690
+ ticks,
36691
+ bands,
36692
+ range,
36693
+ brackets,
36694
+ labels,
36695
+ lanes: labels.some((l) => l.lane === 1) ? 2 : 1
36696
+ };
36697
+ }, ...ngDevMode ? [{ debugName: "plot" }] : /* istanbul ignore next */ []);
36698
+ summary = computed(() => {
36699
+ const primary = this.primary();
36700
+ return this.translateService.translate("scale-summary", {
36701
+ label: this.t(this.label()),
36702
+ value: primary ? `${primary.name} ${this.formatValue(primary.value)}` : "—",
36703
+ n: String(this.marks().length)
36704
+ });
36705
+ }, ...ngDevMode ? [{ debugName: "summary" }] : /* istanbul ignore next */ []);
36706
+ static ɵfac = i0.ɵɵngDeclareFactory({
36707
+ minVersion: "12.0.0",
36708
+ version: "22.2.1",
36709
+ ngImport: i0,
36710
+ type: ScaleComponent,
36711
+ deps: [],
36712
+ target: i0.ɵɵFactoryTarget.Component
36713
+ });
36714
+ static ɵcmp = i0.ɵɵngDeclareComponent({
36715
+ minVersion: "17.0.0",
36716
+ version: "22.2.1",
36717
+ type: ScaleComponent,
36718
+ isStandalone: true,
36719
+ selector: "m-scale",
36720
+ inputs: {
36721
+ label: {
36722
+ classPropertyName: "label",
36723
+ publicName: "label",
36724
+ isSignal: true,
36725
+ isRequired: false,
36726
+ transformFunction: null
36727
+ },
36728
+ format: {
36729
+ classPropertyName: "format",
36730
+ publicName: "format",
36731
+ isSignal: true,
36732
+ isRequired: false,
36733
+ transformFunction: null
36734
+ },
36735
+ currency: {
36736
+ classPropertyName: "currency",
36737
+ publicName: "currency",
36738
+ isSignal: true,
36739
+ isRequired: false,
36740
+ transformFunction: null
36741
+ },
36742
+ unit: {
36743
+ classPropertyName: "unit",
36744
+ publicName: "unit",
36745
+ isSignal: true,
36746
+ isRequired: false,
36747
+ transformFunction: null
36748
+ },
36749
+ breakpoint: {
36750
+ classPropertyName: "breakpoint",
36751
+ publicName: "breakpoint",
36752
+ isSignal: true,
36753
+ isRequired: false,
36754
+ transformFunction: null
36755
+ },
36756
+ orientation: {
36757
+ classPropertyName: "orientation",
36758
+ publicName: "orientation",
36759
+ isSignal: true,
36760
+ isRequired: false,
36761
+ transformFunction: null
36762
+ },
36763
+ min: {
36764
+ classPropertyName: "min",
36765
+ publicName: "min",
36766
+ isSignal: true,
36767
+ isRequired: false,
36768
+ transformFunction: null
36769
+ },
36770
+ max: {
36771
+ classPropertyName: "max",
36772
+ publicName: "max",
36773
+ isSignal: true,
36774
+ isRequired: false,
36775
+ transformFunction: null
36776
+ },
36777
+ maxSpanPct: {
36778
+ classPropertyName: "maxSpanPct",
36779
+ publicName: "maxSpanPct",
36780
+ isSignal: true,
36781
+ isRequired: false,
36782
+ transformFunction: null
36783
+ }
36784
+ },
36785
+ queries: [{
36786
+ propertyName: "markTags",
36787
+ predicate: ScaleMarkComponent,
36788
+ isSignal: true
36789
+ }, {
36790
+ propertyName: "relationTags",
36791
+ predicate: ScaleRelationComponent,
36792
+ isSignal: true
36793
+ }],
36794
+ ngImport: i0,
36795
+ template: "<div [class]=\"'m-scale is-' + shownAs()\" role=\"img\" [attr.aria-label]=\"summary()\">\n <div class=\"m-scale__head\">\n @if (label()) {\n <span class=\"m-scale__label\">{{ label() | translate }}</span>\n }\n @if (primary(); as p) {\n <span class=\"m-scale__value\">{{ formatValue(p.value) }}</span>\n <span class=\"m-scale__value-name\">{{ p.name }}</span>\n }\n </div>\n\n @if (chips().length) {\n <div class=\"m-scale__chips\">\n @for (c of chips(); track c.key) {\n <span [class]=\"'m-scale__chip is-' + c.tone\" [attr.title]=\"c.detail || null\">{{ c.label }}</span>\n }\n </div>\n }\n\n @if (plot(); as p) {\n <div\n class=\"m-scale__plot\"\n [style.--_lanes]=\"p.lanes\"\n [style.--_brackets]=\"p.brackets.length\"\n [style.height.px]=\"shownAs() === 'vertical' ? verticalPx() : null\"\n >\n <div class=\"m-scale__axis\">\n @if (p.range; as r) {\n <span class=\"m-scale__range\" [style.--_from.%]=\"r.from\" [style.--_size.%]=\"r.size\"></span>\n }\n @for (b of p.bands; track b.key) {\n <span class=\"m-scale__band\" [style.--_from.%]=\"b.from\" [style.--_size.%]=\"b.size\"></span>\n }\n @for (t of p.ticks; track t.key) {\n <span\n [class]=\"'m-scale__tick is-' + t.kind\"\n [class.is-primary]=\"t.primary\"\n [class.is-pin-start]=\"t.pin === 'start'\"\n [class.is-pin-end]=\"t.pin === 'end'\"\n [style.--_at.%]=\"t.at\"\n ></span>\n }\n </div>\n\n @for (l of p.labels; track l.key) {\n <span\n class=\"m-scale__mark-label\"\n [class.is-lane-2]=\"l.lane === 1\"\n [class.is-primary]=\"l.primary\"\n [class.is-target]=\"l.target\"\n [style.--_at.%]=\"l.at\"\n >\n <span class=\"m-scale__mark-name\">{{ l.name }}</span>\n <span class=\"m-scale__mark-value\">{{ l.valueText }}</span>\n </span>\n }\n\n @for (b of p.brackets; track b.key) {\n <span\n [class]=\"'m-scale__bracket is-' + b.tone\"\n [attr.title]=\"b.label\"\n [style.--_from.%]=\"b.from\"\n [style.--_size.%]=\"b.size\"\n [style.--_row]=\"b.row\"\n >\n <span class=\"m-scale__bracket-label\">{{ b.label }}</span>\n </span>\n }\n </div>\n }\n</div>\n",
36796
+ styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;--m-scale-target: var(--m-mm);--m-scale-up: var(--m-success);--m-scale-down: var(--m-error);--m-scale-warn: var(--m-warning);--m-scale-gold: var(--m-gold)}.m-scale{display:flex;flex-direction:column;gap:.75em;font-variant-numeric:tabular-nums}.m-scale__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5em}.m-scale__label{color:var(--m-text-secondary);font-weight:600}.m-scale__value{font-size:1.5em;font-weight:700}.m-scale__value-name{color:var(--m-text-tertiary);font-size:.8em}.m-scale__chips{display:flex;flex-wrap:wrap;gap:.4em}.m-scale__chip{display:inline-flex;align-items:center;gap:.4em;padding:.15em .65em .15em .5em;border:1px solid var(--m-border);border-radius:999px;font-size:.8em;font-weight:500}.m-scale__chip:before{content:\"\";width:.55em;height:.55em;border-radius:50%;background:var(--_tone, var(--m-text-tertiary))}.m-scale__chip.is-up{--_tone: var(--m-scale-up)}.m-scale__chip.is-down{--_tone: var(--m-scale-down)}.m-scale__chip.is-warn{--_tone: var(--m-scale-warn)}.m-scale__chip.is-gold{--_tone: var(--m-scale-gold);border-color:var(--m-scale-gold)}.m-scale__plot{position:relative}.m-scale__axis{position:absolute}.m-scale__axis:before{content:\"\";position:absolute;background:var(--m-border)}.m-scale__range,.m-scale__band,.m-scale__tick,.m-scale__bracket,.m-scale__mark-label{position:absolute}.m-scale__range{background:color-mix(in srgb,var(--m-text-tertiary) 22%,transparent)}.m-scale__band{border:1px dashed var(--m-scale-target);border-radius:.2em;background:repeating-linear-gradient(45deg,color-mix(in srgb,var(--m-scale-target) 22%,transparent) 0 2px,transparent 2px 6px)}.m-scale__tick{background:var(--m-text-secondary)}.m-scale__tick.is-bound{background:var(--m-text-tertiary)}.m-scale__tick.is-target{background:none}.m-scale__mark-label{font-size:.75em;white-space:nowrap}.m-scale__mark-label.is-primary{font-weight:700}.m-scale__mark-label.is-target{color:var(--m-scale-target)}.m-scale__mark-name{color:var(--m-text-tertiary)}.m-scale__mark-value{font-weight:600}.m-scale__bracket{border:1.5px solid var(--_tone, var(--m-text-tertiary))}.m-scale__bracket.is-up{--_tone: var(--m-scale-up)}.m-scale__bracket.is-down{--_tone: var(--m-scale-down)}.m-scale__bracket.is-warn{--_tone: var(--m-scale-warn)}.m-scale__bracket.is-gold{--_tone: var(--m-scale-gold)}.m-scale__bracket-label{position:absolute;color:var(--_tone, var(--m-text-tertiary));font-size:.7em;white-space:nowrap}.m-scale.is-horizontal .m-scale__plot{height:calc(2.6em + var(--_lanes, 1) * 2.4em + var(--_brackets, 0) * 1.8em)}.m-scale.is-horizontal .m-scale__axis{inset:0 0 auto;height:2.4em}.m-scale.is-horizontal .m-scale__axis:before{inset:50% 0 auto;height:2px;transform:translateY(-50%)}.m-scale.is-horizontal .m-scale__range,.m-scale.is-horizontal .m-scale__band{top:50%;left:var(--_from);width:var(--_size);transform:translateY(-50%)}.m-scale.is-horizontal .m-scale__range{height:.5em}.m-scale.is-horizontal .m-scale__band{height:1.4em}.m-scale.is-horizontal .m-scale__tick{top:50%;left:var(--_at);width:1.5px;height:.9em;transform:translate(-50%,-50%)}.m-scale.is-horizontal .m-scale__tick.is-bound{width:2.5px;height:1.3em}.m-scale.is-horizontal .m-scale__tick.is-target{width:0;height:2em;border-left:2px dashed var(--m-scale-target)}.m-scale.is-horizontal .m-scale__tick.is-primary{width:.9em;height:.9em;border:2px solid var(--m-background);border-radius:50%;background:var(--m-text)}.m-scale.is-horizontal .m-scale__tick.is-pin-start,.m-scale.is-horizontal .m-scale__tick.is-pin-end{width:.6em;height:.6em;border:0;border-top:2.5px solid var(--m-scale-target);border-right:2.5px solid var(--m-scale-target);background:none}.m-scale.is-horizontal .m-scale__tick.is-pin-start{transform:translate(-50%,-50%) rotate(-135deg)}.m-scale.is-horizontal .m-scale__tick.is-pin-end{transform:translate(-50%,-50%) rotate(45deg)}.m-scale.is-horizontal .m-scale__mark-label{top:3.4em;left:var(--_at);display:flex;flex-direction:column;align-items:center;transform:translate(calc(var(--_at) * -1))}.m-scale.is-horizontal .m-scale__mark-label.is-lane-2{top:6.6em}.m-scale.is-horizontal .m-scale__bracket{top:calc(2.8em + var(--_lanes, 1) * 2.4em + var(--_row, 0) * 1.8em);left:var(--_from);width:var(--_size);height:.45em;border-top:0}.m-scale.is-horizontal .m-scale__bracket-label{top:.45em;left:50%;transform:translate(-50%)}.m-scale.is-vertical .m-scale__axis{inset:0 auto 0 calc(.5em + var(--_brackets, 0) * .9em);width:2.4em}.m-scale.is-vertical .m-scale__axis:before{inset:0 auto 0 50%;width:2px;transform:translate(-50%)}.m-scale.is-vertical .m-scale__range,.m-scale.is-vertical .m-scale__band{top:var(--_from);left:50%;height:var(--_size);transform:translate(-50%)}.m-scale.is-vertical .m-scale__range{width:.5em}.m-scale.is-vertical .m-scale__band{width:1.4em}.m-scale.is-vertical .m-scale__tick{top:var(--_at);left:50%;width:.9em;height:1.5px;transform:translate(-50%,-50%)}.m-scale.is-vertical .m-scale__tick.is-bound{width:1.3em;height:2.5px}.m-scale.is-vertical .m-scale__tick.is-target{width:2em;height:0;border-top:2px dashed var(--m-scale-target)}.m-scale.is-vertical .m-scale__tick.is-primary{width:.9em;height:.9em;border:2px solid var(--m-background);border-radius:50%;background:var(--m-text)}.m-scale.is-vertical .m-scale__tick.is-pin-start,.m-scale.is-vertical .m-scale__tick.is-pin-end{width:.6em;height:.6em;border:0;border-top:2.5px solid var(--m-scale-target);border-right:2.5px solid var(--m-scale-target);background:none}.m-scale.is-vertical .m-scale__tick.is-pin-start{transform:translate(-50%,-50%) rotate(-45deg)}.m-scale.is-vertical .m-scale__tick.is-pin-end{transform:translate(-50%,-50%) rotate(135deg)}.m-scale.is-vertical .m-scale__mark-label{top:var(--_at);left:calc(3.6em + var(--_brackets, 0) * .9em);display:flex;gap:.5em;transform:translateY(-50%)}.m-scale.is-vertical .m-scale__bracket{top:var(--_from);left:calc(.2em + var(--_row, 0) * .9em);width:.45em;height:var(--_size);border-right:0}.m-scale.is-vertical .m-scale__bracket-label{display:none}\n"],
36797
+ dependencies: [{
36798
+ kind: "pipe",
36799
+ type: TranslatePipe,
36800
+ name: "translate"
36801
+ }],
36802
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
36803
+ });
36804
+ };
36805
+ i0.ɵɵngDeclareClassMetadata({
36806
+ minVersion: "12.0.0",
36807
+ version: "22.2.1",
36808
+ ngImport: i0,
36809
+ type: ScaleComponent,
36810
+ decorators: [{
36811
+ type: Component,
36812
+ args: [{
36813
+ selector: "m-scale",
36814
+ imports: [TranslatePipe],
36815
+ changeDetection: ChangeDetectionStrategy.OnPush,
36816
+ template: "<div [class]=\"'m-scale is-' + shownAs()\" role=\"img\" [attr.aria-label]=\"summary()\">\n <div class=\"m-scale__head\">\n @if (label()) {\n <span class=\"m-scale__label\">{{ label() | translate }}</span>\n }\n @if (primary(); as p) {\n <span class=\"m-scale__value\">{{ formatValue(p.value) }}</span>\n <span class=\"m-scale__value-name\">{{ p.name }}</span>\n }\n </div>\n\n @if (chips().length) {\n <div class=\"m-scale__chips\">\n @for (c of chips(); track c.key) {\n <span [class]=\"'m-scale__chip is-' + c.tone\" [attr.title]=\"c.detail || null\">{{ c.label }}</span>\n }\n </div>\n }\n\n @if (plot(); as p) {\n <div\n class=\"m-scale__plot\"\n [style.--_lanes]=\"p.lanes\"\n [style.--_brackets]=\"p.brackets.length\"\n [style.height.px]=\"shownAs() === 'vertical' ? verticalPx() : null\"\n >\n <div class=\"m-scale__axis\">\n @if (p.range; as r) {\n <span class=\"m-scale__range\" [style.--_from.%]=\"r.from\" [style.--_size.%]=\"r.size\"></span>\n }\n @for (b of p.bands; track b.key) {\n <span class=\"m-scale__band\" [style.--_from.%]=\"b.from\" [style.--_size.%]=\"b.size\"></span>\n }\n @for (t of p.ticks; track t.key) {\n <span\n [class]=\"'m-scale__tick is-' + t.kind\"\n [class.is-primary]=\"t.primary\"\n [class.is-pin-start]=\"t.pin === 'start'\"\n [class.is-pin-end]=\"t.pin === 'end'\"\n [style.--_at.%]=\"t.at\"\n ></span>\n }\n </div>\n\n @for (l of p.labels; track l.key) {\n <span\n class=\"m-scale__mark-label\"\n [class.is-lane-2]=\"l.lane === 1\"\n [class.is-primary]=\"l.primary\"\n [class.is-target]=\"l.target\"\n [style.--_at.%]=\"l.at\"\n >\n <span class=\"m-scale__mark-name\">{{ l.name }}</span>\n <span class=\"m-scale__mark-value\">{{ l.valueText }}</span>\n </span>\n }\n\n @for (b of p.brackets; track b.key) {\n <span\n [class]=\"'m-scale__bracket is-' + b.tone\"\n [attr.title]=\"b.label\"\n [style.--_from.%]=\"b.from\"\n [style.--_size.%]=\"b.size\"\n [style.--_row]=\"b.row\"\n >\n <span class=\"m-scale__bracket-label\">{{ b.label }}</span>\n </span>\n }\n </div>\n }\n</div>\n",
36817
+ styles: ["@keyframes toggle-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}@keyframes thumb-slide{0%{transform:translate(0) scale(1)}50%{transform:translate(.3em) scale(.9)}to{transform:translate(.6em) scale(1)}}:host{display:block;--m-scale-target: var(--m-mm);--m-scale-up: var(--m-success);--m-scale-down: var(--m-error);--m-scale-warn: var(--m-warning);--m-scale-gold: var(--m-gold)}.m-scale{display:flex;flex-direction:column;gap:.75em;font-variant-numeric:tabular-nums}.m-scale__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5em}.m-scale__label{color:var(--m-text-secondary);font-weight:600}.m-scale__value{font-size:1.5em;font-weight:700}.m-scale__value-name{color:var(--m-text-tertiary);font-size:.8em}.m-scale__chips{display:flex;flex-wrap:wrap;gap:.4em}.m-scale__chip{display:inline-flex;align-items:center;gap:.4em;padding:.15em .65em .15em .5em;border:1px solid var(--m-border);border-radius:999px;font-size:.8em;font-weight:500}.m-scale__chip:before{content:\"\";width:.55em;height:.55em;border-radius:50%;background:var(--_tone, var(--m-text-tertiary))}.m-scale__chip.is-up{--_tone: var(--m-scale-up)}.m-scale__chip.is-down{--_tone: var(--m-scale-down)}.m-scale__chip.is-warn{--_tone: var(--m-scale-warn)}.m-scale__chip.is-gold{--_tone: var(--m-scale-gold);border-color:var(--m-scale-gold)}.m-scale__plot{position:relative}.m-scale__axis{position:absolute}.m-scale__axis:before{content:\"\";position:absolute;background:var(--m-border)}.m-scale__range,.m-scale__band,.m-scale__tick,.m-scale__bracket,.m-scale__mark-label{position:absolute}.m-scale__range{background:color-mix(in srgb,var(--m-text-tertiary) 22%,transparent)}.m-scale__band{border:1px dashed var(--m-scale-target);border-radius:.2em;background:repeating-linear-gradient(45deg,color-mix(in srgb,var(--m-scale-target) 22%,transparent) 0 2px,transparent 2px 6px)}.m-scale__tick{background:var(--m-text-secondary)}.m-scale__tick.is-bound{background:var(--m-text-tertiary)}.m-scale__tick.is-target{background:none}.m-scale__mark-label{font-size:.75em;white-space:nowrap}.m-scale__mark-label.is-primary{font-weight:700}.m-scale__mark-label.is-target{color:var(--m-scale-target)}.m-scale__mark-name{color:var(--m-text-tertiary)}.m-scale__mark-value{font-weight:600}.m-scale__bracket{border:1.5px solid var(--_tone, var(--m-text-tertiary))}.m-scale__bracket.is-up{--_tone: var(--m-scale-up)}.m-scale__bracket.is-down{--_tone: var(--m-scale-down)}.m-scale__bracket.is-warn{--_tone: var(--m-scale-warn)}.m-scale__bracket.is-gold{--_tone: var(--m-scale-gold)}.m-scale__bracket-label{position:absolute;color:var(--_tone, var(--m-text-tertiary));font-size:.7em;white-space:nowrap}.m-scale.is-horizontal .m-scale__plot{height:calc(2.6em + var(--_lanes, 1) * 2.4em + var(--_brackets, 0) * 1.8em)}.m-scale.is-horizontal .m-scale__axis{inset:0 0 auto;height:2.4em}.m-scale.is-horizontal .m-scale__axis:before{inset:50% 0 auto;height:2px;transform:translateY(-50%)}.m-scale.is-horizontal .m-scale__range,.m-scale.is-horizontal .m-scale__band{top:50%;left:var(--_from);width:var(--_size);transform:translateY(-50%)}.m-scale.is-horizontal .m-scale__range{height:.5em}.m-scale.is-horizontal .m-scale__band{height:1.4em}.m-scale.is-horizontal .m-scale__tick{top:50%;left:var(--_at);width:1.5px;height:.9em;transform:translate(-50%,-50%)}.m-scale.is-horizontal .m-scale__tick.is-bound{width:2.5px;height:1.3em}.m-scale.is-horizontal .m-scale__tick.is-target{width:0;height:2em;border-left:2px dashed var(--m-scale-target)}.m-scale.is-horizontal .m-scale__tick.is-primary{width:.9em;height:.9em;border:2px solid var(--m-background);border-radius:50%;background:var(--m-text)}.m-scale.is-horizontal .m-scale__tick.is-pin-start,.m-scale.is-horizontal .m-scale__tick.is-pin-end{width:.6em;height:.6em;border:0;border-top:2.5px solid var(--m-scale-target);border-right:2.5px solid var(--m-scale-target);background:none}.m-scale.is-horizontal .m-scale__tick.is-pin-start{transform:translate(-50%,-50%) rotate(-135deg)}.m-scale.is-horizontal .m-scale__tick.is-pin-end{transform:translate(-50%,-50%) rotate(45deg)}.m-scale.is-horizontal .m-scale__mark-label{top:3.4em;left:var(--_at);display:flex;flex-direction:column;align-items:center;transform:translate(calc(var(--_at) * -1))}.m-scale.is-horizontal .m-scale__mark-label.is-lane-2{top:6.6em}.m-scale.is-horizontal .m-scale__bracket{top:calc(2.8em + var(--_lanes, 1) * 2.4em + var(--_row, 0) * 1.8em);left:var(--_from);width:var(--_size);height:.45em;border-top:0}.m-scale.is-horizontal .m-scale__bracket-label{top:.45em;left:50%;transform:translate(-50%)}.m-scale.is-vertical .m-scale__axis{inset:0 auto 0 calc(.5em + var(--_brackets, 0) * .9em);width:2.4em}.m-scale.is-vertical .m-scale__axis:before{inset:0 auto 0 50%;width:2px;transform:translate(-50%)}.m-scale.is-vertical .m-scale__range,.m-scale.is-vertical .m-scale__band{top:var(--_from);left:50%;height:var(--_size);transform:translate(-50%)}.m-scale.is-vertical .m-scale__range{width:.5em}.m-scale.is-vertical .m-scale__band{width:1.4em}.m-scale.is-vertical .m-scale__tick{top:var(--_at);left:50%;width:.9em;height:1.5px;transform:translate(-50%,-50%)}.m-scale.is-vertical .m-scale__tick.is-bound{width:1.3em;height:2.5px}.m-scale.is-vertical .m-scale__tick.is-target{width:2em;height:0;border-top:2px dashed var(--m-scale-target)}.m-scale.is-vertical .m-scale__tick.is-primary{width:.9em;height:.9em;border:2px solid var(--m-background);border-radius:50%;background:var(--m-text)}.m-scale.is-vertical .m-scale__tick.is-pin-start,.m-scale.is-vertical .m-scale__tick.is-pin-end{width:.6em;height:.6em;border:0;border-top:2.5px solid var(--m-scale-target);border-right:2.5px solid var(--m-scale-target);background:none}.m-scale.is-vertical .m-scale__tick.is-pin-start{transform:translate(-50%,-50%) rotate(-45deg)}.m-scale.is-vertical .m-scale__tick.is-pin-end{transform:translate(-50%,-50%) rotate(135deg)}.m-scale.is-vertical .m-scale__mark-label{top:var(--_at);left:calc(3.6em + var(--_brackets, 0) * .9em);display:flex;gap:.5em;transform:translateY(-50%)}.m-scale.is-vertical .m-scale__bracket{top:var(--_from);left:calc(.2em + var(--_row, 0) * .9em);width:.45em;height:var(--_size);border-right:0}.m-scale.is-vertical .m-scale__bracket-label{display:none}\n"]
36818
+ }]
36819
+ }],
36820
+ ctorParameters: () => [],
36821
+ propDecorators: {
36822
+ label: [{
36823
+ type: i0.Input,
36824
+ args: [{
36825
+ isSignal: true,
36826
+ alias: "label",
36827
+ required: false
36828
+ }]
36829
+ }],
36830
+ format: [{
36831
+ type: i0.Input,
36832
+ args: [{
36833
+ isSignal: true,
36834
+ alias: "format",
36835
+ required: false
36836
+ }]
36837
+ }],
36838
+ currency: [{
36839
+ type: i0.Input,
36840
+ args: [{
36841
+ isSignal: true,
36842
+ alias: "currency",
36843
+ required: false
36844
+ }]
36845
+ }],
36846
+ unit: [{
36847
+ type: i0.Input,
36848
+ args: [{
36849
+ isSignal: true,
36850
+ alias: "unit",
36851
+ required: false
36852
+ }]
36853
+ }],
36854
+ breakpoint: [{
36855
+ type: i0.Input,
36856
+ args: [{
36857
+ isSignal: true,
36858
+ alias: "breakpoint",
36859
+ required: false
36860
+ }]
36861
+ }],
36862
+ orientation: [{
36863
+ type: i0.Input,
36864
+ args: [{
36865
+ isSignal: true,
36866
+ alias: "orientation",
36867
+ required: false
36868
+ }]
36869
+ }],
36870
+ min: [{
36871
+ type: i0.Input,
36872
+ args: [{
36873
+ isSignal: true,
36874
+ alias: "min",
36875
+ required: false
36876
+ }]
36877
+ }],
36878
+ max: [{
36879
+ type: i0.Input,
36880
+ args: [{
36881
+ isSignal: true,
36882
+ alias: "max",
36883
+ required: false
36884
+ }]
36885
+ }],
36886
+ maxSpanPct: [{
36887
+ type: i0.Input,
36888
+ args: [{
36889
+ isSignal: true,
36890
+ alias: "maxSpanPct",
36891
+ required: false
36892
+ }]
36893
+ }],
36894
+ markTags: [{
36895
+ type: i0.ContentChildren,
36896
+ args: [i0.forwardRef(() => ScaleMarkComponent), { isSignal: true }]
36897
+ }],
36898
+ relationTags: [{
36899
+ type: i0.ContentChildren,
36900
+ args: [i0.forwardRef(() => ScaleRelationComponent), { isSignal: true }]
36901
+ }]
36902
+ }
36903
+ });
35762
36904
  const DOCS_FOLDER = "docs";
35763
36905
  const LIBRARY_TIER = "one";
35764
36906
  function docAssetCandidates({ name, lang, defaultLang }) {
@@ -45240,7 +46382,8 @@ var SidePanelDirective = class SidePanelDirective {
45240
46382
  width: config.width,
45241
46383
  height: config.height,
45242
46384
  dock: config.dock,
45243
- closeProhibited: config.closeProhibited
46385
+ closeProhibited: config.closeProhibited,
46386
+ body: config.component ?? (config.form ? `form:${config.form}` : void 0)
45244
46387
  });
45245
46388
  modalRef.onChange((result) => this.reported.emit(result));
45246
46389
  modalRef.onClose((result) => {
@@ -55425,6 +56568,6 @@ i0.ɵɵngDeclareClassMetadata({
55425
56568
  }]
55426
56569
  }
55427
56570
  });
55428
- export { ACCESS_DOMAINS, APP_CONTEXT_REF, APP_LINK, APP_LOGO_ICON, APP_LOGO_SOURCE, APP_THEME_COLOR, ASSET_BASE_URL, AUDIENCE_ICONS, AUDIENCE_LEVELS, AccordionBodyDirective, AccordionComponent, AccordionGroupComponent, ActionComponent, AnimatedGraphsComponent, AppAvailability, AppCardComponent, AppIdentityService, AppLogoComponent, AppLogoState, AppRelationType, AppTileComponent, AssetStore, AssetUrlPipe, Assets, AudiencePickerBoxComponent, AudiencePickerComponent, AuthActivityPageComponent, AuthApiService, AuthStore, AutosizeDirective, BadgeComponent, BandingComponent, BaseArrayInputComponent, BaseRootWebComponent, BaseWebComponent, BrowserLocaleService, ButtonComponent, ButtonGroupComponent, CALLING_APP_HEADER, COMPONENT_INPUT_REGISTRY, CardComponent, CardWrapperComponent, CarouselComponent, ChartComponent, ChatBubbleComponent, CheckboxGroupComponent, CheckboxInputComponent, ClearableInputComponent, ClipboardService, ColComponent, ColorPickerInputComponent, CommentItemComponent, CommentsApiService, CommentsComponent, CommentsStore, CompactNumberPipe, ComponentInputComponent, ComponentStepperComponent, ConfigComponent, ConfirmComponent, ContextMenuComponent, CustomIconClass, CustomIconEditComponent, DEFAULT_AUDIENCE, DEFAULT_DENIAL, DEFAULT_DOC_ALIGN, DEFAULT_DOC_DENSITY, DEFAULT_DOC_VARIANT, DEFAULT_FILTER_RANGE_MODE, DEFAULT_FILTER_VARIANT, DEFAULT_NAV_PARAM, DEFAULT_NAV_SEGMENT, DEFAULT_SECTION_CHART_RANGES, DEFAULT_SIZE, DOCK_MIN_PAGE_REMAINDER, DOCS_FOLDER, DOC_ACTION_ICONS, DOC_ALIGNS, DOC_DENSITIES, DOC_EDIT_ACTIONS, DOC_TOOLBAR_GROUPS, DOC_VARIANTS, DashboardCardComponent, DateInputComponent, DatePickerComponent, DeviceService, DocComponent, DocEditorComponent, DomService, Domain, DotGridComponent, DragListDirective, DragListItemDirective, DraggableDirective, DropdownInputComponent, FILTER_GROUP_CONTEXT, FILTER_RANGE_MODES, FILTER_VARIANTS, FLEX_VARIANTS, FOLDER_PICK_LISTENER, FORM_ASSET_FOLDER, FileService, FileUploadDirective, FileUploadInputComponent, FlexComponent, FlexItemComponent, FormGroupComponent, FrameComponent, FreezeService, GRID_BREAKPOINTS, GetNavService, HOST_SESSION, HeaderComponent, HeatSwatchComponent, HighlightDirective, HttpService, HttpSharingClient, ICON_SOURCE, IS_DESIGN_MODE, IS_SIDE_PANEL, IconComponent, ImgComponent, InputType, InstrumentScoreComponent, InterceptorObservables, JumbotronComponent, KeyValueComponent, LAYOUT_ASSET_FOLDER, LOADING_ACTIONS_REF, LOGIN_COMPONENT, LOGIN_STORE, LOGO_GLYPH_MAX_BYTES, LanguageComponent, ListComponent, LogoComponent, LogoGlyphInputComponent, MAG_SOCKET_EVENT, MHeroColorDirective, MHeroComponent, MODAL_REF, MODAL_STORE_REF, MOUNT_STATIC_SEGMENT, MOUNT_TOKEN, MRefDirective, MStepComponent, MURL_PARAM, MURL_SEP, ManifestEnrichmentService, MarginDirective, MenuComponent, ModalDirective, ModalRef, ModalStore, MoneyPipe, MultiRangeInputComponent, MultiselectInputComponent, MurlUrlSerializer, NAV_DEFAULT_MURL, NAV_ID_SEP, NAV_MAIN_BUTTONS, NAV_SEGMENT_RE, NAV_STORE_REF, NAV_WC_COMPONENTS, NAV_WIDGET_MAP, NavComponent, NavDetailsComponent, NavHeaderComponent, NavMenuComponent, NavStore, NavTrailComponent, NothingComponent, NotificationElementComponent, NotificationGroupComponent, NotificationPopupComponent, NotificationService, NotificationStore, NotificationType, NotificationWidgetComponent, ONE_ASSET_BASE_URL, OPTIONS_SOURCE, OVERLAY_WIDGETS, OneApp, OptionsSourceDirective, OverlayBodyComponent, OverlayRef, OverlayService, PLATFORM_BUTTON_NAV_IDS, PLATFORM_EXTENSIBLE_NAV_IDS, PLATFORM_NAV_MAP, PLATFORM_ROOT_CHILDREN, PLUGIN_FALLBACK_LANG, PLUGIN_OUTPUT_EVENT, PLUGIN_SCREENS, PRICE_LADDER_LEVELS, PRICE_LADDER_RULES, PaddingDirective, PaginationComponent, PanelComponent, PercentagePipe, PlaygroundComponent, PluginComponent, PluginInputComponent, PluginOutputComponent, PositionDirective, PriceLadderComponent, PriceLadderMarkComponent, PriceLadderSignalComponent, PwaInstallComponent, RECENT_SEARCH_LIMIT, REMOTE_BOOT_TIMEOUT_MS, REMOTE_PAGE_RELOAD, ROOT_NAV, RadioGroupComponent, RadioInputComponent, RangeInputComponent, RatingInputComponent, ReactiveElementComponent, RemoteComponent, RemoteLoaderService, ResizeElementComponent, RouteContainer, RowComponent, SCORE_TONE_COUNT, SEARCH_ANSWER_KEY, SEARCH_LABEL_KEY, SEARCH_QUERY, SEARCH_RESULTS_EVENT, SECTION_ACCORDION_GROUP, SECTION_CHART_CUSTOM_RANGE, SECTION_CHART_SCALES, SECTION_FORM_CONTEXT, SECTION_TABLE_VARIANTS, SHARED_ICONS, SHARING_CLIENT, SIZE_CONTEXT, SPACING_INWARD, SPLASH_ID, ScoreComponent, ScoreSetComponent, ScoreSetItemComponent, ScrollComponent, ScrollService, SearchPanelComponent, SearchStore, SearchUserPanelComponent, SectionAccordionDirective, SectionAccordionGroupDirective, SectionBackComponent, SectionBadgesComponent, SectionButtonGroupComponent, SectionCardComponent, SectionCarouselComponent, SectionChartComponent, SectionChartSeriesComponent, SectionComponent, SectionFilterComponent, SectionFilterGroupComponent, SectionFilterMenuComponent, SectionFilterPanelComponent, SectionFilterRangePanelComponent, SectionFooterComponent, SectionFormComponent, SectionFormItemComponent, SectionHeaderComponent, SectionHeroComponent, SectionPaginationComponent, SectionSearchComponent, SectionStepperComponent, SectionTableCellComponent, SectionTableComponent, SectionTableRowComponent, SectionTableSortDirection, SectionTableSortPipe, SectionTabsComponent, SectionToggleComponent, SectionToggleItemDirective, SelectableCardInputComponent, SelectorDirective, SettingsSearchBarComponent, SettingsSearchService, ShapeComponent, SharedStoreRegistry, SidePanelDirective, SignColorPipe, Size, SocketStore, SortComponent, StatComponent, StepComponent, StepperComponent, StepsComponent, StorageService, StrokeLinecap, StrokeLinejoin, SummaryComponent, SvgGeneratorComponent, SvgGeneratorService, SvgService, TOTAL_COLUMNS, TRANSLATION_SOURCE, TableComponent, TechnicalMeterComponent, TextInputComponent, TextOutputComponent, TextareaInputComponent, ThemeComponent, ThemeDataService, ThemeService, ThemeStore, TimeAgoPipe, TimelineComponent, ToListPipe, ToggleButtonComponent, ToggleInputComponent, ToggleRadioInputComponent, ToolTipDirective, TooltipComponent, TranslatePipe, TranslateService, TreeGridComponent, URL_SEP, USER_STORE_REF, USER_TAB_MAP, UniverseComponent, UserApiService, UserAvatarComponent, UserComponent, UserNavComponent, UserSettingsComponent, UserStore, WC_BUNDLE, WC_NAVIGATE_EVENT, WC_ROUTE_CHANGED_EVENT, WC_SEARCH_GROUPS, WIN_USER_TAB_HOOK, WIN_USER_TAB_KEY, WatermarkComponent, WcRouterStore, WrapperInputComponent, actionName, activeElementWithin, allowedCodes, anchorNavId, appColorBrand, appLogoShadowColor, appThemeColorFactory, applyColorsToElement, applyDocEdit, assetOptions, baseUnderHost, bootstrapMagApp, bootstrapPwaInstall, browserLocale, buildWcBaseUrl, calculateLuminance, calculateRanks, categoricalTone, cellText, checkDoc, checkFilterCondition, childNavId, claimDenial, classListSignal, coerceSize, cornerEdge, cornerSide, createLoadingState, createMap, createPlatformNavMap, createPluginElement, definePluginScreens, definedWcBundleOf, definedWcTierOf, deriveAvatarGradient, deriveContrastColor, deriveOppositeColor, derivePropertyName, docActionKey, docAssetCandidates, docProblemKey, docRemotePath, emailValidation, enumValue, escapeHtml, evaluate, evaluateBool, existsInMap, exposeScreens, exposedScreensOf, fieldBoolean, fieldNumber, fieldString, filterHoldsList, filterHoldsOneBound, filterHoldsOptions, filterHoldsRange, filterList, filterNumber, filterNumberList, filterOne, filterPanelOf, filterPanelWidth, filterRange, filterTreeGridRows, filterValueList, filterValues, flattenTreeGridRows, formatBadgeCount, formatGap, fullName, gapPct, generateClipPath, generateTransform, getClassList, getFromMap, getProperty, getScrollParent, getTierFromPreviewPath, getTreeGridRow, getUniqueId, getValue, hasErrorComputed, heatColor, heatShare, hexToRgb, hslToRgb, initMagmoniumApp, initialNotificationState, initialState, initials, injectAuthenticate, injectDefaultDenial, injectInstallApp, injectParentSize, injectScrollSticky, isBootRedirect, isButtonName, isCancelledComputed, isExtensiblePlatformNavId, isJson, isLadderRule, isLightAppColor, isLoadingComputed, isLocalhost, isNavCountConfig, isNavInstanceConfig, isNavMenuConfig, isNavRowsConfig, isNavVisibilityConfig, isPlatformNavId, isPlatformPanelNavId, isReadableOn, isScoreStale, isSize, isTierPreview, isUrlLocalhost, isValidNavId, isValidNavSegment, isWebComponent, ladderLevelOf, ladderScale, ladderSignals, layoutLanes, linkToId, linkToNav, loadingActions, logoGlyphMaskUrl, mInterceptor, manualValidation, matchFieldValidation, matchMount, maxLengthValidation, maxValidation, mergePlatformNav, mergeUnique, mergeUniqueBy, mergeUniqueWith, minAgeValidation, minLengthValidation, minValidation, miniMarkInlineToHtml, miniMarkToHtml, mountFor, mountPatternProblem, mountPatternText, mountSegmentOf, mountTokenOf, navIdChain, navIdFor, navIdSegment, navIdToRoutePath, navIdToSegments, navParamOf, navTailMatcher, navToId, navVisibilityGuard, nextSectionTableSort, normalizeAppColor, normalizeAssetOptions, notExistsInMap, offsetOfLine, outletPathOf, outletSegmentsOf, paintAppColor, parentNavId, parseAddress, parseColor, parseMountPattern, parsePatternNames, patternValidation, patternsValidation, permissionRefusal, pickCount, pickSupportedLanguage, picksMembers, platformNavWidgets, pluginTag, presetDefaultOption, privateGuard, processImageToSvg, provideAppContext, provideMagAppConfig, provideMagWcConfig, provideMagWcRoutes, provideModalComponents, provideMurlUrlSerializer, provideNavWidgets, provideOverlayWidgets, providePlatformNavWidgets, providePluginRuntime, provideSearch, provideSizeContext, provideUserTabs, publicGuard, readChartPoints, readFieldPatterns, readableAppColor, rebuildLogoGlyph, recordDefinedWcTier, registerSessionRenewal, remoteOutletRoute, renderAddress, renderDocument, requiredValidation, resolveConfigAsset, resolveIconSize, resolvePallet, resolvePatternRules, resolveSize, resolveSpacing, rgbToHex, rgbToHsl, rowHasChildren, samePatterns, scoreBand, scoreStanding, sectionTableColumnId, sectionTableColumnWidths, sectionTableFrozenCount, segmentsToNavId, setInMap, setProperty, setTreeGridChildren, setWcLocalPort, setWcTier, settingsWidgets, shouldShowBadge, sortSectionTableRows, splashHtml, splitNavId, splitOnMatch, splitPath, stringToColor, tailRouteOf, toAttrBool, toAttrNumber, toCssLength, toHostNavId, toLength, toLocalNavId, toggleGroup, toggleTreeGridRow, toggleUid, unfetchedPlatformNav, ungroupedDocActions, urlValidation, wcLocalBaseOf, wcTierOf, withLevel };
56571
+ export { ACCESS_DOMAINS, APP_CONTEXT_REF, APP_LINK, APP_LOGO_ICON, APP_LOGO_SOURCE, APP_THEME_COLOR, ASSET_BASE_URL, AUDIENCE_ICONS, AUDIENCE_LEVELS, AccordionBodyDirective, AccordionComponent, AccordionGroupComponent, ActionComponent, AnimatedGraphsComponent, AppAvailability, AppCardComponent, AppIdentityService, AppLogoComponent, AppLogoState, AppRelationType, AppTileComponent, AssetStore, AssetUrlPipe, Assets, AudiencePickerBoxComponent, AudiencePickerComponent, AuthActivityPageComponent, AuthApiService, AuthStore, AutosizeDirective, BadgeComponent, BandingComponent, BaseArrayInputComponent, BaseRootWebComponent, BaseWebComponent, BrowserLocaleService, ButtonComponent, ButtonGroupComponent, CALLING_APP_HEADER, COMPONENT_INPUT_REGISTRY, CardComponent, CardWrapperComponent, CarouselComponent, ChartComponent, ChatBubbleComponent, CheckboxGroupComponent, CheckboxInputComponent, ClearableInputComponent, ClipboardService, ColComponent, ColorPickerInputComponent, CommentItemComponent, CommentsApiService, CommentsComponent, CommentsStore, CompactNumberPipe, ComponentInputComponent, ComponentStepperComponent, ConfigComponent, ConfirmComponent, ContextMenuComponent, CustomIconClass, CustomIconEditComponent, DEFAULT_AUDIENCE, DEFAULT_DENIAL, DEFAULT_DOC_ALIGN, DEFAULT_DOC_DENSITY, DEFAULT_DOC_VARIANT, DEFAULT_FILTER_RANGE_MODE, DEFAULT_FILTER_VARIANT, DEFAULT_NAV_PARAM, DEFAULT_NAV_SEGMENT, DEFAULT_SECTION_CHART_RANGES, DEFAULT_SIZE, DOCK_MIN_PAGE_REMAINDER, DOCS_FOLDER, DOC_ACTION_ICONS, DOC_ALIGNS, DOC_DENSITIES, DOC_EDIT_ACTIONS, DOC_TOOLBAR_GROUPS, DOC_VARIANTS, DashboardCardComponent, DateInputComponent, DatePickerComponent, DeviceService, DocComponent, DocEditorComponent, DomService, Domain, DotGridComponent, DragListDirective, DragListItemDirective, DraggableDirective, DropdownInputComponent, FILTER_GROUP_CONTEXT, FILTER_RANGE_MODES, FILTER_VARIANTS, FLEX_VARIANTS, FOLDER_PICK_LISTENER, FORM_ASSET_FOLDER, FileService, FileUploadDirective, FileUploadInputComponent, FlexComponent, FlexItemComponent, FormGroupComponent, FrameComponent, FreezeService, GRID_BREAKPOINTS, GetNavService, HOST_SESSION, HeaderComponent, HeatSwatchComponent, HighlightDirective, HttpService, HttpSharingClient, ICON_SOURCE, IS_DESIGN_MODE, IS_SIDE_PANEL, IconComponent, ImgComponent, InputType, InstrumentScoreComponent, InterceptorObservables, JumbotronComponent, KeyValueComponent, LAYOUT_ASSET_FOLDER, LOADING_ACTIONS_REF, LOGIN_COMPONENT, LOGIN_STORE, LOGO_GLYPH_MAX_BYTES, LanguageComponent, ListComponent, LogoComponent, LogoGlyphInputComponent, MAG_SOCKET_EVENT, MHeroColorDirective, MHeroComponent, MODAL_REF, MODAL_STORE_REF, MOUNT_STATIC_SEGMENT, MOUNT_TOKEN, MRefDirective, MStepComponent, MURL_PARAM, MURL_SEP, ManifestEnrichmentService, MarginDirective, MenuComponent, ModalDirective, ModalRef, ModalStore, MoneyPipe, MultiRangeInputComponent, MultiselectInputComponent, MurlUrlSerializer, NAV_DEFAULT_MURL, NAV_ID_SEP, NAV_MAIN_BUTTONS, NAV_SEGMENT_RE, NAV_STORE_REF, NAV_WC_COMPONENTS, NAV_WIDGET_MAP, NavComponent, NavDetailsComponent, NavHeaderComponent, NavMenuComponent, NavStore, NavTrailComponent, NothingComponent, NotificationElementComponent, NotificationGroupComponent, NotificationPopupComponent, NotificationService, NotificationStore, NotificationType, NotificationWidgetComponent, ONE_ASSET_BASE_URL, OPTIONS_SOURCE, OVERLAY_WIDGETS, OneApp, OptionsSourceDirective, OverlayBodyComponent, OverlayRef, OverlayService, PLATFORM_BUTTON_NAV_IDS, PLATFORM_EXTENSIBLE_NAV_IDS, PLATFORM_NAV_MAP, PLATFORM_ROOT_CHILDREN, PLUGIN_FALLBACK_LANG, PLUGIN_OUTPUT_EVENT, PLUGIN_SCREENS, PRICE_HELPERS, PRICE_LADDER_LEVELS, PRICE_LADDER_RULES, PRICE_RULES, PRICE_SCALE_RELATIONS, PaddingDirective, PaginationComponent, PanelComponent, PercentagePipe, PlaygroundComponent, PluginComponent, PluginInputComponent, PluginOutputComponent, PositionDirective, PriceLadderComponent, PriceLadderMarkComponent, PriceLadderSignalComponent, PwaInstallComponent, RECENT_SEARCH_LIMIT, REMOTE_BOOT_TIMEOUT_MS, REMOTE_PAGE_RELOAD, ROOT_NAV, RadioGroupComponent, RadioInputComponent, RangeInputComponent, RatingInputComponent, ReactiveElementComponent, RemoteComponent, RemoteLoaderService, ResizeElementComponent, RouteContainer, RowComponent, SCORE_TONE_COUNT, SEARCH_ANSWER_KEY, SEARCH_LABEL_KEY, SEARCH_QUERY, SEARCH_RESULTS_EVENT, SECTION_ACCORDION_GROUP, SECTION_CHART_CUSTOM_RANGE, SECTION_CHART_SCALES, SECTION_FORM_CONTEXT, SECTION_TABLE_VARIANTS, SHARED_ICONS, SHARING_CLIENT, SIZE_CONTEXT, SPACING_INWARD, SPLASH_ID, ScaleComponent, ScaleMarkComponent, ScaleRelationComponent, ScoreComponent, ScoreSetComponent, ScoreSetItemComponent, ScrollComponent, ScrollService, SearchPanelComponent, SearchStore, SearchUserPanelComponent, SectionAccordionDirective, SectionAccordionGroupDirective, SectionBackComponent, SectionBadgesComponent, SectionButtonGroupComponent, SectionCardComponent, SectionCarouselComponent, SectionChartComponent, SectionChartSeriesComponent, SectionComponent, SectionFilterComponent, SectionFilterGroupComponent, SectionFilterMenuComponent, SectionFilterPanelComponent, SectionFilterRangePanelComponent, SectionFooterComponent, SectionFormComponent, SectionFormItemComponent, SectionHeaderComponent, SectionHeroComponent, SectionPaginationComponent, SectionSearchComponent, SectionStepperComponent, SectionTableCellComponent, SectionTableComponent, SectionTableRowComponent, SectionTableSortDirection, SectionTableSortPipe, SectionTabsComponent, SectionToggleComponent, SectionToggleItemDirective, SelectableCardInputComponent, SelectorDirective, SettingsSearchBarComponent, SettingsSearchService, ShapeComponent, SharedStoreRegistry, SidePanelDirective, SignColorPipe, Size, SocketStore, SortComponent, StatComponent, StepComponent, StepperComponent, StepsComponent, StorageService, StrokeLinecap, StrokeLinejoin, SummaryComponent, SvgGeneratorComponent, SvgGeneratorService, SvgService, TOTAL_COLUMNS, TRANSLATION_SOURCE, TableComponent, TechnicalMeterComponent, TextInputComponent, TextOutputComponent, TextareaInputComponent, ThemeComponent, ThemeDataService, ThemeService, ThemeStore, TimeAgoPipe, TimelineComponent, ToListPipe, ToggleButtonComponent, ToggleInputComponent, ToggleRadioInputComponent, ToolTipDirective, TooltipComponent, TranslatePipe, TranslateService, TreeGridComponent, URL_SEP, USER_STORE_REF, USER_TAB_MAP, UniverseComponent, UserApiService, UserAvatarComponent, UserComponent, UserNavComponent, UserSettingsComponent, UserStore, WC_BUNDLE, WC_NAVIGATE_EVENT, WC_ROUTE_CHANGED_EVENT, WC_SEARCH_GROUPS, WIN_USER_TAB_HOOK, WIN_USER_TAB_KEY, WatermarkComponent, WcRouterStore, WrapperInputComponent, actionName, activeElementWithin, allowedCodes, anchorNavId, appColorBrand, appLogoShadowColor, appThemeColorFactory, applyColorsToElement, applyDocEdit, assetOptions, baseUnderHost, bootstrapMagApp, bootstrapPwaInstall, browserLocale, buildWcBaseUrl, calculateLuminance, calculateRanks, categoricalTone, cellText, checkDoc, checkFilterCondition, childNavId, claimDenial, classListSignal, coerceSize, cornerEdge, cornerSide, createLoadingState, createMap, createPlatformNavMap, createPluginElement, definePluginScreens, definedWcBundleOf, definedWcTierOf, deriveAvatarGradient, deriveContrastColor, deriveOppositeColor, derivePropertyName, docActionKey, docAssetCandidates, docProblemKey, docRemotePath, emailValidation, enumValue, escapeHtml, evaluate, evaluateBool, evaluateRelations, existsInMap, exposeScreens, exposedScreensOf, fieldBoolean, fieldNumber, fieldString, filterHoldsList, filterHoldsOneBound, filterHoldsOptions, filterHoldsRange, filterList, filterNumber, filterNumberList, filterOne, filterPanelOf, filterPanelWidth, filterRange, filterTreeGridRows, filterValueList, filterValues, flattenTreeGridRows, formatBadgeCount, formatGap, fullName, gapPct, generateClipPath, generateTransform, getClassList, getFromMap, getProperty, getScrollParent, getTierFromPreviewPath, getTreeGridRow, getUniqueId, getValue, hasErrorComputed, heatColor, heatShare, hexToRgb, hslToRgb, initMagmoniumApp, initialNotificationState, initialState, initials, injectAuthenticate, injectDefaultDenial, injectInstallApp, injectParentSize, injectScrollSticky, isBootRedirect, isButtonName, isCancelledComputed, isExtensiblePlatformNavId, isJson, isLadderRule, isLightAppColor, isLoadingComputed, isLocalhost, isNavCountConfig, isNavInstanceConfig, isNavMenuConfig, isNavRowsConfig, isNavVisibilityConfig, isPlatformNavId, isPlatformPanelNavId, isPriceRule, isReadableOn, isScoreStale, isSize, isTierPreview, isUrlLocalhost, isValidNavId, isValidNavSegment, isWebComponent, ladderLevelOf, ladderScale, ladderSignals, layoutLanes, linkToId, linkToNav, loadingActions, logoGlyphMaskUrl, mInterceptor, manualValidation, matchFieldValidation, matchMount, maxLengthValidation, maxValidation, mergePlatformNav, mergeUnique, mergeUniqueBy, mergeUniqueWith, minAgeValidation, minLengthValidation, minValidation, miniMarkInlineToHtml, miniMarkToHtml, mountFor, mountPatternProblem, mountPatternText, mountSegmentOf, mountTokenOf, navIdChain, navIdFor, navIdSegment, navIdToRoutePath, navIdToSegments, navParamOf, navTailMatcher, navToId, navVisibilityGuard, nextSectionTableSort, normalizeAppColor, normalizeAssetOptions, notExistsInMap, offsetOfLine, outletPathOf, outletSegmentsOf, paintAppColor, parentNavId, parseAddress, parseColor, parseKeys, parseMountPattern, parsePatternNames, patternValidation, patternsValidation, permissionRefusal, pickCount, pickSupportedLanguage, picksMembers, platformNavWidgets, pluginTag, presetDefaultOption, priceRelationsFor, privateGuard, processImageToSvg, provideAppContext, provideMagAppConfig, provideMagWcConfig, provideMagWcRoutes, provideModalComponents, provideMurlUrlSerializer, provideNavWidgets, provideOverlayWidgets, providePlatformNavWidgets, providePluginRuntime, provideSearch, provideSizeContext, provideUserTabs, publicGuard, readChartPoints, readFieldPatterns, readableAppColor, rebuildLogoGlyph, recordDefinedWcTier, registerSessionRenewal, remoteOutletRoute, renderAddress, renderDocument, requiredValidation, resolveConfigAsset, resolveIconSize, resolvePallet, resolvePatternRules, resolveSize, resolveSpacing, rgbToHex, rgbToHsl, rowHasChildren, samePatterns, scaleDomain, scoreBand, scoreStanding, sectionTableColumnId, sectionTableColumnWidths, sectionTableFrozenCount, segmentsToNavId, setInMap, setProperty, setTreeGridChildren, setWcLocalPort, setWcTier, settingsWidgets, shouldShowBadge, sortSectionTableRows, splashHtml, splitNavId, splitOnMatch, splitPath, spreadLabels, stringToColor, tailRouteOf, toAttrBool, toAttrNumber, toCssLength, toHostNavId, toLength, toLocalNavId, toggleGroup, toggleTreeGridRow, toggleUid, unfetchedPlatformNav, ungroupedDocActions, urlValidation, wcLocalBaseOf, wcTierOf, withLevel };
55429
56572
 
55430
56573
  //# sourceMappingURL=magmonium-one.mjs.map