@magmonium/one 0.4.97 → 0.4.99
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/fesm2022/{magmonium-one-base-dropdown-2hgXcmhE.mjs → magmonium-one-base-dropdown-CmUfiOAb.mjs} +3 -3
- package/fesm2022/{magmonium-one-base-dropdown-2hgXcmhE.mjs.map → magmonium-one-base-dropdown-CmUfiOAb.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-checkbox-a3Dwmu2X.mjs → magmonium-one-checkbox-BXNvtkzo.mjs} +2 -2
- package/fesm2022/{magmonium-one-checkbox-a3Dwmu2X.mjs.map → magmonium-one-checkbox-BXNvtkzo.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-image-editor-BLqlV2ki.mjs → magmonium-one-image-editor-BV0x-SA3.mjs} +2 -2
- package/fesm2022/{magmonium-one-image-editor-BLqlV2ki.mjs.map → magmonium-one-image-editor-BV0x-SA3.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-label-Dkis_mGP.mjs → magmonium-one-label-D-wnA_Fl.mjs} +3 -3
- package/fesm2022/magmonium-one-label-D-wnA_Fl.mjs.map +1 -0
- package/fesm2022/{magmonium-one-multi-range-DL_JlKVL.mjs → magmonium-one-multi-range-C0S7udf5.mjs} +2 -2
- package/fesm2022/{magmonium-one-multi-range-DL_JlKVL.mjs.map → magmonium-one-multi-range-C0S7udf5.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-otp-COE0X33y.mjs → magmonium-one-otp-CeSz8ZZ2.mjs} +2 -2
- package/fesm2022/{magmonium-one-otp-COE0X33y.mjs.map → magmonium-one-otp-CeSz8ZZ2.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-password-CvgWZkAX.mjs → magmonium-one-password-BKdXAZ_p.mjs} +2 -2
- package/fesm2022/{magmonium-one-password-CvgWZkAX.mjs.map → magmonium-one-password-BKdXAZ_p.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-radio-DPz4-SAJ.mjs → magmonium-one-radio-DlS31qJG.mjs} +2 -2
- package/fesm2022/{magmonium-one-radio-DPz4-SAJ.mjs.map → magmonium-one-radio-DlS31qJG.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-range-DlQfnl9p.mjs → magmonium-one-range-CR8go24u.mjs} +2 -2
- package/fesm2022/{magmonium-one-range-DlQfnl9p.mjs.map → magmonium-one-range-CR8go24u.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-text-vDPAhn74.mjs → magmonium-one-text-4zWYsKpH.mjs} +2 -2
- package/fesm2022/{magmonium-one-text-vDPAhn74.mjs.map → magmonium-one-text-4zWYsKpH.mjs.map} +1 -1
- package/fesm2022/magmonium-one.mjs +28 -27
- package/fesm2022/magmonium-one.mjs.map +1 -1
- package/package.json +1 -1
- package/types/magmonium-one.d.ts +21 -21
- package/fesm2022/magmonium-one-label-Dkis_mGP.mjs.map +0 -1
package/package.json
CHANGED
package/types/magmonium-one.d.ts
CHANGED
|
@@ -489,7 +489,7 @@ interface MoneyResult {
|
|
|
489
489
|
declare const formatMoney: (value: number, system: MoneySystem) => MoneyResult;
|
|
490
490
|
export declare class MoneyPipe implements PipeTransform {
|
|
491
491
|
private readonly translateService;
|
|
492
|
-
transform(value: number | undefined | null, system?: MoneySystem, symbol?: string, forceSign?: boolean): string;
|
|
492
|
+
transform(value: number | undefined | null, system?: MoneySystem, symbol?: string, forceSign?: boolean, mod?: boolean): string;
|
|
493
493
|
static ɵfac: i0.ɵɵFactoryDeclaration<MoneyPipe, never>;
|
|
494
494
|
static ɵpipe: i0.ɵɵPipeDeclaration<MoneyPipe, "money", true>;
|
|
495
495
|
}
|
|
@@ -4968,7 +4968,7 @@ export declare class SectionFilterGroupComponent {
|
|
|
4968
4968
|
readonly paddingX: import("@angular/core").InputSignal<boolean | undefined>;
|
|
4969
4969
|
readonly paddingY: import("@angular/core").InputSignal<boolean | undefined>;
|
|
4970
4970
|
readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
|
|
4971
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
4971
|
+
readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
|
|
4972
4972
|
readonly config: import("@angular/core").InputSignal<SectionFilterGroupConfig | undefined>;
|
|
4973
4973
|
/**
|
|
4974
4974
|
* The whole group's selection, keyed by each Filter's `name` — one key per
|
|
@@ -4986,7 +4986,7 @@ export declare class SectionFilterGroupComponent {
|
|
|
4986
4986
|
protected readonly resolvedPadding: import("@angular/core").Signal<boolean>;
|
|
4987
4987
|
protected readonly resolvedPaddingX: import("@angular/core").Signal<boolean>;
|
|
4988
4988
|
protected readonly resolvedPaddingY: import("@angular/core").Signal<boolean>;
|
|
4989
|
-
protected readonly resolvedAlign: import("@angular/core").Signal<"
|
|
4989
|
+
protected readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right">;
|
|
4990
4990
|
protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
|
|
4991
4991
|
protected readonly noBorder: import("@angular/core").Signal<boolean>;
|
|
4992
4992
|
/**
|
|
@@ -5165,7 +5165,7 @@ export declare class SectionStepperComponent implements OnDestroy {
|
|
|
5165
5165
|
export declare class SectionBadgesComponent {
|
|
5166
5166
|
readonly wrap: import("@angular/core").InputSignal<boolean>;
|
|
5167
5167
|
readonly border: import("@angular/core").InputSignal<boolean>;
|
|
5168
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
5168
|
+
readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
|
|
5169
5169
|
private readonly sectionContext;
|
|
5170
5170
|
protected readonly hasBorder: import("@angular/core").Signal<boolean>;
|
|
5171
5171
|
static ɵfac: i0.ɵɵFactoryDeclaration<SectionBadgesComponent, never>;
|
|
@@ -5313,7 +5313,7 @@ export declare class SectionPaginationComponent {
|
|
|
5313
5313
|
* Entries that are not positive numbers drop rather than throw.
|
|
5314
5314
|
*/
|
|
5315
5315
|
readonly perPageOptions: import("@angular/core").InputSignal<string | undefined>;
|
|
5316
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
5316
|
+
readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
|
|
5317
5317
|
readonly showPerPage: import("@angular/core").InputSignal<boolean>;
|
|
5318
5318
|
/** Hides the band outright once everything fits one page. */
|
|
5319
5319
|
readonly hideOnSinglePage: import("@angular/core").InputSignal<boolean>;
|
|
@@ -5651,7 +5651,7 @@ export declare class SectionComponent extends ConfigComponent<SectionConfig> {
|
|
|
5651
5651
|
readonly align: import("@angular/core").InputSignal<SectionAlign | undefined>;
|
|
5652
5652
|
readonly alignX: import("@angular/core").InputSignal<GridAlignX | undefined>;
|
|
5653
5653
|
readonly alignY: import("@angular/core").InputSignal<GridAlignY | undefined>;
|
|
5654
|
-
readonly size: import("@angular/core").InputSignal<
|
|
5654
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
|
|
5655
5655
|
private readonly parentSize;
|
|
5656
5656
|
readonly resolvedSize: import("@angular/core").Signal<Size>;
|
|
5657
5657
|
protected readonly sizeLength: import("@angular/core").Signal<string>;
|
|
@@ -5822,8 +5822,8 @@ export declare class SectionHeaderComponent {
|
|
|
5822
5822
|
readonly visibilityRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
|
|
5823
5823
|
readonly disableRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
|
|
5824
5824
|
readonly extraData: import("@angular/core").InputSignal<unknown>;
|
|
5825
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
5826
|
-
readonly alignment: import("@angular/core").Signal<"
|
|
5825
|
+
readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
|
|
5826
|
+
readonly alignment: import("@angular/core").Signal<"center" | "left" | "right">;
|
|
5827
5827
|
readonly badge: import("@angular/core").InputSignal<BadgeCount | undefined>;
|
|
5828
5828
|
readonly showBack: import("@angular/core").InputSignal<boolean>;
|
|
5829
5829
|
readonly actionButton: import("@angular/core").InputSignal<string | undefined>;
|
|
@@ -5842,7 +5842,7 @@ export declare class SectionHeaderComponent {
|
|
|
5842
5842
|
protected readonly sidepanel: import("@angular/core").Signal<boolean>;
|
|
5843
5843
|
protected readonly noBorder: import("@angular/core").Signal<boolean>;
|
|
5844
5844
|
protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
|
|
5845
|
-
protected readonly boxAlign: import("@angular/core").Signal<"
|
|
5845
|
+
protected readonly boxAlign: import("@angular/core").Signal<"center" | "left" | "right">;
|
|
5846
5846
|
protected readonly iconBox: import("@angular/core").Signal<string>;
|
|
5847
5847
|
protected readonly stickyOn: import("@angular/core").Signal<boolean>;
|
|
5848
5848
|
protected readonly isSticky: import("@angular/core").Signal<boolean>;
|
|
@@ -5990,7 +5990,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
|
|
|
5990
5990
|
readonly vertical: import("@angular/core").InputSignal<boolean | undefined>;
|
|
5991
5991
|
readonly align: import("@angular/core").InputSignal<ConfigAlign>;
|
|
5992
5992
|
readonly variant: import("@angular/core").InputSignal<"spaced" | "joined" | undefined>;
|
|
5993
|
-
readonly size: import("@angular/core").InputSignal<
|
|
5993
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
|
|
5994
5994
|
readonly fullWidth: import("@angular/core").InputSignal<boolean | undefined>;
|
|
5995
5995
|
private readonly parentSize;
|
|
5996
5996
|
readonly resolvedSize: import("@angular/core").Signal<Size>;
|
|
@@ -5998,7 +5998,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
|
|
|
5998
5998
|
protected readonly resolvedFullWidth: import("@angular/core").Signal<boolean>;
|
|
5999
5999
|
protected readonly resolvedVertical: import("@angular/core").Signal<boolean>;
|
|
6000
6000
|
protected readonly resolvedVariant: import("@angular/core").Signal<"spaced" | "joined">;
|
|
6001
|
-
protected readonly resolvedAlign: import("@angular/core").Signal<"
|
|
6001
|
+
protected readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right" | "bottom" | "top">;
|
|
6002
6002
|
static ɵfac: i0.ɵɵFactoryDeclaration<SectionButtonGroupComponent, never>;
|
|
6003
6003
|
static ɵcmp: i0.ɵɵComponentDeclaration<SectionButtonGroupComponent, "m-section-button-group", never, {
|
|
6004
6004
|
"vertical": {
|
|
@@ -6030,7 +6030,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
|
|
|
6030
6030
|
}
|
|
6031
6031
|
export declare class SectionFooterComponent {
|
|
6032
6032
|
readonly sticky: import("@angular/core").InputSignal<boolean>;
|
|
6033
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
6033
|
+
readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
|
|
6034
6034
|
readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
|
|
6035
6035
|
readonly fullWidth: import("@angular/core").InputSignal<boolean>;
|
|
6036
6036
|
private readonly isDesignMode;
|
|
@@ -6041,7 +6041,7 @@ export declare class SectionFooterComponent {
|
|
|
6041
6041
|
protected readonly sidepanel: import("@angular/core").Signal<boolean>;
|
|
6042
6042
|
protected readonly noBorder: import("@angular/core").Signal<boolean>;
|
|
6043
6043
|
protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
|
|
6044
|
-
protected readonly boxAlign: import("@angular/core").Signal<"
|
|
6044
|
+
protected readonly boxAlign: import("@angular/core").Signal<"center" | "left" | "right">;
|
|
6045
6045
|
static ɵfac: i0.ɵɵFactoryDeclaration<SectionFooterComponent, never>;
|
|
6046
6046
|
static ɵcmp: i0.ɵɵComponentDeclaration<SectionFooterComponent, "m-section-footer", never, {
|
|
6047
6047
|
"sticky": {
|
|
@@ -8590,7 +8590,7 @@ declare class ColorPickerBoxComponent implements AfterViewInit, OnDestroy {
|
|
|
8590
8590
|
protected readonly _eyedropperConfig: import("@magmonium/one").Button;
|
|
8591
8591
|
protected readonly _headerContextMenu: ContextMenu;
|
|
8592
8592
|
protected readonly themeSwatches: import("@angular/core").Signal<{
|
|
8593
|
-
key: "
|
|
8593
|
+
key: "text" | "error" | "focus" | "mm" | "mmLite" | "mmDark" | "background" | "border" | "textSecondary" | "errorLight" | "warning" | "successLite" | "success" | "highlight" | "wealth";
|
|
8594
8594
|
color: string;
|
|
8595
8595
|
}[]>;
|
|
8596
8596
|
hue: import("@angular/core").WritableSignal<number>;
|
|
@@ -9789,17 +9789,17 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
|
|
|
9789
9789
|
protected readonly resolvesConfigAsset = false;
|
|
9790
9790
|
readonly variant: import("@angular/core").InputSignal<string | undefined>;
|
|
9791
9791
|
readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
|
|
9792
|
-
readonly heightMode: import("@angular/core").InputSignal<"
|
|
9792
|
+
readonly heightMode: import("@angular/core").InputSignal<"fixed" | "full" | undefined>;
|
|
9793
9793
|
readonly maxHeight: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9794
9794
|
readonly height: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9795
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
9795
|
+
readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
|
|
9796
9796
|
readonly padding: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9797
9797
|
readonly paddingX: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9798
9798
|
readonly paddingY: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9799
9799
|
readonly margin: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9800
9800
|
readonly marginX: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9801
9801
|
readonly marginY: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9802
|
-
readonly size: import("@angular/core").InputSignal<
|
|
9802
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
|
|
9803
9803
|
readonly autofocus: import("@angular/core").InputSignal<boolean>;
|
|
9804
9804
|
data: import("@angular/core").InputSignal<T | undefined>;
|
|
9805
9805
|
readonly dataChange: import("@angular/core").OutputEmitterRef<T>;
|
|
@@ -9844,7 +9844,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
|
|
|
9844
9844
|
protected readonly handleSubmit: (event: Event) => void;
|
|
9845
9845
|
readonly resolvedSize: import("@angular/core").Signal<Size>;
|
|
9846
9846
|
protected readonly sizeLength: import("@angular/core").Signal<string | null>;
|
|
9847
|
-
readonly resolvedAlign: import("@angular/core").Signal<"
|
|
9847
|
+
readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right">;
|
|
9848
9848
|
readonly resolvedVariant: import("@angular/core").Signal<string | undefined>;
|
|
9849
9849
|
readonly resolvedMaxWidth: import("@angular/core").Signal<string | number | undefined>;
|
|
9850
9850
|
private readonly resolvedPadding;
|
|
@@ -9856,7 +9856,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
|
|
|
9856
9856
|
readonly resolvedMinHeight: import("@angular/core").Signal<string | undefined>;
|
|
9857
9857
|
readonly resolvedMinWidth: import("@angular/core").Signal<string | undefined>;
|
|
9858
9858
|
readonly resolvedMaxHeight: import("@angular/core").Signal<string | number | undefined>;
|
|
9859
|
-
readonly resolvedHeightMode: import("@angular/core").Signal<"
|
|
9859
|
+
readonly resolvedHeightMode: import("@angular/core").Signal<"fixed" | "full" | undefined>;
|
|
9860
9860
|
readonly isFullHeight: import("@angular/core").Signal<boolean>;
|
|
9861
9861
|
readonly cssMaxHeight: import("@angular/core").Signal<string | undefined>;
|
|
9862
9862
|
constructor();
|
|
@@ -12449,7 +12449,7 @@ export declare class PriceLadderComponent {
|
|
|
12449
12449
|
protected readonly current: import("@angular/core").Signal<number | null>;
|
|
12450
12450
|
/** The forecast point: a `forecast` mark, else the `target` input. */
|
|
12451
12451
|
private readonly targetPoint;
|
|
12452
|
-
protected readonly shownAs: import("@angular/core").Signal<"
|
|
12452
|
+
protected readonly shownAs: import("@angular/core").Signal<"line" | "list">;
|
|
12453
12453
|
/** Every drawable mark, the `current` and `forecast` stand-ins included. */
|
|
12454
12454
|
private readonly everyMark;
|
|
12455
12455
|
/** The reference levels drawn as ticks and labels. */
|
|
@@ -13543,7 +13543,7 @@ export type DocAiPhase = 'idle' | 'asking' | 'question' | 'outline' | 'writing'
|
|
|
13543
13543
|
*/
|
|
13544
13544
|
export declare class DocEditorComponent implements ControlValueAccessor {
|
|
13545
13545
|
protected readonly groups: readonly import("@magmonium/one").DocToolbarGroup[];
|
|
13546
|
-
protected readonly icons: Record<"
|
|
13546
|
+
protected readonly icons: Record<"code" | "link" | "table" | "strike" | "list" | "bold" | "heading" | "italic" | "quote", string>;
|
|
13547
13547
|
protected readonly docActionKey: typeof docActionKey;
|
|
13548
13548
|
private readonly translate;
|
|
13549
13549
|
protected readonly value: import("@angular/core").WritableSignal<string>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"magmonium-one-label-Dkis_mGP.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/pipe/to-list.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 { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * One value as the one-item list a collection input holds — `id | toList`\n * hands `[id]` to an input typed `string[]`. An absent value is an empty list,\n * never `[undefined]`.\n *\n * A pipe rather than an inline `[id]`: an array literal in a template binding\n * is what `no-inline-config-template` rejects (ADR 0010). Pure, so the list is\n * rebuilt only when the value changes and the input sees a stable reference.\n */\n@Pipe({\n name: 'toList',\n})\nexport class ToListPipe implements PipeTransform {\n transform<T>(value: T | undefined | null): T[] {\n return value == null ? [] : [value];\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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"}
|