@magmonium/one 0.4.87 → 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magmonium/one",
3
- "version": "0.4.87",
3
+ "version": "0.4.88",
4
4
  "description": "Magmonium One — Angular design-system primitives for mm Apps",
5
5
  "author": "magmonium",
6
6
  "license": "MIT",
@@ -3650,7 +3650,7 @@ export declare class ActionComponent extends ButtonGroupComponent {
3650
3650
  private readonly linkActive;
3651
3651
  private readonly isRouted;
3652
3652
  protected readonly selected: import("@angular/core").Signal<string | undefined>;
3653
- 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>;
3654
3654
  readonly squeezeMode: import("@angular/core").InputSignal<SqueezeMode | undefined>;
3655
3655
  private readonly squeeze;
3656
3656
  private readonly barWidth;
@@ -5090,7 +5090,7 @@ export declare class SectionStepperComponent implements OnDestroy {
5090
5090
  readonly lg: import("@angular/core").InputSignal<number | undefined>;
5091
5091
  readonly xl: import("@angular/core").InputSignal<number | undefined>;
5092
5092
  readonly xxl: import("@angular/core").InputSignal<number | undefined>;
5093
- readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal" | undefined>;
5093
+ readonly orientation: import("@angular/core").InputSignal<"horizontal" | "vertical" | undefined>;
5094
5094
  readonly stepChange: import("@angular/core").OutputEmitterRef<number>;
5095
5095
  private readonly isCompact;
5096
5096
  private readonly mediaMatched;
@@ -8400,7 +8400,7 @@ declare class DropdownBoxComponent {
8400
8400
  }
8401
8401
  /** The trigger both option Fields draw: a searchable text input and a chevron. */
8402
8402
  declare const DROPDOWN_TEMPLATE = "\n @if (config(); as dropdown) {\n @if (dropdown.label) {\n <m-label\n [for]=\"dropdown.name ?? ''\"\n [placeholder]=\"dropdown.label\"\n [params]=\"dropdown.params\"\n [required]=\"required()\"\n [disabled]=\"disabled()\"\n />\n }\n <div\n class=\"trigger-wrap\"\n #wrapper\n [mSelector]=\"selectorConfig()\"\n [disabled]=\"disabled() || readonly() || !!config()?.readonly\"\n (opened)=\"onOpened()\"\n (closed)=\"onClosed()\"\n (focusin)=\"isFocused.set(true)\"\n (focusout)=\"isFocused.set(false)\"\n >\n <m-text-input\n [config]=\"triggerInputConfig()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [invalid]=\"invalid()\"\n [hideErrors]=\"true\"\n [(touched)]=\"touched\"\n [focused]=\"focused()\"\n (valueChange)=\"onInput($event)\"\n (click)=\"preventToggleWhenOpen($event)\"\n (keydown.space)=\"$event.stopPropagation()\"\n (keydown.enter)=\"onEnter($event)\"\n (keydown.arrowdown)=\"onArrow($event, 1)\"\n (keydown.arrowup)=\"onArrow($event, -1)\"\n (keydown.tab)=\"$event.stopPropagation()\"\n />\n <m-button [disabled]=\"disabled()\" [config]=\"chevron()\" />\n </div>\n @if (showErrors()) {\n @for (error of errors(); track $index) {\n <m-text-output\n variant=\"footer\"\n color=\"error\"\n [label]=\"error.message\"\n />\n }\n }\n }\n";
8403
- declare const DROPDOWN_IMPORTS: (typeof ButtonComponent | typeof TextOutputComponent | typeof LabelComponent | typeof SelectorDirective | typeof TextInputComponent)[];
8403
+ declare const DROPDOWN_IMPORTS: (typeof ButtonComponent | typeof LabelComponent | typeof SelectorDirective | typeof TextOutputComponent | typeof TextInputComponent)[];
8404
8404
  /**
8405
8405
  * Everything a Dropdown and a Multiselect share: the options, the search, the
8406
8406
  * keyboard walk and the panel. What differs is only what the Field holds — one
@@ -10514,7 +10514,7 @@ export declare class StepperComponent extends ConfigComponent<Stepper> {
10514
10514
  constructor();
10515
10515
  protected readonly isReadonly: import("@angular/core").Signal<boolean>;
10516
10516
  protected readonly stepperDisabled: import("@angular/core").Signal<boolean>;
10517
- protected readonly orientation: import("@angular/core").Signal<"compact" | "vertical">;
10517
+ protected readonly orientation: import("@angular/core").Signal<"vertical" | "compact">;
10518
10518
  protected readonly currentStepLabel: import("@angular/core").Signal<string>;
10519
10519
  protected readonly nextStepLabel: import("@angular/core").Signal<string>;
10520
10520
  protected readonly isLastStep: import("@angular/core").Signal<boolean>;
@@ -10698,7 +10698,7 @@ export declare class ComponentStepperComponent {
10698
10698
  components: import("@angular/core").InputSignal<Type<unknown>[]>;
10699
10699
  labels: import("@angular/core").InputSignal<string[] | undefined>;
10700
10700
  currentIndex: import("@angular/core").InputSignal<number>;
10701
- variant: import("@angular/core").InputSignal<"vertical" | "horizontal">;
10701
+ variant: import("@angular/core").InputSignal<"horizontal" | "vertical">;
10702
10702
  context: import("@angular/core").InputSignal<Record<string, unknown> | undefined>;
10703
10703
  readonly stepChange: import("@angular/core").OutputEmitterRef<number>;
10704
10704
  static ɵfac: i0.ɵɵFactoryDeclaration<ComponentStepperComponent, never>;
@@ -12261,7 +12261,7 @@ export declare class ScoreSetComponent implements ScoreSetHost {
12261
12261
  "scoreSelect": "scoreSelect";
12262
12262
  }, ["items"], ["m-score-set-item"], true, never>;
12263
12263
  }
12264
- /** 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. */
12265
12265
  export declare const gapPct: (level: number, value: number) => number;
12266
12266
  /** A gap as signed text, one decimal: +12.7%, −1.6%, 0.0%. */
12267
12267
  export declare const formatGap: (gap: number) => string;
@@ -12345,6 +12345,9 @@ interface LadderSignal {
12345
12345
  * Every predefined rule the levels match, read from one snapshot. A golden or
12346
12346
  * death cross here is the regime — SMA 50 above or below SMA 200 now — not the
12347
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.
12348
12351
  */
12349
12352
  export declare const ladderSignals: (levels: LadderLevels, symbol?: string) => LadderSignal[];
12350
12353
  /** Whether a name is one of the predefined rules — `custom` and '' are not. */
@@ -12366,7 +12369,7 @@ interface LadderLevel {
12366
12369
  export declare const PRICE_LADDER_LEVELS: readonly LadderLevel[];
12367
12370
  /** The fixed level a key names, or undefined for a key off the list. */
12368
12371
  export declare const ladderLevelOf: (key: string) => LadderLevel | undefined;
12369
- interface Mark {
12372
+ interface Mark$1 {
12370
12373
  key: string;
12371
12374
  name: string;
12372
12375
  value: number;
@@ -12387,6 +12390,9 @@ interface Chip {
12387
12390
  * `rank`, bounds as end-caps, the estimate as a dashed tick or a band. Shape,
12388
12391
  * not colour alone, says which is past and which is forward. Finance-agnostic:
12389
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.
12390
12396
  */
12391
12397
  export declare class PriceLadderComponent {
12392
12398
  /** The featured value — current price. `null` draws a dash. */
@@ -12427,11 +12433,11 @@ export declare class PriceLadderComponent {
12427
12433
  protected readonly current: import("@angular/core").Signal<number | null>;
12428
12434
  /** The forecast point: a `forecast` mark, else the `target` input. */
12429
12435
  private readonly targetPoint;
12430
- protected readonly shownAs: import("@angular/core").Signal<"list" | "line">;
12436
+ protected readonly shownAs: import("@angular/core").Signal<"line" | "list">;
12431
12437
  /** Every drawable mark, the `current` and `forecast` stand-ins included. */
12432
12438
  private readonly everyMark;
12433
12439
  /** The reference levels drawn as ticks and labels. */
12434
- protected readonly marks: import("@angular/core").Signal<Mark[]>;
12440
+ protected readonly marks: import("@angular/core").Signal<Mark$1[]>;
12435
12441
  /** Every predefined rule the drawn levels match, by rule. */
12436
12442
  private readonly matched;
12437
12443
  /** The indicators picked by `signals`: every rule for `all`. */
@@ -12601,6 +12607,9 @@ export declare class PriceLadderComponent {
12601
12607
  * One reference level of a price ladder, written as a tag inside
12602
12608
  * `m-price-ladder` so the levels are markup rather than an array literal. It
12603
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.
12604
12613
  */
12605
12614
  export declare class PriceLadderMarkComponent {
12606
12615
  /**
@@ -12656,6 +12665,9 @@ export declare class PriceLadderMarkComponent {
12656
12665
  * A reading the host draws from the levels (a golden cross, a 52-week
12657
12666
  * breakout), shown as a chip above the ladder. The ladder does not decide what
12658
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.
12659
12671
  */
12660
12672
  export declare class PriceLadderSignalComponent {
12661
12673
  readonly key: import("@angular/core").InputSignal<string>;
@@ -12700,6 +12712,454 @@ export declare class PriceLadderSignalComponent {
12700
12712
  };
12701
12713
  }, {}, never, never, true, never>;
12702
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[];
12703
13163
  export declare class ImgComponent {
12704
13164
  #private;
12705
13165
  readonly src: import("@angular/core").InputSignal<string | null | undefined>;
@@ -13065,7 +13525,7 @@ export type DocAiPhase = 'idle' | 'asking' | 'question' | 'outline' | 'writing'
13065
13525
  */
13066
13526
  export declare class DocEditorComponent implements ControlValueAccessor {
13067
13527
  protected readonly groups: readonly import("@magmonium/one").DocToolbarGroup[];
13068
- protected readonly icons: Record<"code" | "link" | "list" | "table" | "strike" | "bold" | "heading" | "italic" | "quote", string>;
13528
+ protected readonly icons: Record<"code" | "list" | "link" | "table" | "strike" | "bold" | "heading" | "italic" | "quote", string>;
13069
13529
  protected readonly docActionKey: typeof docActionKey;
13070
13530
  private readonly translate;
13071
13531
  protected readonly value: import("@angular/core").WritableSignal<string>;
@@ -13960,7 +14420,7 @@ export declare class InstrumentScoreComponent {
13960
14420
  readonly variant: import("@angular/core").InputSignal<"compact" | "detailed">;
13961
14421
  readonly showDescription: import("@angular/core").InputSignal<boolean>;
13962
14422
  readonly label: import("@angular/core").InputSignal<string>;
13963
- 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">;
13964
14424
  readonly hex: import("@angular/core").Signal<"#94a3b8" | "#10b981" | "#3b82f6" | "#f59e0b" | "#ef4444">;
13965
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">;
13966
14426
  static ɵfac: i0.ɵɵFactoryDeclaration<InstrumentScoreComponent, never>;
@@ -15091,7 +15551,7 @@ export declare class ConfirmComponent {
15091
15551
  cancelLabel: import("@angular/core").InputSignal<string>;
15092
15552
  protected readonly confirmText: import("@angular/core").Signal<string>;
15093
15553
  protected readonly cancelText: import("@angular/core").Signal<string>;
15094
- protected readonly accent: import("@angular/core").Signal<"warning" | "error" | "success" | "mm">;
15554
+ protected readonly accent: import("@angular/core").Signal<"warning" | "success" | "error" | "mm">;
15095
15555
  protected readonly iconName: import("@angular/core").Signal<"info" | "exclamation-triangle" | "trash" | "check-circle">;
15096
15556
  protected accept(): void;
15097
15557
  protected decline(): void;
@@ -18875,4 +19335,4 @@ export declare const toggleUid: (audience: Audience, uid: string) => Audience;
18875
19335
  export declare const toggleGroup: (audience: Audience, groupId: string) => Audience;
18876
19336
  /** How many Users and Groups an Audience names. */
18877
19337
  export declare const pickCount: (audience: Audience) => number;
18878
- 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 };