@magmonium/one 0.4.73 → 0.4.76

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 (24) hide show
  1. package/fesm2022/{magmonium-one-base-dropdown-DlggqKkE.mjs → magmonium-one-base-dropdown-9iIR64ME.mjs} +3 -3
  2. package/fesm2022/{magmonium-one-base-dropdown-DlggqKkE.mjs.map → magmonium-one-base-dropdown-9iIR64ME.mjs.map} +1 -1
  3. package/fesm2022/{magmonium-one-checkbox-DHg1sBWl.mjs → magmonium-one-checkbox-a3Dwmu2X.mjs} +2 -2
  4. package/fesm2022/{magmonium-one-checkbox-DHg1sBWl.mjs.map → magmonium-one-checkbox-a3Dwmu2X.mjs.map} +1 -1
  5. package/fesm2022/{magmonium-one-image-editor-NsUm59Ul.mjs → magmonium-one-image-editor-B6eCXP9A.mjs} +2 -2
  6. package/fesm2022/{magmonium-one-image-editor-NsUm59Ul.mjs.map → magmonium-one-image-editor-B6eCXP9A.mjs.map} +1 -1
  7. package/fesm2022/{magmonium-one-label-BII6szn8.mjs → magmonium-one-label-Dkis_mGP.mjs} +33 -2
  8. package/fesm2022/magmonium-one-label-Dkis_mGP.mjs.map +1 -0
  9. package/fesm2022/{magmonium-one-multi-range-BQ0f5IFY.mjs → magmonium-one-multi-range-RSLLKzLu.mjs} +2 -2
  10. package/fesm2022/{magmonium-one-multi-range-BQ0f5IFY.mjs.map → magmonium-one-multi-range-RSLLKzLu.mjs.map} +1 -1
  11. package/fesm2022/{magmonium-one-otp-Zo1X0_r5.mjs → magmonium-one-otp-COE0X33y.mjs} +2 -2
  12. package/fesm2022/{magmonium-one-otp-Zo1X0_r5.mjs.map → magmonium-one-otp-COE0X33y.mjs.map} +1 -1
  13. package/fesm2022/{magmonium-one-password-B8DtitsZ.mjs → magmonium-one-password-CJBa8k1l.mjs} +2 -2
  14. package/fesm2022/{magmonium-one-password-B8DtitsZ.mjs.map → magmonium-one-password-CJBa8k1l.mjs.map} +1 -1
  15. package/fesm2022/{magmonium-one-radio-CldvuwLN.mjs → magmonium-one-radio-DPz4-SAJ.mjs} +2 -2
  16. package/fesm2022/{magmonium-one-radio-CldvuwLN.mjs.map → magmonium-one-radio-DPz4-SAJ.mjs.map} +1 -1
  17. package/fesm2022/{magmonium-one-range-pxmV4Ytp.mjs → magmonium-one-range-CqOSrC0Y.mjs} +2 -2
  18. package/fesm2022/{magmonium-one-range-pxmV4Ytp.mjs.map → magmonium-one-range-CqOSrC0Y.mjs.map} +1 -1
  19. package/fesm2022/{magmonium-one-text-Bst55TOO.mjs → magmonium-one-text-vDPAhn74.mjs} +2 -2
  20. package/fesm2022/{magmonium-one-text-Bst55TOO.mjs.map → magmonium-one-text-vDPAhn74.mjs.map} +1 -1
  21. package/fesm2022/magmonium-one.mjs +23 -23
  22. package/package.json +1 -1
  23. package/types/magmonium-one.d.ts +42 -28
  24. package/fesm2022/magmonium-one-label-BII6szn8.mjs.map +0 -1
@@ -641,6 +641,20 @@ export declare class SectionTableSortPipe implements PipeTransform {
641
641
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionTableSortPipe, never>;
642
642
  static ɵpipe: i0.ɵɵPipeDeclaration<SectionTableSortPipe, "sectionTableSort", true>;
643
643
  }
644
+ /**
645
+ * One value as the one-item list a collection input holds — `id | toList`
646
+ * hands `[id]` to an input typed `string[]`. An absent value is an empty list,
647
+ * never `[undefined]`.
648
+ *
649
+ * A pipe rather than an inline `[id]`: an array literal in a template binding
650
+ * is what `no-inline-config-template` rejects (ADR 0010). Pure, so the list is
651
+ * rebuilt only when the value changes and the input sees a stable reference.
652
+ */
653
+ export declare class ToListPipe implements PipeTransform {
654
+ transform<T>(value: T | undefined | null): T[];
655
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToListPipe, never>;
656
+ static ɵpipe: i0.ɵɵPipeDeclaration<ToListPipe, "toList", true>;
657
+ }
644
658
  export type Align = 'left' | 'center' | 'right';
645
659
  export type Option = Config & {
646
660
  id: string;
@@ -1600,7 +1614,7 @@ export declare class DraggableDirective {
1600
1614
  readonly max: import("@angular/core").InputSignal<Position | undefined>;
1601
1615
  readonly dragStart: import("@angular/core").OutputEmitterRef<void>;
1602
1616
  readonly dragEnd: import("@angular/core").OutputEmitterRef<void>;
1603
- protected readonly cursor: import("@angular/core").Signal<"ew-resize" | "ns-resize" | "move">;
1617
+ protected readonly cursor: import("@angular/core").Signal<"move" | "ew-resize" | "ns-resize">;
1604
1618
  protected state: DraggableState;
1605
1619
  set pos(position: Position);
1606
1620
  /**
@@ -2902,7 +2916,7 @@ export declare class ButtonComponent extends ReactiveElementComponent<Button> {
2902
2916
  navParams: import("@angular/core").InputSignal<Record<string, string | number> | undefined>;
2903
2917
  href: import("@angular/core").InputSignal<string | undefined>;
2904
2918
  disabled: import("@angular/core").InputSignal<boolean | undefined>;
2905
- variant: import("@angular/core").InputSignal<"primary" | "ghost" | "secondary" | "tab" | undefined>;
2919
+ variant: import("@angular/core").InputSignal<"ghost" | "primary" | "secondary" | "tab" | undefined>;
2906
2920
  name: import("@angular/core").InputSignal<string | undefined>;
2907
2921
  baseUrl: import("@angular/core").InputSignal<string | undefined>;
2908
2922
  one: import("@angular/core").InputSignal<boolean | undefined>;
@@ -3522,7 +3536,7 @@ export declare class ButtonGroupComponent extends ConfigComponent<ButtonGroup> {
3522
3536
  color?: string | keyof import("dist/libs/cli/src").ThemeColor;
3523
3537
  align?: ConfigAlign;
3524
3538
  isLoading?: boolean;
3525
- variant?: "primary" | "ghost" | "secondary" | "tab" | undefined;
3539
+ variant?: "ghost" | "primary" | "secondary" | "tab" | undefined;
3526
3540
  label?: string;
3527
3541
  noTranslate?: boolean;
3528
3542
  params?: Record<string, string>;
@@ -4302,7 +4316,7 @@ declare class BaseTextInputComponent<T extends Input = TextInput> extends BaseIn
4302
4316
  private autofocused;
4303
4317
  constructor();
4304
4318
  readonly isFocused: import("@angular/core").WritableSignal<boolean>;
4305
- readonly iconColor: import("@angular/core").Signal<"error" | "border" | "focus">;
4319
+ readonly iconColor: import("@angular/core").Signal<"border" | "error" | "focus">;
4306
4320
  protected readonly setValue: (value: string) => void;
4307
4321
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseTextInputComponent<any>, never>;
4308
4322
  static ɵdir: i0.ɵɵDirectiveDeclaration<BaseTextInputComponent<any>, never, never, {
@@ -4922,7 +4936,7 @@ export declare class SectionFilterGroupComponent {
4922
4936
  readonly paddingX: import("@angular/core").InputSignal<boolean | undefined>;
4923
4937
  readonly paddingY: import("@angular/core").InputSignal<boolean | undefined>;
4924
4938
  readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
4925
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
4939
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right" | undefined>;
4926
4940
  readonly config: import("@angular/core").InputSignal<SectionFilterGroupConfig | undefined>;
4927
4941
  /**
4928
4942
  * The whole group's selection, keyed by each Filter's `name` — one key per
@@ -4940,7 +4954,7 @@ export declare class SectionFilterGroupComponent {
4940
4954
  protected readonly resolvedPadding: import("@angular/core").Signal<boolean>;
4941
4955
  protected readonly resolvedPaddingX: import("@angular/core").Signal<boolean>;
4942
4956
  protected readonly resolvedPaddingY: import("@angular/core").Signal<boolean>;
4943
- protected readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right">;
4957
+ protected readonly resolvedAlign: import("@angular/core").Signal<"left" | "center" | "right">;
4944
4958
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
4945
4959
  protected readonly noBorder: import("@angular/core").Signal<boolean>;
4946
4960
  /**
@@ -5045,7 +5059,7 @@ export declare class SectionStepperComponent implements OnDestroy {
5045
5059
  readonly lg: import("@angular/core").InputSignal<number | undefined>;
5046
5060
  readonly xl: import("@angular/core").InputSignal<number | undefined>;
5047
5061
  readonly xxl: import("@angular/core").InputSignal<number | undefined>;
5048
- readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal" | undefined>;
5062
+ readonly orientation: import("@angular/core").InputSignal<"horizontal" | "vertical" | undefined>;
5049
5063
  readonly stepChange: import("@angular/core").OutputEmitterRef<number>;
5050
5064
  private readonly isCompact;
5051
5065
  private readonly mediaMatched;
@@ -5119,7 +5133,7 @@ export declare class SectionStepperComponent implements OnDestroy {
5119
5133
  export declare class SectionBadgesComponent {
5120
5134
  readonly wrap: import("@angular/core").InputSignal<boolean>;
5121
5135
  readonly border: import("@angular/core").InputSignal<boolean>;
5122
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
5136
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right">;
5123
5137
  private readonly sectionContext;
5124
5138
  protected readonly hasBorder: import("@angular/core").Signal<boolean>;
5125
5139
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionBadgesComponent, never>;
@@ -5267,7 +5281,7 @@ export declare class SectionPaginationComponent {
5267
5281
  * Entries that are not positive numbers drop rather than throw.
5268
5282
  */
5269
5283
  readonly perPageOptions: import("@angular/core").InputSignal<string | undefined>;
5270
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
5284
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right">;
5271
5285
  readonly showPerPage: import("@angular/core").InputSignal<boolean>;
5272
5286
  /** Hides the band outright once everything fits one page. */
5273
5287
  readonly hideOnSinglePage: import("@angular/core").InputSignal<boolean>;
@@ -5604,7 +5618,7 @@ export declare class SectionComponent extends ConfigComponent<SectionConfig> {
5604
5618
  readonly align: import("@angular/core").InputSignal<SectionAlign | undefined>;
5605
5619
  readonly alignX: import("@angular/core").InputSignal<GridAlignX | undefined>;
5606
5620
  readonly alignY: import("@angular/core").InputSignal<GridAlignY | undefined>;
5607
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
5621
+ readonly size: import("@angular/core").InputSignal<Size | "sm" | "md" | "lg" | undefined>;
5608
5622
  private readonly parentSize;
5609
5623
  readonly resolvedSize: import("@angular/core").Signal<Size>;
5610
5624
  protected readonly sizeLength: import("@angular/core").Signal<string>;
@@ -5775,8 +5789,8 @@ export declare class SectionHeaderComponent {
5775
5789
  readonly visibilityRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
5776
5790
  readonly disableRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
5777
5791
  readonly extraData: import("@angular/core").InputSignal<unknown>;
5778
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
5779
- readonly alignment: import("@angular/core").Signal<"center" | "left" | "right">;
5792
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right" | undefined>;
5793
+ readonly alignment: import("@angular/core").Signal<"left" | "center" | "right">;
5780
5794
  readonly badge: import("@angular/core").InputSignal<BadgeCount | undefined>;
5781
5795
  readonly showBack: import("@angular/core").InputSignal<boolean>;
5782
5796
  readonly actionButton: import("@angular/core").InputSignal<string | undefined>;
@@ -5794,7 +5808,7 @@ export declare class SectionHeaderComponent {
5794
5808
  protected readonly sidepanel: import("@angular/core").Signal<boolean>;
5795
5809
  protected readonly noBorder: import("@angular/core").Signal<boolean>;
5796
5810
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
5797
- protected readonly boxAlign: import("@angular/core").Signal<"center" | "left" | "right">;
5811
+ protected readonly boxAlign: import("@angular/core").Signal<"left" | "center" | "right">;
5798
5812
  protected readonly iconBox: import("@angular/core").Signal<string>;
5799
5813
  protected readonly isSticky: import("@angular/core").Signal<boolean>;
5800
5814
  protected readonly hasMenu: import("@angular/core").Signal<boolean>;
@@ -5941,7 +5955,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
5941
5955
  readonly vertical: import("@angular/core").InputSignal<boolean | undefined>;
5942
5956
  readonly align: import("@angular/core").InputSignal<ConfigAlign>;
5943
5957
  readonly variant: import("@angular/core").InputSignal<"spaced" | "joined" | undefined>;
5944
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
5958
+ readonly size: import("@angular/core").InputSignal<Size | "sm" | "md" | "lg" | undefined>;
5945
5959
  readonly fullWidth: import("@angular/core").InputSignal<boolean | undefined>;
5946
5960
  private readonly parentSize;
5947
5961
  readonly resolvedSize: import("@angular/core").Signal<Size>;
@@ -5949,7 +5963,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
5949
5963
  protected readonly resolvedFullWidth: import("@angular/core").Signal<boolean>;
5950
5964
  protected readonly resolvedVertical: import("@angular/core").Signal<boolean>;
5951
5965
  protected readonly resolvedVariant: import("@angular/core").Signal<"spaced" | "joined">;
5952
- protected readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right" | "bottom" | "top">;
5966
+ protected readonly resolvedAlign: import("@angular/core").Signal<"left" | "center" | "right" | "top" | "bottom">;
5953
5967
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionButtonGroupComponent, never>;
5954
5968
  static ɵcmp: i0.ɵɵComponentDeclaration<SectionButtonGroupComponent, "m-section-button-group", never, {
5955
5969
  "vertical": {
@@ -5981,7 +5995,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
5981
5995
  }
5982
5996
  export declare class SectionFooterComponent {
5983
5997
  readonly sticky: import("@angular/core").InputSignal<boolean>;
5984
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
5998
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right">;
5985
5999
  readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
5986
6000
  private readonly scrollSticky;
5987
6001
  protected readonly isSticky: import("@angular/core").Signal<boolean>;
@@ -5989,7 +6003,7 @@ export declare class SectionFooterComponent {
5989
6003
  protected readonly sidepanel: import("@angular/core").Signal<boolean>;
5990
6004
  protected readonly noBorder: import("@angular/core").Signal<boolean>;
5991
6005
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
5992
- protected readonly boxAlign: import("@angular/core").Signal<"center" | "left" | "right">;
6006
+ protected readonly boxAlign: import("@angular/core").Signal<"left" | "center" | "right">;
5993
6007
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionFooterComponent, never>;
5994
6008
  static ɵcmp: i0.ɵɵComponentDeclaration<SectionFooterComponent, "m-section-footer", never, {
5995
6009
  "sticky": {
@@ -8146,7 +8160,7 @@ declare class DropdownBoxComponent {
8146
8160
  }
8147
8161
  /** The trigger both option Fields draw: a searchable text input and a chevron. */
8148
8162
  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";
8149
- declare const DROPDOWN_IMPORTS: (typeof ButtonComponent | typeof LabelComponent | typeof SelectorDirective | typeof TextOutputComponent | typeof TextInputComponent)[];
8163
+ declare const DROPDOWN_IMPORTS: (typeof TextInputComponent | typeof SelectorDirective | typeof LabelComponent | typeof TextOutputComponent | typeof ButtonComponent)[];
8150
8164
  /**
8151
8165
  * Everything a Dropdown and a Multiselect share: the options, the search, the
8152
8166
  * keyboard walk and the panel. What differs is only what the Field holds — one
@@ -8330,7 +8344,7 @@ declare class ColorPickerBoxComponent implements AfterViewInit, OnDestroy {
8330
8344
  protected readonly _eyedropperConfig: import("@magmonium/one").Button;
8331
8345
  protected readonly _headerContextMenu: ContextMenu;
8332
8346
  protected readonly themeSwatches: import("@angular/core").Signal<{
8333
- key: "text" | "error" | "focus" | "mm" | "mmLite" | "mmDark" | "background" | "border" | "textSecondary" | "errorLight" | "warning" | "successLite" | "success" | "highlight" | "wealth";
8347
+ key: "mm" | "mmLite" | "mmDark" | "background" | "border" | "text" | "textSecondary" | "focus" | "error" | "errorLight" | "warning" | "successLite" | "success" | "highlight" | "wealth";
8334
8348
  color: string;
8335
8349
  }[]>;
8336
8350
  hue: import("@angular/core").WritableSignal<number>;
@@ -9075,7 +9089,7 @@ export declare class FileUploadInputComponent extends BaseInputComponent<FileUpl
9075
9089
  private readonly editorSize;
9076
9090
  private readonly maxSize;
9077
9091
  protected readonly isLocked: import("@angular/core").Signal<boolean>;
9078
- protected readonly dropZoneIconColor: import("@angular/core").Signal<"error" | "border" | "focus">;
9092
+ protected readonly dropZoneIconColor: import("@angular/core").Signal<"border" | "error" | "focus">;
9079
9093
  /** Object URLs of the previews on show, keyed by what the value holds. */
9080
9094
  private readonly previews;
9081
9095
  protected readonly heldFiles: import("@angular/core").Signal<HeldFile[]>;
@@ -9529,17 +9543,17 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
9529
9543
  protected readonly resolvesConfigAsset = false;
9530
9544
  readonly variant: import("@angular/core").InputSignal<string | undefined>;
9531
9545
  readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
9532
- readonly heightMode: import("@angular/core").InputSignal<"fixed" | "full" | undefined>;
9546
+ readonly heightMode: import("@angular/core").InputSignal<"full" | "fixed" | undefined>;
9533
9547
  readonly maxHeight: import("@angular/core").InputSignal<string | number | undefined>;
9534
9548
  readonly height: import("@angular/core").InputSignal<string | number | undefined>;
9535
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
9549
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right" | undefined>;
9536
9550
  readonly padding: import("@angular/core").InputSignal<string | number | undefined>;
9537
9551
  readonly paddingX: import("@angular/core").InputSignal<string | number | undefined>;
9538
9552
  readonly paddingY: import("@angular/core").InputSignal<string | number | undefined>;
9539
9553
  readonly margin: import("@angular/core").InputSignal<string | number | undefined>;
9540
9554
  readonly marginX: import("@angular/core").InputSignal<string | number | undefined>;
9541
9555
  readonly marginY: import("@angular/core").InputSignal<string | number | undefined>;
9542
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
9556
+ readonly size: import("@angular/core").InputSignal<Size | "sm" | "md" | "lg" | undefined>;
9543
9557
  readonly autofocus: import("@angular/core").InputSignal<boolean>;
9544
9558
  data: import("@angular/core").InputSignal<T | undefined>;
9545
9559
  readonly dataChange: import("@angular/core").OutputEmitterRef<T>;
@@ -9584,7 +9598,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
9584
9598
  protected readonly handleSubmit: (event: Event) => void;
9585
9599
  readonly resolvedSize: import("@angular/core").Signal<Size>;
9586
9600
  protected readonly sizeLength: import("@angular/core").Signal<string | null>;
9587
- readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right">;
9601
+ readonly resolvedAlign: import("@angular/core").Signal<"left" | "center" | "right">;
9588
9602
  readonly resolvedVariant: import("@angular/core").Signal<string | undefined>;
9589
9603
  readonly resolvedMaxWidth: import("@angular/core").Signal<string | number | undefined>;
9590
9604
  private readonly resolvedPadding;
@@ -9596,7 +9610,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
9596
9610
  readonly resolvedMinHeight: import("@angular/core").Signal<string | undefined>;
9597
9611
  readonly resolvedMinWidth: import("@angular/core").Signal<string | undefined>;
9598
9612
  readonly resolvedMaxHeight: import("@angular/core").Signal<string | number | undefined>;
9599
- readonly resolvedHeightMode: import("@angular/core").Signal<"fixed" | "full" | undefined>;
9613
+ readonly resolvedHeightMode: import("@angular/core").Signal<"full" | "fixed" | undefined>;
9600
9614
  readonly isFullHeight: import("@angular/core").Signal<boolean>;
9601
9615
  readonly cssMaxHeight: import("@angular/core").Signal<string | undefined>;
9602
9616
  constructor();
@@ -10444,7 +10458,7 @@ export declare class ComponentStepperComponent {
10444
10458
  components: import("@angular/core").InputSignal<Type<unknown>[]>;
10445
10459
  labels: import("@angular/core").InputSignal<string[] | undefined>;
10446
10460
  currentIndex: import("@angular/core").InputSignal<number>;
10447
- variant: import("@angular/core").InputSignal<"vertical" | "horizontal">;
10461
+ variant: import("@angular/core").InputSignal<"horizontal" | "vertical">;
10448
10462
  context: import("@angular/core").InputSignal<Record<string, unknown> | undefined>;
10449
10463
  readonly stepChange: import("@angular/core").OutputEmitterRef<number>;
10450
10464
  static ɵfac: i0.ɵɵFactoryDeclaration<ComponentStepperComponent, never>;
@@ -12146,7 +12160,7 @@ export type DocAiPhase = 'idle' | 'asking' | 'question' | 'outline' | 'writing'
12146
12160
  */
12147
12161
  export declare class DocEditorComponent implements ControlValueAccessor {
12148
12162
  protected readonly groups: readonly import("@magmonium/one").DocToolbarGroup[];
12149
- protected readonly icons: Record<"code" | "link" | "table" | "strike" | "list" | "bold" | "heading" | "italic" | "quote", string>;
12163
+ protected readonly icons: Record<"table" | "list" | "code" | "link" | "bold" | "italic" | "strike" | "heading" | "quote", string>;
12150
12164
  protected readonly docActionKey: typeof docActionKey;
12151
12165
  private readonly translate;
12152
12166
  protected readonly value: import("@angular/core").WritableSignal<string>;
@@ -14160,7 +14174,7 @@ export declare class ConfirmComponent {
14160
14174
  cancelLabel: import("@angular/core").InputSignal<string>;
14161
14175
  protected readonly confirmText: import("@angular/core").Signal<string>;
14162
14176
  protected readonly cancelText: import("@angular/core").Signal<string>;
14163
- protected readonly accent: import("@angular/core").Signal<"error" | "mm" | "success" | "warning">;
14177
+ protected readonly accent: import("@angular/core").Signal<"error" | "warning" | "success" | "mm">;
14164
14178
  protected readonly iconName: import("@angular/core").Signal<"exclamation-triangle" | "info" | "trash" | "check-circle">;
14165
14179
  protected accept(): void;
14166
14180
  protected decline(): void;
@@ -1 +0,0 @@
1
- {"version":3,"file":"magmonium-one-label-BII6szn8.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/pipe/time-ago.ts","../../../../libs/one/src/lib/shared/pipe/money.fn.ts","../../../../libs/one/src/lib/shared/pipe/money.ts","../../../../libs/one/src/lib/shared/pipe/percentage.ts","../../../../libs/one/src/lib/shared/pipe/sign-color.ts","../../../../libs/one/src/lib/shared/pipe/compact-number.ts","../../../../libs/one/src/lib/shared/pipe/asset-url.ts","../../../../libs/one/src/lib/shared/ui/section/type/section-table.ts","../../../../libs/one/src/lib/shared/ui/section/lib/functions/section-table.ts","../../../../libs/one/src/lib/shared/pipe/section-table-sort.ts","../../../../libs/one/src/lib/shared/ui/input/ui/label.ts"],"sourcesContent":["import { ChangeDetectorRef, inject, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../services/translate';\nimport { interval, Subscription } from 'rxjs';\n\nconst SECONDS_IN_MINUTE = 60;\nconst SECONDS_IN_HOUR = 3600;\nconst SECONDS_IN_DAY = 86400;\nconst SECONDS_IN_MONTH = 2592000;\nconst SECONDS_IN_YEAR = 31536000;\n\n@Pipe({\n name: 'timeAgo',\n pure: false,\n})\nexport class TimeAgoPipe implements PipeTransform, OnDestroy {\n private readonly translateService = inject(TranslateService);\n private readonly cdr = inject(ChangeDetectorRef);\n private timerSubscription: Subscription | null = null;\n private lastValue: string | Date | undefined = undefined;\n\n transform(value: string | Date | undefined): string {\n if (!value) return '';\n\n if (value !== this.lastValue) {\n this.lastValue = value;\n this.setupTimer();\n }\n\n const date = typeof value === 'string' ? new Date(value) : value;\n const now = new Date();\n const seconds = Math.floor((now.getTime() - date.getTime()) / 1000);\n\n if (seconds < SECONDS_IN_MINUTE) {\n return this.translateService.translate('just-now');\n }\n\n let count: number;\n let unit: string;\n\n if (seconds < SECONDS_IN_HOUR) {\n count = Math.floor(seconds / SECONDS_IN_MINUTE);\n unit = count === 1 ? 'minute' : 'minutes';\n } else if (seconds < SECONDS_IN_DAY) {\n count = Math.floor(seconds / SECONDS_IN_HOUR);\n unit = count === 1 ? 'hour' : 'hours';\n } else if (seconds < SECONDS_IN_MONTH) {\n count = Math.floor(seconds / SECONDS_IN_DAY);\n unit = count === 1 ? 'day' : 'days';\n } else if (seconds < SECONDS_IN_YEAR) {\n count = Math.floor(seconds / SECONDS_IN_MONTH);\n unit = count === 1 ? 'month' : 'months';\n } else {\n count = Math.floor(seconds / SECONDS_IN_YEAR);\n unit = count === 1 ? 'year' : 'years';\n }\n\n return this.translateService.translate(\n `time-ago?count=${count}&unit=${unit}`\n );\n }\n\n private setupTimer(): void {\n this.clearTimer();\n // Update every 30 seconds to keep the display fresh without overloading change detection.\n this.timerSubscription = interval(30000).subscribe(() => {\n this.cdr.detectChanges();\n });\n }\n\n private clearTimer(): void {\n if (this.timerSubscription) {\n this.timerSubscription.unsubscribe();\n this.timerSubscription = null;\n }\n }\n\n ngOnDestroy(): void {\n this.clearTimer();\n }\n}\n","export type MoneySystem = 'IN' | 'INTL';\n\nexport interface MoneyResult {\n amount: string;\n labelKey: string;\n}\n\ninterface Threshold {\n min: number;\n labelKey: string;\n overflowAt: number;\n}\n\nconst IN_THRESHOLDS: Threshold[] = [\n { min: 1_00_00_000, labelKey: 'cr', overflowAt: Infinity },\n { min: 1_00_000, labelKey: 'l', overflowAt: 100 },\n { min: 1_000, labelKey: 'k', overflowAt: 100 },\n];\n\nconst INTL_THRESHOLDS: Threshold[] = [\n { min: 1_000_000_000_000, labelKey: 't', overflowAt: Infinity },\n { min: 1_000_000_000, labelKey: 'b', overflowAt: 1_000 },\n { min: 1_000_000, labelKey: 'm', overflowAt: 1_000 },\n { min: 1_000, labelKey: 'k', overflowAt: 1_000 },\n];\n\n/**\n * Formats a non-negative finite number into a compact denomination result.\n * @param value Must be a non-negative finite number. Negative values and NaN\n * should be handled by the caller before invoking this function.\n */\nexport const formatMoney = (\n value: number,\n system: MoneySystem\n): MoneyResult => {\n const thresholds = system === 'IN' ? IN_THRESHOLDS : INTL_THRESHOLDS;\n\n for (let i = 0; i < thresholds.length; i++) {\n const { min, labelKey, overflowAt } = thresholds[i];\n if (value >= min) {\n const rounded = parseFloat((value / min).toFixed(1));\n if (rounded >= overflowAt && i > 0) {\n const higher = thresholds[i - 1];\n return {\n amount: parseFloat((value / higher.min).toFixed(1)).toString(),\n labelKey: higher.labelKey,\n };\n }\n return { amount: rounded.toString(), labelKey };\n }\n }\n\n return { amount: parseFloat(value.toFixed(2)).toString(), labelKey: '' };\n};\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../services/translate';\nimport { formatMoney, MoneySystem } from './money.fn';\n\n@Pipe({\n name: 'money',\n pure: false,\n})\nexport class MoneyPipe implements PipeTransform {\n private readonly translateService = inject(TranslateService);\n\n transform(\n value: number | undefined | null,\n system: MoneySystem = 'IN',\n symbol = '₹',\n forceSign = false\n ): string {\n if (value == null || isNaN(value)) return '';\n if (value === 0) return `${symbol}0`;\n\n const isNegative = value < 0;\n const absValue = Math.abs(value);\n const { amount, labelKey } = formatMoney(absValue, system);\n const label = labelKey\n ? ` ${this.translateService.translate(labelKey)}`\n : '';\n\n const sign = isNegative ? '-' : forceSign ? '+' : '';\n return `${sign}${symbol}${amount}${label}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Renders a number already expressed in percent units as a `%` reading —\n * `42` becomes `42.00%`, never `4200%`. A ratio is the caller's to multiply,\n * the way `MoneyPipe` takes an amount rather than a currency object.\n *\n * Two decimals by default: a percentage carries the fraction that separates\n * two near-equal readings, and a caller wanting the whole number asks for\n * `decimals: 0`.\n *\n * Pure, unlike the other three: it reads no language and no clock, so its\n * output depends on its arguments alone.\n */\n@Pipe({\n name: 'percentage',\n})\nexport class PercentagePipe implements PipeTransform {\n transform(\n value: number | undefined | null,\n decimals = 2,\n forceSign = false\n ): string {\n if (value == null || isNaN(value)) return '';\n\n const digits = Math.max(0, Math.trunc(decimals));\n const rendered = Math.abs(value).toFixed(digits);\n // A rounded-to-zero negative would otherwise print `-0%`.\n const isNegative = value < 0 && Number(rendered) !== 0;\n\n const sign = isNegative\n ? '-'\n : forceSign && Number(rendered) !== 0\n ? '+'\n : '';\n return `${sign}${rendered}%`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Reads a number's sign as a colour — `success` above zero, `error` below — for\n * the `color` input `m-text-output` resolves against the active theme, so a\n * gain and a loss follow the theme rather than freezing one theme's hex.\n *\n * Zero, `null`, `undefined` and `NaN` answer `undefined`: no colour is the\n * component's own default, and a flat reading is neither a gain nor a loss.\n *\n * Pure, like `PercentagePipe`: its output depends on its arguments alone.\n */\n@Pipe({\n name: 'signColor',\n})\nexport class SignColorPipe implements PipeTransform {\n transform(\n value: number | undefined | null,\n positive = 'success',\n negative = 'error'\n ): string | undefined {\n if (value == null || isNaN(value) || value === 0) return undefined;\n return value > 0 ? positive : negative;\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../services/translate';\nimport { formatMoney, MoneySystem } from './money.fn';\n\n/**\n * Renders a large number as a compact denominated reading — `12500` becomes\n * `12.5 k`, `1250000` becomes `12.5 l` (or `1.3 m` on the `INTL` ladder).\n * `MoneyPipe` without the currency symbol: a count of views, rows or users is\n * no amount of money, but it climbs the same thresholds.\n *\n * Named `compactNumber` rather than `number` so it never collides with\n * Angular's own `DecimalPipe` in a template that imports both.\n *\n * Impure for `MoneyPipe`'s reason: the denomination label is a translation key\n * resolved in the active language.\n */\n@Pipe({\n name: 'compactNumber',\n pure: false,\n})\nexport class CompactNumberPipe implements PipeTransform {\n private readonly translateService = inject(TranslateService);\n\n transform(\n value: number | undefined | null,\n system: MoneySystem = 'IN',\n forceSign = false\n ): string {\n if (value == null || isNaN(value)) return '';\n if (value === 0) return '0';\n\n const { amount, labelKey } = formatMoney(Math.abs(value), system);\n // Below the first threshold a tiny value can still round to `0`.\n if (Number(amount) === 0) return '0';\n\n const label = labelKey\n ? ` ${this.translateService.translate(labelKey)}`\n : '';\n const sign = value < 0 ? '-' : forceSign ? '+' : '';\n return `${sign}${amount}${label}`;\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { HttpService } from '../services/http';\n\n@Pipe({\n name: 'assetUrl',\n})\nexport class AssetUrlPipe implements PipeTransform {\n private readonly http = inject(HttpService);\n\n transform(value: string | null | undefined): string {\n return this.http.getAssetUrl(value);\n }\n}\n","import { Config } from '../../../type/config/config-type';\n\nexport type SectionTableAlign = 'left' | 'center' | 'right';\n\n/** What a sorting column compares its values as. */\nexport type SectionTableDataType = 'text' | 'number' | 'date';\n\n/**\n * Which way a SectionTable sorts. An enum rather than a union so a generated\n * Screen keeping the direction keeps it as this vocabulary, the way it keeps\n * the column as its SortEnum (m-one-ui ADR 0203). Its values are the words the\n * union always held, so a stored or compared `'asc'` still reads the same.\n */\nexport enum SectionTableSortDirection {\n Asc = 'asc',\n Desc = 'desc',\n}\n\n/**\n * A SectionTable's look. It never draws a panel border: `zebra` shades every\n * other row, `compact` and `spacious` tighten or loosen the cell padding,\n * `border` draws a thick rule along its top and a thinner one along its\n * bottom.\n */\nexport type SectionTableVariant =\n | 'default'\n | 'zebra'\n | 'compact'\n | 'spacious'\n | 'border';\n\nexport const SECTION_TABLE_VARIANTS: readonly SectionTableVariant[] = [\n 'default',\n 'zebra',\n 'compact',\n 'spacious',\n 'border',\n];\n\n/**\n * One entry in a SectionTable's configured heading (GLOSSARY.md\n * SectionTableColumn). The cells beneath it line up by position, so nothing\n * here says how a cell renders — a cell renders what was put in it.\n *\n * `Id` is the vocabulary of column ids — `string` unless a caller narrows it.\n * A generated Screen narrows it to the enum of its sorting columns' ids, so\n * the `sortChange` it binds already carries that enum (m-one-ui ADR 0203).\n */\nexport type SectionTableColumn<Id extends string = string> = {\n /**\n * The column's position when unset. A sorting column's `id` is the key of\n * the row it sorts by, and must be written (m-one-ui ADR 0148).\n */\n id?: Id;\n /** A translation key. */\n label?: string;\n align?: SectionTableAlign;\n /** 1–12: its share of the table's width. Unset columns divide what is left. */\n span?: number;\n sortable?: boolean;\n dataType?: SectionTableDataType;\n /**\n * The rows start sorted by this column. Needs a written `id`, as `sortable`\n * does; the first such column wins.\n */\n defaultSort?: boolean;\n /** The default sort's direction: ascending when set, descending when not. */\n ascending?: boolean;\n /** Freezes this column and every column before it to the left edge. */\n freeze?: boolean;\n /** Starts folded, with a toggle in its heading (GLOSSARY.md Squeeze). */\n squeeze?: boolean;\n};\n\n/** The sort in force: which column, and which way. */\nexport type SectionTableSort<Id extends string = string> = {\n id: Id;\n direction: SectionTableSortDirection;\n dataType?: SectionTableDataType;\n};\n\nexport type SectionTableConfig<Id extends string = string> = Config & {\n columns?: SectionTableColumn<Id>[];\n sticky?: boolean;\n /** 1em outside the table, above and below — beyond a `border` rule. */\n margin?: boolean;\n variant?: SectionTableVariant;\n};\n","import {\n SectionTableColumn,\n SectionTableSort,\n SectionTableSortDirection,\n} from '../../type/section-table';\n\n/** A column's id, falling back to its position (m-one-ui ADR 0148). */\nexport const sectionTableColumnId = <Id extends string>(\n column: SectionTableColumn<Id>,\n index: number\n): Id | string => column.id || String(index);\n\n/**\n * Each column's width as a CSS length: a `span` is its twelfth-share of the\n * table, and a column without one gets `undefined` so the `<table>` divides\n * what the spanned columns left.\n */\nexport const sectionTableColumnWidths = (\n columns: readonly SectionTableColumn[]\n): (string | undefined)[] =>\n columns.map(({ span }) => {\n if (span == null || !Number.isFinite(span)) return undefined;\n const clamped = Math.min(12, Math.max(1, Math.round(span)));\n return `${(clamped * 100) / 12}%`;\n });\n\n/**\n * How many leading columns are frozen: freezing a column freezes every column\n * before it, because a frozen column pinned past an unfrozen one would slide\n * over it.\n */\nexport const sectionTableFrozenCount = (\n columns: readonly SectionTableColumn[]\n): number => {\n let last = -1;\n columns.forEach((column, i) => {\n if (column.freeze) last = i;\n });\n return last + 1;\n};\n\n/** The next sort after a click on the column with `id`. */\nexport const nextSectionTableSort = <Id extends string>(\n current: SectionTableSort<Id> | null,\n id: Id,\n dataType: SectionTableSort['dataType']\n): SectionTableSort<Id> =>\n current?.id === id\n ? {\n id,\n dataType,\n direction:\n current.direction === SectionTableSortDirection.Asc\n ? SectionTableSortDirection.Desc\n : SectionTableSortDirection.Asc,\n }\n : { id, dataType, direction: SectionTableSortDirection.Asc };\n\n/** The sort a table starts with: its first `defaultSort` column's, if any. */\nexport const defaultSectionTableSort = <Id extends string>(\n columns: readonly SectionTableColumn<Id>[]\n): SectionTableSort<Id> | null => {\n const column = columns.find((one) => one.defaultSort);\n // A default sort needs a written id, as a sorting column does (ADR 0148):\n // one left positional names no key of the row, and sorts by nothing.\n if (!column?.id) return null;\n return {\n id: column.id,\n dataType: column.dataType,\n direction: column.ascending\n ? SectionTableSortDirection.Asc\n : SectionTableSortDirection.Desc,\n };\n};\n\nconst readPath =(row: unknown, path: string): unknown =>\n path\n .split('.')\n .reduce<unknown>(\n (value, key) =>\n value != null && typeof value === 'object'\n ? (value as Record<string, unknown>)[key]\n : undefined,\n row\n );\n\nconst comparable = (\n value: unknown,\n dataType: SectionTableSort['dataType']\n): number | string | undefined => {\n if (value == null || value === '') return undefined;\n if (dataType === 'number') {\n const n = typeof value === 'number' ? value : Number(value);\n return Number.isNaN(n) ? undefined : n;\n }\n if (dataType === 'date') {\n const t =\n value instanceof Date ? value.getTime() : new Date(String(value)).getTime();\n return Number.isNaN(t) ? undefined : t;\n }\n return String(value).toLocaleLowerCase();\n};\n\n/**\n * A copy of `rows` ordered by `sort`, the input untouched. Missing values sink\n * to the end in either direction — an empty cell is not the smallest value.\n */\nexport const sortSectionTableRows = <T>(\n rows: readonly T[] | null | undefined,\n sort: SectionTableSort | null | undefined\n): T[] => {\n const list = [...(rows ?? [])];\n if (!sort) return list;\n const sign = sort.direction === SectionTableSortDirection.Asc ? 1 : -1;\n return list\n .map((row, i) => ({ row, i, key: comparable(readPath(row, sort.id), sort.dataType) }))\n .sort((a, b) => {\n if (a.key === undefined || b.key === undefined) {\n if (a.key === b.key) return a.i - b.i;\n return a.key === undefined ? 1 : -1;\n }\n const diff =\n typeof a.key === 'number' && typeof b.key === 'number'\n ? a.key - b.key\n : String(a.key).localeCompare(String(b.key));\n return diff === 0 ? a.i - b.i : diff * sign;\n })\n .map(({ row }) => row);\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { SectionTableSort } from '../ui/section/type/section-table';\nimport { sortSectionTableRows } from '../ui/section/lib/functions/section-table';\n\n/**\n * A SectionTable's sort applied to a Repeat's collection:\n * `@for (row of (rows | sectionTableSort: table.sort()); …)`. The `@for` is the\n * Repeat's, not the table's, so the table reorders a collection it does not\n * own through this and nothing else (m-one-ui ADR 0148).\n *\n * Pure: a new order needs a new sort or a new collection, never a mutated one.\n */\n@Pipe({\n name: 'sectionTableSort',\n})\nexport class SectionTableSortPipe implements PipeTransform {\n transform<T>(\n rows: readonly T[] | null | undefined,\n sort: SectionTableSort | null | undefined\n ): T[] {\n return sortSectionTableRows(rows, sort);\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { TranslatePipe } from '../../../pipe';\n\n@Component({\n selector: 'm-label',\n template: `\n <label\n [class.required]=\"required()\"\n [class.disabled]=\"disabled()\"\n [attr.for]=\"for() || null\"\n >\n @if (color()) {\n <span class=\"label__swatch\" [style.background]=\"color()\"></span>\n }\n @if (noTranslate()) {\n {{ placeholder() }}\n } @else {\n {{ placeholder() | translate: params() }}\n }\n </label>\n `,\n imports: [TranslatePipe],\n styleUrl: './label.sass',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LabelComponent {\n for = input<string>();\n placeholder = input<string>();\n // The label's [MessageVariable] values — a Field whose label is a sentence\n // with a datum in it (m-one-ui ADR 0066).\n params = input<Record<string, string> | undefined>();\n required = input<boolean>();\n disabled = input<boolean>();\n color = input<string>();\n // Authored text rather than an i18n key — an option label mapped from a row\n // the app holds, which the dictionary has never heard of.\n noTranslate = input<boolean>();\n}\n\n"],"mappings":"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"}