@magmonium/one 0.4.49 → 0.4.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/fesm2022/{magmonium-one-attribute-value-DnctyCKp.mjs → magmonium-one-attribute-value-CSl5Xeq1.mjs} +3 -3
  2. package/fesm2022/{magmonium-one-attribute-value-DnctyCKp.mjs.map → magmonium-one-attribute-value-CSl5Xeq1.mjs.map} +1 -1
  3. package/fesm2022/{magmonium-one-base-checkbox-D3Z1FTXU.mjs → magmonium-one-base-checkbox-BqCPBI1d.mjs} +2 -2
  4. package/fesm2022/{magmonium-one-base-checkbox-D3Z1FTXU.mjs.map → magmonium-one-base-checkbox-BqCPBI1d.mjs.map} +1 -1
  5. package/fesm2022/{magmonium-one-base-dropdown-DIaimBpG.mjs → magmonium-one-base-dropdown-0qlJVp_y.mjs} +12 -12
  6. package/fesm2022/{magmonium-one-base-dropdown-DIaimBpG.mjs.map → magmonium-one-base-dropdown-0qlJVp_y.mjs.map} +1 -1
  7. package/fesm2022/{magmonium-one-base-input-CZyIcKrn.mjs → magmonium-one-base-input-CsVND89n.mjs} +2 -2
  8. package/fesm2022/{magmonium-one-base-input-CZyIcKrn.mjs.map → magmonium-one-base-input-CsVND89n.mjs.map} +1 -1
  9. package/fesm2022/{magmonium-one-base-text-6T8KrJbz.mjs → magmonium-one-base-text-CWf7J75v.mjs} +2 -2
  10. package/fesm2022/{magmonium-one-base-text-6T8KrJbz.mjs.map → magmonium-one-base-text-CWf7J75v.mjs.map} +1 -1
  11. package/fesm2022/{magmonium-one-button-BKGxIBhw.mjs → magmonium-one-button-CJ1Gaaw-.mjs} +7 -7
  12. package/fesm2022/{magmonium-one-button-BKGxIBhw.mjs.map → magmonium-one-button-CJ1Gaaw-.mjs.map} +1 -1
  13. package/fesm2022/{magmonium-one-checkbox-D1W18OGo.mjs → magmonium-one-checkbox-CS83TVYG.mjs} +5 -5
  14. package/fesm2022/{magmonium-one-checkbox-D1W18OGo.mjs.map → magmonium-one-checkbox-CS83TVYG.mjs.map} +1 -1
  15. package/fesm2022/{magmonium-one-color-utl-DklqRa3m.mjs → magmonium-one-color-utl-td5Lij8L.mjs} +2 -2
  16. package/fesm2022/{magmonium-one-color-utl-DklqRa3m.mjs.map → magmonium-one-color-utl-td5Lij8L.mjs.map} +1 -1
  17. package/fesm2022/{magmonium-one-directives-R099YTUd.mjs → magmonium-one-directives-O1JyFBc3.mjs} +4 -4
  18. package/fesm2022/{magmonium-one-directives-R099YTUd.mjs.map → magmonium-one-directives-O1JyFBc3.mjs.map} +1 -1
  19. package/fesm2022/{magmonium-one-group-Blvejahi.mjs → magmonium-one-group-BBaepb2P.mjs} +7 -7
  20. package/fesm2022/{magmonium-one-group-Blvejahi.mjs.map → magmonium-one-group-BBaepb2P.mjs.map} +1 -1
  21. package/fesm2022/{magmonium-one-header-qoXWebFN.mjs → magmonium-one-header-7MmiF2rG.mjs} +17 -17
  22. package/fesm2022/magmonium-one-header-7MmiF2rG.mjs.map +1 -0
  23. package/fesm2022/{magmonium-one-icon-Ce44a1mo.mjs → magmonium-one-icon-DR7LgBc3.mjs} +4 -4
  24. package/fesm2022/{magmonium-one-icon-Ce44a1mo.mjs.map → magmonium-one-icon-DR7LgBc3.mjs.map} +1 -1
  25. package/fesm2022/{magmonium-one-image-editor-DKiscgQU.mjs → magmonium-one-image-editor-CkPeheGY.mjs} +4 -4
  26. package/fesm2022/{magmonium-one-image-editor-DKiscgQU.mjs.map → magmonium-one-image-editor-CkPeheGY.mjs.map} +1 -1
  27. package/fesm2022/{magmonium-one-label-lYMBMB7p.mjs → magmonium-one-label-B2Rtuiyg.mjs} +2 -2
  28. package/fesm2022/{magmonium-one-label-lYMBMB7p.mjs.map → magmonium-one-label-B2Rtuiyg.mjs.map} +1 -1
  29. package/fesm2022/{magmonium-one-m-ref-DVe-WAYR.mjs → magmonium-one-m-ref-X9KgVe86.mjs} +2 -2
  30. package/fesm2022/{magmonium-one-m-ref-DVe-WAYR.mjs.map → magmonium-one-m-ref-X9KgVe86.mjs.map} +1 -1
  31. package/fesm2022/{magmonium-one-menu-DcqfcU1p.mjs → magmonium-one-menu-B8H0Grmb.mjs} +8 -8
  32. package/fesm2022/{magmonium-one-menu-DcqfcU1p.mjs.map → magmonium-one-menu-B8H0Grmb.mjs.map} +1 -1
  33. package/fesm2022/{magmonium-one-multi-range-m86SzSZO.mjs → magmonium-one-multi-range-OzTdXSHR.mjs} +3 -3
  34. package/fesm2022/{magmonium-one-multi-range-m86SzSZO.mjs.map → magmonium-one-multi-range-OzTdXSHR.mjs.map} +1 -1
  35. package/fesm2022/{magmonium-one-options-asset-CIKSNq4B.mjs → magmonium-one-options-asset-BlrhLckD.mjs} +2 -2
  36. package/fesm2022/{magmonium-one-options-asset-CIKSNq4B.mjs.map → magmonium-one-options-asset-BlrhLckD.mjs.map} +1 -1
  37. package/fesm2022/{magmonium-one-otp-BrR0mijm.mjs → magmonium-one-otp-CkQohg0H.mjs} +5 -5
  38. package/fesm2022/{magmonium-one-otp-BrR0mijm.mjs.map → magmonium-one-otp-CkQohg0H.mjs.map} +1 -1
  39. package/fesm2022/{magmonium-one-password-CKIAFzs9.mjs → magmonium-one-password-CLhWaUXK.mjs} +6 -6
  40. package/fesm2022/{magmonium-one-password-CKIAFzs9.mjs.map → magmonium-one-password-CLhWaUXK.mjs.map} +1 -1
  41. package/fesm2022/{magmonium-one-radio-6oN9j_F6.mjs → magmonium-one-radio-dZL0E4k_.mjs} +3 -3
  42. package/fesm2022/{magmonium-one-radio-6oN9j_F6.mjs.map → magmonium-one-radio-dZL0E4k_.mjs.map} +1 -1
  43. package/fesm2022/{magmonium-one-range-BmimLpG6.mjs → magmonium-one-range-DLu5PhUN.mjs} +4 -4
  44. package/fesm2022/{magmonium-one-range-BmimLpG6.mjs.map → magmonium-one-range-DLu5PhUN.mjs.map} +1 -1
  45. package/fesm2022/{magmonium-one-selector-CLSwVQCJ.mjs → magmonium-one-selector-GGFfBf2O.mjs} +4 -4
  46. package/fesm2022/{magmonium-one-selector-CLSwVQCJ.mjs.map → magmonium-one-selector-GGFfBf2O.mjs.map} +1 -1
  47. package/fesm2022/{magmonium-one-size-converter-DFIowQHO.mjs → magmonium-one-size-converter-BalJd7VH.mjs} +6 -2
  48. package/fesm2022/magmonium-one-size-converter-BalJd7VH.mjs.map +1 -0
  49. package/fesm2022/{magmonium-one-text-evdqwPEz.mjs → magmonium-one-text-BPThK6-y.mjs} +6 -6
  50. package/fesm2022/{magmonium-one-text-evdqwPEz.mjs.map → magmonium-one-text-BPThK6-y.mjs.map} +1 -1
  51. package/fesm2022/{magmonium-one-text-output-BnS5Skz-.mjs → magmonium-one-text-output-Cg2dT_U_.mjs} +4 -4
  52. package/fesm2022/{magmonium-one-text-output-BnS5Skz-.mjs.map → magmonium-one-text-output-Cg2dT_U_.mjs.map} +1 -1
  53. package/fesm2022/magmonium-one-theme-CYT4pn5X.mjs +1 -0
  54. package/fesm2022/{magmonium-one-toggle-BIoiSggh.mjs → magmonium-one-toggle-DRG14zhR.mjs} +3 -3
  55. package/fesm2022/{magmonium-one-toggle-BIoiSggh.mjs.map → magmonium-one-toggle-DRG14zhR.mjs.map} +1 -1
  56. package/fesm2022/magmonium-one.mjs +220 -89
  57. package/fesm2022/magmonium-one.mjs.map +1 -1
  58. package/package.json +1 -1
  59. package/types/magmonium-one.d.ts +102 -41
  60. package/fesm2022/magmonium-one-header-qoXWebFN.mjs.map +0 -1
  61. package/fesm2022/magmonium-one-size-converter-DFIowQHO.mjs.map +0 -1
  62. package/fesm2022/magmonium-one-theme-DPBeYB-G.mjs +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magmonium/one",
3
- "version": "0.4.49",
3
+ "version": "0.4.51",
4
4
  "description": "Magmonium One — Angular design-system primitives for mm Apps",
5
5
  "author": "magmonium",
6
6
  "license": "MIT",
@@ -1349,6 +1349,13 @@ export declare function getUniqueId(): string;
1349
1349
  * Used for wallet backgrounds and other items where visual consistency is needed.
1350
1350
  */
1351
1351
  export declare function stringToColor(str: string): string;
1352
+ export declare const escapeHtml: (text: string) => string;
1353
+ /**
1354
+ * Render MiniMark's inline rules only — bold, italic, strike, links — for text
1355
+ * that already sits inside a block of its own, such as a heading. No `<p>`, no
1356
+ * block syntax: a `#` or `-` stays literal, and line breaks fold into spaces.
1357
+ */
1358
+ export declare function miniMarkInlineToHtml(source?: string): string;
1352
1359
  /**
1353
1360
  * Render MiniMark source text to an HTML string.
1354
1361
  */
@@ -4389,6 +4396,16 @@ export declare class SectionSearchComponent extends BaseTextInputComponent<Searc
4389
4396
  type BadgeVariant = 'saas' | 'status' | 'minimal' | 'default' | 'primary' | 'danger' | 'chip';
4390
4397
  type BadgePosition = 'static' | 'absolute' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
4391
4398
  type BadgeAnimation = 'pulse' | 'shimmer' | 'none';
4399
+ /**
4400
+ * A count worn as a Badge — the figure, and how to draw it. Narrower than
4401
+ * [BadgeVariant] on purpose: `status` and `minimal` are shapes rather than
4402
+ * pills and have no room for a number, and the remaining three are exactly what
4403
+ * a Button's own `badge` spells.
4404
+ */
4405
+ type BadgeCount = {
4406
+ count: number;
4407
+ variant?: 'default' | 'primary' | 'danger';
4408
+ };
4392
4409
  type Badge = Config & {
4393
4410
  variant?: BadgeVariant;
4394
4411
  icon?: string;
@@ -5636,6 +5653,29 @@ type Header = Config & {
5636
5653
  icon?: string;
5637
5654
  level?: HeaderLevel;
5638
5655
  };
5656
+ export declare class BadgeComponent extends ConfigComponent<Badge> {
5657
+ readonly subFolder = "badges";
5658
+ config: import("@angular/core").ModelSignal<Partial<Badge> | undefined>;
5659
+ protected readonly classes: import("@angular/core").Signal<string>;
5660
+ protected readonly iconConfig: import("@angular/core").Signal<{
5661
+ name: string;
5662
+ color: string;
5663
+ } | undefined>;
5664
+ static ɵfac: i0.ɵɵFactoryDeclaration<BadgeComponent, never>;
5665
+ static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "m-badge", never, {
5666
+ "config": {
5667
+ "alias": "config";
5668
+ "required": false;
5669
+ "isSignal": true;
5670
+ };
5671
+ }, {
5672
+ "config": "configChange";
5673
+ }, never, ["*"], true, never>;
5674
+ }
5675
+ declare const getBadgeClasses: (config: Badge | undefined) => string;
5676
+ export declare const formatBadgeCount: (count: number | undefined, maxCount?: number) => string;
5677
+ export declare const shouldShowBadge: (count: number | undefined) => boolean;
5678
+ declare const formatCount: (count: number | undefined, maxCount?: number) => string;
5639
5679
  export declare class SectionHeaderComponent {
5640
5680
  readonly sticky: import("@angular/core").InputSignal<boolean>;
5641
5681
  readonly level: import("@angular/core").InputSignal<HeaderLevel>;
@@ -5652,6 +5692,7 @@ export declare class SectionHeaderComponent {
5652
5692
  readonly extraData: import("@angular/core").InputSignal<unknown>;
5653
5693
  readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
5654
5694
  readonly alignment: import("@angular/core").Signal<"center" | "left" | "right">;
5695
+ readonly badge: import("@angular/core").InputSignal<BadgeCount | undefined>;
5655
5696
  readonly showBack: import("@angular/core").InputSignal<boolean>;
5656
5697
  readonly actionButton: import("@angular/core").InputSignal<string | undefined>;
5657
5698
  readonly actionLabel: import("@angular/core").InputSignal<string | undefined>;
@@ -5673,6 +5714,8 @@ export declare class SectionHeaderComponent {
5673
5714
  protected readonly isSticky: import("@angular/core").Signal<boolean>;
5674
5715
  protected readonly hasMenu: import("@angular/core").Signal<boolean>;
5675
5716
  protected readonly actionConfig: import("@angular/core").Signal<Button | undefined>;
5717
+ protected readonly badgeConfig: import("@angular/core").Signal<Badge | undefined>;
5718
+ protected readonly badgeText: import("@angular/core").Signal<string>;
5676
5719
  protected readonly accordion: import("@angular/core").Signal<import("@magmonium/one").SectionAccordionDirective | null>;
5677
5720
  protected readonly toggleIconName: import("@angular/core").Signal<string | undefined>;
5678
5721
  protected readonly toggleRotates: import("@angular/core").Signal<boolean>;
@@ -5750,6 +5793,11 @@ export declare class SectionHeaderComponent {
5750
5793
  "required": false;
5751
5794
  "isSignal": true;
5752
5795
  };
5796
+ "badge": {
5797
+ "alias": "badge";
5798
+ "required": false;
5799
+ "isSignal": true;
5800
+ };
5753
5801
  "showBack": {
5754
5802
  "alias": "showBack";
5755
5803
  "required": false;
@@ -9624,29 +9672,6 @@ export declare class ComponentStepperComponent {
9624
9672
  "stepChange": "stepChange";
9625
9673
  }, never, never, true, never>;
9626
9674
  }
9627
- export declare class BadgeComponent extends ConfigComponent<Badge> {
9628
- readonly subFolder = "badges";
9629
- config: import("@angular/core").ModelSignal<Partial<Badge> | undefined>;
9630
- protected readonly classes: import("@angular/core").Signal<string>;
9631
- protected readonly iconConfig: import("@angular/core").Signal<{
9632
- name: string;
9633
- color: string;
9634
- } | undefined>;
9635
- static ɵfac: i0.ɵɵFactoryDeclaration<BadgeComponent, never>;
9636
- static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "m-badge", never, {
9637
- "config": {
9638
- "alias": "config";
9639
- "required": false;
9640
- "isSignal": true;
9641
- };
9642
- }, {
9643
- "config": "configChange";
9644
- }, never, ["*"], true, never>;
9645
- }
9646
- declare const getBadgeClasses: (config: Badge | undefined) => string;
9647
- export declare const formatBadgeCount: (count: number | undefined, maxCount?: number) => string;
9648
- export declare const shouldShowBadge: (count: number | undefined) => boolean;
9649
- declare const formatCount: (count: number | undefined, maxCount?: number) => string;
9650
9675
  type CardVariant = 'flat' | 'outlined' | 'glass' | 'beautiful' | 'professional' | 'subtle' | 'no-border' | 'dashboard' | 'roundedBorder' | 'highlighted' | 'line';
9651
9676
  type CardSpacing = 'compact' | 'spacious';
9652
9677
  type CardPadding = 'none' | 'all' | 'x' | 'y' | 'left' | 'right' | 'up' | 'down';
@@ -9817,7 +9842,7 @@ export declare class HeaderComponent {
9817
9842
  private readonly sizeContext;
9818
9843
  protected readonly actionSize: import("@angular/core").Signal<string>;
9819
9844
  protected readonly actionConfig: import("@angular/core").Signal<Button | undefined>;
9820
- protected readonly text: import("@angular/core").Signal<string>;
9845
+ protected readonly html: import("@angular/core").Signal<string>;
9821
9846
  static ɵfac: i0.ɵɵFactoryDeclaration<HeaderComponent, never>;
9822
9847
  static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "m-header", never, {
9823
9848
  "level": {
@@ -13284,6 +13309,18 @@ export declare class ConfirmComponent {
13284
13309
  }, {}, never, never, true, never>;
13285
13310
  }
13286
13311
  export declare function provideModalComponents(): EnvironmentProviders;
13312
+ /**
13313
+ * A count drawn beside an entry's label, as a Badge — the figure a Nav puts on
13314
+ * itself where something behind it wants counting (GLOSSARY.md NavCountSource).
13315
+ *
13316
+ * The same two keys a Button's `badge` spells, and `variant` is the caller's for
13317
+ * the same reason: what a count *means* — a tally, a warning — is a fact about
13318
+ * the count and not about the badge that draws it.
13319
+ */
13320
+ export type NavBadge = {
13321
+ count: number;
13322
+ variant?: 'default' | 'primary' | 'danger';
13323
+ };
13287
13324
  export type BreadcrumbTrail = {
13288
13325
  label: string;
13289
13326
  icon?: string;
@@ -13321,6 +13358,12 @@ export type BreadcrumbTrail = {
13321
13358
  color: string | null;
13322
13359
  name: string;
13323
13360
  };
13361
+ /**
13362
+ * The count the Nav this entry names wears, where one is registered for it —
13363
+ * stamped on the header, the trail and the menu rows alike, so one
13364
+ * registration words a Nav the same wherever it is drawn.
13365
+ */
13366
+ badge?: NavBadge;
13324
13367
  };
13325
13368
  export type BreadCrumb = {
13326
13369
  trail?: BreadcrumbTrail[];
@@ -13572,7 +13615,26 @@ interface NavVisibilityConfig {
13572
13615
  */
13573
13616
  navVisibleLoad?: (params: Record<string, string>) => void | Promise<void>;
13574
13617
  }
13575
- type NavWidgetEntry = Type<unknown> | NavWidgetConfig | NavMenuConfig | NavRowsConfig | NavInstanceConfig | NavVisibilityConfig;
13618
+ /**
13619
+ * What a Nav registers to answer *how much is behind it*, drawn as a Badge
13620
+ * beside its label (GLOSSARY.md NavCountSource, ADR 0043). Registered under
13621
+ * that Nav's own NavId beside whatever else it registers — the configs are not
13622
+ * exclusive, which is why every guard here tests for its own key rather than
13623
+ * for the absence of another's.
13624
+ */
13625
+ interface NavCountConfig {
13626
+ /**
13627
+ * The badge to draw beside the Nav's label, or `undefined` for none — a Nav
13628
+ * with nothing behind it wears no badge rather than one saying nothing.
13629
+ *
13630
+ * A signal rather than a function of the panel's parameters, unlike
13631
+ * `navInstance`: a count is a fact about the Nav itself, and it is worn in
13632
+ * panels this Nav is not the owner of — root's own row for it — where the
13633
+ * parameters the panel is drawn for are somebody else's.
13634
+ */
13635
+ navCount: Signal<NavBadge | undefined>;
13636
+ }
13637
+ type NavWidgetEntry = Type<unknown> | NavWidgetConfig | NavMenuConfig | NavRowsConfig | NavInstanceConfig | NavCountConfig | NavVisibilityConfig;
13576
13638
  /**
13577
13639
  * Where an app registers its search answer (ADR 0042): the element the host's
13578
13640
  * search panel mounts in place of its groups, with `query` bound, while the
@@ -13605,6 +13667,7 @@ type NavWidgetMap = Partial<Record<NavIdKey, NavWidgetEntry>> & {
13605
13667
  export declare function isNavMenuConfig(entry: NavWidgetEntry): entry is NavMenuConfig;
13606
13668
  export declare function isNavRowsConfig(entry: NavWidgetEntry): entry is NavRowsConfig;
13607
13669
  export declare function isNavInstanceConfig(entry: NavWidgetEntry): entry is NavInstanceConfig;
13670
+ export declare function isNavCountConfig(entry: NavWidgetEntry): entry is NavCountConfig;
13608
13671
  export declare function isNavVisibilityConfig(entry: NavWidgetEntry): entry is NavVisibilityConfig;
13609
13672
  /**
13610
13673
  * Multi-provided, and resolved **last-wins**: the library provides its own
@@ -13655,7 +13718,6 @@ export declare class FrameComponent {
13655
13718
  appNavId: string;
13656
13719
  slot: "main" | "side";
13657
13720
  }>;
13658
- keepPanelOnPathChange: import("@angular/core").Signal<boolean>;
13659
13721
  panelPushed: import("@angular/core").Signal<boolean>;
13660
13722
  navScrolledDown: import("@angular/core").Signal<boolean>;
13661
13723
  remoteWidgets: import("@angular/core").Signal<Record<string, NavWidgetRegistryEntry>>;
@@ -13685,6 +13747,7 @@ export declare class FrameComponent {
13685
13747
  hasMurl: import("@angular/core").Signal<boolean>;
13686
13748
  isNavOpened: import("@angular/core").Signal<boolean>;
13687
13749
  isMNavOpened: import("@angular/core").Signal<boolean>;
13750
+ isSideMenuOpen: import("@angular/core").Signal<boolean>;
13688
13751
  resolvedWidget: import("@angular/core").Signal<(import("@magmonium/one").NavWidgetConfig & {
13689
13752
  ceSelector?: string;
13690
13753
  }) | null>;
@@ -13787,7 +13850,6 @@ export declare class FrameComponent {
13787
13850
  appNavId: string;
13788
13851
  slot: "main" | "side";
13789
13852
  } | undefined;
13790
- keepPanelOnPathChange: boolean;
13791
13853
  panelPushed: boolean;
13792
13854
  navScrolledDown: boolean;
13793
13855
  remoteWidgets: Record<string, NavWidgetRegistryEntry>;
@@ -13974,7 +14036,10 @@ interface NavState {
13974
14036
  mounts: Record<string, RemoteMount>;
13975
14037
  /** Auxiliary segment names in the URL — which side apps are on screen (ADR 0038). */
13976
14038
  outlets: string[];
13977
- /** Panel opened by the menu icon with no Murl chosen — see ADR 0013. */
14039
+ /**
14040
+ * Panel held open without a Murl: by the menu icon, or by a navigation made
14041
+ * while it was up. Only the menu toggle clears it — see ADR 0013.
14042
+ */
13978
14043
  navOpenedByUser: boolean;
13979
14044
  /**
13980
14045
  * The Nav a Browse moved the panel onto — up, down or sideways — while the
@@ -13997,12 +14062,6 @@ interface NavState {
13997
14062
  appNavId: string;
13998
14063
  slot: AppSlot;
13999
14064
  } | undefined;
14000
- /**
14001
- * Next path settle should keep `navOpenedByUser`. Used by the AppLogo when
14002
- * the panel is already open — navigate home but leave the menu showing
14003
- * root's children.
14004
- */
14005
- keepPanelOnPathChange: boolean;
14006
14065
  /** Whether this store pushed the history entry the open panel sits on. */
14007
14066
  panelPushed: boolean;
14008
14067
  navScrolledDown: boolean;
@@ -14078,7 +14137,6 @@ export declare const NavStore: import("@angular/core").Type<{
14078
14137
  appNavId: string;
14079
14138
  slot: AppSlot;
14080
14139
  }>;
14081
- keepPanelOnPathChange: Signal<boolean>;
14082
14140
  panelPushed: Signal<boolean>;
14083
14141
  navScrolledDown: Signal<boolean>;
14084
14142
  remoteWidgets: Signal<Record<string, NavWidgetRegistryEntry>>;
@@ -14108,6 +14166,7 @@ export declare const NavStore: import("@angular/core").Type<{
14108
14166
  hasMurl: Signal<boolean>;
14109
14167
  isNavOpened: Signal<boolean>;
14110
14168
  isMNavOpened: Signal<boolean>;
14169
+ isSideMenuOpen: Signal<boolean>;
14111
14170
  resolvedWidget: Signal<(NavWidgetConfig & {
14112
14171
  ceSelector?: string;
14113
14172
  }) | null>;
@@ -14210,7 +14269,6 @@ export declare const NavStore: import("@angular/core").Type<{
14210
14269
  appNavId: string;
14211
14270
  slot: AppSlot;
14212
14271
  } | undefined;
14213
- keepPanelOnPathChange: boolean;
14214
14272
  panelPushed: boolean;
14215
14273
  navScrolledDown: boolean;
14216
14274
  remoteWidgets: Record<string, NavWidgetRegistryEntry>;
@@ -14570,7 +14628,6 @@ export declare class NavDetailsComponent {
14570
14628
  appNavId: string;
14571
14629
  slot: "main" | "side";
14572
14630
  }>;
14573
- keepPanelOnPathChange: import("@angular/core").Signal<boolean>;
14574
14631
  panelPushed: import("@angular/core").Signal<boolean>;
14575
14632
  navScrolledDown: import("@angular/core").Signal<boolean>;
14576
14633
  remoteWidgets: import("@angular/core").Signal<Record<string, NavWidgetRegistryEntry>>;
@@ -14600,6 +14657,7 @@ export declare class NavDetailsComponent {
14600
14657
  hasMurl: import("@angular/core").Signal<boolean>;
14601
14658
  isNavOpened: import("@angular/core").Signal<boolean>;
14602
14659
  isMNavOpened: import("@angular/core").Signal<boolean>;
14660
+ isSideMenuOpen: import("@angular/core").Signal<boolean>;
14603
14661
  resolvedWidget: import("@angular/core").Signal<(import("@magmonium/one").NavWidgetConfig & {
14604
14662
  ceSelector?: string;
14605
14663
  }) | null>;
@@ -14702,7 +14760,6 @@ export declare class NavDetailsComponent {
14702
14760
  appNavId: string;
14703
14761
  slot: "main" | "side";
14704
14762
  } | undefined;
14705
- keepPanelOnPathChange: boolean;
14706
14763
  panelPushed: boolean;
14707
14764
  navScrolledDown: boolean;
14708
14765
  remoteWidgets: Record<string, NavWidgetRegistryEntry>;
@@ -14783,6 +14840,11 @@ export declare class NavMenuComponent {
14783
14840
  navList: import("@angular/core").Signal<BreadcrumbTrail[] | undefined>;
14784
14841
  /** Looks inside the row's Nav without following it (GLOSSARY.md Browse). */
14785
14842
  browse: (item: BreadcrumbTrail) => void;
14843
+ /**
14844
+ * The `99+` ceiling is the badge's own, the same one a Button reads: a row and
14845
+ * an icon cannot disagree about where a count stops being a number.
14846
+ */
14847
+ protected readonly formatBadgeCount: (count: number, max?: number) => string;
14786
14848
  rows: import("@angular/core").Signal<ListItem[]>;
14787
14849
  static ɵfac: i0.ɵɵFactoryDeclaration<NavMenuComponent, never>;
14788
14850
  static ɵcmp: i0.ɵɵComponentDeclaration<NavMenuComponent, "m-nav-menu", never, {
@@ -14831,7 +14893,6 @@ export declare class NavHeaderComponent {
14831
14893
  appNavId: string;
14832
14894
  slot: "main" | "side";
14833
14895
  }>;
14834
- keepPanelOnPathChange: import("@angular/core").Signal<boolean>;
14835
14896
  panelPushed: import("@angular/core").Signal<boolean>;
14836
14897
  navScrolledDown: import("@angular/core").Signal<boolean>;
14837
14898
  remoteWidgets: import("@angular/core").Signal<Record<string, NavWidgetRegistryEntry>>;
@@ -14861,6 +14922,7 @@ export declare class NavHeaderComponent {
14861
14922
  hasMurl: import("@angular/core").Signal<boolean>;
14862
14923
  isNavOpened: import("@angular/core").Signal<boolean>;
14863
14924
  isMNavOpened: import("@angular/core").Signal<boolean>;
14925
+ isSideMenuOpen: import("@angular/core").Signal<boolean>;
14864
14926
  resolvedWidget: import("@angular/core").Signal<(import("@magmonium/one").NavWidgetConfig & {
14865
14927
  ceSelector?: string;
14866
14928
  }) | null>;
@@ -14963,7 +15025,6 @@ export declare class NavHeaderComponent {
14963
15025
  appNavId: string;
14964
15026
  slot: "main" | "side";
14965
15027
  } | undefined;
14966
- keepPanelOnPathChange: boolean;
14967
15028
  panelPushed: boolean;
14968
15029
  navScrolledDown: boolean;
14969
15030
  remoteWidgets: Record<string, NavWidgetRegistryEntry>;
@@ -16979,4 +17040,4 @@ export declare const toggleUid: (audience: Audience, uid: string) => Audience;
16979
17040
  export declare const toggleGroup: (audience: Audience, groupId: string) => Audience;
16980
17041
  /** How many Users and Groups an Audience names. */
16981
17042
  export declare const pickCount: (audience: Audience) => number;
16982
- export type { Accordion, AccordionGroup, AccordionVariant, AppCardData, AppCardInputs, AppCardVariant, AppLogoTone, AppLogoVariant, AppManifest, AppTileData, AssetOption, Audience, AudienceLevel, AudienceMember, AudiencePicker, AuthResult, Badge, BadgePosition, BadgeVariant, Button, ButtonGroup, CellChangeEvent, CellClickEvent, ColBreakpoint, ColSpan, ColorPallet, ColumnDef, Comment, CommentItem, Config, ContextMenu, ContextMenuEvent, Cursor, CustomIcon, DragListReorder, Draggable, DraggableState, FileUploadConfig, FileUploadEvent, FilterGroupContext, FilterGroupMember, FilterOption, FilterPanel, FilterPanelIo, FilterRangeMode, FilterSelectionMap, FilterValue, FilterVariant, FilteredTreeGrid, FlatTreeGridRow, FlexAlign, FlexAlignSelf, FlexConfig, FlexDirection, FlexItemConfig, FlexJustify, FlexVariant, GridAlignX, GridAlignY, GroupActionEvent, GroupDropEvent, GroupKind, GroupMenuEvent, Header, HeaderLevel, Icon, KeyValueVariant, LabelSegment, ListConfig, ListContext, ListItem, ListOrientation, ListVariant, MenuItem, MoneySystem, NavInstanceConfig, NavMenuConfig, NavRowsConfig, NavVisibilityConfig, NavVisibleAnswer, NavWidgetConfig, NavWidgetEntry, NavWidgetMap, OverlayWidgetLoader, OverlayWidgetMap, PageChangeEvent, Pagination, PaginationWindow, ResolvedUserTab, RowDropEvent, SearchChangeEvent, SectionAccordion, SectionAccordionGroup, SectionAccordionGroupContext, SectionAccordionRef, SectionButtonGroupConfig, SectionFilterGroupConfig, SectionHero, SectionHeroVariant, SectionTableAlign, SectionTableColumn, SectionTableConfig, SectionTableDataType, SectionTableSort, SectionTableSortDirection, SectionTableVariant, SectionToggleItem, SectionToggleItemContext, SelectionAction, SelectionActionEvent, SelectionChangeEvent, SelectorConfig, SharingClient, SharingGroup, SocketMessage, Sort, SortChange, SortChangeEvent, SortOption, SortOrder, SourceAudience, SpacingInward, SqueezeMode, StatAlign, StatCornerEdge, StatCornerPosition, StatCornerSide, StatSurface, StatVariant, TabGroup, TableConfig, TableFilterCondition, TableFilterDef, TableGroup, TextOrNumberInput, Timeline, TimelineItem, TreeGridCellClickEvent, TreeGridLoadChildrenEvent, TreeGridRow, TreeGridRowSelectEvent, TreeGridToggleEvent, User };
17043
+ export type { Accordion, AccordionGroup, AccordionVariant, AppCardData, AppCardInputs, AppCardVariant, AppLogoTone, AppLogoVariant, AppManifest, AppTileData, AssetOption, Audience, AudienceLevel, AudienceMember, AudiencePicker, AuthResult, Badge, BadgeCount, BadgePosition, BadgeVariant, Button, ButtonGroup, CellChangeEvent, CellClickEvent, ColBreakpoint, ColSpan, ColorPallet, ColumnDef, Comment, CommentItem, Config, ContextMenu, ContextMenuEvent, Cursor, CustomIcon, DragListReorder, Draggable, DraggableState, FileUploadConfig, FileUploadEvent, FilterGroupContext, FilterGroupMember, FilterOption, FilterPanel, FilterPanelIo, FilterRangeMode, FilterSelectionMap, FilterValue, FilterVariant, FilteredTreeGrid, FlatTreeGridRow, FlexAlign, FlexAlignSelf, FlexConfig, FlexDirection, FlexItemConfig, FlexJustify, FlexVariant, GridAlignX, GridAlignY, GroupActionEvent, GroupDropEvent, GroupKind, GroupMenuEvent, Header, HeaderLevel, Icon, KeyValueVariant, LabelSegment, ListConfig, ListContext, ListItem, ListOrientation, ListVariant, MenuItem, MoneySystem, NavCountConfig, NavInstanceConfig, NavMenuConfig, NavRowsConfig, NavVisibilityConfig, NavVisibleAnswer, NavWidgetConfig, NavWidgetEntry, NavWidgetMap, OverlayWidgetLoader, OverlayWidgetMap, PageChangeEvent, Pagination, PaginationWindow, ResolvedUserTab, RowDropEvent, SearchChangeEvent, SectionAccordion, SectionAccordionGroup, SectionAccordionGroupContext, SectionAccordionRef, SectionButtonGroupConfig, SectionFilterGroupConfig, SectionHero, SectionHeroVariant, SectionTableAlign, SectionTableColumn, SectionTableConfig, SectionTableDataType, SectionTableSort, SectionTableSortDirection, SectionTableVariant, SectionToggleItem, SectionToggleItemContext, SelectionAction, SelectionActionEvent, SelectionChangeEvent, SelectorConfig, SharingClient, SharingGroup, SocketMessage, Sort, SortChange, SortChangeEvent, SortOption, SortOrder, SourceAudience, SpacingInward, SqueezeMode, StatAlign, StatCornerEdge, StatCornerPosition, StatCornerSide, StatSurface, StatVariant, TabGroup, TableConfig, TableFilterCondition, TableFilterDef, TableGroup, TextOrNumberInput, Timeline, TimelineItem, TreeGridCellClickEvent, TreeGridLoadChildrenEvent, TreeGridRow, TreeGridRowSelectEvent, TreeGridToggleEvent, User };
@@ -1 +0,0 @@
1
- {"version":3,"file":"magmonium-one-header-qoXWebFN.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/ui/header/ui/header.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { TranslateService } from '../../../services/translate';\nimport { HeaderLevel } from '../type/header';\nimport { ButtonComponent } from '../../button/ui/button';\nimport { IconComponent } from '../../icon';\nimport { Button } from '../../button/type/button';\nimport { SIZE_CONTEXT } from '../../../config/size-context.token';\nimport { resolveSize } from '../../../functions/size/size-converter';\n\n@Component({\n selector: 'm-header',\n imports: [ButtonComponent, IconComponent],\n template: `\n @switch (level()) {\n @case (1) {\n <h1 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h1>\n }\n @case (2) {\n <h2 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h2>\n }\n @case (3) {\n <h3 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h3>\n }\n @case (4) {\n <h4 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h4>\n }\n @case (5) {\n <h5 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h5>\n }\n @case (6) {\n <h6 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h6>\n }\n }\n `,\n styleUrl: './header.sass',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent {\n readonly level = input<HeaderLevel>(3);\n readonly label = input<string | undefined>();\n // Drawn inside the heading rather than beside it. A glyph placed as the\n // heading's sibling has no line box of its own to centre against — it ends\n // up centred on whatever column it sits next to, which is how a Canvas\n // header's icon came to line up with the label slot's drop rect instead of\n // with the label. Inside, the two share one line box at every level.\n readonly icon = input<string | undefined>();\n readonly actionButton = input<string | undefined>();\n // The action Button's accessible name. It renders icon-only, so the label is\n // the only thing a screen reader has to go on — without it the button reads\n // as nothing at all.\n readonly actionLabel = input<string | undefined>();\n // The label is authored text rather than a translation key. Needed for text\n // carrying angle brackets above all: `translate` reads `<...>` as link\n // markup, so a heading naming a MessageVariable — `<$app>` — resolves to\n // nothing at all rather than to itself.\n readonly noTranslate = input<boolean>(false);\n // A message's [MessageVariable] values, the same record `m-text-output`\n // takes: a heading naming `<$count>` is a sentence with a datum in it, and\n // splicing that datum into the key instead would be parsed as a query\n // string (m-one-ui ADR 0066).\n readonly params = input<Record<string, string> | undefined>(undefined);\n readonly actionClick = output<void>();\n\n private readonly translateService = inject(TranslateService);\n private readonly sizeContext = inject(SIZE_CONTEXT, { optional: true });\n\n // The action Button sits inside the heading, whose font-size is the level's\n // own — 2.25rem at h1 — so `em` inheritance would scale the Button to the\n // heading rather than to the Section it belongs to. It reads the Size in\n // force instead, the way Icon does, and lands at the same size as every\n // other Button on that Section (ADR 0008).\n protected readonly actionSize = computed(() =>\n resolveSize(this.sizeContext?.size())\n );\n\n protected readonly actionConfig = computed<Button | undefined>(() => {\n const icon = this.actionButton();\n if (!icon) return undefined;\n return {\n icon,\n label: this.actionLabel(),\n iconOnly: true,\n variant: 'ghost',\n };\n });\n\n // A computed rather than the impure TranslatePipe repeated six times: one\n // lookup per label change instead of one per change-detection tick, and it\n // still repaints when the language or an in-memory translation moves.\n protected readonly text = computed(() =>\n this.noTranslate()\n ? (this.label() ?? '')\n : this.translateService.translate(this.label(), this.params())\n );\n}\n"],"mappings":"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"}