@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
@@ -3,7 +3,7 @@ import { Observable } from "rxjs";
3
3
  import * as i0 from "@angular/core";
4
4
  import { AfterContentInit, AfterViewChecked, AfterViewInit, ApplicationConfig, ApplicationRef, Binding, ChangeDetectorRef, ComponentRef, ElementRef, EnvironmentProviders, EventEmitter, InjectionToken, Injector, InputSignal, ModelSignal, OnDestroy, OnInit, PipeTransform, Provider, Signal, StaticProvider, TemplateRef, Type, ViewContainerRef, WritableSignal } from "@angular/core";
5
5
  import { Theme, ThemeColor, ThemeList, WebComponentConfig as WebComponentConfig$1 } from "@magmonium/cli";
6
- import { ActivatedRouteSnapshot, CanActivateFn, Params, Route, Router, RouterStateSnapshot, Routes, UrlMatcher, UrlSegment, UrlSerializer, UrlTree } from "@angular/router";
6
+ import { ActivatedRouteSnapshot, CanActivateFn, Params, Route, Router, RouterLink, RouterStateSnapshot, Routes, UrlMatcher, UrlSegment, UrlSerializer, UrlTree } from "@angular/router";
7
7
  import { FieldTree, FormCheckboxControl, FormValueControl, SchemaOrSchemaFn, SchemaPath, ValidationError, WithOptionalFieldTree } from "@angular/forms/signals";
8
8
  import { ControlValueAccessor } from "@angular/forms";
9
9
  import { SafeStyle } from "@angular/platform-browser";
@@ -2948,6 +2948,8 @@ export declare class ButtonComponent extends ReactiveElementComponent<Button> {
2948
2948
  protected element: import("@angular/core").Signal<ElementRef<any> | undefined>;
2949
2949
  protected readonly className: import("@angular/core").Signal<string>;
2950
2950
  private readonly navRef;
2951
+ protected readonly resolvesConfigAsset: boolean;
2952
+ readonly routerLinkRef: RouterLink | null;
2951
2953
  private readonly sectionForm;
2952
2954
  protected readonly isFormSubmit: import("@angular/core").Signal<boolean>;
2953
2955
  protected readonly isDisabled: import("@angular/core").Signal<boolean>;
@@ -3630,6 +3632,10 @@ export declare class ToggleButtonComponent extends ConfigComponent<ButtonGroup>
3630
3632
  export declare class ActionComponent extends ButtonGroupComponent {
3631
3633
  readonly sticky: import("@angular/core").InputSignal<boolean>;
3632
3634
  readonly isStuck: import("@angular/core").WritableSignal<boolean>;
3635
+ private readonly projected;
3636
+ private readonly projectedButtons;
3637
+ private readonly projectedLinkTrees;
3638
+ private readonly sourceButtons;
3633
3639
  readonly variant: import("@angular/core").InputSignal<"toggle" | undefined>;
3634
3640
  readonly active: import("@angular/core").InputSignal<string | undefined>;
3635
3641
  readonly renderIds: import("@angular/core").InputSignal<Record<string, string> | undefined>;
@@ -3639,11 +3645,12 @@ export declare class ActionComponent extends ButtonGroupComponent {
3639
3645
  private readonly router;
3640
3646
  private readonly route;
3641
3647
  private readonly linkTrees;
3642
- protected linkOf(button: Button): Button['routerLink'];
3648
+ protected linkOf(button: Button): Button['routerLink'] | UrlTree;
3649
+ isDisabled(name?: string): boolean | undefined;
3643
3650
  private readonly linkActive;
3644
3651
  private readonly isRouted;
3645
3652
  protected readonly selected: import("@angular/core").Signal<string | undefined>;
3646
- readonly squeezeAt: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xs" | "xl" | "xxl" | undefined>;
3653
+ readonly squeezeAt: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xl" | "xxl" | "xs" | undefined>;
3647
3654
  readonly squeezeMode: import("@angular/core").InputSignal<SqueezeMode | undefined>;
3648
3655
  private readonly squeeze;
3649
3656
  private readonly barWidth;
@@ -3700,7 +3707,7 @@ export declare class ActionComponent extends ButtonGroupComponent {
3700
3707
  "required": false;
3701
3708
  "isSignal": true;
3702
3709
  };
3703
- }, {}, never, never, true, never>;
3710
+ }, {}, ["projected"], never, true, never>;
3704
3711
  }
3705
3712
  declare function deriveButtonClass(button?: Button): string;
3706
3713
  export declare function isButtonName(name: string, button?: Button): boolean;
@@ -3718,6 +3725,22 @@ export declare function isButtonName(name: string, button?: Button): boolean;
3718
3725
  */
3719
3726
  export declare function actionName<Name extends string>(button: Button | undefined, names: Record<string, Name>): Name | undefined;
3720
3727
  declare function deriveGroupClass(group?: Partial<ButtonGroup>): string;
3728
+ /**
3729
+ * Published by `<m-action>` for the `<m-button>`s written inside it.
3730
+ *
3731
+ * A Button there is a description of a segment, never drawn itself: the bar
3732
+ * has no `ng-content`, reads each Button's resolved config off its instance and
3733
+ * draws its own `<button>` from it — which is what keeps the toggle, the
3734
+ * squeeze and the routed light working off one list. An `@if` around one
3735
+ * still takes it in and out of that list, because the bar's query follows the
3736
+ * Buttons that exist.
3737
+ *
3738
+ * The flag stops such a Button resolving a `buttons/<name>.yml` of its own:
3739
+ * the bar already resolves what an unlabelled Button is missing, and a named
3740
+ * segment that only ever rides on its tag would otherwise request a file that
3741
+ * was never written.
3742
+ */
3743
+ declare const ACTION_BUTTON_HOST: InjectionToken<true>;
3721
3744
  type GridAlignX = 'left' | 'center' | 'right';
3722
3745
  type GridAlignY = 'top' | 'center' | 'bottom';
3723
3746
  type ColVariant = 'noBorder' | 'withBorder';
@@ -4944,7 +4967,7 @@ export declare class SectionFilterGroupComponent {
4944
4967
  readonly paddingX: import("@angular/core").InputSignal<boolean | undefined>;
4945
4968
  readonly paddingY: import("@angular/core").InputSignal<boolean | undefined>;
4946
4969
  readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
4947
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
4970
+ readonly align: import("@angular/core").InputSignal<"left" | "right" | "center" | undefined>;
4948
4971
  readonly config: import("@angular/core").InputSignal<SectionFilterGroupConfig | undefined>;
4949
4972
  /**
4950
4973
  * The whole group's selection, keyed by each Filter's `name` — one key per
@@ -4962,7 +4985,7 @@ export declare class SectionFilterGroupComponent {
4962
4985
  protected readonly resolvedPadding: import("@angular/core").Signal<boolean>;
4963
4986
  protected readonly resolvedPaddingX: import("@angular/core").Signal<boolean>;
4964
4987
  protected readonly resolvedPaddingY: import("@angular/core").Signal<boolean>;
4965
- protected readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right">;
4988
+ protected readonly resolvedAlign: import("@angular/core").Signal<"left" | "right" | "center">;
4966
4989
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
4967
4990
  protected readonly noBorder: import("@angular/core").Signal<boolean>;
4968
4991
  /**
@@ -5067,7 +5090,7 @@ export declare class SectionStepperComponent implements OnDestroy {
5067
5090
  readonly lg: import("@angular/core").InputSignal<number | undefined>;
5068
5091
  readonly xl: import("@angular/core").InputSignal<number | undefined>;
5069
5092
  readonly xxl: import("@angular/core").InputSignal<number | undefined>;
5070
- readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal" | undefined>;
5093
+ readonly orientation: import("@angular/core").InputSignal<"horizontal" | "vertical" | undefined>;
5071
5094
  readonly stepChange: import("@angular/core").OutputEmitterRef<number>;
5072
5095
  private readonly isCompact;
5073
5096
  private readonly mediaMatched;
@@ -5141,7 +5164,7 @@ export declare class SectionStepperComponent implements OnDestroy {
5141
5164
  export declare class SectionBadgesComponent {
5142
5165
  readonly wrap: import("@angular/core").InputSignal<boolean>;
5143
5166
  readonly border: import("@angular/core").InputSignal<boolean>;
5144
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
5167
+ readonly align: import("@angular/core").InputSignal<"left" | "right" | "center">;
5145
5168
  private readonly sectionContext;
5146
5169
  protected readonly hasBorder: import("@angular/core").Signal<boolean>;
5147
5170
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionBadgesComponent, never>;
@@ -5289,7 +5312,7 @@ export declare class SectionPaginationComponent {
5289
5312
  * Entries that are not positive numbers drop rather than throw.
5290
5313
  */
5291
5314
  readonly perPageOptions: import("@angular/core").InputSignal<string | undefined>;
5292
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
5315
+ readonly align: import("@angular/core").InputSignal<"left" | "right" | "center">;
5293
5316
  readonly showPerPage: import("@angular/core").InputSignal<boolean>;
5294
5317
  /** Hides the band outright once everything fits one page. */
5295
5318
  readonly hideOnSinglePage: import("@angular/core").InputSignal<boolean>;
@@ -5797,8 +5820,8 @@ export declare class SectionHeaderComponent {
5797
5820
  readonly visibilityRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
5798
5821
  readonly disableRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
5799
5822
  readonly extraData: import("@angular/core").InputSignal<unknown>;
5800
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
5801
- readonly alignment: import("@angular/core").Signal<"center" | "left" | "right">;
5823
+ readonly align: import("@angular/core").InputSignal<"left" | "right" | "center" | undefined>;
5824
+ readonly alignment: import("@angular/core").Signal<"left" | "right" | "center">;
5802
5825
  readonly badge: import("@angular/core").InputSignal<BadgeCount | undefined>;
5803
5826
  readonly showBack: import("@angular/core").InputSignal<boolean>;
5804
5827
  readonly actionButton: import("@angular/core").InputSignal<string | undefined>;
@@ -5816,7 +5839,7 @@ export declare class SectionHeaderComponent {
5816
5839
  protected readonly sidepanel: import("@angular/core").Signal<boolean>;
5817
5840
  protected readonly noBorder: import("@angular/core").Signal<boolean>;
5818
5841
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
5819
- protected readonly boxAlign: import("@angular/core").Signal<"center" | "left" | "right">;
5842
+ protected readonly boxAlign: import("@angular/core").Signal<"left" | "right" | "center">;
5820
5843
  protected readonly iconBox: import("@angular/core").Signal<string>;
5821
5844
  protected readonly isSticky: import("@angular/core").Signal<boolean>;
5822
5845
  protected readonly hasMenu: import("@angular/core").Signal<boolean>;
@@ -5971,7 +5994,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
5971
5994
  protected readonly resolvedFullWidth: import("@angular/core").Signal<boolean>;
5972
5995
  protected readonly resolvedVertical: import("@angular/core").Signal<boolean>;
5973
5996
  protected readonly resolvedVariant: import("@angular/core").Signal<"spaced" | "joined">;
5974
- protected readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right" | "bottom" | "top">;
5997
+ protected readonly resolvedAlign: import("@angular/core").Signal<"left" | "right" | "top" | "bottom" | "center">;
5975
5998
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionButtonGroupComponent, never>;
5976
5999
  static ɵcmp: i0.ɵɵComponentDeclaration<SectionButtonGroupComponent, "m-section-button-group", never, {
5977
6000
  "vertical": {
@@ -6003,7 +6026,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
6003
6026
  }
6004
6027
  export declare class SectionFooterComponent {
6005
6028
  readonly sticky: import("@angular/core").InputSignal<boolean>;
6006
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
6029
+ readonly align: import("@angular/core").InputSignal<"left" | "right" | "center">;
6007
6030
  readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
6008
6031
  readonly fullWidth: import("@angular/core").InputSignal<boolean>;
6009
6032
  private readonly scrollSticky;
@@ -6012,7 +6035,7 @@ export declare class SectionFooterComponent {
6012
6035
  protected readonly sidepanel: import("@angular/core").Signal<boolean>;
6013
6036
  protected readonly noBorder: import("@angular/core").Signal<boolean>;
6014
6037
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
6015
- protected readonly boxAlign: import("@angular/core").Signal<"center" | "left" | "right">;
6038
+ protected readonly boxAlign: import("@angular/core").Signal<"left" | "right" | "center">;
6016
6039
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionFooterComponent, never>;
6017
6040
  static ɵcmp: i0.ɵɵComponentDeclaration<SectionFooterComponent, "m-section-footer", never, {
6018
6041
  "sticky": {
@@ -8561,7 +8584,7 @@ declare class ColorPickerBoxComponent implements AfterViewInit, OnDestroy {
8561
8584
  protected readonly _eyedropperConfig: import("@magmonium/one").Button;
8562
8585
  protected readonly _headerContextMenu: ContextMenu;
8563
8586
  protected readonly themeSwatches: import("@angular/core").Signal<{
8564
- key: "text" | "error" | "focus" | "mm" | "mmLite" | "mmDark" | "background" | "border" | "textSecondary" | "errorLight" | "warning" | "successLite" | "success" | "highlight" | "wealth";
8587
+ key: "error" | "background" | "border" | "text" | "textSecondary" | "mm" | "mmLite" | "mmDark" | "focus" | "errorLight" | "warning" | "successLite" | "success" | "highlight" | "wealth";
8565
8588
  color: string;
8566
8589
  }[]>;
8567
8590
  hue: import("@angular/core").WritableSignal<number>;
@@ -9763,7 +9786,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
9763
9786
  readonly heightMode: import("@angular/core").InputSignal<"fixed" | "full" | undefined>;
9764
9787
  readonly maxHeight: import("@angular/core").InputSignal<string | number | undefined>;
9765
9788
  readonly height: import("@angular/core").InputSignal<string | number | undefined>;
9766
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
9789
+ readonly align: import("@angular/core").InputSignal<"left" | "right" | "center" | undefined>;
9767
9790
  readonly padding: import("@angular/core").InputSignal<string | number | undefined>;
9768
9791
  readonly paddingX: import("@angular/core").InputSignal<string | number | undefined>;
9769
9792
  readonly paddingY: import("@angular/core").InputSignal<string | number | undefined>;
@@ -9815,7 +9838,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
9815
9838
  protected readonly handleSubmit: (event: Event) => void;
9816
9839
  readonly resolvedSize: import("@angular/core").Signal<Size>;
9817
9840
  protected readonly sizeLength: import("@angular/core").Signal<string | null>;
9818
- readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right">;
9841
+ readonly resolvedAlign: import("@angular/core").Signal<"left" | "right" | "center">;
9819
9842
  readonly resolvedVariant: import("@angular/core").Signal<string | undefined>;
9820
9843
  readonly resolvedMaxWidth: import("@angular/core").Signal<string | number | undefined>;
9821
9844
  private readonly resolvedPadding;
@@ -10491,7 +10514,7 @@ export declare class StepperComponent extends ConfigComponent<Stepper> {
10491
10514
  constructor();
10492
10515
  protected readonly isReadonly: import("@angular/core").Signal<boolean>;
10493
10516
  protected readonly stepperDisabled: import("@angular/core").Signal<boolean>;
10494
- protected readonly orientation: import("@angular/core").Signal<"compact" | "vertical">;
10517
+ protected readonly orientation: import("@angular/core").Signal<"vertical" | "compact">;
10495
10518
  protected readonly currentStepLabel: import("@angular/core").Signal<string>;
10496
10519
  protected readonly nextStepLabel: import("@angular/core").Signal<string>;
10497
10520
  protected readonly isLastStep: import("@angular/core").Signal<boolean>;
@@ -10675,7 +10698,7 @@ export declare class ComponentStepperComponent {
10675
10698
  components: import("@angular/core").InputSignal<Type<unknown>[]>;
10676
10699
  labels: import("@angular/core").InputSignal<string[] | undefined>;
10677
10700
  currentIndex: import("@angular/core").InputSignal<number>;
10678
- variant: import("@angular/core").InputSignal<"vertical" | "horizontal">;
10701
+ variant: import("@angular/core").InputSignal<"horizontal" | "vertical">;
10679
10702
  context: import("@angular/core").InputSignal<Record<string, unknown> | undefined>;
10680
10703
  readonly stepChange: import("@angular/core").OutputEmitterRef<number>;
10681
10704
  static ɵfac: i0.ɵɵFactoryDeclaration<ComponentStepperComponent, never>;
@@ -12100,7 +12123,7 @@ export declare class ScoreSetItemComponent {
12100
12123
  private readonly themeStore;
12101
12124
  protected readonly tipId: string;
12102
12125
  protected readonly tipDismissed: import("@angular/core").WritableSignal<boolean>;
12103
- protected readonly shape: import("@angular/core").Signal<"none" | "row" | "primary">;
12126
+ protected readonly shape: import("@angular/core").Signal<"primary" | "none" | "row">;
12104
12127
  protected readonly tone: import("@angular/core").Signal<string | null>;
12105
12128
  protected readonly model: import("@angular/core").Signal<{
12106
12129
  value: number | null;
@@ -12238,7 +12261,7 @@ export declare class ScoreSetComponent implements ScoreSetHost {
12238
12261
  "scoreSelect": "scoreSelect";
12239
12262
  }, ["items"], ["m-score-set-item"], true, never>;
12240
12263
  }
12241
- /** A level as a percent change from the current value: 110 vs 100 → +10. */
12264
+ /** A level as a percent change from a reference value: 110 vs 100 → +10. */
12242
12265
  export declare const gapPct: (level: number, value: number) => number;
12243
12266
  /** A gap as signed text, one decimal: +12.7%, −1.6%, 0.0%. */
12244
12267
  export declare const formatGap: (gap: number) => string;
@@ -12322,6 +12345,9 @@ interface LadderSignal {
12322
12345
  * Every predefined rule the levels match, read from one snapshot. A golden or
12323
12346
  * death cross here is the regime — SMA 50 above or below SMA 200 now — not the
12324
12347
  * crossing itself: a snapshot holds no date it happened on.
12348
+ * @deprecated Use `m-scale` (ScaleComponent) with the price relations in
12349
+ * PRICE_SCALE_RELATIONS; the editor migrates stored ladders (v31). Removed
12350
+ * in the next release.
12325
12351
  */
12326
12352
  export declare const ladderSignals: (levels: LadderLevels, symbol?: string) => LadderSignal[];
12327
12353
  /** Whether a name is one of the predefined rules — `custom` and '' are not. */
@@ -12343,7 +12369,7 @@ interface LadderLevel {
12343
12369
  export declare const PRICE_LADDER_LEVELS: readonly LadderLevel[];
12344
12370
  /** The fixed level a key names, or undefined for a key off the list. */
12345
12371
  export declare const ladderLevelOf: (key: string) => LadderLevel | undefined;
12346
- interface Mark {
12372
+ interface Mark$1 {
12347
12373
  key: string;
12348
12374
  name: string;
12349
12375
  value: number;
@@ -12364,6 +12390,9 @@ interface Chip {
12364
12390
  * `rank`, bounds as end-caps, the estimate as a dashed tick or a band. Shape,
12365
12391
  * not colour alone, says which is past and which is forward. Finance-agnostic:
12366
12392
  * what the levels mean arrives as `m-price-ladder-signal` tags from the host.
12393
+ * @deprecated Use `m-scale` (ScaleComponent) with the price relations in
12394
+ * PRICE_SCALE_RELATIONS; the editor migrates stored ladders (v31). Removed
12395
+ * in the next release.
12367
12396
  */
12368
12397
  export declare class PriceLadderComponent {
12369
12398
  /** The featured value — current price. `null` draws a dash. */
@@ -12408,7 +12437,7 @@ export declare class PriceLadderComponent {
12408
12437
  /** Every drawable mark, the `current` and `forecast` stand-ins included. */
12409
12438
  private readonly everyMark;
12410
12439
  /** The reference levels drawn as ticks and labels. */
12411
- protected readonly marks: import("@angular/core").Signal<Mark[]>;
12440
+ protected readonly marks: import("@angular/core").Signal<Mark$1[]>;
12412
12441
  /** Every predefined rule the drawn levels match, by rule. */
12413
12442
  private readonly matched;
12414
12443
  /** The indicators picked by `signals`: every rule for `all`. */
@@ -12578,6 +12607,9 @@ export declare class PriceLadderComponent {
12578
12607
  * One reference level of a price ladder, written as a tag inside
12579
12608
  * `m-price-ladder` so the levels are markup rather than an array literal. It
12580
12609
  * draws nothing itself: the ladder reads it and places it on the shared axis.
12610
+ * @deprecated Use `m-scale` (ScaleComponent) with the price relations in
12611
+ * PRICE_SCALE_RELATIONS; the editor migrates stored ladders (v31). Removed
12612
+ * in the next release.
12581
12613
  */
12582
12614
  export declare class PriceLadderMarkComponent {
12583
12615
  /**
@@ -12633,6 +12665,9 @@ export declare class PriceLadderMarkComponent {
12633
12665
  * A reading the host draws from the levels (a golden cross, a 52-week
12634
12666
  * breakout), shown as a chip above the ladder. The ladder does not decide what
12635
12667
  * the levels mean — that stays with the host, which writes one tag per signal.
12668
+ * @deprecated Use `m-scale` (ScaleComponent) with the price relations in
12669
+ * PRICE_SCALE_RELATIONS; the editor migrates stored ladders (v31). Removed
12670
+ * in the next release.
12636
12671
  */
12637
12672
  export declare class PriceLadderSignalComponent {
12638
12673
  readonly key: import("@angular/core").InputSignal<string>;
@@ -12677,6 +12712,454 @@ export declare class PriceLadderSignalComponent {
12677
12712
  };
12678
12713
  }, {}, never, never, true, never>;
12679
12714
  }
12715
+ /** `auto` — vertical while the scale's own width is under its `breakpoint`. */
12716
+ type ScaleOrientation = 'auto' | 'horizontal' | 'vertical';
12717
+ /** A grid breakpoint key, read against the scale's own width, not the viewport. */
12718
+ type ScaleBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
12719
+ type ScaleFormat = 'number' | 'currency' | 'percent';
12720
+ /** `level` — a tick. `bound` — an end-cap; two bounds shade the range between.
12721
+ * `target` — a dashed tick, with `low`/`high` a hatched band. */
12722
+ type ScaleMarkKind = 'level' | 'bound' | 'target';
12723
+ /** How a relation's chip and bracket read. `gold` is a golden cross. */
12724
+ type ScaleTone = 'up' | 'down' | 'warn' | 'gold' | 'neutral';
12725
+ /** `compare` — a mark against a mark, a fixed value or a % of a mark.
12726
+ * `combine` — other relations joined by `mode`. `always` — holds whatever
12727
+ * the marks say: a fixed chip. */
12728
+ type ScaleRelationType = 'compare' | 'combine' | 'always';
12729
+ /** `within`/`beyond` read the gap % between left and right against `n`. */
12730
+ type ScaleCompareOp = 'gt' | 'gte' | 'lt' | 'lte' | 'within' | 'beyond';
12731
+ /** What a compare's right side is: the mark `right`, `rightValue` itself,
12732
+ * or `rightValue` % of the mark `right`. */
12733
+ type ScaleOperandKind = 'mark' | 'fixed' | 'pct';
12734
+ type ScaleCombineMode = 'all' | 'any' | 'not';
12735
+ interface Mark {
12736
+ key: string;
12737
+ name: string;
12738
+ value: number;
12739
+ kind: ScaleMarkKind;
12740
+ low: number | null;
12741
+ high: number | null;
12742
+ primary: boolean;
12743
+ }
12744
+ /**
12745
+ * Several values of one quantity on one linear axis — current, min, ideal,
12746
+ * max — so where one sits against the others reads at a glance. The scale's
12747
+ * `label` names the quantity and its `primary` mark is the main reading,
12748
+ * shown large beside it. Relations (`m-scale-relation`) name what the marks
12749
+ * mean together and show as chips while they hold. Horizontal on a wide
12750
+ * container, vertical under `breakpoint`, read off the scale's own width.
12751
+ */
12752
+ export declare class ScaleComponent {
12753
+ /** TranslationAsset key naming the quantity, e.g. `stock-qty`. */
12754
+ readonly label: import("@angular/core").InputSignal<string>;
12755
+ readonly format: import("@angular/core").InputSignal<ScaleFormat>;
12756
+ /** ISO code for `currency`. */
12757
+ readonly currency: import("@angular/core").InputSignal<string>;
12758
+ /** Suffix after every `number` value, e.g. `kg`. */
12759
+ readonly unit: import("@angular/core").InputSignal<string>;
12760
+ /** Under this width (of the scale, not the screen) `auto` turns vertical. */
12761
+ readonly breakpoint: import("@angular/core").InputSignal<ScaleBreakpoint>;
12762
+ readonly orientation: import("@angular/core").InputSignal<ScaleOrientation>;
12763
+ /** Pin the axis ends; unset, they fit the marks. */
12764
+ readonly min: import("@angular/core").InputSignal<number | null | undefined>;
12765
+ readonly max: import("@angular/core").InputSignal<number | null | undefined>;
12766
+ /** A mark further than this % from the primary is pinned to the edge. Unset, none is. */
12767
+ readonly maxSpanPct: import("@angular/core").InputSignal<number | null | undefined>;
12768
+ private readonly markTags;
12769
+ private readonly relationTags;
12770
+ private readonly translateService;
12771
+ private readonly width;
12772
+ constructor();
12773
+ private readonly t;
12774
+ private readonly formatter;
12775
+ /** A value as text: a `percent` value is already in percent (12.5 → 12.5%). */
12776
+ readonly formatValue: (v: number) => string;
12777
+ protected readonly shownAs: import("@angular/core").Signal<"horizontal" | "vertical">;
12778
+ private readonly marks;
12779
+ protected readonly primary: import("@angular/core").Signal<Mark | null>;
12780
+ private readonly relations;
12781
+ private readonly results;
12782
+ /** One chip per relation that holds and is not hidden. */
12783
+ protected readonly chips: import("@angular/core").Signal<{
12784
+ key: string;
12785
+ label: string;
12786
+ tone: ScaleTone;
12787
+ detail: string;
12788
+ }[]>;
12789
+ private readonly domain;
12790
+ /** Height of a vertical scale: one row per mark, never under the minimum. */
12791
+ protected readonly verticalPx: import("@angular/core").Signal<number>;
12792
+ /**
12793
+ * Everything the plot places, in % from the axis start — the left edge, or
12794
+ * the top on a vertical scale, where the highest value sits.
12795
+ */
12796
+ protected readonly plot: import("@angular/core").Signal<{
12797
+ ticks: {
12798
+ key: string;
12799
+ kind: ScaleMarkKind;
12800
+ primary: boolean;
12801
+ at: number;
12802
+ pin: string;
12803
+ }[];
12804
+ bands: {
12805
+ from: number;
12806
+ size: number;
12807
+ key: string;
12808
+ }[];
12809
+ range: {
12810
+ from: number;
12811
+ size: number;
12812
+ } | null;
12813
+ brackets: {
12814
+ row: number;
12815
+ from: number;
12816
+ size: number;
12817
+ key: string;
12818
+ tone: ScaleTone;
12819
+ label: string;
12820
+ }[];
12821
+ labels: {
12822
+ name: string;
12823
+ valueText: string;
12824
+ primary: boolean;
12825
+ target: boolean;
12826
+ key: string;
12827
+ lane: number;
12828
+ at: number;
12829
+ }[];
12830
+ lanes: number;
12831
+ }>;
12832
+ protected readonly summary: import("@angular/core").Signal<string>;
12833
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScaleComponent, never>;
12834
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScaleComponent, "m-scale", never, {
12835
+ "label": {
12836
+ "alias": "label";
12837
+ "required": false;
12838
+ "isSignal": true;
12839
+ };
12840
+ "format": {
12841
+ "alias": "format";
12842
+ "required": false;
12843
+ "isSignal": true;
12844
+ };
12845
+ "currency": {
12846
+ "alias": "currency";
12847
+ "required": false;
12848
+ "isSignal": true;
12849
+ };
12850
+ "unit": {
12851
+ "alias": "unit";
12852
+ "required": false;
12853
+ "isSignal": true;
12854
+ };
12855
+ "breakpoint": {
12856
+ "alias": "breakpoint";
12857
+ "required": false;
12858
+ "isSignal": true;
12859
+ };
12860
+ "orientation": {
12861
+ "alias": "orientation";
12862
+ "required": false;
12863
+ "isSignal": true;
12864
+ };
12865
+ "min": {
12866
+ "alias": "min";
12867
+ "required": false;
12868
+ "isSignal": true;
12869
+ };
12870
+ "max": {
12871
+ "alias": "max";
12872
+ "required": false;
12873
+ "isSignal": true;
12874
+ };
12875
+ "maxSpanPct": {
12876
+ "alias": "maxSpanPct";
12877
+ "required": false;
12878
+ "isSignal": true;
12879
+ };
12880
+ }, {}, ["markTags", "relationTags"], never, true, never>;
12881
+ }
12882
+ /**
12883
+ * One value on a scale (`min`, `ideal`, `current`), written as a tag inside
12884
+ * `m-scale`. It draws nothing itself: the scale reads it and places it on the
12885
+ * shared axis; relations name it by `key`.
12886
+ */
12887
+ export declare class ScaleMarkComponent {
12888
+ /** What relations name the mark by. */
12889
+ readonly key: import("@angular/core").InputSignal<string>;
12890
+ /** TranslationAsset key naming the mark; unset, its key. */
12891
+ readonly label: import("@angular/core").InputSignal<string>;
12892
+ /** Missing or NaN → the mark is left out, and relations reading it do not hold. */
12893
+ readonly value: import("@angular/core").InputSignal<number | null | undefined>;
12894
+ readonly kind: import("@angular/core").InputSignal<ScaleMarkKind>;
12895
+ /** A `target`'s band ends; both set draw a hatched band. */
12896
+ readonly low: import("@angular/core").InputSignal<number | null | undefined>;
12897
+ readonly high: import("@angular/core").InputSignal<number | null | undefined>;
12898
+ /** The main reading: drawn as the dot and shown beside the scale's label. First one wins. */
12899
+ readonly primary: import("@angular/core").InputSignal<boolean>;
12900
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScaleMarkComponent, never>;
12901
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScaleMarkComponent, "m-scale-mark", never, {
12902
+ "key": {
12903
+ "alias": "key";
12904
+ "required": false;
12905
+ "isSignal": true;
12906
+ };
12907
+ "label": {
12908
+ "alias": "label";
12909
+ "required": false;
12910
+ "isSignal": true;
12911
+ };
12912
+ "value": {
12913
+ "alias": "value";
12914
+ "required": false;
12915
+ "isSignal": true;
12916
+ };
12917
+ "kind": {
12918
+ "alias": "kind";
12919
+ "required": false;
12920
+ "isSignal": true;
12921
+ };
12922
+ "low": {
12923
+ "alias": "low";
12924
+ "required": false;
12925
+ "isSignal": true;
12926
+ };
12927
+ "high": {
12928
+ "alias": "high";
12929
+ "required": false;
12930
+ "isSignal": true;
12931
+ };
12932
+ "primary": {
12933
+ "alias": "primary";
12934
+ "required": false;
12935
+ "isSignal": true;
12936
+ };
12937
+ }, {}, never, never, true, never>;
12938
+ }
12939
+ /**
12940
+ * A named reading of a scale's marks (a golden cross, "reorder soon"), shown
12941
+ * as a chip above the scale while it holds. A `compare` sets mark `left`
12942
+ * against the mark `right`, the fixed `rightValue`, or `rightValue` % of
12943
+ * `right`; a `combine` joins other relations named in `of`; an `always` is
12944
+ * a fixed chip. Draws nothing.
12945
+ */
12946
+ export declare class ScaleRelationComponent {
12947
+ /** What other relations name it by in `of`. */
12948
+ readonly key: import("@angular/core").InputSignal<string>;
12949
+ /** TranslationAsset key for the chip; unset, the key. */
12950
+ readonly label: import("@angular/core").InputSignal<string>;
12951
+ readonly tone: import("@angular/core").InputSignal<ScaleTone>;
12952
+ /** TranslationAsset key for the chip's title, filled from `<left>`, `<right>`, `<gap>`. */
12953
+ readonly detail: import("@angular/core").InputSignal<string>;
12954
+ readonly type: import("@angular/core").InputSignal<ScaleRelationType>;
12955
+ readonly left: import("@angular/core").InputSignal<string>;
12956
+ readonly op: import("@angular/core").InputSignal<ScaleCompareOp>;
12957
+ readonly right: import("@angular/core").InputSignal<string>;
12958
+ readonly rightKind: import("@angular/core").InputSignal<ScaleOperandKind>;
12959
+ readonly rightValue: import("@angular/core").InputSignal<number | null | undefined>;
12960
+ /** Gap % that `within`/`beyond` read against. */
12961
+ readonly n: import("@angular/core").InputSignal<number | null | undefined>;
12962
+ readonly mode: import("@angular/core").InputSignal<ScaleCombineMode>;
12963
+ /** Relation keys a combine joins, comma- or space-separated. */
12964
+ readonly of: import("@angular/core").InputSignal<string | readonly string[] | undefined>;
12965
+ /** Evaluated and usable in a combine, but no chip. */
12966
+ readonly hidden: import("@angular/core").InputSignal<boolean>;
12967
+ /** While it holds, bracket the two operands on the axis. */
12968
+ readonly bracket: import("@angular/core").InputSignal<boolean>;
12969
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScaleRelationComponent, never>;
12970
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScaleRelationComponent, "m-scale-relation", never, {
12971
+ "key": {
12972
+ "alias": "key";
12973
+ "required": false;
12974
+ "isSignal": true;
12975
+ };
12976
+ "label": {
12977
+ "alias": "label";
12978
+ "required": false;
12979
+ "isSignal": true;
12980
+ };
12981
+ "tone": {
12982
+ "alias": "tone";
12983
+ "required": false;
12984
+ "isSignal": true;
12985
+ };
12986
+ "detail": {
12987
+ "alias": "detail";
12988
+ "required": false;
12989
+ "isSignal": true;
12990
+ };
12991
+ "type": {
12992
+ "alias": "type";
12993
+ "required": false;
12994
+ "isSignal": true;
12995
+ };
12996
+ "left": {
12997
+ "alias": "left";
12998
+ "required": false;
12999
+ "isSignal": true;
13000
+ };
13001
+ "op": {
13002
+ "alias": "op";
13003
+ "required": false;
13004
+ "isSignal": true;
13005
+ };
13006
+ "right": {
13007
+ "alias": "right";
13008
+ "required": false;
13009
+ "isSignal": true;
13010
+ };
13011
+ "rightKind": {
13012
+ "alias": "rightKind";
13013
+ "required": false;
13014
+ "isSignal": true;
13015
+ };
13016
+ "rightValue": {
13017
+ "alias": "rightValue";
13018
+ "required": false;
13019
+ "isSignal": true;
13020
+ };
13021
+ "n": {
13022
+ "alias": "n";
13023
+ "required": false;
13024
+ "isSignal": true;
13025
+ };
13026
+ "mode": {
13027
+ "alias": "mode";
13028
+ "required": false;
13029
+ "isSignal": true;
13030
+ };
13031
+ "of": {
13032
+ "alias": "of";
13033
+ "required": false;
13034
+ "isSignal": true;
13035
+ };
13036
+ "hidden": {
13037
+ "alias": "hidden";
13038
+ "required": false;
13039
+ "isSignal": true;
13040
+ };
13041
+ "bracket": {
13042
+ "alias": "bracket";
13043
+ "required": false;
13044
+ "isSignal": true;
13045
+ };
13046
+ }, {}, never, never, true, never>;
13047
+ }
13048
+ interface ScaleDomainInput {
13049
+ /** Every value the scale draws: marks and target band ends. */
13050
+ values: readonly number[];
13051
+ /** The primary mark's value, which `maxSpanPct` is read from. */
13052
+ primary: number | null;
13053
+ /** A value further than this % from the primary is pinned to the edge. */
13054
+ maxSpanPct: number | null;
13055
+ /** Pins the axis ends; unset, they fit the values. */
13056
+ min: number | null;
13057
+ max: number | null;
13058
+ }
13059
+ interface ScaleDomain {
13060
+ lo: number;
13061
+ hi: number;
13062
+ /** −1 pinned to the low edge, 1 to the high edge, 0 on the axis. */
13063
+ pin: (v: number) => -1 | 0 | 1;
13064
+ /** Position along the axis, 0–100 (%), a pinned value at its edge. */
13065
+ pos: (v: number) => number;
13066
+ }
13067
+ /**
13068
+ * One linear axis fitted to the values. A value past `maxSpanPct` from the
13069
+ * primary is left off the fit and pinned to its edge, so one far mark cannot
13070
+ * squeeze the rest together; so is any value outside a pinned `min`/`max`.
13071
+ */
13072
+ export declare const scaleDomain: ({ values, primary, maxSpanPct, min, max }: ScaleDomainInput) => ScaleDomain;
13073
+ /** A relation as the scale evaluates it, read off one `m-scale-relation` tag. */
13074
+ interface ScaleRelationDef {
13075
+ key: string;
13076
+ type: ScaleRelationType;
13077
+ /** compare: the left mark's key. */
13078
+ left: string;
13079
+ op: ScaleCompareOp;
13080
+ /** compare: the right mark's key, for `mark` and `pct`. */
13081
+ right: string;
13082
+ rightKind: ScaleOperandKind;
13083
+ /** The fixed value, or the % of `right`. */
13084
+ rightValue: number | null;
13085
+ /** Gap % that `within`/`beyond` read against. */
13086
+ n: number | null;
13087
+ /** combine: how `of` joins. */
13088
+ mode: ScaleCombineMode;
13089
+ /** combine: keys of the relations joined. */
13090
+ of: readonly string[];
13091
+ }
13092
+ interface ScaleRelationResult {
13093
+ holds: boolean;
13094
+ /** compare: the operands and their gap %, null where missing. */
13095
+ left: number | null;
13096
+ right: number | null;
13097
+ gap: number | null;
13098
+ }
13099
+ /** A keys list as a tag gives it: comma- or space-separated, or an array. */
13100
+ export declare const parseKeys: (raw: string | readonly string[] | null | undefined) => string[];
13101
+ /**
13102
+ * Every relation's reading against the marks' values, by key. A missing
13103
+ * operand, an unknown relation or a cycle does not hold — never an error — so
13104
+ * a combine over it reads it as false.
13105
+ */
13106
+ export declare const evaluateRelations: (defs: readonly ScaleRelationDef[], values: ReadonlyMap<string, number>) => Map<string, ScaleRelationResult>;
13107
+ interface SpreadItem {
13108
+ key: string;
13109
+ /** Where the item sits along the axis, in px. */
13110
+ y: number;
13111
+ }
13112
+ /**
13113
+ * Pushes labels apart along one axis so no two stand closer than `gapPx`,
13114
+ * keeping their order, then pulls the run back inside `0…lengthPx`. Each label
13115
+ * moves as little as its neighbours allow.
13116
+ */
13117
+ export declare const spreadLabels: (items: readonly SpreadItem[], gapPx: number, lengthPx: number) => SpreadItem[];
13118
+ /**
13119
+ * The PriceLadder's predefined readings written as ScaleRelations (GLOSSARY.md
13120
+ * Scale, ScaleRelation) over the mark keys `current`, `sma10`, `sma50`,
13121
+ * `sma100`, `sma200`, `low52w`, `high52w` and `forecast`.
13122
+ *
13123
+ * One list, read three times: a host draws a price Scale's relations from it,
13124
+ * the editor's v31 migration turns a stored ladder's `signals` into these, and
13125
+ * the shipped `price-scale` ControlGroup carries every one (its spec holds the
13126
+ * two equal). A rule's key is its old PRICE_LADDER_RULES name, so its
13127
+ * TranslationAsset is the chip's words as before. Angular-free, so codegen
13128
+ * reads it too.
13129
+ */
13130
+ /** One relation as an `m-scale-relation` tag's inputs — and as a stored
13131
+ * `scale_relation` Control's `configs`. Only what it sets is present. */
13132
+ interface PriceRelation {
13133
+ key: string;
13134
+ label?: string;
13135
+ tone: ScaleTone;
13136
+ type: ScaleRelationType;
13137
+ left?: string;
13138
+ op?: ScaleCompareOp;
13139
+ rightKind?: ScaleOperandKind;
13140
+ right?: string;
13141
+ rightValue?: number;
13142
+ n?: number;
13143
+ mode?: ScaleCombineMode;
13144
+ of?: string[];
13145
+ hidden?: boolean;
13146
+ bracket?: boolean;
13147
+ }
13148
+ /** The nineteen readings, in PRICE_LADDER_RULES order. */
13149
+ export declare const PRICE_RULES: readonly PriceRelation[];
13150
+ /** The hidden building blocks the readings combine. */
13151
+ export declare const PRICE_HELPERS: readonly PriceRelation[];
13152
+ export declare const isPriceRule: (name: unknown) => name is string;
13153
+ /**
13154
+ * Every relation the named readings need: each one as written, then every
13155
+ * relation a combine among them names, transitively. A reading pulled in only
13156
+ * because a combine names it comes hidden — `golden-cross-near` alone shows
13157
+ * one chip, not a `death-cross` chip beside it, as the ladder did. Unknown
13158
+ * names are skipped.
13159
+ */
13160
+ export declare const priceRelationsFor: (rules: readonly string[]) => PriceRelation[];
13161
+ /** Every reading and helper, each once: what `price-scale` carries. */
13162
+ export declare const PRICE_SCALE_RELATIONS: readonly PriceRelation[];
12680
13163
  export declare class ImgComponent {
12681
13164
  #private;
12682
13165
  readonly src: import("@angular/core").InputSignal<string | null | undefined>;
@@ -13042,7 +13525,7 @@ export type DocAiPhase = 'idle' | 'asking' | 'question' | 'outline' | 'writing'
13042
13525
  */
13043
13526
  export declare class DocEditorComponent implements ControlValueAccessor {
13044
13527
  protected readonly groups: readonly import("@magmonium/one").DocToolbarGroup[];
13045
- protected readonly icons: Record<"code" | "link" | "table" | "strike" | "list" | "bold" | "heading" | "italic" | "quote", string>;
13528
+ protected readonly icons: Record<"code" | "list" | "link" | "table" | "strike" | "bold" | "heading" | "italic" | "quote", string>;
13046
13529
  protected readonly docActionKey: typeof docActionKey;
13047
13530
  private readonly translate;
13048
13531
  protected readonly value: import("@angular/core").WritableSignal<string>;
@@ -13937,7 +14420,7 @@ export declare class InstrumentScoreComponent {
13937
14420
  readonly variant: import("@angular/core").InputSignal<"compact" | "detailed">;
13938
14421
  readonly showDescription: import("@angular/core").InputSignal<boolean>;
13939
14422
  readonly label: import("@angular/core").InputSignal<string>;
13940
- readonly status: import("@angular/core").Signal<"exceptional" | "strong" | "average" | "weak" | "no-data">;
14423
+ readonly status: import("@angular/core").Signal<"no-data" | "exceptional" | "strong" | "average" | "weak">;
13941
14424
  readonly hex: import("@angular/core").Signal<"#94a3b8" | "#10b981" | "#3b82f6" | "#f59e0b" | "#ef4444">;
13942
14425
  readonly description: import("@angular/core").Signal<"insufficient-data-to-provide-analysis" | "this-company-shows-exceptional-fundamentals-and-momentum" | "solid-performance-with-good-growth-potential" | "fair-valuation-but-requires-careful-monitoring" | "higher-risk-profile-with-weakening-metrics">;
13943
14426
  static ɵfac: i0.ɵɵFactoryDeclaration<InstrumentScoreComponent, never>;
@@ -14636,6 +15119,12 @@ export type PanelTrigger<T> = ModalTrigger<T> & {
14636
15119
  dock?: true;
14637
15120
  /** Set by ModalStore: id of the panel this one displaced. Presence means docked. */
14638
15121
  dockedOver?: string;
15122
+ /**
15123
+ * What the panel holds, compared by identity: a non-dock open whose body is
15124
+ * already open closes that older panel first (GLOSSARY.md SidePanel).
15125
+ * `component` cannot say it — every overlay body is the same wrapper.
15126
+ */
15127
+ body?: string | OverlayWidgetLoader;
14639
15128
  };
14640
15129
  /**
14641
15130
  * Overlay asset shape for `mModal` — body named by `component`/`form`, not a
@@ -14677,6 +15166,12 @@ export type PanelOverlayConfig = Config & {
14677
15166
  export type ScreenOverlayTrigger = {
14678
15167
  as: 'modal' | 'side_panel';
14679
15168
  widget: OverlayWidgetLoader;
15169
+ /**
15170
+ * The Screen's name — how a SidePanel already holding it is known as the
15171
+ * same body. A loader written at the call site is a new function every call,
15172
+ * so `widget` alone never matches; absent, it is compared anyway.
15173
+ */
15174
+ screen?: string;
14680
15175
  inputs?: Record<string, unknown>;
14681
15176
  /**
14682
15177
  * ScreenOutput name -> what the opener runs when the body emits it (ADR
@@ -15056,8 +15551,8 @@ export declare class ConfirmComponent {
15056
15551
  cancelLabel: import("@angular/core").InputSignal<string>;
15057
15552
  protected readonly confirmText: import("@angular/core").Signal<string>;
15058
15553
  protected readonly cancelText: import("@angular/core").Signal<string>;
15059
- protected readonly accent: import("@angular/core").Signal<"error" | "mm" | "success" | "warning">;
15060
- protected readonly iconName: import("@angular/core").Signal<"exclamation-triangle" | "info" | "trash" | "check-circle">;
15554
+ protected readonly accent: import("@angular/core").Signal<"warning" | "success" | "error" | "mm">;
15555
+ protected readonly iconName: import("@angular/core").Signal<"info" | "exclamation-triangle" | "trash" | "check-circle">;
15061
15556
  protected accept(): void;
15062
15557
  protected decline(): void;
15063
15558
  static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmComponent, never>;
@@ -18840,4 +19335,4 @@ export declare const toggleUid: (audience: Audience, uid: string) => Audience;
18840
19335
  export declare const toggleGroup: (audience: Audience, groupId: string) => Audience;
18841
19336
  /** How many Users and Groups an Audience names. */
18842
19337
  export declare const pickCount: (audience: Audience) => number;
18843
- export type { Accordion, AccordionGroup, AccordionVariant, AppCardData, AppCardInputs, AppCardVariant, AppLogoTone, AppLogoVariant, AppManifest, AppTileData, AssetOption, Audience, AudienceLevel, AudienceMember, AudiencePicker, AuthResult, Badge, BadgeCount, BadgePosition, BadgeVariant, Button, ButtonGroup, CellChangeEvent, CellClickEvent, ColBreakpoint, ColSpan, ColorPallet, ColumnDef, Comment, CommentItem, Config, ContextMenu, ContextMenuEvent, Cursor, CustomIcon, DragListReorder, Draggable, DraggableState, FileUploadConfig, FileUploadEvent, FilterGroupContext, FilterGroupMember, FilterOption, FilterPanel, FilterPanelIo, FilterRangeMode, FilterSelectionMap, FilterValue, FilterVariant, FilteredTreeGrid, FlatTreeGridRow, FlexAlign, FlexAlignSelf, FlexConfig, FlexDirection, FlexItemConfig, FlexJustify, FlexVariant, GridAlignX, GridAlignY, GroupActionEvent, GroupDropEvent, GroupKind, GroupMenuEvent, Header, HeaderLevel, HeatSwatchRadius, Icon, KeyValueVariant, LabelSegment, LadderLevel, LadderLevels, LadderSignal, ListConfig, ListContext, ListItem, ListOrientation, ListVariant, MenuItem, MoneySystem, NavCountConfig, NavInstanceConfig, NavMenuConfig, NavRowsConfig, NavVisibilityConfig, NavVisibleAnswer, NavWidgetConfig, NavWidgetEntry, NavWidgetMap, OverlayWidgetLoader, OverlayWidgetMap, PageChangeEvent, Pagination, PaginationWindow, PriceLadderMarkKind, PriceLadderRule, PriceLadderTone, PriceLadderVariant, ResolvedUserTab, RowDropEvent, ScoreBand, ScoreSetVariant, SearchChangeEvent, SectionAccordion, SectionAccordionGroup, SectionAccordionGroupContext, SectionAccordionRef, SectionButtonGroupConfig, SectionChartCategories, SectionChartConfig, SectionChartMark, SectionChartPanel, SectionChartPoints, SectionChartScale, SectionChartWindow, SectionFilterGroupConfig, SectionHero, SectionHeroVariant, SectionTableAlign, SectionTableColumn, SectionTableConfig, SectionTableDataType, SectionTableSort, SectionTableVariant, SectionToggleItem, SectionToggleItemContext, SelectionAction, SelectionActionEvent, SelectionChangeEvent, SelectorConfig, SharingClient, SharingGroup, SocketMessage, Sort, SortChange, SortChangeEvent, SortOption, SortOrder, SourceAudience, SpacingInward, SqueezeMode, StatAlign, StatCornerEdge, StatCornerPosition, StatCornerSide, StatSurface, StatVariant, TabGroup, TableConfig, TableFilterCondition, TableFilterDef, TableGroup, TextOrNumberInput, Timeline, TimelineItem, TreeGridCellClickEvent, TreeGridLoadChildrenEvent, TreeGridRow, TreeGridRowSelectEvent, TreeGridToggleEvent, User };
19338
+ export type { Accordion, AccordionGroup, AccordionVariant, AppCardData, AppCardInputs, AppCardVariant, AppLogoTone, AppLogoVariant, AppManifest, AppTileData, AssetOption, Audience, AudienceLevel, AudienceMember, AudiencePicker, AuthResult, Badge, BadgeCount, BadgePosition, BadgeVariant, Button, ButtonGroup, CellChangeEvent, CellClickEvent, ColBreakpoint, ColSpan, ColorPallet, ColumnDef, Comment, CommentItem, Config, ContextMenu, ContextMenuEvent, Cursor, CustomIcon, DragListReorder, Draggable, DraggableState, FileUploadConfig, FileUploadEvent, FilterGroupContext, FilterGroupMember, FilterOption, FilterPanel, FilterPanelIo, FilterRangeMode, FilterSelectionMap, FilterValue, FilterVariant, FilteredTreeGrid, FlatTreeGridRow, FlexAlign, FlexAlignSelf, FlexConfig, FlexDirection, FlexItemConfig, FlexJustify, FlexVariant, GridAlignX, GridAlignY, GroupActionEvent, GroupDropEvent, GroupKind, GroupMenuEvent, Header, HeaderLevel, HeatSwatchRadius, Icon, KeyValueVariant, LabelSegment, LadderLevel, LadderLevels, LadderSignal, ListConfig, ListContext, ListItem, ListOrientation, ListVariant, MenuItem, MoneySystem, NavCountConfig, NavInstanceConfig, NavMenuConfig, NavRowsConfig, NavVisibilityConfig, NavVisibleAnswer, NavWidgetConfig, NavWidgetEntry, NavWidgetMap, OverlayWidgetLoader, OverlayWidgetMap, PageChangeEvent, Pagination, PaginationWindow, PriceLadderMarkKind, PriceLadderRule, PriceLadderTone, PriceLadderVariant, PriceRelation, ResolvedUserTab, RowDropEvent, ScaleBreakpoint, ScaleCombineMode, ScaleCompareOp, ScaleDomain, ScaleDomainInput, ScaleFormat, ScaleMarkKind, ScaleOperandKind, ScaleOrientation, ScaleRelationDef, ScaleRelationResult, ScaleRelationType, ScaleTone, ScoreBand, ScoreSetVariant, SearchChangeEvent, SectionAccordion, SectionAccordionGroup, SectionAccordionGroupContext, SectionAccordionRef, SectionButtonGroupConfig, SectionChartCategories, SectionChartConfig, SectionChartMark, SectionChartPanel, SectionChartPoints, SectionChartScale, SectionChartWindow, SectionFilterGroupConfig, SectionHero, SectionHeroVariant, SectionTableAlign, SectionTableColumn, SectionTableConfig, SectionTableDataType, SectionTableSort, SectionTableVariant, SectionToggleItem, SectionToggleItemContext, SelectionAction, SelectionActionEvent, SelectionChangeEvent, SelectorConfig, SharingClient, SharingGroup, SocketMessage, Sort, SortChange, SortChangeEvent, SortOption, SortOrder, SourceAudience, SpacingInward, SpreadItem, SqueezeMode, StatAlign, StatCornerEdge, StatCornerPosition, StatCornerSide, StatSurface, StatVariant, TabGroup, TableConfig, TableFilterCondition, TableFilterDef, TableGroup, TextOrNumberInput, Timeline, TimelineItem, TreeGridCellClickEvent, TreeGridLoadChildrenEvent, TreeGridRow, TreeGridRowSelectEvent, TreeGridToggleEvent, User };