@magmonium/one 0.4.85 → 0.4.87
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-9iIR64ME.mjs → magmonium-one-base-dropdown-2hgXcmhE.mjs} +4 -4
- package/fesm2022/{magmonium-one-base-dropdown-9iIR64ME.mjs.map → magmonium-one-base-dropdown-2hgXcmhE.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-button-DO7FTwuF.mjs → magmonium-one-button-C5dk4R_m.mjs} +9 -3
- package/fesm2022/magmonium-one-button-C5dk4R_m.mjs.map +1 -0
- package/fesm2022/{magmonium-one-directives-DM6J1Hvs.mjs → magmonium-one-directives-hJ7wkmQn.mjs} +2 -2
- package/fesm2022/{magmonium-one-directives-DM6J1Hvs.mjs.map → magmonium-one-directives-hJ7wkmQn.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-group-BsqCB8D2.mjs → magmonium-one-group-bRamdzPO.mjs} +3 -3
- package/fesm2022/{magmonium-one-group-BsqCB8D2.mjs.map → magmonium-one-group-bRamdzPO.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-header-CgOV_m7w.mjs → magmonium-one-header-BZzD8uTJ.mjs} +2 -2
- package/fesm2022/{magmonium-one-header-CgOV_m7w.mjs.map → magmonium-one-header-BZzD8uTJ.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-image-editor-B6eCXP9A.mjs → magmonium-one-image-editor-BLqlV2ki.mjs} +4 -4
- package/fesm2022/{magmonium-one-image-editor-B6eCXP9A.mjs.map → magmonium-one-image-editor-BLqlV2ki.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-menu-CsoiLhVg.mjs → magmonium-one-menu-CJjjxFfu.mjs} +5 -5
- package/fesm2022/{magmonium-one-menu-CsoiLhVg.mjs.map → magmonium-one-menu-CJjjxFfu.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-multi-range-RSLLKzLu.mjs → magmonium-one-multi-range-DL_JlKVL.mjs} +2 -2
- package/fesm2022/{magmonium-one-multi-range-RSLLKzLu.mjs.map → magmonium-one-multi-range-DL_JlKVL.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-password-CJBa8k1l.mjs → magmonium-one-password-CvgWZkAX.mjs} +2 -2
- package/fesm2022/{magmonium-one-password-CJBa8k1l.mjs.map → magmonium-one-password-CvgWZkAX.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-range-CqOSrC0Y.mjs → magmonium-one-range-DlQfnl9p.mjs} +2 -2
- package/fesm2022/{magmonium-one-range-CqOSrC0Y.mjs.map → magmonium-one-range-DlQfnl9p.mjs.map} +1 -1
- package/fesm2022/{magmonium-one-selector-CeqlecBa.mjs → magmonium-one-selector-BK48N5us.mjs} +4 -1
- package/fesm2022/{magmonium-one-selector-CeqlecBa.mjs.map → magmonium-one-selector-BK48N5us.mjs.map} +1 -1
- package/fesm2022/magmonium-one.mjs +79 -22
- package/fesm2022/magmonium-one.mjs.map +1 -1
- package/package.json +1 -1
- package/types/magmonium-one.d.ts +57 -22
- package/fesm2022/magmonium-one-button-DO7FTwuF.mjs.map +0 -1
package/package.json
CHANGED
package/types/magmonium-one.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Observable } from "rxjs";
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import { AfterContentInit, AfterViewChecked, AfterViewInit, ApplicationConfig, ApplicationRef, Binding, ChangeDetectorRef, ComponentRef, ElementRef, EnvironmentProviders, EventEmitter, InjectionToken, Injector, InputSignal, ModelSignal, OnDestroy, OnInit, PipeTransform, Provider, Signal, StaticProvider, TemplateRef, Type, ViewContainerRef, WritableSignal } from "@angular/core";
|
|
5
5
|
import { Theme, ThemeColor, ThemeList, WebComponentConfig as WebComponentConfig$1 } from "@magmonium/cli";
|
|
6
|
-
import { ActivatedRouteSnapshot, CanActivateFn, Params, Route, Router, RouterStateSnapshot, Routes, UrlMatcher, UrlSegment, UrlSerializer, UrlTree } from "@angular/router";
|
|
6
|
+
import { ActivatedRouteSnapshot, CanActivateFn, Params, Route, Router, RouterLink, RouterStateSnapshot, Routes, UrlMatcher, UrlSegment, UrlSerializer, UrlTree } from "@angular/router";
|
|
7
7
|
import { FieldTree, FormCheckboxControl, FormValueControl, SchemaOrSchemaFn, SchemaPath, ValidationError, WithOptionalFieldTree } from "@angular/forms/signals";
|
|
8
8
|
import { ControlValueAccessor } from "@angular/forms";
|
|
9
9
|
import { SafeStyle } from "@angular/platform-browser";
|
|
@@ -2948,6 +2948,8 @@ export declare class ButtonComponent extends ReactiveElementComponent<Button> {
|
|
|
2948
2948
|
protected element: import("@angular/core").Signal<ElementRef<any> | undefined>;
|
|
2949
2949
|
protected readonly className: import("@angular/core").Signal<string>;
|
|
2950
2950
|
private readonly navRef;
|
|
2951
|
+
protected readonly resolvesConfigAsset: boolean;
|
|
2952
|
+
readonly routerLinkRef: RouterLink | null;
|
|
2951
2953
|
private readonly sectionForm;
|
|
2952
2954
|
protected readonly isFormSubmit: import("@angular/core").Signal<boolean>;
|
|
2953
2955
|
protected readonly isDisabled: import("@angular/core").Signal<boolean>;
|
|
@@ -3630,6 +3632,10 @@ export declare class ToggleButtonComponent extends ConfigComponent<ButtonGroup>
|
|
|
3630
3632
|
export declare class ActionComponent extends ButtonGroupComponent {
|
|
3631
3633
|
readonly sticky: import("@angular/core").InputSignal<boolean>;
|
|
3632
3634
|
readonly isStuck: import("@angular/core").WritableSignal<boolean>;
|
|
3635
|
+
private readonly projected;
|
|
3636
|
+
private readonly projectedButtons;
|
|
3637
|
+
private readonly projectedLinkTrees;
|
|
3638
|
+
private readonly sourceButtons;
|
|
3633
3639
|
readonly variant: import("@angular/core").InputSignal<"toggle" | undefined>;
|
|
3634
3640
|
readonly active: import("@angular/core").InputSignal<string | undefined>;
|
|
3635
3641
|
readonly renderIds: import("@angular/core").InputSignal<Record<string, string> | undefined>;
|
|
@@ -3639,7 +3645,8 @@ export declare class ActionComponent extends ButtonGroupComponent {
|
|
|
3639
3645
|
private readonly router;
|
|
3640
3646
|
private readonly route;
|
|
3641
3647
|
private readonly linkTrees;
|
|
3642
|
-
protected linkOf(button: Button): Button['routerLink'];
|
|
3648
|
+
protected linkOf(button: Button): Button['routerLink'] | UrlTree;
|
|
3649
|
+
isDisabled(name?: string): boolean | undefined;
|
|
3643
3650
|
private readonly linkActive;
|
|
3644
3651
|
private readonly isRouted;
|
|
3645
3652
|
protected readonly selected: import("@angular/core").Signal<string | undefined>;
|
|
@@ -3700,7 +3707,7 @@ export declare class ActionComponent extends ButtonGroupComponent {
|
|
|
3700
3707
|
"required": false;
|
|
3701
3708
|
"isSignal": true;
|
|
3702
3709
|
};
|
|
3703
|
-
}, {},
|
|
3710
|
+
}, {}, ["projected"], never, true, never>;
|
|
3704
3711
|
}
|
|
3705
3712
|
declare function deriveButtonClass(button?: Button): string;
|
|
3706
3713
|
export declare function isButtonName(name: string, button?: Button): boolean;
|
|
@@ -3718,6 +3725,22 @@ export declare function isButtonName(name: string, button?: Button): boolean;
|
|
|
3718
3725
|
*/
|
|
3719
3726
|
export declare function actionName<Name extends string>(button: Button | undefined, names: Record<string, Name>): Name | undefined;
|
|
3720
3727
|
declare function deriveGroupClass(group?: Partial<ButtonGroup>): string;
|
|
3728
|
+
/**
|
|
3729
|
+
* Published by `<m-action>` for the `<m-button>`s written inside it.
|
|
3730
|
+
*
|
|
3731
|
+
* A Button there is a description of a segment, never drawn itself: the bar
|
|
3732
|
+
* has no `ng-content`, reads each Button's resolved config off its instance and
|
|
3733
|
+
* draws its own `<button>` from it — which is what keeps the toggle, the
|
|
3734
|
+
* squeeze and the routed light working off one list. An `@if` around one
|
|
3735
|
+
* still takes it in and out of that list, because the bar's query follows the
|
|
3736
|
+
* Buttons that exist.
|
|
3737
|
+
*
|
|
3738
|
+
* The flag stops such a Button resolving a `buttons/<name>.yml` of its own:
|
|
3739
|
+
* the bar already resolves what an unlabelled Button is missing, and a named
|
|
3740
|
+
* segment that only ever rides on its tag would otherwise request a file that
|
|
3741
|
+
* was never written.
|
|
3742
|
+
*/
|
|
3743
|
+
declare const ACTION_BUTTON_HOST: InjectionToken<true>;
|
|
3721
3744
|
type GridAlignX = 'left' | 'center' | 'right';
|
|
3722
3745
|
type GridAlignY = 'top' | 'center' | 'bottom';
|
|
3723
3746
|
type ColVariant = 'noBorder' | 'withBorder';
|
|
@@ -4944,7 +4967,7 @@ export declare class SectionFilterGroupComponent {
|
|
|
4944
4967
|
readonly paddingX: import("@angular/core").InputSignal<boolean | undefined>;
|
|
4945
4968
|
readonly paddingY: import("@angular/core").InputSignal<boolean | undefined>;
|
|
4946
4969
|
readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
|
|
4947
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
4970
|
+
readonly align: import("@angular/core").InputSignal<"left" | "right" | "center" | undefined>;
|
|
4948
4971
|
readonly config: import("@angular/core").InputSignal<SectionFilterGroupConfig | undefined>;
|
|
4949
4972
|
/**
|
|
4950
4973
|
* The whole group's selection, keyed by each Filter's `name` — one key per
|
|
@@ -4962,7 +4985,7 @@ export declare class SectionFilterGroupComponent {
|
|
|
4962
4985
|
protected readonly resolvedPadding: import("@angular/core").Signal<boolean>;
|
|
4963
4986
|
protected readonly resolvedPaddingX: import("@angular/core").Signal<boolean>;
|
|
4964
4987
|
protected readonly resolvedPaddingY: import("@angular/core").Signal<boolean>;
|
|
4965
|
-
protected readonly resolvedAlign: import("@angular/core").Signal<"
|
|
4988
|
+
protected readonly resolvedAlign: import("@angular/core").Signal<"left" | "right" | "center">;
|
|
4966
4989
|
protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
|
|
4967
4990
|
protected readonly noBorder: import("@angular/core").Signal<boolean>;
|
|
4968
4991
|
/**
|
|
@@ -5141,7 +5164,7 @@ export declare class SectionStepperComponent implements OnDestroy {
|
|
|
5141
5164
|
export declare class SectionBadgesComponent {
|
|
5142
5165
|
readonly wrap: import("@angular/core").InputSignal<boolean>;
|
|
5143
5166
|
readonly border: import("@angular/core").InputSignal<boolean>;
|
|
5144
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
5167
|
+
readonly align: import("@angular/core").InputSignal<"left" | "right" | "center">;
|
|
5145
5168
|
private readonly sectionContext;
|
|
5146
5169
|
protected readonly hasBorder: import("@angular/core").Signal<boolean>;
|
|
5147
5170
|
static ɵfac: i0.ɵɵFactoryDeclaration<SectionBadgesComponent, never>;
|
|
@@ -5289,7 +5312,7 @@ export declare class SectionPaginationComponent {
|
|
|
5289
5312
|
* Entries that are not positive numbers drop rather than throw.
|
|
5290
5313
|
*/
|
|
5291
5314
|
readonly perPageOptions: import("@angular/core").InputSignal<string | undefined>;
|
|
5292
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
5315
|
+
readonly align: import("@angular/core").InputSignal<"left" | "right" | "center">;
|
|
5293
5316
|
readonly showPerPage: import("@angular/core").InputSignal<boolean>;
|
|
5294
5317
|
/** Hides the band outright once everything fits one page. */
|
|
5295
5318
|
readonly hideOnSinglePage: import("@angular/core").InputSignal<boolean>;
|
|
@@ -5797,8 +5820,8 @@ export declare class SectionHeaderComponent {
|
|
|
5797
5820
|
readonly visibilityRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
|
|
5798
5821
|
readonly disableRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
|
|
5799
5822
|
readonly extraData: import("@angular/core").InputSignal<unknown>;
|
|
5800
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
5801
|
-
readonly alignment: import("@angular/core").Signal<"
|
|
5823
|
+
readonly align: import("@angular/core").InputSignal<"left" | "right" | "center" | undefined>;
|
|
5824
|
+
readonly alignment: import("@angular/core").Signal<"left" | "right" | "center">;
|
|
5802
5825
|
readonly badge: import("@angular/core").InputSignal<BadgeCount | undefined>;
|
|
5803
5826
|
readonly showBack: import("@angular/core").InputSignal<boolean>;
|
|
5804
5827
|
readonly actionButton: import("@angular/core").InputSignal<string | undefined>;
|
|
@@ -5816,7 +5839,7 @@ export declare class SectionHeaderComponent {
|
|
|
5816
5839
|
protected readonly sidepanel: import("@angular/core").Signal<boolean>;
|
|
5817
5840
|
protected readonly noBorder: import("@angular/core").Signal<boolean>;
|
|
5818
5841
|
protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
|
|
5819
|
-
protected readonly boxAlign: import("@angular/core").Signal<"
|
|
5842
|
+
protected readonly boxAlign: import("@angular/core").Signal<"left" | "right" | "center">;
|
|
5820
5843
|
protected readonly iconBox: import("@angular/core").Signal<string>;
|
|
5821
5844
|
protected readonly isSticky: import("@angular/core").Signal<boolean>;
|
|
5822
5845
|
protected readonly hasMenu: import("@angular/core").Signal<boolean>;
|
|
@@ -5971,7 +5994,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
|
|
|
5971
5994
|
protected readonly resolvedFullWidth: import("@angular/core").Signal<boolean>;
|
|
5972
5995
|
protected readonly resolvedVertical: import("@angular/core").Signal<boolean>;
|
|
5973
5996
|
protected readonly resolvedVariant: import("@angular/core").Signal<"spaced" | "joined">;
|
|
5974
|
-
protected readonly resolvedAlign: import("@angular/core").Signal<"
|
|
5997
|
+
protected readonly resolvedAlign: import("@angular/core").Signal<"left" | "right" | "top" | "bottom" | "center">;
|
|
5975
5998
|
static ɵfac: i0.ɵɵFactoryDeclaration<SectionButtonGroupComponent, never>;
|
|
5976
5999
|
static ɵcmp: i0.ɵɵComponentDeclaration<SectionButtonGroupComponent, "m-section-button-group", never, {
|
|
5977
6000
|
"vertical": {
|
|
@@ -6003,7 +6026,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
|
|
|
6003
6026
|
}
|
|
6004
6027
|
export declare class SectionFooterComponent {
|
|
6005
6028
|
readonly sticky: import("@angular/core").InputSignal<boolean>;
|
|
6006
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
6029
|
+
readonly align: import("@angular/core").InputSignal<"left" | "right" | "center">;
|
|
6007
6030
|
readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
|
|
6008
6031
|
readonly fullWidth: import("@angular/core").InputSignal<boolean>;
|
|
6009
6032
|
private readonly scrollSticky;
|
|
@@ -6012,7 +6035,7 @@ export declare class SectionFooterComponent {
|
|
|
6012
6035
|
protected readonly sidepanel: import("@angular/core").Signal<boolean>;
|
|
6013
6036
|
protected readonly noBorder: import("@angular/core").Signal<boolean>;
|
|
6014
6037
|
protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
|
|
6015
|
-
protected readonly boxAlign: import("@angular/core").Signal<"
|
|
6038
|
+
protected readonly boxAlign: import("@angular/core").Signal<"left" | "right" | "center">;
|
|
6016
6039
|
static ɵfac: i0.ɵɵFactoryDeclaration<SectionFooterComponent, never>;
|
|
6017
6040
|
static ɵcmp: i0.ɵɵComponentDeclaration<SectionFooterComponent, "m-section-footer", never, {
|
|
6018
6041
|
"sticky": {
|
|
@@ -8377,7 +8400,7 @@ declare class DropdownBoxComponent {
|
|
|
8377
8400
|
}
|
|
8378
8401
|
/** The trigger both option Fields draw: a searchable text input and a chevron. */
|
|
8379
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";
|
|
8380
|
-
declare const DROPDOWN_IMPORTS: (typeof ButtonComponent | typeof
|
|
8403
|
+
declare const DROPDOWN_IMPORTS: (typeof ButtonComponent | typeof TextOutputComponent | typeof LabelComponent | typeof SelectorDirective | typeof TextInputComponent)[];
|
|
8381
8404
|
/**
|
|
8382
8405
|
* Everything a Dropdown and a Multiselect share: the options, the search, the
|
|
8383
8406
|
* keyboard walk and the panel. What differs is only what the Field holds — one
|
|
@@ -8561,7 +8584,7 @@ declare class ColorPickerBoxComponent implements AfterViewInit, OnDestroy {
|
|
|
8561
8584
|
protected readonly _eyedropperConfig: import("@magmonium/one").Button;
|
|
8562
8585
|
protected readonly _headerContextMenu: ContextMenu;
|
|
8563
8586
|
protected readonly themeSwatches: import("@angular/core").Signal<{
|
|
8564
|
-
key: "
|
|
8587
|
+
key: "error" | "background" | "border" | "text" | "textSecondary" | "mm" | "mmLite" | "mmDark" | "focus" | "errorLight" | "warning" | "successLite" | "success" | "highlight" | "wealth";
|
|
8565
8588
|
color: string;
|
|
8566
8589
|
}[]>;
|
|
8567
8590
|
hue: import("@angular/core").WritableSignal<number>;
|
|
@@ -9763,7 +9786,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
|
|
|
9763
9786
|
readonly heightMode: import("@angular/core").InputSignal<"fixed" | "full" | undefined>;
|
|
9764
9787
|
readonly maxHeight: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9765
9788
|
readonly height: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9766
|
-
readonly align: import("@angular/core").InputSignal<"
|
|
9789
|
+
readonly align: import("@angular/core").InputSignal<"left" | "right" | "center" | undefined>;
|
|
9767
9790
|
readonly padding: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9768
9791
|
readonly paddingX: import("@angular/core").InputSignal<string | number | undefined>;
|
|
9769
9792
|
readonly paddingY: import("@angular/core").InputSignal<string | number | undefined>;
|
|
@@ -9815,7 +9838,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
|
|
|
9815
9838
|
protected readonly handleSubmit: (event: Event) => void;
|
|
9816
9839
|
readonly resolvedSize: import("@angular/core").Signal<Size>;
|
|
9817
9840
|
protected readonly sizeLength: import("@angular/core").Signal<string | null>;
|
|
9818
|
-
readonly resolvedAlign: import("@angular/core").Signal<"
|
|
9841
|
+
readonly resolvedAlign: import("@angular/core").Signal<"left" | "right" | "center">;
|
|
9819
9842
|
readonly resolvedVariant: import("@angular/core").Signal<string | undefined>;
|
|
9820
9843
|
readonly resolvedMaxWidth: import("@angular/core").Signal<string | number | undefined>;
|
|
9821
9844
|
private readonly resolvedPadding;
|
|
@@ -12100,7 +12123,7 @@ export declare class ScoreSetItemComponent {
|
|
|
12100
12123
|
private readonly themeStore;
|
|
12101
12124
|
protected readonly tipId: string;
|
|
12102
12125
|
protected readonly tipDismissed: import("@angular/core").WritableSignal<boolean>;
|
|
12103
|
-
protected readonly shape: import("@angular/core").Signal<"
|
|
12126
|
+
protected readonly shape: import("@angular/core").Signal<"primary" | "none" | "row">;
|
|
12104
12127
|
protected readonly tone: import("@angular/core").Signal<string | null>;
|
|
12105
12128
|
protected readonly model: import("@angular/core").Signal<{
|
|
12106
12129
|
value: number | null;
|
|
@@ -12404,7 +12427,7 @@ export declare class PriceLadderComponent {
|
|
|
12404
12427
|
protected readonly current: import("@angular/core").Signal<number | null>;
|
|
12405
12428
|
/** The forecast point: a `forecast` mark, else the `target` input. */
|
|
12406
12429
|
private readonly targetPoint;
|
|
12407
|
-
protected readonly shownAs: import("@angular/core").Signal<"
|
|
12430
|
+
protected readonly shownAs: import("@angular/core").Signal<"list" | "line">;
|
|
12408
12431
|
/** Every drawable mark, the `current` and `forecast` stand-ins included. */
|
|
12409
12432
|
private readonly everyMark;
|
|
12410
12433
|
/** The reference levels drawn as ticks and labels. */
|
|
@@ -13042,7 +13065,7 @@ export type DocAiPhase = 'idle' | 'asking' | 'question' | 'outline' | 'writing'
|
|
|
13042
13065
|
*/
|
|
13043
13066
|
export declare class DocEditorComponent implements ControlValueAccessor {
|
|
13044
13067
|
protected readonly groups: readonly import("@magmonium/one").DocToolbarGroup[];
|
|
13045
|
-
protected readonly icons: Record<"code" | "link" | "
|
|
13068
|
+
protected readonly icons: Record<"code" | "link" | "list" | "table" | "strike" | "bold" | "heading" | "italic" | "quote", string>;
|
|
13046
13069
|
protected readonly docActionKey: typeof docActionKey;
|
|
13047
13070
|
private readonly translate;
|
|
13048
13071
|
protected readonly value: import("@angular/core").WritableSignal<string>;
|
|
@@ -14636,6 +14659,12 @@ export type PanelTrigger<T> = ModalTrigger<T> & {
|
|
|
14636
14659
|
dock?: true;
|
|
14637
14660
|
/** Set by ModalStore: id of the panel this one displaced. Presence means docked. */
|
|
14638
14661
|
dockedOver?: string;
|
|
14662
|
+
/**
|
|
14663
|
+
* What the panel holds, compared by identity: a non-dock open whose body is
|
|
14664
|
+
* already open closes that older panel first (GLOSSARY.md SidePanel).
|
|
14665
|
+
* `component` cannot say it — every overlay body is the same wrapper.
|
|
14666
|
+
*/
|
|
14667
|
+
body?: string | OverlayWidgetLoader;
|
|
14639
14668
|
};
|
|
14640
14669
|
/**
|
|
14641
14670
|
* Overlay asset shape for `mModal` — body named by `component`/`form`, not a
|
|
@@ -14677,6 +14706,12 @@ export type PanelOverlayConfig = Config & {
|
|
|
14677
14706
|
export type ScreenOverlayTrigger = {
|
|
14678
14707
|
as: 'modal' | 'side_panel';
|
|
14679
14708
|
widget: OverlayWidgetLoader;
|
|
14709
|
+
/**
|
|
14710
|
+
* The Screen's name — how a SidePanel already holding it is known as the
|
|
14711
|
+
* same body. A loader written at the call site is a new function every call,
|
|
14712
|
+
* so `widget` alone never matches; absent, it is compared anyway.
|
|
14713
|
+
*/
|
|
14714
|
+
screen?: string;
|
|
14680
14715
|
inputs?: Record<string, unknown>;
|
|
14681
14716
|
/**
|
|
14682
14717
|
* ScreenOutput name -> what the opener runs when the body emits it (ADR
|
|
@@ -15056,8 +15091,8 @@ export declare class ConfirmComponent {
|
|
|
15056
15091
|
cancelLabel: import("@angular/core").InputSignal<string>;
|
|
15057
15092
|
protected readonly confirmText: import("@angular/core").Signal<string>;
|
|
15058
15093
|
protected readonly cancelText: import("@angular/core").Signal<string>;
|
|
15059
|
-
protected readonly accent: import("@angular/core").Signal<"
|
|
15060
|
-
protected readonly iconName: import("@angular/core").Signal<"
|
|
15094
|
+
protected readonly accent: import("@angular/core").Signal<"warning" | "error" | "success" | "mm">;
|
|
15095
|
+
protected readonly iconName: import("@angular/core").Signal<"info" | "exclamation-triangle" | "trash" | "check-circle">;
|
|
15061
15096
|
protected accept(): void;
|
|
15062
15097
|
protected decline(): void;
|
|
15063
15098
|
static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmComponent, never>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"magmonium-one-button-DO7FTwuF.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/ui/badge/lib/badge.ts","../../../../libs/one/src/lib/shared/ui/badge/ui/badge.ts","../../../../libs/one/src/lib/shared/lib/components/reactive-element.ts","../../../../libs/one/src/lib/shared/functions/object/enum-value.ts","../../../../libs/one/src/lib/shared/ui/button/lib/function/button.ts","../../../../libs/one/src/lib/shared/ui/button/lib/function/group.ts","../../../../libs/one/src/lib/shared/ui/img/img.ts","../../../../libs/one/src/lib/shared/ui/form/lib/section-form-context.token.ts","../../../../libs/one/src/lib/shared/ui/button/ui/button.ts","../../../../libs/one/src/lib/shared/ui/button/ui/button.html"],"sourcesContent":["import { Badge } from '../type/badge';\n\nexport const getBadgeClasses = (config: Badge | undefined): string => {\n if (!config) return 'badge';\n\n const classes = ['badge'];\n\n if (config.variant) {\n classes.push(`badge--${config.variant}`);\n }\n\n if (config.position && config.position !== 'static') {\n classes.push(`badge--${config.position}`);\n }\n\n if (config.animation && config.animation !== 'none') {\n classes.push(`badge--${config.animation}`);\n }\n\n return classes.join(' ');\n};\n\nexport const formatBadgeCount = (\n count: number | undefined,\n maxCount = 99\n): string => {\n if (count === undefined || count <= 0) return '';\n if (count > maxCount) return `${maxCount}+`;\n return count.toString();\n};\n\nexport const shouldShowBadge = (count: number | undefined): boolean =>\n count !== undefined && count > 0;\n\nexport const formatCount = formatBadgeCount;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n model,\n} from '@angular/core';\nimport { ConfigComponent } from '../../../lib/components/config-component';\nimport { Badge } from '../type';\nimport { getBadgeClasses } from '../lib';\nimport { IconComponent } from '../../icon/ui/icon';\n\n@Component({\n selector: 'm-badge',\n imports: [IconComponent],\n template: `\n <span [class]=\"classes()\">\n @if (iconConfig(); as icon) {\n <m-icon [config]=\"icon\" />\n }\n <ng-content />\n @if (config()?.ping) {\n <span class=\"badge__ping\"></span>\n }\n </span>\n `,\n styleUrls: ['./badge.sass'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BadgeComponent extends ConfigComponent<Badge> {\n override readonly subFolder = 'badges';\n override config = model<Partial<Badge>>();\n\n protected readonly classes = computed(() => getBadgeClasses(this.config()));\n\n protected readonly iconConfig = computed(() => {\n const iconName = this.config()?.icon;\n if (!iconName) return undefined;\n const variant = this.config()?.variant;\n\n let color = '';\n if (variant === 'saas') {\n color = 'mm';\n } else if (variant === 'minimal') {\n color = 'textSecondary';\n } else {\n color = this.pallet()?.contrastColor || '';\n }\n\n return {\n name: iconName,\n color,\n };\n });\n}\n","import { effect, ElementRef, signal } from '@angular/core';\nimport { ConfigComponent } from './config-component';\nimport { Config } from '../../type/config/config-type';\n\n/**\n * Base class that provides reactive classList functionality for components with viewChild elements.\n * Extends ConfigComponent to inherit config management and color service functionality.\n */\nexport abstract class ReactiveElementComponent<\n T extends Config,\n> extends ConfigComponent<T> {\n /**\n * Abstract property that child classes must implement to specify which element to observe.\n * Should return the viewChild ElementRef that contains the DOM element to observe.\n */\n protected abstract element(): ElementRef | undefined;\n\n /**\n * Reactive signal containing the current classList of the observed element.\n * Updates automatically when the DOM element's classes change.\n */\n protected readonly classList = signal<string[]>([]);\n\n /**\n * MutationObserver instance for observing class changes.\n * Automatically managed by the component lifecycle.\n */\n private observer: MutationObserver | null = null;\n\n constructor() {\n super();\n\n // Set up reactive classList observation\n effect(() => {\n const el = this.element()?.nativeElement;\n\n // Cleanup previous observer\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n\n if (!el) {\n this.classList.set([]);\n return;\n }\n\n // Set initial classList\n this.classList.set(Array.from(el.classList));\n\n // Set up MutationObserver for reactivity\n this.observer = new MutationObserver(() => {\n this.classList.set(Array.from(el.classList));\n });\n\n this.observer.observe(el, {\n attributes: true,\n attributeFilter: ['class'],\n });\n });\n }\n\n /**\n * Check if the element has a specific CSS class.\n * @param className - The class name to check for\n * @returns True if the element has the class, false otherwise\n */\n protected hasClass(className: string): boolean {\n return this.classList().includes(className);\n }\n\n /**\n * Toggle a CSS class on the element.\n * @param className - The class name to toggle\n * @param force - Optional boolean to force add (true) or remove (false)\n */\n protected toggleClass(className: string, force?: boolean): void {\n const el = this.element()?.nativeElement;\n if (!el) return;\n\n if (force !== undefined) {\n el.classList.toggle(className, force);\n } else {\n el.classList.toggle(className);\n }\n }\n\n /**\n * Add one or more CSS classes to the element.\n * @param classNames - The class names to add\n */\n protected addClass(...classNames: string[]): void {\n const el = this.element()?.nativeElement;\n if (!el) return;\n\n el.classList.add(...classNames);\n }\n\n /**\n * Remove one or more CSS classes from the element.\n * @param classNames - The class names to remove\n */\n protected removeClass(...classNames: string[]): void {\n const el = this.element()?.nativeElement;\n if (!el) return;\n\n el.classList.remove(...classNames);\n }\n\n /**\n * Replace one CSS class with another.\n * @param oldClass - The class to remove\n * @param newClass - The class to add\n */\n protected replaceClass(oldClass: string, newClass: string): void {\n const el = this.element()?.nativeElement;\n if (!el) return;\n\n el.classList.replace(oldClass, newClass);\n }\n\n /**\n * Set the complete classList, replacing all existing classes.\n * @param classNames - The new class names to set\n */\n protected setClassList(classNames: string[]): void {\n const el = this.element()?.nativeElement;\n if (!el) return;\n\n el.className = classNames.join(' ');\n }\n}\n","/**\n * `value` as a member of `values` — a string enum's object — or `undefined`\n * when the enum does not hold it.\n *\n * The reader a generated Screen narrows a plain string through wherever it\n * lands on a value its SortEnum or action enum types: a typed-in literal, a\n * constant, an input, another Control's payload. A call and not an `as` cast,\n * for the reason the Field readers are one — the read lands in a template,\n * whose parser has no TS type assertion (NG5002) — and checked rather than\n * asserted, so a string the enum never held arrives as `undefined` instead of\n * as a lie (m-one-ui ADR 0203).\n */\nexport function enumValue<T extends string>(\n value: unknown,\n values: Record<string, T>\n): T | undefined {\n return typeof value === 'string' &&\n (Object.values(values) as string[]).includes(value)\n ? (value as T)\n : undefined;\n}\n","import { enumValue } from '../../../../functions/object/enum-value';\nimport { Button } from '../../type/button';\n\nexport function deriveButtonClass(button?: Button): string {\n if (!button) {\n return '';\n }\n const classList: string[] = [];\n if (button.icon || button.imgSrc) {\n if (!button.label || button.iconOnly) {\n classList.push('only-icon');\n }\n classList.push(button.isRightIcon ? 'with-right-icon' : 'with-left-icon');\n }\n if (button.variant === 'primary') {\n classList.push('primary');\n }\n if (button.variant === 'ghost') {\n classList.push('ghost');\n }\n if (button.variant === 'tab') {\n classList.push('tab');\n }\n if (button.fullWidth) {\n classList.push('full-width');\n }\n if (button.stacked) {\n classList.push('stacked');\n }\n if (button.badge) {\n classList.push('has-badge');\n }\n if (button.nonClickable) {\n classList.push('read-only');\n }\n return classList.join(' ');\n}\n\nexport function isButtonName(name: string, button?: Button): boolean {\n if (!button) {\n return false;\n }\n return button.name === name || button.label === name;\n}\n\n/**\n * The pressed Button's name, read as the enum a generated Screen keeps its\n * action bar's names in — or `undefined` for a press no name of it answers.\n *\n * The reader a SectionAction's `clicked` is written through wherever the value\n * lands on an enum-typed StateProperty or ScreenVariable. A call and not an\n * `as` cast, for the reason the Field readers are one: the read lands in a\n * template, whose parser has no TS type assertion (NG5002). Checked against\n * the enum's values rather than asserted, so a Button merged in from an asset\n * the enum never saw arrives as `undefined` instead of as a lie\n * (m-one-ui ADR 0203).\n */\nexport function actionName<Name extends string>(\n button: Button | undefined,\n names: Record<string, Name>\n): Name | undefined {\n return enumValue(button?.name, names);\n}\n","import { ButtonGroup } from '../../type/button';\n\nexport function deriveGroupClass(group?: Partial<ButtonGroup>): string {\n if (!group) {\n return '';\n }\n const classList: string[] = [];\n classList.push(group?.vertical ? 'vertical' : 'horizontal');\n\n // Handle center for backward compatibility\n if (group?.center) {\n classList.push('center');\n }\n\n // Handle new align property (takes precedence over center)\n if (group?.align) {\n classList.push(`align-${group.align}`);\n }\n\n if (group?.primary) {\n classList.push('is-primary');\n }\n\n return classList.join(' ');\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n inject,\n input,\n signal,\n effect,\n computed,\n} from '@angular/core';\nimport { NgOptimizedImage, IMAGE_LOADER, ImageLoaderConfig } from '@angular/common';\nimport { HttpService } from '../../services/http';\n\n@Component({\n selector: 'm-img',\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgOptimizedImage],\n host: {\n // The box is the container's: 100% wide and tall unless a caller names\n // width/height figures, which land as inline px on this element.\n '[style.width.px]': 'boxWidth()',\n '[style.height.px]': 'boxHeight()',\n },\n providers: [\n {\n provide: IMAGE_LOADER,\n useValue: (config: ImageLoaderConfig) => {\n const src = config.src;\n if (src.includes('iiif.archive.org')) {\n const match = src.match(/(\\/full\\/)([^/]+)(\\/0\\/)/);\n if (match && config.width) {\n return src.replace(/(\\/full\\/)[^/]+(\\/0\\/)/, `$1${config.width},$2`);\n }\n }\n return src;\n },\n },\n ],\n template: `\n <div\n class=\"m-img\"\n [class.m-img--loaded]=\"status() === 'loaded'\"\n [class.m-img--error]=\"showFallback()\"\n [class.m-img--fill]=\"fill()\"\n [class.m-img--priority]=\"priority()\"\n [class.m-img--sized]=\"isSized()\"\n >\n @if (showFallback()) {\n <div class=\"m-img__fallback\" role=\"img\" [attr.aria-label]=\"alt()\">\n <svg viewBox=\"0 0 320 240\" fill=\"none\" preserveAspectRatio=\"xMidYMid slice\">\n <circle cx=\"112\" cy=\"92\" r=\"22\" fill=\"currentColor\" />\n <path d=\"M40 200l72-72 56 56 40-40 72 72z\" fill=\"currentColor\" />\n </svg>\n </div>\n } @else if (isDataUri()) {\n <img\n class=\"m-img__img\"\n [src]=\"effectiveSrc()!\"\n [alt]=\"alt()\"\n (load)=\"onLoad()\"\n (error)=\"onError()\"\n [width]=\"widthAttr()\"\n [height]=\"heightAttr()\"\n referrerpolicy=\"no-referrer\"\n />\n } @else {\n <img\n class=\"m-img__img\"\n [ngSrc]=\"effectiveSrc()!\"\n [alt]=\"alt()\"\n [priority]=\"priority()\"\n (load)=\"onLoad()\"\n (error)=\"onError()\"\n [fill]=\"fill()\"\n [width]=\"widthAttr()\"\n [height]=\"heightAttr()\"\n [ngSrcset]=\"autoNgSrcset()!\"\n [sizes]=\"sizes() || undefined\"\n decoding=\"async\"\n referrerpolicy=\"no-referrer\"\n />\n }\n @if (status() === 'loading' && !priority()) {\n <div class=\"m-img__skeleton\"></div>\n }\n </div>\n `,\n styleUrl: './img.sass',\n})\nexport class ImgComponent {\n readonly #httpService = inject(HttpService);\n\n readonly src = input<string | null | undefined>();\n readonly data = input<string | null | undefined>();\n readonly dataType = input<string>('image/jpeg');\n readonly alt = input.required<string>();\n readonly priority = input<boolean>(false);\n readonly fill = input<boolean>(true);\n // Unset rather than defaulted: `1200 × 1800` is the reservation\n // NgOptimizedImage needs, and a picture drawn 1200px wide because nobody\n // named a width is not the same thing. `attrWidth`/`attrHeight` carry that\n // default onto the tag; these two say whether anyone actually asked.\n readonly width = input<number | undefined>(undefined);\n readonly height = input<number | undefined>(undefined);\n readonly remote = input<string | undefined>();\n readonly ngSrcset = input<string | undefined>();\n readonly sizes = input<string | undefined>();\n\n readonly attrWidth = computed(() => this.width() ?? 1200);\n readonly attrHeight = computed(() => this.height() ?? 1800);\n\n // On the tag only when the picture is not filling its box — a filling\n // picture is sized by its box, the others carry the reservation figures.\n readonly widthAttr = computed(() => (this.fill() ? undefined : this.attrWidth()));\n readonly heightAttr = computed(() => (this.fill() ? undefined : this.attrHeight()));\n\n // Null unless the picture is drawn at a size it was told: a filling picture\n // takes its size from the box around it, and an unnamed figure leaves the\n // stylesheet's `width: 100%` in charge.\n readonly boxWidth = computed(() =>\n this.fill() ? null : (this.width() ?? null)\n );\n readonly boxHeight = computed(() =>\n this.fill() ? null : (this.height() ?? null)\n );\n\n // Both figures named means a box of exactly that shape, which the picture\n // has to cover rather than letter-box inside.\n readonly isSized = computed(\n () => this.boxWidth() !== null && this.boxHeight() !== null\n );\n\n readonly autoNgSrcset = computed(() => {\n const custom = this.ngSrcset();\n if (custom !== undefined) return custom;\n\n const src = this.effectiveSrc();\n if (src && src.includes('iiif.archive.org')) {\n return this.fill() ? '480w, 768w, 960w, 1200w, 1920w, 2048w' : '1x, 2x';\n }\n\n return undefined;\n });\n\n // --- State ---\n // One signal rather than a loaded/error pair: the three states are\n // exclusive, and two booleans could say both or neither.\n readonly status = signal<'loading' | 'loaded' | 'error'>('loading');\n\n readonly effectiveSrc = computed(() => {\n const d = this.data();\n if (d) return `data:${this.dataType()};base64,${d}`;\n const src = this.src();\n const remote = this.remote();\n if (\n src &&\n remote &&\n !src.startsWith('http') &&\n !src.startsWith('data:') &&\n !src.startsWith('blob:')\n ) {\n return this.#httpService.buildWcAssetUrl(remote, src);\n }\n return src;\n });\n\n // The one stand-in this component draws, for every case that has no picture\n // to show: a load that failed, a url nobody set, and design mode, where a\n // picture is placed on the canvas long before it points anywhere.\n readonly showFallback = computed(\n () => this.status() === 'error' || !this.effectiveSrc()\n );\n\n readonly isDataUri = computed(() => {\n const s = this.effectiveSrc();\n return !!s && (s.startsWith('data:') || s.startsWith('blob:'));\n });\n\n constructor() {\n effect(() => {\n // A source change starts the wait over.\n const source = this.effectiveSrc();\n this.status.set(source ? 'loading' : 'error');\n });\n }\n\n onLoad() {\n this.status.set('loaded');\n }\n\n onError() {\n this.status.set('error');\n }\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport { FieldTree } from '@angular/forms/signals';\nimport { FieldPatterns } from './field-patterns';\n\n/**\n * Published by `<m-section-form>` for projected `<m-section-form-item>`s.\n * Each item looks up `form()[name]` and binds `FormField` so its value writes\n * to that key — not via a `name` input on the inner TextInputComponent.\n *\n * The form context carries form state and field registration for projected\n * items. Sizing is inherited through the section/form host CSS variables.\n *\n * Projected Buttons read it when their `isSubmit` flag is true. That Button\n * locks on `blocked` and fires `submit` on click rather than relying on a\n * native `type=\"submit\"` — content projection can put it inside an app\n * wrapper, where the native path no longer reaches the `<form>` ancestor.\n */\nexport interface SectionFormContext {\n readonly form: Signal<FieldTree<Record<string, unknown>> | null>;\n /**\n * Announces a key, and whether the Field on that key is required. The flag is\n * what turns `required` written on a tag into a validator on the FieldTree —\n * without it the attribute only reaches the native input, which a `novalidate`\n * form ignores, so nothing would ever be invalid (ADR 0010).\n *\n * `value` is the Field's own value, written on its tag: what the key starts\n * on when the form's `data` holds nothing for it.\n */\n readonly registerField: (\n name: string,\n required?: boolean,\n patterns?: FieldPatterns,\n value?: unknown\n ) => void;\n /**\n * An item has mounted its control. Content projection gives the form no\n * render hook of its own, so this is what tells it the DOM is finally\n * complete enough to pick the field that takes the caret.\n */\n readonly fieldMounted: () => void;\n /**\n * An item has started loading its control's chunk. Every control arrives\n * through a dynamic import, and the chunks resolve in whatever order the\n * loader finishes them — so a `password` below an `otp` can put its input in\n * the DOM first. The form waits for the count to fall back to zero before it\n * reads document order for the caret.\n */\n readonly fieldPending: () => void;\n /** That load ended — mounted, superseded, or failed. Always paired with `fieldPending`. */\n readonly fieldSettled: () => void;\n /** Drops a destroyed item's rules, so a removed Field stops blocking. */\n readonly releaseField: (name: string) => void;\n /** Invalid or disabled — every submit control is locked while true. */\n readonly blocked: Signal<boolean>;\n /** Emits the form's `submit` output with the whole merged data. No-op while blocked. */\n readonly submit: () => void;\n /**\n * Bumped every time the form writes values the User did not type — a `data`\n * restamp, a `reset()` after submit. A projected item observing its own\n * field's value signal cannot tell those moves from a keystroke, so the\n * form says so: a move under an unchanged version is the User's, and the\n * only move a Field's `dataChange` announces (libs/one ADR 0032).\n */\n readonly dataVersion: Signal<number>;\n}\n\nexport const SECTION_FORM_CONTEXT = new InjectionToken<SectionFormContext>(\n 'SECTION_FORM_CONTEXT'\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { IconComponent } from '../../icon';\nimport { BadgeComponent } from '../../badge';\nimport { ReactiveElementComponent } from '../../../lib/components/reactive-element';\nimport { TranslatePipe } from '../../../pipe/translate';\nimport { Button } from '../type/button';\nimport { deriveButtonClass } from '../lib';\nimport { formatBadgeCount } from '../../badge';\nimport {\n toAttrBool,\n toAttrNumber,\n} from '../../../functions/config/attribute-value';\nimport { MRefDirective } from '../../../directives/m-ref/m-ref';\nimport { NAV_STORE_REF } from '../../../config/tokens';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ImgComponent } from '../../img/img';\n\nimport { resolvePallet } from '../../../lib/theme';\nimport { ThemeColor } from '@magmonium/cli';\nimport { SECTION_FORM_CONTEXT } from '../../form/lib/section-form-context.token';\n\n@Component({\n selector: 'm-button,m-one-button',\n templateUrl: './button.html',\n imports: [\n forwardRef(() => TranslatePipe),\n forwardRef(() => IconComponent),\n forwardRef(() => BadgeComponent),\n RouterModule,\n MRefDirective,\n forwardRef(() => NgTemplateOutlet),\n forwardRef(() => ImgComponent),\n ],\n styleUrls: ['./button.sass'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent extends ReactiveElementComponent<Button> {\n override config = model<Partial<Button>>();\n color = input<string | keyof ThemeColor | undefined>();\n labelClass = input<string | undefined>();\n fullWidth = input<boolean | string | undefined>();\n // NavRef — a NavId. The store reads the NavKind off that node to decide\n // route vs panel, so the Button never picks a link kind (ADR 0014).\n nav = input<string | undefined>();\n navParams = input<Record<string, string | number> | undefined>();\n href = input<string | undefined>();\n disabled = input<boolean | undefined>();\n variant = input<'primary' | 'ghost' | 'secondary' | 'tab' | undefined>();\n override name = input<string | undefined>();\n override baseUrl = input<string | undefined>();\n override one = input<boolean | undefined>();\n override remote = input<string | undefined>();\n override subFolder = 'buttons';\n // The rest of what a `buttons/<name>.yml` carries, so a one-off Button needs\n // no file (ADR 0010). `badge` is absent on purpose — it is an object, and an\n // object literal in markup is a lint error, so a badged Button still names\n // an asset or takes a bound config.\n label = input<string | undefined>();\n noTranslate = input<boolean | string | undefined>();\n // A Record, so it never rides as a literal attribute (ADR 0010) — it arrives\n // bound, from the page member holding every dynamic message value.\n params = input<Record<string, string> | undefined>();\n // When true, render a non-native element (div) instead of a <button>.\n // Use this when consumers explicitly need to avoid native <button> tags.\n noNative = input<boolean | string | undefined>();\n icon = input<string | undefined>();\n isRightIcon = input<boolean | string | undefined>();\n iconOnly = input<boolean | string | undefined>();\n stacked = input<boolean | string | undefined>();\n imgSrc = input<string | undefined>();\n nonClickable = input<boolean | string | undefined>();\n inverted = input<boolean | string | undefined>();\n isSubmit = input<boolean | string | undefined>();\n tabindex = input<number | string | undefined>();\n readonly clicked = output<Button | undefined>();\n button = viewChild<ElementRef>('button');\n protected element = this.button;\n protected readonly className = computed(() =>\n deriveButtonClass(this.config())\n );\n private readonly navRef = inject(NAV_STORE_REF, { optional: true });\n\n // Present only for a Button projected into an `m-section-form`. Absent\n // everywhere else, so every Button outside one behaves exactly as before.\n private readonly sectionForm = inject(SECTION_FORM_CONTEXT, {\n optional: true,\n });\n\n // Only an explicitly marked Button inside a Section Form submits it. A\n // navigating Button is excluded: its click already goes somewhere, and\n // submitting on the way out would save a form the User was leaving.\n // A form on a visual editor's Canvas is a picture of a form, and its empty\n // fields make it invalid from the first render — a submit that locked on\n // that would show the designer a greyed-out Button they never configured.\n protected readonly isFormSubmit = computed(() => {\n if (!this.sectionForm || this.isDesignMode) return false;\n const config = this.config();\n if (config?.nav || config?.href) return false;\n return config?.isSubmit === true;\n });\n\n // The form's own lock, on top of whatever the config already disables: an\n // invalid or disabled form has nothing to submit, so its submit control says\n // so rather than swallowing the click.\n protected readonly isDisabled = computed(\n () =>\n this.config()?.disabled === true ||\n (this.isFormSubmit() && !!this.sectionForm?.blocked())\n );\n // A NavRef pointing at a Murl node reads as selected when it is the open\n // panel. Compared by NavId — there is no link string left to normalise.\n private readonly isMurlActive = computed(() => {\n const nav = this.config()?.nav;\n if (!nav) return false;\n if (!this.navRef?.murl()?.length) return false;\n return this.navRef.id() === nav;\n });\n private readonly isPrimary = computed(() =>\n this.variant() === 'primary' ||\n this.config()?.variant === 'primary' ||\n this.hasClass('primary')\n );\n private readonly colorInput = computed(() =>\n this.color() || this.config()?.color || 'mm'\n );\n private readonly buttonColor = computed(() => {\n const color = this.colorInput();\n const isPrimary = this.isPrimary();\n if (isPrimary && color === 'inverseText') {\n return resolvePallet('mm', this.themeStore.color()).color;\n }\n const pallet = resolvePallet(color, this.themeStore.color());\n return isPrimary ? pallet.contrastColor : pallet.color;\n });\n\n constructor() {\n super();\n effect(() => {\n const isPrimary = this.isPrimary();\n const colorInput = this.colorInput();\n const el = this.elementRef.nativeElement;\n if (isPrimary && colorInput === 'inverseText') {\n el.style.setProperty('--m-button-color-contrast', this.buttonColor());\n el.style.setProperty('--m-one-button-color-contrast', this.buttonColor());\n }\n });\n }\n\n protected readonly buttonIcon = computed(() => {\n const name = this.config()?.icon;\n if (!name) {\n return undefined;\n }\n return {\n name: this.config()?.icon,\n color: this.buttonColor(),\n baseUrl: this.baseUrl(),\n remote: this.remote() ?? this.config()?.remote,\n };\n });\n private overrideProperty = computed<Partial<Button>>(() => {\n const button = {} as Partial<Button>;\n // The rest of what a `buttons/<name>.yml` carries, so a one-off Button\n // needs no file (ADR 0010). An omitted attribute is skipped rather than\n // written as undefined — writing it would blank whatever the asset set.\n const put = (key: keyof Button, value: unknown): void => {\n if (value !== undefined) (button as Record<string, unknown>)[key] = value;\n };\n put('label', this.label());\n put('icon', this.icon());\n put('imgSrc', this.imgSrc());\n put('tabindex', toAttrNumber(this.tabindex()));\n put('noTranslate', toAttrBool(this.noTranslate()));\n put('params', this.params());\n put('isRightIcon', toAttrBool(this.isRightIcon()));\n put('iconOnly', toAttrBool(this.iconOnly()));\n put('stacked', toAttrBool(this.stacked()));\n put('nonClickable', toAttrBool(this.nonClickable()));\n put('inverted', toAttrBool(this.inverted()));\n put('isSubmit', toAttrBool(this.isSubmit()));\n\n if (this.color()) {\n button['color'] = this.color();\n }\n if (this.labelClass()) {\n button['labelClass'] = this.labelClass();\n }\n if (typeof this.fullWidth() !== 'undefined') {\n button['fullWidth'] = toAttrBool(this.fullWidth());\n }\n if (this.nav()) {\n button['nav'] = this.nav();\n }\n if (this.navParams()) {\n button['navParams'] = this.navParams();\n }\n if (this.href()) {\n button['href'] = this.href();\n }\n if (typeof this.disabled() !== 'undefined') {\n button['disabled'] = this.disabled();\n }\n if (this.variant()) {\n button['variant'] = this.variant();\n }\n\n // Force primary and clear ghost if the color is 'inverse' or 'inverseText', unless explicitly ghost or secondary\n const finalColor = button.color || this.config()?.color;\n const isExplicitGhost =\n button.variant === 'ghost' || this.config()?.variant === 'ghost';\n const isExplicitSecondary =\n button.variant === 'secondary' ||\n (this.config()?.variant as string) === 'secondary';\n if (\n (finalColor === 'inverse' || finalColor === 'inverseText') &&\n !isExplicitGhost &&\n !isExplicitSecondary\n ) {\n button['color'] = 'inverseText';\n button['variant'] = 'primary';\n } else if (finalColor === 'inverse') {\n button['color'] = 'inverseText';\n }\n\n if (this.config()?.nav || this.nav()) {\n button['variant'] = this.isMurlActive() ? undefined : 'ghost';\n }\n\n return button;\n });\n\n protected override resolveComponentOverrides(): Partial<Button> {\n return this.overrideProperty();\n }\n\n public onClick() {\n if (this.isFormSubmit()) {\n // Called rather than left to a native `type=\"submit\"`: the `<form>` is\n // only an ancestor while nothing re-projects this Button out of it.\n this.sectionForm?.submit();\n }\n this.clicked.emit(this.config());\n }\n\n protected readonly formatBadgeCount = (count: number, max = 99): string =>\n formatBadgeCount(count, max);\n\n}\n","@if (config(); as config) {\n <!-- One branch for every in-app target: `mRef` names a NavId and the store\n reads the NavKind off that node to decide route vs panel (ADR 0014). -->\n @if (config.nav) {\n @if (!noNative()) {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [attr.tabindex]=\"config.tabindex\"\n [disabled]=\"config.disabled\"\n [mRef]=\"config.nav\"\n [mRefParams]=\"config.navParams\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate: config.params)\"\n mRefLinkActive=\"tab\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n } @else {\n <div\n role=\"button\"\n [attr.tabindex]=\"config.tabindex ?? 0\"\n class=\"non-native {{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate: config.params)\"\n [attr.aria-disabled]=\"config.disabled ? 'true' : 'false'\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </div>\n }\n } @else if (config.href) {\n <a\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [attr.tabindex]=\"config.tabindex\"\n [href]=\"config.href\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate: config.params)\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </a>\n } @else {\n @if (!noNative()) {\n <button\n type=\"button\"\n class=\"{{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [attr.tabindex]=\"config.tabindex\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate: config.params)\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </button>\n } @else {\n <div\n role=\"button\"\n [attr.tabindex]=\"config.tabindex ?? 0\"\n class=\"non-native {{ className() }}\"\n [attr.data-testid]=\"config.name + '-btn'\"\n [attr.aria-label]=\"config.noTranslate ? config.label : (config.label | translate: config.params)\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : 'false'\"\n (keydown.enter)=\"onClick()\"\n (click)=\"onClick()\"\n #button\n >\n <ng-container *ngTemplateOutlet=\"buttonContent; context: { button: config }\"></ng-container>\n </div>\n }\n }\n}\n\n<ng-template #buttonContent let-button=\"button\">\n @if (button.imgSrc) {\n <div class=\"button-icon button-icon--img\">\n <m-img [src]=\"button.imgSrc\" [remote]=\"button.remote\" [alt]=\"button.label || button.name || ''\" />\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n } @else if (buttonIcon(); as icon) {\n <div class=\"button-icon\">\n @if (isFromOne()) {\n <m-one-icon [config]=\"icon\" />\n } @else {\n <m-icon [config]=\"icon\" />\n }\n @if (button.badge && button.badge.count) {\n <m-badge\n [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'absolute' }\"\n >{{ formatBadgeCount(button.badge.count) }}</m-badge\n >\n }\n </div>\n }\n @if (button.label && !button.iconOnly) {\n <span class=\"button-label {{ button.labelClass || '' }}\">\n {{ button.noTranslate ? button.label : (button.label | translate: button.params) }}\n </span>\n }\n @if (!buttonIcon() && button.badge && button.badge.count) {\n <m-badge [config]=\"{ variant: button.badge.variant ?? 'danger', position: 'static' }\">{{\n formatBadgeCount(button.badge.count)\n }}</m-badge>\n }\n</ng-template>\n"],"mappings":"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"}
|