@magmonium/one 0.4.41 → 0.4.43

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 (83) hide show
  1. package/assets/fields/app_color.json +5 -0
  2. package/assets/fields/logo_glyph_paste.json +7 -0
  3. package/assets/fields/logo_glyph_upload.json +12 -0
  4. package/assets/forms/logo_glyph_input.json +13 -0
  5. package/assets/i18n/ar.json +8 -0
  6. package/assets/i18n/de.json +8 -0
  7. package/assets/i18n/en.json +8 -0
  8. package/assets/i18n/es.json +8 -0
  9. package/assets/i18n/fr.json +8 -0
  10. package/assets/i18n/hi.json +8 -0
  11. package/assets/i18n/it.json +8 -0
  12. package/assets/i18n/ja.json +8 -0
  13. package/assets/i18n/ko.json +8 -0
  14. package/assets/i18n/nl.json +8 -0
  15. package/assets/i18n/pl.json +8 -0
  16. package/assets/i18n/pt.json +8 -0
  17. package/assets/i18n/ru.json +8 -0
  18. package/assets/i18n/tr.json +8 -0
  19. package/assets/i18n/zh.json +8 -0
  20. package/assets/index.json +1 -1
  21. package/fesm2022/{magmonium-one-attribute-value-DCTXt4Sr.mjs → magmonium-one-attribute-value-C1lqou2L.mjs} +3 -3
  22. package/fesm2022/{magmonium-one-attribute-value-DCTXt4Sr.mjs.map → magmonium-one-attribute-value-C1lqou2L.mjs.map} +1 -1
  23. package/fesm2022/{magmonium-one-base-checkbox-BNQAkyYU.mjs → magmonium-one-base-checkbox-CIxAiA4Q.mjs} +2 -2
  24. package/fesm2022/{magmonium-one-base-checkbox-BNQAkyYU.mjs.map → magmonium-one-base-checkbox-CIxAiA4Q.mjs.map} +1 -1
  25. package/fesm2022/{magmonium-one-base-dropdown-DU4B4w7c.mjs → magmonium-one-base-dropdown-XpTWe4Ii.mjs} +10 -10
  26. package/fesm2022/{magmonium-one-base-dropdown-DU4B4w7c.mjs.map → magmonium-one-base-dropdown-XpTWe4Ii.mjs.map} +1 -1
  27. package/fesm2022/{magmonium-one-base-input-BTxhUtYO.mjs → magmonium-one-base-input-C1Ek0Ezm.mjs} +2 -2
  28. package/fesm2022/{magmonium-one-base-input-BTxhUtYO.mjs.map → magmonium-one-base-input-C1Ek0Ezm.mjs.map} +1 -1
  29. package/fesm2022/{magmonium-one-base-text-BCSqKmVs.mjs → magmonium-one-base-text-Di2V2ojp.mjs} +2 -2
  30. package/fesm2022/{magmonium-one-base-text-BCSqKmVs.mjs.map → magmonium-one-base-text-Di2V2ojp.mjs.map} +1 -1
  31. package/fesm2022/{magmonium-one-button-BWB3ZKIj.mjs → magmonium-one-button-DZ4wCJgb.mjs} +11 -9
  32. package/fesm2022/{magmonium-one-button-BWB3ZKIj.mjs.map → magmonium-one-button-DZ4wCJgb.mjs.map} +1 -1
  33. package/fesm2022/{magmonium-one-checkbox-D5-5WhJ-.mjs → magmonium-one-checkbox-R-hPZrCa.mjs} +5 -5
  34. package/fesm2022/{magmonium-one-checkbox-D5-5WhJ-.mjs.map → magmonium-one-checkbox-R-hPZrCa.mjs.map} +1 -1
  35. package/fesm2022/{magmonium-one-color-utl-D86GGpz5.mjs → magmonium-one-color-utl-DI5p24iQ.mjs} +209 -6
  36. package/fesm2022/magmonium-one-color-utl-DI5p24iQ.mjs.map +1 -0
  37. package/fesm2022/{magmonium-one-directives-DePukAj8.mjs → magmonium-one-directives-B93p5bAL.mjs} +4 -4
  38. package/fesm2022/{magmonium-one-directives-DePukAj8.mjs.map → magmonium-one-directives-B93p5bAL.mjs.map} +1 -1
  39. package/fesm2022/{magmonium-one-group-m41SX_fL.mjs → magmonium-one-group-B7YeUd1u.mjs} +7 -7
  40. package/fesm2022/{magmonium-one-group-m41SX_fL.mjs.map → magmonium-one-group-B7YeUd1u.mjs.map} +1 -1
  41. package/fesm2022/{magmonium-one-header-D8CB9CBJ.mjs → magmonium-one-header-DUiBhPUP.mjs} +6 -5
  42. package/fesm2022/{magmonium-one-header-D8CB9CBJ.mjs.map → magmonium-one-header-DUiBhPUP.mjs.map} +1 -1
  43. package/fesm2022/{magmonium-one-icon-BTPHGpEN.mjs → magmonium-one-icon-C3jwzbb2.mjs} +80 -9
  44. package/fesm2022/magmonium-one-icon-C3jwzbb2.mjs.map +1 -0
  45. package/fesm2022/{magmonium-one-image-editor-Dn0ACfH0.mjs → magmonium-one-image-editor-BRTk8i4O.mjs} +4 -4
  46. package/fesm2022/{magmonium-one-image-editor-Dn0ACfH0.mjs.map → magmonium-one-image-editor-BRTk8i4O.mjs.map} +1 -1
  47. package/fesm2022/{magmonium-one-label-DjvJthAB.mjs → magmonium-one-label-D_rU82nD.mjs} +2 -2
  48. package/fesm2022/{magmonium-one-label-DjvJthAB.mjs.map → magmonium-one-label-D_rU82nD.mjs.map} +1 -1
  49. package/fesm2022/{magmonium-one-m-ref-C8c4Vf1G.mjs → magmonium-one-m-ref-CEms7B6-.mjs} +2 -2
  50. package/fesm2022/{magmonium-one-m-ref-C8c4Vf1G.mjs.map → magmonium-one-m-ref-CEms7B6-.mjs.map} +1 -1
  51. package/fesm2022/{magmonium-one-menu-EIfPlZ4E.mjs → magmonium-one-menu-cO34OcJc.mjs} +8 -7
  52. package/fesm2022/{magmonium-one-menu-EIfPlZ4E.mjs.map → magmonium-one-menu-cO34OcJc.mjs.map} +1 -1
  53. package/fesm2022/{magmonium-one-multi-range-o57TiVJU.mjs → magmonium-one-multi-range-Bq3_3NHg.mjs} +3 -3
  54. package/fesm2022/{magmonium-one-multi-range-o57TiVJU.mjs.map → magmonium-one-multi-range-Bq3_3NHg.mjs.map} +1 -1
  55. package/fesm2022/{magmonium-one-options-asset-EVsv0DL7.mjs → magmonium-one-options-asset-BMd7W0Mk.mjs} +2 -2
  56. package/fesm2022/{magmonium-one-options-asset-EVsv0DL7.mjs.map → magmonium-one-options-asset-BMd7W0Mk.mjs.map} +1 -1
  57. package/fesm2022/{magmonium-one-otp-CE4L1RcG.mjs → magmonium-one-otp-V2tFztLx.mjs} +5 -5
  58. package/fesm2022/{magmonium-one-otp-CE4L1RcG.mjs.map → magmonium-one-otp-V2tFztLx.mjs.map} +1 -1
  59. package/fesm2022/{magmonium-one-password-BjqYmT1s.mjs → magmonium-one-password-IdllPMUw.mjs} +6 -6
  60. package/fesm2022/{magmonium-one-password-BjqYmT1s.mjs.map → magmonium-one-password-IdllPMUw.mjs.map} +1 -1
  61. package/fesm2022/{magmonium-one-radio-C2wOB_Nb.mjs → magmonium-one-radio-BAL3-3j5.mjs} +3 -3
  62. package/fesm2022/{magmonium-one-radio-C2wOB_Nb.mjs.map → magmonium-one-radio-BAL3-3j5.mjs.map} +1 -1
  63. package/fesm2022/{magmonium-one-range-rgDe4O8u.mjs → magmonium-one-range-Cf7yUnhN.mjs} +4 -4
  64. package/fesm2022/{magmonium-one-range-rgDe4O8u.mjs.map → magmonium-one-range-Cf7yUnhN.mjs.map} +1 -1
  65. package/fesm2022/{magmonium-one-selector-DeRIUUBA.mjs → magmonium-one-selector-DAEI_0JX.mjs} +4 -4
  66. package/fesm2022/{magmonium-one-selector-DeRIUUBA.mjs.map → magmonium-one-selector-DAEI_0JX.mjs.map} +1 -1
  67. package/fesm2022/{magmonium-one-size-converter-C5fG_dgw.mjs → magmonium-one-size-converter-BOBD8nHy.mjs} +8 -1
  68. package/fesm2022/magmonium-one-size-converter-BOBD8nHy.mjs.map +1 -0
  69. package/fesm2022/{magmonium-one-text-BL-1lWST.mjs → magmonium-one-text-BnTkYLJe.mjs} +8 -7
  70. package/fesm2022/{magmonium-one-text-BL-1lWST.mjs.map → magmonium-one-text-BnTkYLJe.mjs.map} +1 -1
  71. package/fesm2022/{magmonium-one-text-output-Ci93Hi9Y.mjs → magmonium-one-text-output-BZU61QIF.mjs} +4 -4
  72. package/fesm2022/{magmonium-one-text-output-Ci93Hi9Y.mjs.map → magmonium-one-text-output-BZU61QIF.mjs.map} +1 -1
  73. package/fesm2022/magmonium-one-theme-DYvNIWmo.mjs +1 -0
  74. package/fesm2022/{magmonium-one-toggle-BTK2lzqA.mjs → magmonium-one-toggle-V_YnZXx5.mjs} +3 -3
  75. package/fesm2022/{magmonium-one-toggle-BTK2lzqA.mjs.map → magmonium-one-toggle-V_YnZXx5.mjs.map} +1 -1
  76. package/fesm2022/magmonium-one.mjs +788 -185
  77. package/fesm2022/magmonium-one.mjs.map +1 -1
  78. package/package.json +1 -1
  79. package/types/magmonium-one.d.ts +355 -53
  80. package/fesm2022/magmonium-one-color-utl-D86GGpz5.mjs.map +0 -1
  81. package/fesm2022/magmonium-one-icon-BTPHGpEN.mjs.map +0 -1
  82. package/fesm2022/magmonium-one-size-converter-C5fG_dgw.mjs.map +0 -1
  83. package/fesm2022/magmonium-one-theme-CT4cWpe7.mjs +0 -1
@@ -714,6 +714,8 @@ export interface LoadingActionsApi {
714
714
  export declare class SharedStoreRegistry {
715
715
  static setNavStore(store: unknown): void;
716
716
  static getNavStore(): unknown;
717
+ static setAppLogoState(state: unknown): void;
718
+ static getAppLogoState(): unknown;
717
719
  static setLoginStore(store: unknown): void;
718
720
  static getLoginStore(): unknown;
719
721
  /** First-write-wins: host registers its store; WC bundles reuse it so popups render in the host outlet. */
@@ -747,15 +749,15 @@ export interface RemoteSelectorConfig {
747
749
  prefix?: string;
748
750
  separator?: string;
749
751
  }
752
+ /**
753
+ * A WC app's runtime wiring. Never its name, description, AppLogo or App
754
+ * Color — those are the Store App's (nx ADR 0007, `AppIdentity`).
755
+ */
750
756
  export interface WebComponentConfig {
751
757
  selector?: string;
752
758
  app: string;
753
- /** What the app is called, from Store's App — `app` is its link. */
754
- name?: string;
755
759
  version: string;
756
- company?: string;
757
760
  timestamp?: string;
758
- logo?: string;
759
761
  inputs?: string[];
760
762
  outputs?: string[];
761
763
  autoRegister?: boolean;
@@ -2575,6 +2577,137 @@ export declare abstract class ResizeElementComponent<T extends Config> extends C
2575
2577
  static ɵfac: i0.ɵɵFactoryDeclaration<ResizeElementComponent<any>, never>;
2576
2578
  static ɵcmp: i0.ɵɵComponentDeclaration<ResizeElementComponent<any>, "ng-component", never, {}, {}, never, never, true, never>;
2577
2579
  }
2580
+ /**
2581
+ * LogoGlyph rules (nx ADR 0007) — the same allowlist rebuild api runs on
2582
+ * save, so the editor refuses what api would refuse before anything is sent.
2583
+ * api's rebuild is the rule; this one is the early answer.
2584
+ */
2585
+ /** The size bound on a LogoGlyph's markup, in UTF-8 bytes. */
2586
+ export declare const LOGO_GLYPH_MAX_BYTES: number;
2587
+ /** Why a glyph was refused — the codes api answers with. */
2588
+ export type LogoGlyphError = '' | 'logo_invalid' | 'logo_too_large';
2589
+ /**
2590
+ * A rebuilt glyph. Flat rather than a union: the wc build does not narrow
2591
+ * discriminated unions. `error` is empty on success, `svg` empty on refusal.
2592
+ */
2593
+ export type LogoGlyphResult = {
2594
+ svg: string;
2595
+ error: LogoGlyphError;
2596
+ };
2597
+ /**
2598
+ * The LogoGlyph as it will be stored: shape elements, their geometry and
2599
+ * on/off paint inside a fresh `<svg>` root. Refuses `logo_too_large` over
2600
+ * the size bound and `logo_invalid` for anything not a drawable SVG.
2601
+ */
2602
+ export declare function rebuildLogoGlyph(markup: string): LogoGlyphResult;
2603
+ /** App Color as stored: `#rrggbb`, lowercased — or undefined when it is not one. */
2604
+ export declare const normalizeAppColor: (value: string) => string | undefined;
2605
+ /** The AppLogo's shadow: App Color mixed with 20% black. */
2606
+ export declare const appLogoShadowColor: (color: string) => string;
2607
+ /**
2608
+ * The theme's brand tokens (`mm`, `mmLite`, `mmDark`) as one App Color draws
2609
+ * them — what an app's own boundary paints its `mm` with in place of the
2610
+ * theme's.
2611
+ */
2612
+ export declare const appColorBrand: (color: string) => {
2613
+ mm: string;
2614
+ mmLite: string;
2615
+ mmDark: string;
2616
+ };
2617
+ /**
2618
+ * Whether a white glyph reads poorly over this App Color: contrast under 3:1,
2619
+ * the WCAG floor for graphical objects. A warning, never a refusal.
2620
+ */
2621
+ export declare const isLightAppColor: (color: string) => boolean;
2622
+ /** A LogoGlyph as a CSS `url(...)`, for painting it through a mask. */
2623
+ export declare const logoGlyphMaskUrl: (svg: string) => string;
2624
+ /**
2625
+ * What a Store App says about itself (nx ADR 0007), as `GET
2626
+ * store/v1/identity/<link>` answers it. The one source of an app's name,
2627
+ * description, AppLogo and App Color — never a WebComponentConfig.
2628
+ */
2629
+ export type AppIdentity = {
2630
+ id: string;
2631
+ link: string;
2632
+ name: string;
2633
+ description: string | null;
2634
+ /** The LogoGlyph, rebuilt from the shape allowlist; null until the Owner sets one. */
2635
+ logoGlyph: string | null;
2636
+ /** App Color, `#rrggbb`; null until the Owner sets one. */
2637
+ appColor: string | null;
2638
+ /** Availability `open` — AppLogo optional, never released as a PWA. */
2639
+ open: boolean;
2640
+ };
2641
+ /**
2642
+ * Reads App Identity from Store — the one read every surface shares (host
2643
+ * nav, a standalone app's chrome, store cards that hold only a link). One
2644
+ * request per link per session; a failed read is not cached, so the next
2645
+ * ask retries.
2646
+ */
2647
+ export declare class AppIdentityService {
2648
+ #private;
2649
+ readonly identity: (link: string) => Observable<AppIdentity | undefined>;
2650
+ /** Drops a link's held read, after its Owner changed it. */
2651
+ readonly forget: (link: string) => void;
2652
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppIdentityService, never>;
2653
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
2654
+ }
2655
+ /**
2656
+ * The reserved icon name that draws the running app's own AppLogo as a glyph
2657
+ * (GLOSSARY.md AppLogoIcon). Never an IconAsset or a file in `icons/`: `m-icon`
2658
+ * reads it from APP_LOGO_SOURCE instead of fetching anything. Its own file so
2659
+ * codegen can read it without Angular.
2660
+ */
2661
+ export declare const APP_LOGO_ICON = "app_logo";
2662
+ /**
2663
+ * The running app's AppLogo as an icon draws it. `glyph` is a Store App's
2664
+ * LogoGlyph (already rebuilt from the allowlist); `src` is the host's
2665
+ * file-based AppLogo; neither is the first letter of `name`.
2666
+ */
2667
+ export type AppLogoSource = {
2668
+ glyph?: string | null;
2669
+ src?: string;
2670
+ name?: string | null;
2671
+ /** App Color, `#rrggbb`, as Store holds it; null until the Owner sets one. */
2672
+ color?: string | null;
2673
+ };
2674
+ /**
2675
+ * Where NavStore publishes the AppLogo. Shared rather than read off NavStore
2676
+ * because `m-icon` sits below features and cannot import it — and handed to a
2677
+ * mounted WC through SharedStoreRegistry, since a WC reads the host's NavStore.
2678
+ * `logos` is every app NavStore knows the identity of, by AppLink: a host may
2679
+ * mount several at once, so each WC looks up its own. `source` is the fallback.
2680
+ */
2681
+ export declare class AppLogoState {
2682
+ #private;
2683
+ readonly source: Signal<AppLogoSource | undefined>;
2684
+ readonly logos: Signal<Record<string, AppLogoSource>>;
2685
+ readonly set: (source: AppLogoSource | undefined) => void;
2686
+ readonly setLogos: (logos: Record<string, AppLogoSource>) => void;
2687
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppLogoState, never>;
2688
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
2689
+ }
2690
+ /**
2691
+ * What `m-icon name="app_logo"` draws: this app's own entry, by the AppLink
2692
+ * AssetStore holds (a mounted WC's, from `bindApp`), else the fallback. A
2693
+ * visual editor provides its own so the Canvas shows the AppTarget's logo.
2694
+ */
2695
+ export declare const APP_LOGO_SOURCE: InjectionToken<Signal<AppLogoSource | undefined>>;
2696
+ /**
2697
+ * This app's App Color, which its own boundary paints as the theme's `mm`
2698
+ * (ThemeStore `color`). Unset at the host's root, so the host's chrome keeps
2699
+ * the theme's brand; a WC and a standalone Run provide it from
2700
+ * `appThemeColorFactory`. Unset too while the Owner has set none, and the
2701
+ * theme's own `mm` stands.
2702
+ */
2703
+ export declare const APP_THEME_COLOR: InjectionToken<Signal<string | undefined>>;
2704
+ /** This app's App Color off the identities NavStore publishes, by its AppLink. */
2705
+ export declare const appThemeColorFactory: () => Signal<string | undefined>;
2706
+ /**
2707
+ * Paints an App Color's brand tokens onto the element that bounds the app —
2708
+ * every `m.$mm` inside it reads them — or clears them, leaving the theme's.
2709
+ */
2710
+ export declare const paintAppColor: (element: HTMLElement, color: string | undefined) => void;
2578
2711
  type ButtonBadge = {
2579
2712
  count?: number;
2580
2713
  variant?: 'default' | 'primary' | 'danger';
@@ -2627,7 +2760,7 @@ export declare class ButtonComponent extends ReactiveElementComponent<Button> {
2627
2760
  navParams: import("@angular/core").InputSignal<Record<string, string | number> | undefined>;
2628
2761
  href: import("@angular/core").InputSignal<string | undefined>;
2629
2762
  disabled: import("@angular/core").InputSignal<boolean | undefined>;
2630
- variant: import("@angular/core").InputSignal<"ghost" | "primary" | "secondary" | "tab" | undefined>;
2763
+ variant: import("@angular/core").InputSignal<"primary" | "ghost" | "secondary" | "tab" | undefined>;
2631
2764
  name: import("@angular/core").InputSignal<string | undefined>;
2632
2765
  baseUrl: import("@angular/core").InputSignal<string | undefined>;
2633
2766
  one: import("@angular/core").InputSignal<boolean | undefined>;
@@ -2822,16 +2955,19 @@ type CustomIconEdit = {
2822
2955
  linecap: 'butt' | 'round' | 'square';
2823
2956
  linejoin: 'miter' | 'round' | 'bevel';
2824
2957
  };
2825
- type Icon = Partial<Config>;
2958
+ type Icon = Partial<Config> & {
2959
+ shadow?: boolean;
2960
+ };
2826
2961
  export declare class IconComponent {
2827
- config: import("@angular/core").ModelSignal<Partial<import("@magmonium/one").Config> | undefined>;
2962
+ config: import("@angular/core").ModelSignal<Icon | undefined>;
2828
2963
  readonly name: import("@angular/core").InputSignal<string | undefined>;
2829
2964
  readonly color: import("@angular/core").InputSignal<string | undefined>;
2830
2965
  readonly size: import("@angular/core").InputSignal<string | number | undefined>;
2831
2966
  readonly one: import("@angular/core").InputSignal<boolean | undefined>;
2832
2967
  readonly baseUrl: import("@angular/core").InputSignal<string | undefined>;
2833
2968
  readonly remote: import("@angular/core").InputSignal<string | undefined>;
2834
- protected readonly resolvedConfig: import("@angular/core").Signal<Partial<import("@magmonium/one").Config> | undefined>;
2969
+ readonly shadow: import("@angular/core").InputSignalWithTransform<boolean | undefined, unknown>;
2970
+ protected readonly resolvedConfig: import("@angular/core").Signal<Icon | undefined>;
2835
2971
  private readonly elementRef;
2836
2972
  private readonly sizeContext;
2837
2973
  private readonly assetStore;
@@ -2842,9 +2978,12 @@ export declare class IconComponent {
2842
2978
  private readonly remoteBaseUrl;
2843
2979
  private readonly iconSource;
2844
2980
  private readonly inlineSvg;
2981
+ private readonly appLogoSource;
2982
+ private readonly appLogo;
2845
2983
  private readonly text;
2846
2984
  private readonly pallet;
2847
2985
  constructor();
2986
+ private readonly applyShadow;
2848
2987
  private readonly applySize;
2849
2988
  private readonly updateElement;
2850
2989
  static ɵfac: i0.ɵɵFactoryDeclaration<IconComponent, never>;
@@ -2884,6 +3023,11 @@ export declare class IconComponent {
2884
3023
  "required": false;
2885
3024
  "isSignal": true;
2886
3025
  };
3026
+ "shadow": {
3027
+ "alias": "shadow";
3028
+ "required": false;
3029
+ "isSignal": true;
3030
+ };
2887
3031
  }, {
2888
3032
  "config": "configChange";
2889
3033
  }, never, ["*"], true, never>;
@@ -3236,7 +3380,7 @@ export declare class ButtonGroupComponent extends ConfigComponent<ButtonGroup> {
3236
3380
  color?: string | keyof import("dist/libs/cli/src").ThemeColor;
3237
3381
  align?: ConfigAlign;
3238
3382
  isLoading?: boolean;
3239
- variant?: "ghost" | "primary" | "secondary" | "tab" | undefined;
3383
+ variant?: "primary" | "ghost" | "secondary" | "tab" | undefined;
3240
3384
  label?: string;
3241
3385
  noTranslate?: boolean;
3242
3386
  params?: Record<string, string>;
@@ -4598,7 +4742,7 @@ export declare class SectionFilterGroupComponent {
4598
4742
  readonly paddingX: import("@angular/core").InputSignal<boolean | undefined>;
4599
4743
  readonly paddingY: import("@angular/core").InputSignal<boolean | undefined>;
4600
4744
  readonly maxWidth: import("@angular/core").InputSignal<string | undefined>;
4601
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
4745
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right" | undefined>;
4602
4746
  readonly config: import("@angular/core").InputSignal<SectionFilterGroupConfig | undefined>;
4603
4747
  /**
4604
4748
  * The whole group's selection, keyed by each Filter's `name` — one key per
@@ -4616,7 +4760,7 @@ export declare class SectionFilterGroupComponent {
4616
4760
  protected readonly resolvedPadding: import("@angular/core").Signal<boolean>;
4617
4761
  protected readonly resolvedPaddingX: import("@angular/core").Signal<boolean>;
4618
4762
  protected readonly resolvedPaddingY: import("@angular/core").Signal<boolean>;
4619
- protected readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right">;
4763
+ protected readonly resolvedAlign: import("@angular/core").Signal<"left" | "center" | "right">;
4620
4764
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
4621
4765
  protected readonly noBorder: import("@angular/core").Signal<boolean>;
4622
4766
  /**
@@ -4795,7 +4939,7 @@ export declare class SectionStepperComponent implements OnDestroy {
4795
4939
  export declare class SectionBadgesComponent {
4796
4940
  readonly wrap: import("@angular/core").InputSignal<boolean>;
4797
4941
  readonly border: import("@angular/core").InputSignal<boolean>;
4798
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
4942
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right">;
4799
4943
  private readonly sectionContext;
4800
4944
  protected readonly hasBorder: import("@angular/core").Signal<boolean>;
4801
4945
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionBadgesComponent, never>;
@@ -4912,7 +5056,7 @@ export declare class SectionToggleComponent<T extends SectionToggleItem = Sectio
4912
5056
  }
4913
5057
  export declare class SectionFooterComponent {
4914
5058
  readonly sticky: import("@angular/core").InputSignal<boolean>;
4915
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
5059
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right">;
4916
5060
  private readonly scrollSticky;
4917
5061
  protected readonly isSticky: import("@angular/core").Signal<boolean>;
4918
5062
  private readonly sectionContext;
@@ -4965,7 +5109,7 @@ export declare class SectionPaginationComponent {
4965
5109
  * Entries that are not positive numbers drop rather than throw.
4966
5110
  */
4967
5111
  readonly perPageOptions: import("@angular/core").InputSignal<string | undefined>;
4968
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right">;
5112
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right">;
4969
5113
  readonly showPerPage: import("@angular/core").InputSignal<boolean>;
4970
5114
  /** Hides the band outright once everything fits one page. */
4971
5115
  readonly hideOnSinglePage: import("@angular/core").InputSignal<boolean>;
@@ -5303,7 +5447,7 @@ export declare class SectionComponent extends ConfigComponent<SectionConfig> {
5303
5447
  readonly align: import("@angular/core").InputSignal<SectionAlign | undefined>;
5304
5448
  readonly alignX: import("@angular/core").InputSignal<GridAlignX | undefined>;
5305
5449
  readonly alignY: import("@angular/core").InputSignal<GridAlignY | undefined>;
5306
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
5450
+ readonly size: import("@angular/core").InputSignal<Size | "sm" | "md" | "lg" | undefined>;
5307
5451
  private readonly parentSize;
5308
5452
  readonly resolvedSize: import("@angular/core").Signal<Size>;
5309
5453
  protected readonly sizeLength: import("@angular/core").Signal<string>;
@@ -5443,8 +5587,8 @@ export declare class SectionHeaderComponent {
5443
5587
  readonly visibilityRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
5444
5588
  readonly disableRule: import("@angular/core").InputSignal<((key: string, data?: unknown) => boolean) | undefined>;
5445
5589
  readonly extraData: import("@angular/core").InputSignal<unknown>;
5446
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
5447
- readonly alignment: import("@angular/core").Signal<"center" | "left" | "right">;
5590
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right" | undefined>;
5591
+ readonly alignment: import("@angular/core").Signal<"left" | "center" | "right">;
5448
5592
  readonly showBack: import("@angular/core").InputSignal<boolean>;
5449
5593
  readonly actionButton: import("@angular/core").InputSignal<string | undefined>;
5450
5594
  readonly actionLabel: import("@angular/core").InputSignal<string | undefined>;
@@ -5461,7 +5605,7 @@ export declare class SectionHeaderComponent {
5461
5605
  protected readonly sidepanel: import("@angular/core").Signal<boolean>;
5462
5606
  protected readonly noBorder: import("@angular/core").Signal<boolean>;
5463
5607
  protected readonly resolvedMaxWidth: import("@angular/core").Signal<string | undefined>;
5464
- protected readonly boxAlign: import("@angular/core").Signal<"center" | "left" | "right">;
5608
+ protected readonly boxAlign: import("@angular/core").Signal<"left" | "center" | "right">;
5465
5609
  protected readonly iconBox: import("@angular/core").Signal<string>;
5466
5610
  protected readonly isSticky: import("@angular/core").Signal<boolean>;
5467
5611
  protected readonly hasMenu: import("@angular/core").Signal<boolean>;
@@ -5572,7 +5716,7 @@ export declare class SectionHeaderComponent {
5572
5716
  "actionClick": "actionClick";
5573
5717
  "action": "action";
5574
5718
  "back": "back";
5575
- }, never, ["*", "m-section-filter-group"], true, never>;
5719
+ }, never, ["m-app-logo", "*", "m-section-filter-group"], true, never>;
5576
5720
  }
5577
5721
  /**
5578
5722
  * Config for `m-section-button-group`. Carries no `names` and no `buttons` —
@@ -5601,7 +5745,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
5601
5745
  readonly vertical: import("@angular/core").InputSignal<boolean | undefined>;
5602
5746
  readonly align: import("@angular/core").InputSignal<ConfigAlign>;
5603
5747
  readonly variant: import("@angular/core").InputSignal<"spaced" | "joined" | undefined>;
5604
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
5748
+ readonly size: import("@angular/core").InputSignal<Size | "sm" | "md" | "lg" | undefined>;
5605
5749
  readonly fullWidth: import("@angular/core").InputSignal<boolean | undefined>;
5606
5750
  private readonly parentSize;
5607
5751
  readonly resolvedSize: import("@angular/core").Signal<Size>;
@@ -5609,7 +5753,7 @@ export declare class SectionButtonGroupComponent extends ConfigComponent<Section
5609
5753
  protected readonly resolvedFullWidth: import("@angular/core").Signal<boolean>;
5610
5754
  protected readonly resolvedVertical: import("@angular/core").Signal<boolean>;
5611
5755
  protected readonly resolvedVariant: import("@angular/core").Signal<"spaced" | "joined">;
5612
- protected readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right" | "bottom" | "top">;
5756
+ protected readonly resolvedAlign: import("@angular/core").Signal<"left" | "top" | "bottom" | "center" | "right">;
5613
5757
  static ɵfac: i0.ɵɵFactoryDeclaration<SectionButtonGroupComponent, never>;
5614
5758
  static ɵcmp: i0.ɵɵComponentDeclaration<SectionButtonGroupComponent, "m-section-button-group", never, {
5615
5759
  "vertical": {
@@ -7117,7 +7261,7 @@ declare class DropdownBoxComponent {
7117
7261
  }
7118
7262
  /** The trigger both option Fields draw: a searchable text input and a chevron. */
7119
7263
  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";
7120
- declare const DROPDOWN_IMPORTS: (typeof ButtonComponent | typeof LabelComponent | typeof TextOutputComponent | typeof SelectorDirective | typeof TextInputComponent)[];
7264
+ declare const DROPDOWN_IMPORTS: (typeof TextOutputComponent | typeof ButtonComponent | typeof LabelComponent | typeof SelectorDirective | typeof TextInputComponent)[];
7121
7265
  /**
7122
7266
  * Everything a Dropdown and a Multiselect share: the options, the search, the
7123
7267
  * keyboard walk and the panel. What differs is only what the Field holds — one
@@ -8472,14 +8616,14 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
8472
8616
  readonly heightMode: import("@angular/core").InputSignal<"fixed" | "full" | undefined>;
8473
8617
  readonly maxHeight: import("@angular/core").InputSignal<string | number | undefined>;
8474
8618
  readonly height: import("@angular/core").InputSignal<string | number | undefined>;
8475
- readonly align: import("@angular/core").InputSignal<"center" | "left" | "right" | undefined>;
8619
+ readonly align: import("@angular/core").InputSignal<"left" | "center" | "right" | undefined>;
8476
8620
  readonly padding: import("@angular/core").InputSignal<string | number | undefined>;
8477
8621
  readonly paddingX: import("@angular/core").InputSignal<string | number | undefined>;
8478
8622
  readonly paddingY: import("@angular/core").InputSignal<string | number | undefined>;
8479
8623
  readonly margin: import("@angular/core").InputSignal<string | number | undefined>;
8480
8624
  readonly marginX: import("@angular/core").InputSignal<string | number | undefined>;
8481
8625
  readonly marginY: import("@angular/core").InputSignal<string | number | undefined>;
8482
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | Size | undefined>;
8626
+ readonly size: import("@angular/core").InputSignal<Size | "sm" | "md" | "lg" | undefined>;
8483
8627
  readonly autofocus: import("@angular/core").InputSignal<boolean>;
8484
8628
  data: import("@angular/core").InputSignal<T | undefined>;
8485
8629
  readonly dataChange: import("@angular/core").OutputEmitterRef<T>;
@@ -8524,7 +8668,7 @@ export declare class SectionFormComponent<T extends object = Record<string, unkn
8524
8668
  protected readonly handleSubmit: (event: Event) => void;
8525
8669
  readonly resolvedSize: import("@angular/core").Signal<Size>;
8526
8670
  protected readonly sizeLength: import("@angular/core").Signal<string | null>;
8527
- readonly resolvedAlign: import("@angular/core").Signal<"center" | "left" | "right">;
8671
+ readonly resolvedAlign: import("@angular/core").Signal<"left" | "center" | "right">;
8528
8672
  readonly resolvedVariant: import("@angular/core").Signal<string | undefined>;
8529
8673
  readonly resolvedMaxWidth: import("@angular/core").Signal<string | number | undefined>;
8530
8674
  private readonly resolvedPadding;
@@ -10153,6 +10297,7 @@ export declare class RemoteComponent implements OnDestroy {
10153
10297
  private readonly navRef;
10154
10298
  private readonly reloadPage;
10155
10299
  private readonly assetStore;
10300
+ private readonly appLogoState;
10156
10301
  private loadedElement?;
10157
10302
  /** Bumped per load, so an answer for a link since replaced is dropped. */
10158
10303
  private loadId;
@@ -10205,6 +10350,8 @@ export declare class RemoteComponent implements OnDestroy {
10205
10350
  private readonly carriesQuery;
10206
10351
  private readonly remotePath;
10207
10352
  private readonly ownTail;
10353
+ /** The mounted app's App Color — the `mm` everything inside this mount draws. */
10354
+ private readonly appColor;
10208
10355
  constructor();
10209
10356
  ngOnDestroy(): void;
10210
10357
  private mountName;
@@ -10588,7 +10735,7 @@ export declare class SortComponent extends ConfigComponent<Sort> {
10588
10735
  protected readonly currentSortLabel: import("@angular/core").Signal<string>;
10589
10736
  protected readonly remainingOptions: import("@angular/core").Signal<import("@magmonium/one").SortOption[]>;
10590
10737
  readonly toggleButtonConfig: import("@angular/core").Signal<Button>;
10591
- readonly menuIconConfig: import("@angular/core").Signal<Partial<Partial<import("@magmonium/one").Config>>>;
10738
+ readonly menuIconConfig: import("@angular/core").Signal<Partial<Icon>>;
10592
10739
  readonly menuItems: import("@angular/core").Signal<MenuItem[][]>;
10593
10740
  readonly menuSelectorConfig: import("@angular/core").Signal<SelectorConfig<ContextMenuBoxComponent>>;
10594
10741
  readonly selectOption: (value: string) => void;
@@ -10669,7 +10816,7 @@ export declare class ImgComponent {
10669
10816
  readonly boxHeight: import("@angular/core").Signal<number | null>;
10670
10817
  readonly isSized: import("@angular/core").Signal<boolean>;
10671
10818
  readonly autoNgSrcset: import("@angular/core").Signal<string | undefined>;
10672
- readonly status: import("@angular/core").WritableSignal<"error" | "loading" | "loaded">;
10819
+ readonly status: import("@angular/core").WritableSignal<"loading" | "loaded" | "error">;
10673
10820
  readonly effectiveSrc: import("@angular/core").Signal<string | null | undefined>;
10674
10821
  readonly showFallback: import("@angular/core").Signal<boolean>;
10675
10822
  readonly isDataUri: import("@angular/core").Signal<boolean>;
@@ -11013,7 +11160,7 @@ export type DocAiPhase = 'idle' | 'asking' | 'question' | 'outline' | 'writing'
11013
11160
  */
11014
11161
  export declare class DocEditorComponent implements ControlValueAccessor {
11015
11162
  protected readonly groups: readonly import("@magmonium/one").DocToolbarGroup[];
11016
- protected readonly icons: Record<"code" | "link" | "table" | "strike" | "list" | "bold" | "heading" | "italic" | "quote", string>;
11163
+ protected readonly icons: Record<"list" | "code" | "link" | "table" | "strike" | "bold" | "heading" | "italic" | "quote", string>;
11017
11164
  protected readonly docActionKey: typeof docActionKey;
11018
11165
  private readonly translate;
11019
11166
  protected readonly value: import("@angular/core").WritableSignal<string>;
@@ -11943,20 +12090,20 @@ export declare class ScrollComponent implements OnDestroy {
11943
12090
  }
11944
12091
  type AppCardVariant = 'small' | 'row' | 'card' | 'tile';
11945
12092
  /**
11946
- * Deployed app-wc.json manifest. Card consumes only: name, description,
11947
- * company, version, logo, pwa.color (-> AppCardData.accentColor) and
11948
- * timestamp (-> AppCardData.lastUpdated). Remaining fields ignored.
12093
+ * Deployed app-wc.json manifest. Card consumes only version and timestamp
12094
+ * (-> AppCardData.lastUpdated) — never identity, which is the Store App's
12095
+ * (nx ADR 0007).
11949
12096
  */
11950
- interface AppManifest extends WebComponentConfig$1 {
11951
- pwa?: {
11952
- color?: string;
11953
- };
11954
- }
12097
+ type AppManifest = WebComponentConfig$1;
11955
12098
  interface AppCardData {
11956
12099
  id: string;
11957
12100
  name: string;
11958
- iconUrl?: string;
11959
- remote?: string;
12101
+ /** The app's AppLink. */
12102
+ link?: string;
12103
+ /** The Store App's LogoGlyph; the AppLogo draws a letter without one. */
12104
+ logoGlyph?: string | null;
12105
+ /** The Store App's App Color — the AppLogo's ground and the card's accent. */
12106
+ appColor?: string | null;
11960
12107
  notificationsCount?: number;
11961
12108
  lastUsed?: number;
11962
12109
  latestNotification?: string;
@@ -11968,9 +12115,6 @@ interface AppCardData {
11968
12115
  statusLabel?: string;
11969
12116
  created?: string;
11970
12117
  version?: string;
11971
- company?: string;
11972
- /** Accent tint sourced from deployed manifest pwa.color. */
11973
- accentColor?: string;
11974
12118
  /** Deployed build time sourced from manifest timestamp. */
11975
12119
  lastUpdated?: string;
11976
12120
  }
@@ -12029,6 +12173,109 @@ export declare class AppCardComponent {
12029
12173
  "actionClick": "actionClick";
12030
12174
  }, never, never, true, never>;
12031
12175
  }
12176
+ /**
12177
+ * The one renderer of an AppLogo (nx ADR 0007): the LogoGlyph painted white
12178
+ * over App Color, with a shadow in App Color mixed with 20% black. The glyph
12179
+ * is a mask, never inserted markup — its own colours never show and nothing
12180
+ * in it can run. Without a glyph it draws the name's first letter instead.
12181
+ * Fills its box; the caller sizes the host.
12182
+ */
12183
+ export declare class AppLogoComponent {
12184
+ /** The LogoGlyph as Store holds it — already rebuilt from the allowlist. */
12185
+ readonly glyph: import("@angular/core").InputSignal<string | null | undefined>;
12186
+ /** App Color, `#rrggbb`. A neutral ground when unset. */
12187
+ readonly appColor: import("@angular/core").InputSignal<string | null | undefined>;
12188
+ /** The app's name (or AppLink): the accessible label and the letter fallback. */
12189
+ readonly name: import("@angular/core").InputSignal<string | null | undefined>;
12190
+ protected readonly color: import("@angular/core").Signal<string | null>;
12191
+ protected readonly shadow: import("@angular/core").Signal<string | null>;
12192
+ protected readonly mask: import("@angular/core").Signal<string | undefined>;
12193
+ protected readonly letter: import("@angular/core").Signal<string>;
12194
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppLogoComponent, never>;
12195
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppLogoComponent, "m-app-logo", never, {
12196
+ "glyph": {
12197
+ "alias": "glyph";
12198
+ "required": false;
12199
+ "isSignal": true;
12200
+ };
12201
+ "appColor": {
12202
+ "alias": "appColor";
12203
+ "required": false;
12204
+ "isSignal": true;
12205
+ };
12206
+ "name": {
12207
+ "alias": "name";
12208
+ "required": false;
12209
+ "isSignal": true;
12210
+ };
12211
+ }, {}, never, never, true, never>;
12212
+ }
12213
+ /**
12214
+ * Where an Owner sets a LogoGlyph and App Color (libs/one GLOSSARY
12215
+ * LogoGlyphInput): an SVG uploaded or pasted, rebuilt from the shape
12216
+ * allowlist before it is kept, and a colour — picked, or one of the
12217
+ * suggestions a host offers. Previewed live as the AppLogo it becomes. A
12218
+ * host's AI panel rides the `[logoAi]` slot and writes through the same two
12219
+ * models. Nothing here saves: the host decides when.
12220
+ */
12221
+ export declare class LogoGlyphInputComponent {
12222
+ /** The kept LogoGlyph — only ever a rebuilt one. */
12223
+ readonly glyph: import("@angular/core").ModelSignal<string | null>;
12224
+ /** The kept App Color, `#rrggbb`. */
12225
+ readonly appColor: import("@angular/core").ModelSignal<string | null>;
12226
+ /** The app's name: the preview's label and its letter fallback. */
12227
+ readonly name: import("@angular/core").InputSignal<string | null | undefined>;
12228
+ /** Colours a host suggests (an AI's ten); picking one sets App Color. */
12229
+ readonly suggestedColors: import("@angular/core").InputSignal<readonly string[]>;
12230
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
12231
+ /** What was pasted or uploaded, as typed — kept even while it is refused. */
12232
+ protected readonly markup: import("@angular/core").WritableSignal<string>;
12233
+ protected readonly error: import("@angular/core").WritableSignal<LogoGlyphError>;
12234
+ protected readonly errorKey: import("@angular/core").Signal<string | undefined>;
12235
+ protected readonly lightColor: import("@angular/core").Signal<boolean>;
12236
+ protected readonly suggestions: import("@angular/core").Signal<string[]>;
12237
+ /** The form's fields: upload and paste both feed `take`, the colour picker App Color. */
12238
+ protected readonly formData: import("@angular/core").Signal<{
12239
+ logo_glyph_paste: string;
12240
+ app_color: string;
12241
+ }>;
12242
+ private lastUpload;
12243
+ /** Takes markup from any path: kept when it rebuilds, told why when not. */
12244
+ readonly take: (markup: string) => void;
12245
+ protected readonly onForm: (data: Record<string, unknown>) => void;
12246
+ protected readonly pickSuggestion: (color: string) => void;
12247
+ static ɵfac: i0.ɵɵFactoryDeclaration<LogoGlyphInputComponent, never>;
12248
+ static ɵcmp: i0.ɵɵComponentDeclaration<LogoGlyphInputComponent, "m-logo-glyph-input", never, {
12249
+ "glyph": {
12250
+ "alias": "glyph";
12251
+ "required": false;
12252
+ "isSignal": true;
12253
+ };
12254
+ "appColor": {
12255
+ "alias": "appColor";
12256
+ "required": false;
12257
+ "isSignal": true;
12258
+ };
12259
+ "name": {
12260
+ "alias": "name";
12261
+ "required": false;
12262
+ "isSignal": true;
12263
+ };
12264
+ "suggestedColors": {
12265
+ "alias": "suggestedColors";
12266
+ "required": false;
12267
+ "isSignal": true;
12268
+ };
12269
+ "disabled": {
12270
+ "alias": "disabled";
12271
+ "required": false;
12272
+ "isSignal": true;
12273
+ };
12274
+ }, {
12275
+ "glyph": "glyphChange";
12276
+ "appColor": "appColorChange";
12277
+ }, never, ["[logoAi]"], true, never>;
12278
+ }
12032
12279
  export declare class PlaygroundComponent {
12033
12280
  config: import("@angular/core").InputSignal<unknown>;
12034
12281
  copied: import("@angular/core").WritableSignal<boolean>;
@@ -12798,6 +13045,15 @@ export type BreadcrumbTrail = {
12798
13045
  * Browses into it while the row itself follows it (GLOSSARY.md Browse).
12799
13046
  */
12800
13047
  browsable?: boolean;
13048
+ /**
13049
+ * A row standing for a mounted app draws that app's AppLogo instead of an
13050
+ * icon (nx ADR 0007) — its root carries no `icon:` of its own.
13051
+ */
13052
+ appLogo?: {
13053
+ glyph: string | null;
13054
+ color: string | null;
13055
+ name: string;
13056
+ };
12801
13057
  };
12802
13058
  export type BreadCrumb = {
12803
13059
  trail?: BreadcrumbTrail[];
@@ -13140,6 +13396,7 @@ export declare class FrameComponent {
13140
13396
  remoteWidgets: import("@angular/core").Signal<Record<string, NavWidgetRegistryEntry>>;
13141
13397
  navMap: import("@angular/core").Signal<import("@magmonium/one").NavMap>;
13142
13398
  wcConfigMap: import("@angular/core").Signal<Record<string, import("dist/libs/cli/src").WebComponentConfig>>;
13399
+ identityMap: import("@angular/core").Signal<Record<string, import("@magmonium/one").AppIdentity>>;
13143
13400
  navLoading: import("@angular/core").Signal<boolean>;
13144
13401
  visibilityAnswers: import("@angular/core").Signal<Record<string, boolean>>;
13145
13402
  navigationEnd: import("@angular/core").Signal<import("@angular/router").RouterStateSnapshot>;
@@ -13174,6 +13431,10 @@ export declare class FrameComponent {
13174
13431
  navMenus: import("@angular/core").Signal<import("@magmonium/one").BreadcrumbTrail[]>;
13175
13432
  navHasContent: import("@angular/core").Signal<boolean>;
13176
13433
  currentWcConfig: import("@angular/core").Signal<import("dist/libs/cli/src").WebComponentConfig | undefined>;
13434
+ currentIdentity: import("@angular/core").Signal<import("@magmonium/one").AppIdentity | undefined>;
13435
+ appLogoLink: import("@angular/core").Signal<string | undefined>;
13436
+ appLogo: import("@angular/core").Signal<import("@magmonium/one").AppLogoSource | undefined>;
13437
+ appLogos: import("@angular/core").Signal<Record<string, import("@magmonium/one").AppLogoSource>>;
13177
13438
  activeAppOpen: import("@angular/core").Signal<boolean>;
13178
13439
  transparentNavIds: import("@angular/core").Signal<ReadonlySet<string>>;
13179
13440
  resolvedNavMenuConfig: import("@angular/core").Signal<import("@magmonium/one").NavMenuConfig | null>;
@@ -13220,6 +13481,8 @@ export declare class FrameComponent {
13220
13481
  mountOf: (navId: string) => import("@magmonium/one").RemoteMount | undefined;
13221
13482
  setWcConfig: (appLink: string, config: import("dist/libs/cli/src").WebComponentConfig) => void;
13222
13483
  loadWcConfig: import("@ngrx/signals/rxjs-interop").RxMethod<string | undefined>;
13484
+ setIdentity: (identity: import("@magmonium/one").AppIdentity) => void;
13485
+ loadIdentity: import("@ngrx/signals/rxjs-interop").RxMethod<string | undefined>;
13223
13486
  loadNav: import("@ngrx/signals/rxjs-interop").RxMethod<{
13224
13487
  navId: string;
13225
13488
  appNavId: string | undefined;
@@ -13265,6 +13528,7 @@ export declare class FrameComponent {
13265
13528
  remoteWidgets: Record<string, NavWidgetRegistryEntry>;
13266
13529
  navMap: import("@magmonium/one").NavMap;
13267
13530
  wcConfigMap: Record<string, import("dist/libs/cli/src").WebComponentConfig>;
13531
+ identityMap: Record<string, import("@magmonium/one").AppIdentity>;
13268
13532
  navLoading: boolean;
13269
13533
  visibilityAnswers: Record<string, boolean>;
13270
13534
  }>;
@@ -13485,6 +13749,11 @@ interface NavState {
13485
13749
  */
13486
13750
  navMap: NavMap;
13487
13751
  wcConfigMap: Record<string, WebComponentConfig$1>;
13752
+ /**
13753
+ * Each app's name, AppLogo and App Color as Store holds them (nx ADR 0007),
13754
+ * keyed by AppLink — the chrome's only source of an app's identity.
13755
+ */
13756
+ identityMap: Record<string, AppIdentity>;
13488
13757
  navLoading: boolean;
13489
13758
  /**
13490
13759
  * What an **async** NavVisibilityConfig answered, keyed by NavId and the
@@ -13550,6 +13819,7 @@ export declare const NavStore: import("@angular/core").Type<{
13550
13819
  remoteWidgets: Signal<Record<string, NavWidgetRegistryEntry>>;
13551
13820
  navMap: Signal<NavMap>;
13552
13821
  wcConfigMap: Signal<Record<string, WebComponentConfig$1>>;
13822
+ identityMap: Signal<Record<string, AppIdentity>>;
13553
13823
  navLoading: Signal<boolean>;
13554
13824
  visibilityAnswers: Signal<Record<string, boolean>>;
13555
13825
  navigationEnd: Signal<RouterStateSnapshot>;
@@ -13581,9 +13851,13 @@ export declare const NavStore: import("@angular/core").Type<{
13581
13851
  }) | null>;
13582
13852
  searchLabel: Signal<string | null>;
13583
13853
  breadcrumb: Signal<BreadCrumb>;
13584
- navMenus: Signal<import("@magmonium/one").BreadcrumbTrail[]>;
13854
+ navMenus: Signal<BreadcrumbTrail[]>;
13585
13855
  navHasContent: Signal<boolean>;
13586
13856
  currentWcConfig: Signal<WebComponentConfig$1 | undefined>;
13857
+ currentIdentity: Signal<AppIdentity | undefined>;
13858
+ appLogoLink: Signal<string | undefined>;
13859
+ appLogo: Signal<AppLogoSource | undefined>;
13860
+ appLogos: Signal<Record<string, AppLogoSource>>;
13587
13861
  activeAppOpen: Signal<boolean>;
13588
13862
  transparentNavIds: Signal<ReadonlySet<string>>;
13589
13863
  resolvedNavMenuConfig: Signal<NavMenuConfig | null>;
@@ -13630,6 +13904,8 @@ export declare const NavStore: import("@angular/core").Type<{
13630
13904
  mountOf: (navId: string) => RemoteMount | undefined;
13631
13905
  setWcConfig: (appLink: string, config: WebComponentConfig$1) => void;
13632
13906
  loadWcConfig: import("@ngrx/signals/rxjs-interop").RxMethod<string | undefined>;
13907
+ setIdentity: (identity: AppIdentity) => void;
13908
+ loadIdentity: import("@ngrx/signals/rxjs-interop").RxMethod<string | undefined>;
13633
13909
  loadNav: import("@ngrx/signals/rxjs-interop").RxMethod<{
13634
13910
  navId: string;
13635
13911
  appNavId: string | undefined;
@@ -13675,6 +13951,7 @@ export declare const NavStore: import("@angular/core").Type<{
13675
13951
  remoteWidgets: Record<string, NavWidgetRegistryEntry>;
13676
13952
  navMap: NavMap;
13677
13953
  wcConfigMap: Record<string, WebComponentConfig$1>;
13954
+ identityMap: Record<string, AppIdentity>;
13678
13955
  navLoading: boolean;
13679
13956
  visibilityAnswers: Record<string, boolean>;
13680
13957
  }>>;
@@ -13925,14 +14202,23 @@ export declare class NavComponent {
13925
14202
  /** An Open App draws as part of the host: the host's logo, no apps button. */
13926
14203
  protected activeAppOpen: import("@angular/core").Signal<boolean>;
13927
14204
  protected logoPending: import("@angular/core").Signal<boolean>;
14205
+ /**
14206
+ * A WC app's AppLogo is drawn from its Store identity (nx ADR 0007) — its
14207
+ * first letter until the identity arrives or while it has no LogoGlyph. The
14208
+ * host, which is not a Store App, keeps its file-based AppLogo.
14209
+ */
13928
14210
  protected logo: import("@angular/core").Signal<{
13929
- src: string;
13930
- alt: string;
13931
14211
  app: string;
13932
- } | {
13933
- src: string;
13934
14212
  alt: string;
14213
+ glyph: string | null;
14214
+ color: string | null;
14215
+ src: undefined;
14216
+ } | {
13935
14217
  app: undefined;
14218
+ alt: string;
14219
+ glyph: null;
14220
+ color: null;
14221
+ src: string;
13936
14222
  } | undefined>;
13937
14223
  /**
13938
14224
  * The App Rail below the AppLogo (GLOSSARY.md App Rail): the Main Slot's App,
@@ -13943,8 +14229,8 @@ export declare class NavComponent {
13943
14229
  key: string;
13944
14230
  appNavId: string;
13945
14231
  pending: boolean;
13946
- src: string | undefined;
13947
- remote: string | undefined;
14232
+ glyph: string | null;
14233
+ color: string | null;
13948
14234
  alt: string;
13949
14235
  active: boolean;
13950
14236
  }[]>;
@@ -14025,6 +14311,7 @@ export declare class NavDetailsComponent {
14025
14311
  remoteWidgets: import("@angular/core").Signal<Record<string, NavWidgetRegistryEntry>>;
14026
14312
  navMap: import("@angular/core").Signal<import("@magmonium/one").NavMap>;
14027
14313
  wcConfigMap: import("@angular/core").Signal<Record<string, import("dist/libs/cli/src").WebComponentConfig>>;
14314
+ identityMap: import("@angular/core").Signal<Record<string, import("@magmonium/one").AppIdentity>>;
14028
14315
  navLoading: import("@angular/core").Signal<boolean>;
14029
14316
  visibilityAnswers: import("@angular/core").Signal<Record<string, boolean>>;
14030
14317
  navigationEnd: import("@angular/core").Signal<import("@angular/router").RouterStateSnapshot>;
@@ -14059,6 +14346,10 @@ export declare class NavDetailsComponent {
14059
14346
  navMenus: import("@angular/core").Signal<import("@magmonium/one").BreadcrumbTrail[]>;
14060
14347
  navHasContent: import("@angular/core").Signal<boolean>;
14061
14348
  currentWcConfig: import("@angular/core").Signal<import("dist/libs/cli/src").WebComponentConfig | undefined>;
14349
+ currentIdentity: import("@angular/core").Signal<import("@magmonium/one").AppIdentity | undefined>;
14350
+ appLogoLink: import("@angular/core").Signal<string | undefined>;
14351
+ appLogo: import("@angular/core").Signal<import("@magmonium/one").AppLogoSource | undefined>;
14352
+ appLogos: import("@angular/core").Signal<Record<string, import("@magmonium/one").AppLogoSource>>;
14062
14353
  activeAppOpen: import("@angular/core").Signal<boolean>;
14063
14354
  transparentNavIds: import("@angular/core").Signal<ReadonlySet<string>>;
14064
14355
  resolvedNavMenuConfig: import("@angular/core").Signal<import("@magmonium/one").NavMenuConfig | null>;
@@ -14105,6 +14396,8 @@ export declare class NavDetailsComponent {
14105
14396
  mountOf: (navId: string) => import("@magmonium/one").RemoteMount | undefined;
14106
14397
  setWcConfig: (appLink: string, config: import("dist/libs/cli/src").WebComponentConfig) => void;
14107
14398
  loadWcConfig: import("@ngrx/signals/rxjs-interop").RxMethod<string | undefined>;
14399
+ setIdentity: (identity: import("@magmonium/one").AppIdentity) => void;
14400
+ loadIdentity: import("@ngrx/signals/rxjs-interop").RxMethod<string | undefined>;
14108
14401
  loadNav: import("@ngrx/signals/rxjs-interop").RxMethod<{
14109
14402
  navId: string;
14110
14403
  appNavId: string | undefined;
@@ -14150,6 +14443,7 @@ export declare class NavDetailsComponent {
14150
14443
  remoteWidgets: Record<string, NavWidgetRegistryEntry>;
14151
14444
  navMap: import("@magmonium/one").NavMap;
14152
14445
  wcConfigMap: Record<string, import("dist/libs/cli/src").WebComponentConfig>;
14446
+ identityMap: Record<string, import("@magmonium/one").AppIdentity>;
14153
14447
  navLoading: boolean;
14154
14448
  visibilityAnswers: Record<string, boolean>;
14155
14449
  }>;
@@ -14278,6 +14572,7 @@ export declare class NavHeaderComponent {
14278
14572
  remoteWidgets: import("@angular/core").Signal<Record<string, NavWidgetRegistryEntry>>;
14279
14573
  navMap: import("@angular/core").Signal<import("@magmonium/one").NavMap>;
14280
14574
  wcConfigMap: import("@angular/core").Signal<Record<string, import("dist/libs/cli/src").WebComponentConfig>>;
14575
+ identityMap: import("@angular/core").Signal<Record<string, import("@magmonium/one").AppIdentity>>;
14281
14576
  navLoading: import("@angular/core").Signal<boolean>;
14282
14577
  visibilityAnswers: import("@angular/core").Signal<Record<string, boolean>>;
14283
14578
  navigationEnd: import("@angular/core").Signal<import("@angular/router").RouterStateSnapshot>;
@@ -14312,6 +14607,10 @@ export declare class NavHeaderComponent {
14312
14607
  navMenus: import("@angular/core").Signal<import("@magmonium/one").BreadcrumbTrail[]>;
14313
14608
  navHasContent: import("@angular/core").Signal<boolean>;
14314
14609
  currentWcConfig: import("@angular/core").Signal<import("dist/libs/cli/src").WebComponentConfig | undefined>;
14610
+ currentIdentity: import("@angular/core").Signal<import("@magmonium/one").AppIdentity | undefined>;
14611
+ appLogoLink: import("@angular/core").Signal<string | undefined>;
14612
+ appLogo: import("@angular/core").Signal<import("@magmonium/one").AppLogoSource | undefined>;
14613
+ appLogos: import("@angular/core").Signal<Record<string, import("@magmonium/one").AppLogoSource>>;
14315
14614
  activeAppOpen: import("@angular/core").Signal<boolean>;
14316
14615
  transparentNavIds: import("@angular/core").Signal<ReadonlySet<string>>;
14317
14616
  resolvedNavMenuConfig: import("@angular/core").Signal<import("@magmonium/one").NavMenuConfig | null>;
@@ -14358,6 +14657,8 @@ export declare class NavHeaderComponent {
14358
14657
  mountOf: (navId: string) => import("@magmonium/one").RemoteMount | undefined;
14359
14658
  setWcConfig: (appLink: string, config: import("dist/libs/cli/src").WebComponentConfig) => void;
14360
14659
  loadWcConfig: import("@ngrx/signals/rxjs-interop").RxMethod<string | undefined>;
14660
+ setIdentity: (identity: import("@magmonium/one").AppIdentity) => void;
14661
+ loadIdentity: import("@ngrx/signals/rxjs-interop").RxMethod<string | undefined>;
14361
14662
  loadNav: import("@ngrx/signals/rxjs-interop").RxMethod<{
14362
14663
  navId: string;
14363
14664
  appNavId: string | undefined;
@@ -14403,6 +14704,7 @@ export declare class NavHeaderComponent {
14403
14704
  remoteWidgets: Record<string, NavWidgetRegistryEntry>;
14404
14705
  navMap: import("@magmonium/one").NavMap;
14405
14706
  wcConfigMap: Record<string, import("dist/libs/cli/src").WebComponentConfig>;
14707
+ identityMap: Record<string, import("@magmonium/one").AppIdentity>;
14406
14708
  navLoading: boolean;
14407
14709
  visibilityAnswers: Record<string, boolean>;
14408
14710
  }>;
@@ -15300,7 +15602,7 @@ type AvatarUser = {
15300
15602
  };
15301
15603
  export declare class UserAvatarComponent {
15302
15604
  user: import("@angular/core").InputSignal<AvatarUser | null | undefined>;
15303
- variant: import("@angular/core").InputSignal<"rounded" | "square">;
15605
+ variant: import("@angular/core").InputSignal<"square" | "rounded">;
15304
15606
  protected readonly name: import("@angular/core").Signal<string>;
15305
15607
  protected readonly abbr: import("@angular/core").Signal<string>;
15306
15608
  protected readonly profilePic: import("@angular/core").Signal<string | undefined>;
@@ -15722,8 +16024,11 @@ export declare function settingsWidgets(): Record<string, NavWidgetEntry>;
15722
16024
  interface AppTileData {
15723
16025
  id: string;
15724
16026
  name: string;
16027
+ /** An icon name, for a tile that is not an app; an app draws its AppLogo. */
15725
16028
  icon?: string;
15726
- remote?: string;
16029
+ /** The Store App's LogoGlyph and App Color (nx ADR 0007). */
16030
+ logoGlyph?: string | null;
16031
+ appColor?: string | null;
15727
16032
  link: string;
15728
16033
  isDraft: boolean;
15729
16034
  }
@@ -15734,10 +16039,7 @@ export declare class AppTileComponent {
15734
16039
  readonly openApp: import("@angular/core").OutputEmitterRef<AppTileData>;
15735
16040
  readonly clearAll: import("@angular/core").OutputEmitterRef<void>;
15736
16041
  protected readonly expanded: import("@angular/core").WritableSignal<boolean>;
15737
- protected readonly fallback = "apps";
15738
16042
  protected readonly icon: import("@angular/core").Signal<string | undefined>;
15739
- protected readonly remote: import("@angular/core").Signal<string | undefined>;
15740
- protected readonly isUrl: import("@angular/core").Signal<boolean>;
15741
16043
  protected readonly notificationCount: import("@angular/core").Signal<number>;
15742
16044
  protected readonly expandOrNavigate: (_event: Event) => void;
15743
16045
  protected readonly handleAction: (button: Button | undefined) => void;