fold-ng 0.10.2 → 0.11.0

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.
@@ -515,6 +515,7 @@ declare const FOLD_BUILTIN_ICONS: {
515
515
  readonly user: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/></svg>";
516
516
  readonly team: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M18,8c-2.206,0-4-1.794-4-4S15.794,0,18,0s4,1.794,4,4-1.794,4-4,4Zm-6,7c-2.206,0-4-1.794-4-4s1.794-4,4-4,4,1.794,4,4-1.794,4-4,4Zm-6-7c-2.206,0-4-1.794-4-4S3.794,0,6,0s4,1.794,4,4-1.794,4-4,4Zm12,14v-2.5c0-1.93-1.57-3.5-3.5-3.5h-5c-1.93,0-3.5,1.57-3.5,3.5v2.5H0v2H24v-2h-6ZM7.157,14.532c-.726-.991-1.157-2.211-1.157-3.532,0-.341,.035-.674,.09-1H3.5c-1.933,0-3.5,1.567-3.5,3.5v2.5H5.261c.513-.62,1.161-1.12,1.896-1.468Zm13.343-4.532h-2.59c.055,.326,.09,.659,.09,1,0,1.321-.431,2.54-1.157,3.532,.734,.348,1.383,.849,1.896,1.468h5.261v-2.5c0-1.933-1.567-3.5-3.5-3.5Z\"/></svg>";
517
517
  readonly work: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6 0h-4V4h4v2z\"/></svg>";
518
+ readonly alert: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"7\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/></svg>";
518
519
  readonly award: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"m23.664,0h-8.475l-2.97,6.003c-.073-.002-.146-.003-.22-.003-.076,0-.152,0-.228.003L8.811,0H.324l4.637,9.399c-1.227,1.538-1.961,3.486-1.961,5.601,0,4.962,4.038,9,9,9s9-4.038,9-9c0-2.121-.738-4.072-1.97-5.612L23.664,0Zm-7.854,1h6.243l-3.751,7.582c-1.334-1.311-3.074-2.209-5.011-2.489l2.52-5.093ZM1.933,1h6.256l2.513,5.094c-1.943.282-3.686,1.186-5.021,2.504L1.933,1Zm18.067,14c0,4.411-3.589,8-8,8s-8-3.589-8-8S7.589,7,12,7s8,3.589,8,8Zm-7.244-5.135h-1.494l-.897,3.135h-3.365v1.453l2.318,1.336-1.081,2.955,1.158.86,2.614-2.074,2.609,2.093,1.205-.831-1.171-2.969,2.347-1.377v-1.445h-3.347l-.896-3.135Zm.652,5.528l1.14,2.892-2.536-2.034-2.535,2.011,1.067-2.919-2.328-1.343h2.902l.89-3.11.89,3.11h2.884l-2.375,1.393Z\"/></svg>";
519
520
  readonly clock: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12,24C5.383,24,0,18.617,0,12S5.383,0,12,0s12,5.383,12,12-5.383,12-12,12ZM12,1C5.935,1,1,5.935,1,12s4.935,11,11,11,11-4.935,11-11S18.065,1,12,1Zm5,11.5c0-.276-.224-.5-.5-.5h-4.5V5.5c0-.276-.224-.5-.5-.5s-.5,.224-.5,.5v7c0,.276,.224,.5,.5,.5h5c.276,0,.5-.224,.5-.5Z\"/></svg>";
520
521
  readonly completed: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"m13,11h4v1h-4v-1ZM21,2v19.5c0,1.378-1.121,2.5-2.5,2.5H5.5c-1.379,0-2.5-1.122-2.5-2.5V2h5.05c.232-1.14,1.243-2,2.45-2h3c1.207,0,2.218.86,2.45,2h5.05Zm-1,1h-5v-.5c0-.827-.673-1.5-1.5-1.5h-3c-.827,0-1.5.673-1.5,1.5v.5h-5v18.5c0,.827.673,1.5,1.5,1.5h13c.827,0,1.5-.673,1.5-1.5V3Zm-11.216,7.952c-.056.056-.18.055-.241-.006l-1.778-1.721-.695.719,1.772,1.716c.221.22.514.341.825.341s.604-.122.821-.339l3.362-3.305-.701-.713-3.365,3.308Zm4.216,7.048h4v-1h-4v1Zm-4.216-1.048c-.056.057-.18.055-.241-.006l-1.778-1.721-.695.719,1.772,1.716c.221.22.514.341.825.341s.604-.122.821-.339l3.362-3.305-.701-.713-3.365,3.308Z\"/></svg>";
@@ -571,6 +572,7 @@ declare const FOLD_BUILTIN_ICONS: {
571
572
  readonly contracts: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2.5\" y=\"2.5\" width=\"12\" height=\"17\" rx=\"2\"/><path d=\"M5.5 6.5h3M5.5 9.5h5.5M5.5 12.5h5.5\"/><path d=\"M5.5 15.8l1.6 1.6 3-3.4\"/><path d=\"M12 20.5 14.59 19.16 21.28 8.29 18.72 6.71 12.03 17.58Z\"/><path d=\"M12.03 17.58 14.59 19.16M17.94 7.99 20.49 9.56\"/></svg>";
572
573
  readonly help: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/></svg>";
573
574
  readonly home: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 11l9-8 9 8v10a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1z\"/></svg>";
575
+ readonly login: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g transform=\"translate(24,0) scale(-1,1)\"><path d=\"M24,1.5V22.5c0,.83-.67,1.5-1.5,1.5s-1.5-.67-1.5-1.5V1.5c0-.83,.67-1.5,1.5-1.5s1.5,.67,1.5,1.5Zm-6.5,9H4.25l3.33-3.46c.57-.6,.56-1.55-.04-2.12-.6-.58-1.55-.56-2.12,.04L1.03,9.52c-.66,.66-1.03,1.54-1.03,2.48s.36,1.81,1.01,2.45l4.41,4.59c.29,.31,.69,.46,1.08,.46s.75-.14,1.04-.42c.6-.57,.62-1.52,.04-2.12l-3.33-3.46h13.25c.83,0,1.5-.67,1.5-1.5s-.67-1.5-1.5-1.5Z\"/></g></svg>";
574
576
  readonly logout: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M24,1.5V22.5c0,.83-.67,1.5-1.5,1.5s-1.5-.67-1.5-1.5V1.5c0-.83,.67-1.5,1.5-1.5s1.5,.67,1.5,1.5Zm-6.5,9H4.25l3.33-3.46c.57-.6,.56-1.55-.04-2.12-.6-.58-1.55-.56-2.12,.04L1.03,9.52c-.66,.66-1.03,1.54-1.03,2.48s.36,1.81,1.01,2.45l4.41,4.59c.29,.31,.69,.46,1.08,.46s.75-.14,1.04-.42c.6-.57,.62-1.52,.04-2.12l-3.33-3.46h13.25c.83,0,1.5-.67,1.5-1.5s-.67-1.5-1.5-1.5Z\"/></svg>";
575
577
  readonly music: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 17V5l10-2v12\"/><circle cx=\"7\" cy=\"17\" r=\"2.5\"/><circle cx=\"17\" cy=\"15\" r=\"2.5\"/></svg>";
576
578
  readonly "org-chart": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M22 11V3h-7v3H9V3H2v8h7V8h2v10h4v3h7v-8h-7v3h-2V8h2v3h7zM7 9H4V5h3v4zm10 6h3v4h-3v-4zm0-10v4h3V5h-3z\"/></svg>";
@@ -613,7 +615,10 @@ declare const FOLD_BUILTIN_ICONS: {
613
615
  readonly globe: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 3C6.5 3 2 9 2 12s4.5 9 10 9 10-6 10-9-4.5-9-10-9z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/></svg>";
614
616
  readonly grid: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/></svg>";
615
617
  readonly list: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M3 6h18M3 10h18M3 14h18M3 18h18\"/></svg>";
618
+ readonly inbox: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"22 12 16 12 14 15 10 15 8 12 2 12\"/><path d=\"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"/></svg>";
616
619
  readonly lock: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>";
620
+ readonly hash: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"4\" y1=\"9\" x2=\"20\" y2=\"9\"/><line x1=\"4\" y1=\"15\" x2=\"20\" y2=\"15\"/><line x1=\"10\" y1=\"3\" x2=\"8\" y2=\"21\"/><line x1=\"16\" y1=\"3\" x2=\"14\" y2=\"21\"/></svg>";
621
+ readonly phone: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.9.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z\"/></svg>";
617
622
  readonly mail: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"m3 7 9 6 9-6\"/></svg>";
618
623
  readonly menu: "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 7h16a1 1 0 0 0 0-2H4a1 1 0 0 0 0 2zm16 4H4a1 1 0 0 0 0 2h16a1 1 0 0 0 0-2zm0 6H4a1 1 0 0 0 0 2h16a1 1 0 0 0 0-2z\"/></svg>";
619
624
  readonly "more-vertical": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><circle cx=\"12\" cy=\"5\" r=\"1.8\"/><circle cx=\"12\" cy=\"12\" r=\"1.8\"/><circle cx=\"12\" cy=\"19\" r=\"1.8\"/></svg>";
@@ -643,42 +648,69 @@ declare const FOLD_BUILTIN_ICONS: {
643
648
  declare const FOLD_BUILTIN_ICON_CATEGORIES: readonly [{
644
649
  readonly id: "ui";
645
650
  readonly label: "UI";
646
- readonly names: string[];
651
+ readonly names: ("code" | "menu" | "search" | "filter" | "view" | "add-doc" | "archive" | "arrow-back" | "arrow-right" | "bin" | "calendar" | "chat" | "check-circle" | "check" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "close" | "collapse-all" | "copy" | "door" | "download" | "edit" | "expand-all" | "eye-off" | "eye" | "file-add" | "folder-open" | "folder" | "globe" | "grid" | "list" | "inbox" | "lock" | "hash" | "phone" | "mail" | "more-vertical" | "palette" | "playlist-add" | "plus" | "minus" | "redo" | "reload" | "reset" | "save" | "sliders" | "undo" | "ungroup" | "upload" | "wrench")[];
647
652
  }, {
648
653
  readonly id: "nav";
649
654
  readonly label: "Navigation";
650
- readonly names: string[];
655
+ readonly names: ("absence" | "bell" | "company" | "contracts" | "help" | "home" | "login" | "logout" | "music" | "org-chart" | "planning" | "program" | "settings" | "show" | "stats" | "theme-dark" | "theme-light" | "timeline" | "library")[];
651
656
  }, {
652
657
  readonly id: "commerce";
653
658
  readonly label: "Commerce";
654
- readonly names: string[];
659
+ readonly names: ("shopping-cart" | "shopping-bag" | "basket" | "package" | "package-check" | "tag" | "tags" | "barcode" | "qr-code" | "gift" | "credit-card" | "wallet" | "receipt" | "coins" | "banknote" | "percent" | "truck" | "store" | "warehouse" | "map-pin" | "package-return")[];
655
660
  }, {
656
661
  readonly id: "music";
657
662
  readonly label: "Music";
658
- readonly names: string[];
663
+ readonly names: ("fast-forward" | "fire" | "heart-border" | "heart" | "metronome" | "microphone" | "music-file" | "music-note" | "mute" | "next-track" | "pause" | "play-circle" | "play" | "prev-track" | "repeat" | "rewind" | "volume" | "waveform")[];
659
664
  }, {
660
665
  readonly id: "status";
661
666
  readonly label: "Status";
662
- readonly names: string[];
667
+ readonly names: ("info" | "warning" | "alert" | "award" | "clock" | "completed" | "diamond" | "lightning" | "offline-bolt" | "shield" | "x-circle" | "star")[];
663
668
  }, {
664
669
  readonly id: "people";
665
670
  readonly label: "People";
666
- readonly names: string[];
671
+ readonly names: ("briefcase" | "give-rights" | "graduation-cap" | "group-lead" | "king" | "leader" | "referral" | "user" | "team" | "work")[];
667
672
  }, {
668
673
  readonly id: "brands";
669
674
  readonly label: "Brands";
670
- readonly names: string[];
675
+ readonly names: ("fold" | "discord" | "slack" | "teams" | "telegram" | "whatsapp" | "github" | "linkedin" | "paypal" | "x")[];
671
676
  }];
672
677
  /** A built-in icon category id (`"ui"`, `"commerce"`, …). */
673
678
  type FoldIconCategoryId = (typeof FOLD_BUILTIN_ICON_CATEGORIES)[number]["id"];
674
679
  /** Every built-in icon name — derived from the registry keys (autocompletes). */
675
680
  type FoldBuiltinIconName = keyof typeof FOLD_BUILTIN_ICONS;
676
681
  /**
677
- * The `name` a `fold-icon` accepts: a built-in (autocompleted + type-checked) or
678
- * any custom string a consumer has registered. `(string & {})` keeps the
679
- * built-in literals in autocomplete while still admitting a bare `string`.
682
+ * The names a consumer has added on top of the built-in set — **empty here, and
683
+ * meant to be augmented**. Declare your app's icons once, derived from the very
684
+ * object you register, so the two can never drift:
685
+ *
686
+ * ```ts
687
+ * export const APP_ICONS = { "my-logo": "<svg …>" } as const;
688
+ *
689
+ * declare module "fold-ng" {
690
+ * interface FoldCustomIcons extends Record<keyof typeof APP_ICONS, true> {}
691
+ * }
692
+ *
693
+ * // app.config.ts
694
+ * providers: [provideFoldIcons(APP_ICONS)];
695
+ * ```
696
+ *
697
+ * **Overriding a built-in needs no declaration.** `bin` is already a known name,
698
+ * so re-registering it with your own art type-checks as it stands — the registry
699
+ * merges consumer entries over the built-ins.
700
+ */
701
+ interface FoldCustomIcons {
702
+ }
703
+ /**
704
+ * The `name` a `fold-icon` accepts: a built-in, or one the consumer declared via
705
+ * {@link FoldCustomIcons}.
706
+ *
707
+ * This used to be `FoldBuiltinIconName | (string & {})` — autocomplete for the
708
+ * built-ins, but any string admitted. A typo (`"trahs"`) and a name that simply
709
+ * doesn't exist (`"alert"`, before it did) both compiled, and surfaced only as a
710
+ * `console.warn` and a hole where the glyph should be. Six such holes were live
711
+ * across three apps when this was tightened.
680
712
  */
681
- type FoldIconName = FoldBuiltinIconName | (string & {});
713
+ type FoldIconName = FoldBuiltinIconName | keyof FoldCustomIcons;
682
714
 
683
715
  /** Size presets map to an icon-size token; a number is interpreted as pixels. */
684
716
  type FoldIconSize = "xs" | "sm" | "md" | "lg" | "xl" | number;
@@ -1171,6 +1203,56 @@ declare class FoldInlineConfirmComponent {
1171
1203
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldInlineConfirmComponent, "fold-inline-confirm", never, { "intent": { "alias": "intent"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "match": { "alias": "match"; "required": false; "isSignal": true; }; "password": { "alias": "password"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "confirmIcon": { "alias": "confirmIcon"; "required": false; "isSignal": true; }; "cancelIcon": { "alias": "cancelIcon"; "required": false; "isSignal": true; }; "keepOpenOnConfirm": { "alias": "keepOpenOnConfirm"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "confirmed": "confirmed"; "cancelled": "cancelled"; "open": "openChange"; }, never, ["*"], true, never>;
1172
1204
  }
1173
1205
 
1206
+ /**
1207
+ * The handful of words the package says **on its own**, scattered across
1208
+ * components rather than owned by one.
1209
+ *
1210
+ * Every other label cluster in fold-ng belongs to a single component
1211
+ * (`fold-paginator`, `fold-data-table`, …) and gets its own token. These four do
1212
+ * not: `optional` sits on every labelled field, `info` on every help bubble,
1213
+ * `clear` on a clearable control, `loading` on a placeholder that can appear
1214
+ * anywhere. Left as per-instance inputs only, a non-English app had to repeat
1215
+ * the same translation at every call site — 25 `optionalLabel="facultatif"`
1216
+ * across 9 files in the app that prompted this — or, worse, forget one and ship
1217
+ * a lone English word into an otherwise translated screen.
1218
+ *
1219
+ * Precedence, as everywhere in the package: **English default ← app-wide
1220
+ * provider ← the component's own input**. The per-instance input still wins, for
1221
+ * the field whose help bubble deserves a sentence of its own.
1222
+ */
1223
+ interface FoldCommonLabels {
1224
+ /** The word inside a label's `(optional)` marker. */
1225
+ readonly optional: string;
1226
+ /** Accessible name of a help-bubble trigger (`fold-info`, `info` inputs). */
1227
+ readonly info: string;
1228
+ /** Accessible name of a control's clear (×) affordance. */
1229
+ readonly clear: string;
1230
+ /** Message of a `fold-loading` placeholder given no `message`. */
1231
+ readonly loading: string;
1232
+ }
1233
+ /** The English defaults — the base every override merges onto. */
1234
+ declare const FOLD_COMMON_DEFAULT_LABELS: FoldCommonLabels;
1235
+ /** App-wide shared labels; defaults to English. */
1236
+ declare const FOLD_COMMON_LABELS: InjectionToken<FoldCommonLabels>;
1237
+ /**
1238
+ * Provide the package's shared labels once at bootstrap. Partial — any key you
1239
+ * omit keeps its English default.
1240
+ *
1241
+ * @example
1242
+ * ```ts
1243
+ * // app.config.ts
1244
+ * providers: [
1245
+ * provideFoldCommonLabels({
1246
+ * optional: "facultatif",
1247
+ * info: "En savoir plus",
1248
+ * clear: "Effacer",
1249
+ * loading: "Chargement…",
1250
+ * }),
1251
+ * ];
1252
+ * ```
1253
+ */
1254
+ declare function provideFoldCommonLabels(labels: Partial<FoldCommonLabels>): Provider;
1255
+
1174
1256
  /** Which band(s) carry a chrome treatment (a separator hairline or a raised
1175
1257
  * tint): neither, just the header, just the footer, or both. */
1176
1258
  type FoldCardBandChrome = "none" | "header" | "footer" | "both";
@@ -1863,10 +1945,17 @@ declare class FoldNavLauncherComponent {
1863
1945
  *
1864
1946
  * @selector `a[fold-nav-tile]`, `button[fold-nav-tile]`
1865
1947
  *
1948
+ * `badge` puts a count (or a short tag) in the tile's corner, with the same
1949
+ * meaning as {@link FoldMenuItemComponent}'s: a rail entry and its launcher tile
1950
+ * are **the same destination**, so what one can say the other must be able to
1951
+ * say too — otherwise an app that shows "3 waiting" in the rail goes silent the
1952
+ * moment the window narrows.
1953
+ *
1866
1954
  * @example
1867
1955
  * ```html
1868
1956
  * <a fold-nav-tile icon="home" label="Home" routerLink="/"></a>
1869
1957
  * <button fold-nav-tile icon="music" label="Music" variant="filled"></button>
1958
+ * <a fold-nav-tile icon="inbox" label="Inbox" [badge]="3" badgeTone="accent"></a>
1870
1959
  * ```
1871
1960
  */
1872
1961
  declare class FoldNavTileComponent {
@@ -1878,8 +1967,26 @@ declare class FoldNavTileComponent {
1878
1967
  readonly variant: _angular_core.InputSignal<"filled" | "surface">;
1879
1968
  /** Lights the active indicator — the current destination. */
1880
1969
  readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
1970
+ /**
1971
+ * Optional badge: a count (`3`) or a short text tag (`"new"`). Same reading as
1972
+ * {@link FoldMenuItemComponent.badge} — nullish, `""` and a count of **`0`**
1973
+ * all render nothing, so a caller can pass a raw count and let zero mean
1974
+ * "nothing to say" rather than pre-mapping it to `null`.
1975
+ */
1976
+ readonly badge: _angular_core.InputSignal<string | number | undefined>;
1977
+ /** Badge colour — `follow` (default) tracks the tile's look, or a semantic tone. */
1978
+ readonly badgeTone: _angular_core.InputSignal<FoldMenuItemBadgeTone>;
1979
+ /** Whether a badge renders at all (non-empty text / non-zero count). */
1980
+ protected readonly hasBadge: _angular_core.Signal<boolean>;
1981
+ /** The badge's text — a count over 99 is capped, as in the collapsed rail. */
1982
+ protected readonly badgeText: _angular_core.Signal<string>;
1983
+ /**
1984
+ * Accessible name folding the badge in. The bubble itself is `aria-hidden`:
1985
+ * read on its own it would announce a bare "3", detached from what it counts.
1986
+ */
1987
+ protected readonly ariaLabel: _angular_core.Signal<string | null>;
1881
1988
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldNavTileComponent, never>;
1882
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldNavTileComponent, "a[fold-nav-tile], button[fold-nav-tile]", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1989
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldNavTileComponent, "a[fold-nav-tile], button[fold-nav-tile]", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "badgeTone": { "alias": "badgeTone"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1883
1990
  }
1884
1991
 
1885
1992
  /**
@@ -4280,14 +4387,25 @@ declare class FoldInputComponent implements FormValueControl<string> {
4280
4387
  /** Show a lighter `(optional)` marker on the label (ignored when required). */
4281
4388
  readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
4282
4389
  /** The word inside the optional marker. @default 'optional' */
4283
- readonly optionalLabel: _angular_core.InputSignal<string>;
4390
+ readonly optionalLabel: _angular_core.InputSignal<string | undefined>;
4284
4391
  /**
4285
4392
  * Longer explanation behind an `i` at the end of the label line — for the
4286
4393
  * sentence or two a {@link hint} can't carry. Forwarded to `fold-input-base`.
4287
4394
  */
4288
4395
  readonly info: _angular_core.InputSignal<string | undefined>;
4289
4396
  /** Accessible name of the info button. @default 'More information' */
4290
- readonly infoLabel: _angular_core.InputSignal<string>;
4397
+ readonly infoLabel: _angular_core.InputSignal<string | undefined>;
4398
+ /**
4399
+ * Accessible name for the control itself, when there is **no visible
4400
+ * `label`** — a filter in a toolbar, a control whose meaning the surrounding
4401
+ * text already carries. Without it such a control reaches assistive tech named
4402
+ * only by its current value ("Week"), which says nothing about what it sets.
4403
+ *
4404
+ * Prefer a visible `label`: it names the control for *everyone*. Set this only
4405
+ * where the design genuinely has no room — and never both, since `aria-label`
4406
+ * would override the visible one and leave the two out of sync.
4407
+ */
4408
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
4291
4409
  /** Optional helper text shown under the input. */
4292
4410
  readonly hint: _angular_core.InputSignal<string | undefined>;
4293
4411
  /** Placeholder text. */
@@ -4332,7 +4450,7 @@ declare class FoldInputComponent implements FormValueControl<string> {
4332
4450
  /** Mark the field touched on blur, so errors can surface. */
4333
4451
  protected onBlur(): void;
4334
4452
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldInputComponent, never>;
4335
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldInputComponent, "fold-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "revealable": { "alias": "revealable"; "required": false; "isSignal": true; }; "revealLabel": { "alias": "revealLabel"; "required": false; "isSignal": true; }; "hideLabel": { "alias": "hideLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "optionalLabel": { "alias": "optionalLabel"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "infoLabel": { "alias": "infoLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
4453
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldInputComponent, "fold-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "revealable": { "alias": "revealable"; "required": false; "isSignal": true; }; "revealLabel": { "alias": "revealLabel"; "required": false; "isSignal": true; }; "hideLabel": { "alias": "hideLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "optionalLabel": { "alias": "optionalLabel"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "infoLabel": { "alias": "infoLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
4336
4454
  }
4337
4455
 
4338
4456
  /** The increment/decrement glyph: chevrons, `− / +`, or no buttons. */
@@ -4387,14 +4505,14 @@ declare class FoldNumberInputComponent implements FormValueControl<number | null
4387
4505
  /** Show a lighter `(optional)` marker on the label (ignored when required). */
4388
4506
  readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
4389
4507
  /** The word inside the optional marker. @default 'optional' */
4390
- readonly optionalLabel: _angular_core.InputSignal<string>;
4508
+ readonly optionalLabel: _angular_core.InputSignal<string | undefined>;
4391
4509
  /**
4392
4510
  * Longer explanation behind an `i` at the end of the label line — for the
4393
4511
  * sentence or two a {@link hint} can't carry. Forwarded to `fold-input-base`.
4394
4512
  */
4395
4513
  readonly info: _angular_core.InputSignal<string | undefined>;
4396
4514
  /** Accessible name of the info button. @default 'More information' */
4397
- readonly infoLabel: _angular_core.InputSignal<string>;
4515
+ readonly infoLabel: _angular_core.InputSignal<string | undefined>;
4398
4516
  /** Optional helper text shown under the input. */
4399
4517
  readonly hint: _angular_core.InputSignal<string | undefined>;
4400
4518
  /** Placeholder text. */
@@ -4535,14 +4653,14 @@ declare class FoldTextareaComponent implements FormValueControl<string> {
4535
4653
  /** Show a lighter `(optional)` marker on the label (ignored when required). */
4536
4654
  readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
4537
4655
  /** The word inside the optional marker. @default 'optional' */
4538
- readonly optionalLabel: _angular_core.InputSignal<string>;
4656
+ readonly optionalLabel: _angular_core.InputSignal<string | undefined>;
4539
4657
  /**
4540
4658
  * Longer explanation behind an `i` at the end of the label line — for the
4541
4659
  * sentence or two a {@link hint} can't carry. Forwarded to `fold-input-base`.
4542
4660
  */
4543
4661
  readonly info: _angular_core.InputSignal<string | undefined>;
4544
4662
  /** Accessible name of the info button. @default 'More information' */
4545
- readonly infoLabel: _angular_core.InputSignal<string>;
4663
+ readonly infoLabel: _angular_core.InputSignal<string | undefined>;
4546
4664
  /** Optional helper text shown under the control. */
4547
4665
  readonly hint: _angular_core.InputSignal<string | undefined>;
4548
4666
  /** Placeholder text. */
@@ -4628,14 +4746,14 @@ declare class FoldDateComponent implements FormValueControl<string> {
4628
4746
  /** Show a lighter `(optional)` marker on the label (ignored when required). */
4629
4747
  readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
4630
4748
  /** The word inside the optional marker. @default 'optional' */
4631
- readonly optionalLabel: _angular_core.InputSignal<string>;
4749
+ readonly optionalLabel: _angular_core.InputSignal<string | undefined>;
4632
4750
  /**
4633
4751
  * Longer explanation behind an `i` at the end of the label line — for the
4634
4752
  * sentence or two a {@link hint} can't carry. Forwarded to `fold-input-base`.
4635
4753
  */
4636
4754
  readonly info: _angular_core.InputSignal<string | undefined>;
4637
4755
  /** Accessible name of the info button. @default 'More information' */
4638
- readonly infoLabel: _angular_core.InputSignal<string>;
4756
+ readonly infoLabel: _angular_core.InputSignal<string | undefined>;
4639
4757
  /** Optional helper text shown under the control. */
4640
4758
  readonly hint: _angular_core.InputSignal<string | undefined>;
4641
4759
  /** Render as read-only. Named `readOnly` (not `readonly`) to avoid the
@@ -4709,14 +4827,14 @@ declare class FoldTimeComponent implements FormValueControl<string> {
4709
4827
  /** Show a lighter `(optional)` marker on the label (ignored when required). */
4710
4828
  readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
4711
4829
  /** The word inside the optional marker. @default 'optional' */
4712
- readonly optionalLabel: _angular_core.InputSignal<string>;
4830
+ readonly optionalLabel: _angular_core.InputSignal<string | undefined>;
4713
4831
  /**
4714
4832
  * Longer explanation behind an `i` at the end of the label line — for the
4715
4833
  * sentence or two a {@link hint} can't carry. Forwarded to `fold-input-base`.
4716
4834
  */
4717
4835
  readonly info: _angular_core.InputSignal<string | undefined>;
4718
4836
  /** Accessible name of the info button. @default 'More information' */
4719
- readonly infoLabel: _angular_core.InputSignal<string>;
4837
+ readonly infoLabel: _angular_core.InputSignal<string | undefined>;
4720
4838
  /** Optional helper text shown under the control. */
4721
4839
  readonly hint: _angular_core.InputSignal<string | undefined>;
4722
4840
  /** Render as read-only. Named `readOnly` (not `readonly`) to avoid the
@@ -4817,14 +4935,25 @@ declare class FoldSelectComponent implements FormValueControl<string> {
4817
4935
  /** Show a lighter `(optional)` marker on the label (ignored when required). */
4818
4936
  readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
4819
4937
  /** The word inside the optional marker. @default 'optional' */
4820
- readonly optionalLabel: _angular_core.InputSignal<string>;
4938
+ readonly optionalLabel: _angular_core.InputSignal<string | undefined>;
4821
4939
  /**
4822
4940
  * Longer explanation behind an `i` at the end of the label line — for the
4823
4941
  * sentence or two a {@link hint} can't carry. Forwarded to `fold-input-base`.
4824
4942
  */
4825
4943
  readonly info: _angular_core.InputSignal<string | undefined>;
4826
4944
  /** Accessible name of the info button. @default 'More information' */
4827
- readonly infoLabel: _angular_core.InputSignal<string>;
4945
+ readonly infoLabel: _angular_core.InputSignal<string | undefined>;
4946
+ /**
4947
+ * Accessible name for the control itself, when there is **no visible
4948
+ * `label`** — a filter in a toolbar, a control whose meaning the surrounding
4949
+ * text already carries. Without it such a control reaches assistive tech named
4950
+ * only by its current value ("Week"), which says nothing about what it sets.
4951
+ *
4952
+ * Prefer a visible `label`: it names the control for *everyone*. Set this only
4953
+ * where the design genuinely has no room — and never both, since `aria-label`
4954
+ * would override the visible one and leave the two out of sync.
4955
+ */
4956
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
4828
4957
  /** Optional helper text shown under the control. */
4829
4958
  readonly hint: _angular_core.InputSignal<string | undefined>;
4830
4959
  /** Optional placeholder — a leading, disabled option shown while empty. */
@@ -4840,7 +4969,7 @@ declare class FoldSelectComponent implements FormValueControl<string> {
4840
4969
  /** Mark the field touched on blur, so errors can surface. */
4841
4970
  protected onBlur(): void;
4842
4971
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldSelectComponent, never>;
4843
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldSelectComponent, "fold-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "optionalLabel": { "alias": "optionalLabel"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "infoLabel": { "alias": "infoLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
4972
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldSelectComponent, "fold-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "optionalLabel": { "alias": "optionalLabel"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "infoLabel": { "alias": "infoLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
4844
4973
  }
4845
4974
 
4846
4975
  /**
@@ -5031,14 +5160,25 @@ declare class FoldListboxComponent<T> implements FormValueControl<T | null>, Fol
5031
5160
  /** Show a lighter `(optional)` marker on the label (ignored when required). */
5032
5161
  readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
5033
5162
  /** The word inside the optional marker. @default 'optional' */
5034
- readonly optionalLabel: _angular_core.InputSignal<string>;
5163
+ readonly optionalLabel: _angular_core.InputSignal<string | undefined>;
5035
5164
  /**
5036
5165
  * Longer explanation behind an `i` at the end of the label line — for the
5037
5166
  * sentence or two a {@link hint} can't carry. Forwarded to `fold-input-base`.
5038
5167
  */
5039
5168
  readonly info: _angular_core.InputSignal<string | undefined>;
5040
5169
  /** Accessible name of the info button. @default 'More information' */
5041
- readonly infoLabel: _angular_core.InputSignal<string>;
5170
+ readonly infoLabel: _angular_core.InputSignal<string | undefined>;
5171
+ /**
5172
+ * Accessible name for the control itself, when there is **no visible
5173
+ * `label`** — a filter in a toolbar, a control whose meaning the surrounding
5174
+ * text already carries. Without it such a control reaches assistive tech named
5175
+ * only by its current value ("Week"), which says nothing about what it sets.
5176
+ *
5177
+ * Prefer a visible `label`: it names the control for *everyone*. Set this only
5178
+ * where the design genuinely has no room — and never both, since `aria-label`
5179
+ * would override the visible one and leave the two out of sync.
5180
+ */
5181
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
5042
5182
  /** Optional helper text shown under the control. */
5043
5183
  readonly hint: _angular_core.InputSignal<string | undefined>;
5044
5184
  /** Text shown on the trigger while nothing is selected. */
@@ -5048,7 +5188,10 @@ declare class FoldListboxComponent<T> implements FormValueControl<T | null>, Fol
5048
5188
  /** Show a clear (×) affordance on the trigger once a value is picked. */
5049
5189
  readonly allowClear: _angular_core.InputSignalWithTransform<boolean, unknown>;
5050
5190
  /** Accessible name of the clear button. @default 'Clear' */
5051
- readonly clearLabel: _angular_core.InputSignal<string>;
5191
+ readonly clearLabel: _angular_core.InputSignal<string | undefined>;
5192
+ private readonly common;
5193
+ /** English default ← app-wide provider ← this instance's own input. */
5194
+ protected readonly clearWord: _angular_core.Signal<string>;
5052
5195
  /** Unique, SSR-safe id for label association (see {@link FoldIdService}). */
5053
5196
  readonly inputId: string;
5054
5197
  /** Id of the `role="listbox"` element (own, distinct from the popover panel). */
@@ -5109,7 +5252,7 @@ declare class FoldListboxComponent<T> implements FormValueControl<T | null>, Fol
5109
5252
  private selectAt;
5110
5253
  private commit;
5111
5254
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldListboxComponent<any>, never>;
5112
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldListboxComponent<any>, "fold-listbox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "optionalLabel": { "alias": "optionalLabel"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "infoLabel": { "alias": "infoLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "allowClear": { "alias": "allowClear"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "open": "openChange"; "selectionChange": "selectionChange"; }, ["optionTemplate", "projectedOptions"], ["*"], true, never>;
5255
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldListboxComponent<any>, "fold-listbox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "optionalLabel": { "alias": "optionalLabel"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "infoLabel": { "alias": "infoLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "allowClear": { "alias": "allowClear"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "open": "openChange"; "selectionChange": "selectionChange"; }, ["optionTemplate", "projectedOptions"], ["*"], true, never>;
5113
5256
  }
5114
5257
 
5115
5258
  /**
@@ -5166,14 +5309,14 @@ declare class FoldMultiselectComponent<T> implements FormValueControl<readonly T
5166
5309
  /** Show a lighter `(optional)` marker on the label (ignored when required). */
5167
5310
  readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
5168
5311
  /** The word inside the optional marker. @default 'optional' */
5169
- readonly optionalLabel: _angular_core.InputSignal<string>;
5312
+ readonly optionalLabel: _angular_core.InputSignal<string | undefined>;
5170
5313
  /**
5171
5314
  * Longer explanation behind an `i` at the end of the label line — for the
5172
5315
  * sentence or two a {@link hint} can't carry. Forwarded to `fold-input-base`.
5173
5316
  */
5174
5317
  readonly info: _angular_core.InputSignal<string | undefined>;
5175
5318
  /** Accessible name of the info button. @default 'More information' */
5176
- readonly infoLabel: _angular_core.InputSignal<string>;
5319
+ readonly infoLabel: _angular_core.InputSignal<string | undefined>;
5177
5320
  /** Optional helper text shown under the control. */
5178
5321
  readonly hint: _angular_core.InputSignal<string | undefined>;
5179
5322
  /** Text shown on the trigger while nothing is selected. */
@@ -5189,7 +5332,10 @@ declare class FoldMultiselectComponent<T> implements FormValueControl<readonly T
5189
5332
  /** Label of the select-all action. @default 'Select all' */
5190
5333
  readonly selectAllLabel: _angular_core.InputSignal<string>;
5191
5334
  /** Label of the clear action. @default 'Clear' */
5192
- readonly clearLabel: _angular_core.InputSignal<string>;
5335
+ readonly clearLabel: _angular_core.InputSignal<string | undefined>;
5336
+ private readonly common;
5337
+ /** English default ← app-wide provider ← this instance's own input. */
5338
+ protected readonly clearWord: _angular_core.Signal<string>;
5193
5339
  /** Unique, SSR-safe id for label association (see {@link FoldIdService}). */
5194
5340
  readonly inputId: string;
5195
5341
  /** Id of the `role="listbox"` element (own, distinct from the popover panel). */
@@ -6013,9 +6159,12 @@ declare class FoldTimelineComponent {
6013
6159
  */
6014
6160
  declare class FoldLoadingStateComponent {
6015
6161
  /** Text to display. Defaults to "Loading...". */
6016
- readonly message: _angular_core.InputSignal<string>;
6162
+ readonly message: _angular_core.InputSignal<string | undefined>;
6017
6163
  /** Spinner size — an icon-size token (`xs…xl`, default `md`) or a pixel number. */
6018
6164
  readonly size: _angular_core.InputSignal<FoldSpinnerSize>;
6165
+ private readonly common;
6166
+ /** English default ← app-wide provider ← this instance's own input. */
6167
+ protected readonly text: _angular_core.Signal<string>;
6019
6168
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldLoadingStateComponent, never>;
6020
6169
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldLoadingStateComponent, "fold-loading", never, { "message": { "alias": "message"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6021
6170
  }
@@ -6024,8 +6173,15 @@ declare class FoldLoadingStateComponent {
6024
6173
  * `<fold-empty-state>` — centered empty state with an optional icon, a title, an
6025
6174
  * optional subtitle and an optional action.
6026
6175
  *
6027
- * Content projection carries the icon and the action:
6028
- * - `[empty-icon]` — projected above the title (typically an SVG)
6176
+ * The glyph comes from `icon` — a registered icon name, the common case:
6177
+ *
6178
+ * ```html
6179
+ * <fold-empty-state icon="inbox" title="Nothing here" />
6180
+ * ```
6181
+ *
6182
+ * Content projection carries a custom illustration and the action:
6183
+ * - `[empty-icon]` — projected above the title, for art the registry can't hold
6184
+ * (a bespoke SVG, an image). It **wins** over `icon` when both are given.
6029
6185
  * - default `ng-content` — projected below the subtitle (typically a button)
6030
6186
  *
6031
6187
  * `tone="alert"` turns it into an error state (red title + icon); the default
@@ -6053,10 +6209,20 @@ declare class FoldEmptyStateComponent {
6053
6209
  readonly title: _angular_core.InputSignal<string>;
6054
6210
  /** Optional muted secondary line. */
6055
6211
  readonly subtitle: _angular_core.InputSignal<string>;
6212
+ /**
6213
+ * The glyph above the title, by registered name — the common case, so the
6214
+ * caller doesn't have to know a slot exists.
6215
+ *
6216
+ * A **projected** `[empty-icon]` wins: the slot stays the way to supply art
6217
+ * the registry can't hold (rule 4.7's illustration exception).
6218
+ */
6219
+ readonly icon: _angular_core.InputSignal<FoldIconName | undefined>;
6220
+ /** Size of the `icon` glyph. Projected art sizes itself. @default 'xl' */
6221
+ readonly iconSize: _angular_core.InputSignal<FoldIconSize>;
6056
6222
  /** `alert` renders an error state (red title + icon); `neutral` is default. */
6057
6223
  readonly tone: _angular_core.InputSignal<"alert" | "neutral">;
6058
6224
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldEmptyStateComponent, never>;
6059
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldEmptyStateComponent, "fold-empty-state", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, ["[empty-icon]", "*"], true, never>;
6225
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldEmptyStateComponent, "fold-empty-state", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, ["[empty-icon]", "*"], true, never>;
6060
6226
  }
6061
6227
 
6062
6228
  /** A `name → SVG markup` map — the shape both built-in and custom icons take. */
@@ -6100,8 +6266,13 @@ declare class FoldIconRegistry {
6100
6266
  has(name: string): boolean;
6101
6267
  /** Every registered icon name (built-ins + runtime additions), sorted.
6102
6268
  * Reactive — recomputes when an icon is registered. Powers tooling that
6103
- * browses the live catalogue (e.g. the `fold-icon-devtool`). */
6104
- names(): string[];
6269
+ * browses the live catalogue (e.g. the `fold-icon-devtool`).
6270
+ *
6271
+ * Typed as {@link FoldIconName}, so a browser of the catalogue can hand each
6272
+ * name straight back to `fold-icon`. `Object.keys` only ever promises
6273
+ * `string`, so the narrowing goes through a **checked predicate** rather than
6274
+ * an assertion (rule 2.1): every name kept is one the registry resolves. */
6275
+ names(): FoldIconName[];
6105
6276
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldIconRegistry, never>;
6106
6277
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<FoldIconRegistry>;
6107
6278
  }
@@ -6751,12 +6922,19 @@ type FoldViewNavItem = {
6751
6922
  */
6752
6923
  declare class FoldViewNavComponent {
6753
6924
  /** The items to render, in order. */
6754
- readonly items: _angular_core.InputSignal<FoldViewNavItem[]>;
6925
+ readonly items: _angular_core.InputSignal<readonly FoldViewNavItem[]>;
6755
6926
  /**
6756
6927
  * The active item's `key`, as a **two-way model** — for **button** items (no
6757
6928
  * `link`). Bind `[(activeKey)]` and a click writes the new key back; there is
6758
6929
  * no separate change output (the model is the one way). Link items ignore it:
6759
6930
  * their active state comes from the URL via `routerLinkActive`.
6931
+ *
6932
+ * **Deliberately `string`, where {@link FoldTabsComponent.activeKey} is
6933
+ * generic.** This model has a zero value — `""`, "no item selected", the state
6934
+ * a bar of pure link items sits in forever. No caller's union of view keys
6935
+ * contains `""`, so a generic `K` here would have to be `K | ""` and hand the
6936
+ * narrowing back to the caller — the very burden the generic exists to remove.
6937
+ * `fold-tabs` has no such zero value (`model.required`), which is why it can.
6760
6938
  */
6761
6939
  readonly activeKey: _angular_core.ModelSignal<string>;
6762
6940
  /** How the active item reads: accent underline, or accent fill. */
@@ -6791,6 +6969,14 @@ declare class FoldViewNavComponent {
6791
6969
  * `surface` (a filled bar that carries its own rail background).
6792
6970
  */
6793
6971
  readonly background: _angular_core.InputSignal<"transparent" | "surface">;
6972
+ /**
6973
+ * Pin the bar to the top of its scroll container, so a long view can be
6974
+ * navigated without scrolling back up. Pair it with the default
6975
+ * `background="surface"`: a `transparent` bar would let the content scroll
6976
+ * through it. Bleeding the bar to the page's edges stays the page's business
6977
+ * — the page owns the gutter.
6978
+ */
6979
+ readonly sticky: _angular_core.InputSignalWithTransform<boolean, unknown>;
6794
6980
  /** The nearest layout, if any — lets `direction="auto"` follow it. */
6795
6981
  private readonly layout;
6796
6982
  /**
@@ -6802,7 +6988,7 @@ declare class FoldViewNavComponent {
6802
6988
  /** `direction` with `auto` resolved against the wrapping layout. */
6803
6989
  protected readonly resolvedDirection: _angular_core.Signal<"vertical" | "horizontal">;
6804
6990
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldViewNavComponent, never>;
6805
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldViewNavComponent, "fold-view-nav", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "activeKey": { "alias": "activeKey"; "required": false; "isSignal": true; }; "activeStyle": { "alias": "activeStyle"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; }, { "activeKey": "activeKeyChange"; }, never, never, true, never>;
6991
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldViewNavComponent, "fold-view-nav", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "activeKey": { "alias": "activeKey"; "required": false; "isSignal": true; }; "activeStyle": { "alias": "activeStyle"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; }, { "activeKey": "activeKeyChange"; }, never, never, true, never>;
6806
6992
  }
6807
6993
 
6808
6994
  /**
@@ -6885,10 +7071,17 @@ declare class FoldBackLinkComponent {
6885
7071
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldBackLinkComponent, "fold-back-link", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6886
7072
  }
6887
7073
 
6888
- /** A tab in a {@link FoldTabsComponent} bar. */
6889
- type FoldTabItem = {
7074
+ /**
7075
+ * A tab in a {@link FoldTabsComponent} bar.
7076
+ *
7077
+ * Generic over the **key** so a caller whose sections are a closed union
7078
+ * (`"overview" | "settings"`) keeps that type end to end: the bar writes it back
7079
+ * already narrowed, and a panel bound to a key outside the union is a compile
7080
+ * error. Defaults to `string`, so an untyped caller is unaffected.
7081
+ */
7082
+ type FoldTabItem<K extends string = string> = {
6890
7083
  /** Unique key — identifies the tab / its panel, emitted on change. */
6891
- key: string;
7084
+ key: K;
6892
7085
  /** Display label. */
6893
7086
  label: string;
6894
7087
  /** Optional leading icon. */
@@ -6901,13 +7094,13 @@ type FoldTabItem = {
6901
7094
  * exposed by `fold-tabs` via `exportAs="foldTabs"`. Decouples the panel from the
6902
7095
  * concrete component.
6903
7096
  */
6904
- interface FoldTabsContext {
7097
+ interface FoldTabsContext<K extends string = string> {
6905
7098
  /** The active tab's key. */
6906
- activeKey(): string;
7099
+ activeKey(): K;
6907
7100
  /** The DOM id of the tab for `key` (a panel's `aria-labelledby`). */
6908
- tabId(key: string): string;
7101
+ tabId(key: K): string;
6909
7102
  /** The DOM id of the panel for `key` (a tab's `aria-controls`). */
6910
- panelId(key: string): string;
7103
+ panelId(key: K): string;
6911
7104
  }
6912
7105
  /**
6913
7106
  * `<fold-tabs>` — the **in-page tabs widget** (the ARIA Tabs pattern): a
@@ -6927,7 +7120,7 @@ interface FoldTabsContext {
6927
7120
  *
6928
7121
  * ```html
6929
7122
  * <fold-nav-layout>
6930
- * <fold-tabs nav #t="foldTabs" [tabs]="tabs" [(activeKey)]="tab" />
7123
+ * <fold-tabs tabNav #t="foldTabs" [tabs]="tabs" [(activeKey)]="tab" />
6931
7124
  * <fold-tab-panel [tabs]="t" key="overview">…</fold-tab-panel>
6932
7125
  * <fold-tab-panel [tabs]="t" key="settings">…</fold-tab-panel>
6933
7126
  * </fold-nav-layout>
@@ -6938,9 +7131,9 @@ interface FoldTabsContext {
6938
7131
  *
6939
7132
  * @selector `fold-tabs`
6940
7133
  */
6941
- declare class FoldTabsComponent implements FoldTabsContext {
7134
+ declare class FoldTabsComponent<K extends string = string> implements FoldTabsContext<K> {
6942
7135
  /** The tabs to render, in order. */
6943
- readonly tabs: _angular_core.InputSignal<FoldTabItem[]>;
7136
+ readonly tabs: _angular_core.InputSignal<readonly FoldTabItem<K>[]>;
6944
7137
  /**
6945
7138
  * The `key` of the active tab (the shown panel), as a **two-way model** — the
6946
7139
  * single source of selection. Bind `[(activeKey)]` and the bar writes the new
@@ -6948,7 +7141,7 @@ declare class FoldTabsComponent implements FoldTabsContext {
6948
7141
  * listen to the model's `(activeKeyChange)`. There is no separate change
6949
7142
  * output — the model is the one way.
6950
7143
  */
6951
- readonly activeKey: _angular_core.ModelSignal<string>;
7144
+ readonly activeKey: _angular_core.ModelSignal<K>;
6952
7145
  /** How the active tab reads: accent underline, or accent fill. */
6953
7146
  readonly activeStyle: _angular_core.InputSignal<"fill" | "underline">;
6954
7147
  /**
@@ -6962,6 +7155,14 @@ declare class FoldTabsComponent implements FoldTabsContext {
6962
7155
  readonly collapsed: _angular_core.InputSignalWithTransform<boolean, unknown>;
6963
7156
  /** `surface` (filled bar, default) or `transparent`. */
6964
7157
  readonly background: _angular_core.InputSignal<"transparent" | "surface">;
7158
+ /**
7159
+ * Pin the bar to the top of its scroll container, so a long view can be
7160
+ * navigated without scrolling back up. Pair it with the default
7161
+ * `background="surface"`: a `transparent` bar would let the content scroll
7162
+ * through it. Bleeding the bar to the page's edges stays the page's business
7163
+ * — the page owns the gutter.
7164
+ */
7165
+ readonly sticky: _angular_core.InputSignalWithTransform<boolean, unknown>;
6965
7166
  /** The nearest layout, if any — lets `direction="auto"` follow it. */
6966
7167
  private readonly layout;
6967
7168
  /** `direction` with `auto` resolved against the wrapping layout. */
@@ -6969,9 +7170,9 @@ declare class FoldTabsComponent implements FoldTabsContext {
6969
7170
  /** Per-instance id root, so ids are unique + stable across SSR. */
6970
7171
  private readonly uid;
6971
7172
  private readonly tabButtons;
6972
- tabId(key: string): string;
6973
- panelId(key: string): string;
6974
- protected select(key: string): void;
7173
+ tabId(key: K): string;
7174
+ panelId(key: K): string;
7175
+ protected select(key: K): void;
6975
7176
  /** Records a new selection by writing the `activeKey` model — the two-way
6976
7177
  * binding (or its `activeKeyChange`) carries it to the parent. */
6977
7178
  private commit;
@@ -6982,8 +7183,8 @@ declare class FoldTabsComponent implements FoldTabsContext {
6982
7183
  * mobile-collapsed vertical.
6983
7184
  */
6984
7185
  protected onKeydown(event: KeyboardEvent): void;
6985
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldTabsComponent, never>;
6986
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldTabsComponent, "fold-tabs", ["foldTabs"], { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "activeKey": { "alias": "activeKey"; "required": true; "isSignal": true; }; "activeStyle": { "alias": "activeStyle"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; }, { "activeKey": "activeKeyChange"; }, never, never, true, never>;
7186
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldTabsComponent<any>, never>;
7187
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldTabsComponent<any>, "fold-tabs", ["foldTabs"], { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "activeKey": { "alias": "activeKey"; "required": true; "isSignal": true; }; "activeStyle": { "alias": "activeStyle"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; }, { "activeKey": "activeKeyChange"; }, never, never, true, never>;
6987
7188
  }
6988
7189
 
6989
7190
  /**
@@ -7003,16 +7204,20 @@ declare class FoldTabsComponent implements FoldTabsContext {
7003
7204
  *
7004
7205
  * @selector `fold-tab-panel`
7005
7206
  */
7006
- declare class FoldTabPanelComponent {
7207
+ declare class FoldTabPanelComponent<K extends string = string> {
7007
7208
  /** The owning `fold-tabs`, read via its template ref (`#t="foldTabs"`). */
7008
- readonly tabs: _angular_core.InputSignal<FoldTabsContext>;
7009
- /** This panel's tab key — must match one tab in the bar. */
7010
- readonly key: _angular_core.InputSignal<string>;
7209
+ readonly tabs: _angular_core.InputSignal<FoldTabsContext<K>>;
7210
+ /**
7211
+ * This panel's tab key — must match one tab in the bar. When the bar is typed
7212
+ * on a union of keys, a key outside it fails to compile instead of rendering a
7213
+ * panel no tab can ever reach.
7214
+ */
7215
+ readonly key: _angular_core.InputSignal<K>;
7011
7216
  protected readonly isActive: _angular_core.Signal<boolean>;
7012
7217
  protected readonly panelId: _angular_core.Signal<string>;
7013
7218
  protected readonly labelledBy: _angular_core.Signal<string>;
7014
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldTabPanelComponent, never>;
7015
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldTabPanelComponent, "fold-tab-panel", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
7219
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldTabPanelComponent<any>, never>;
7220
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldTabPanelComponent<any>, "fold-tab-panel", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
7016
7221
  }
7017
7222
 
7018
7223
  /** The tone of a toast — drives its accent color + icon. */
@@ -7963,13 +8168,16 @@ declare class FoldInfoComponent {
7963
8168
  * when several sit on the same screen.
7964
8169
  * @default 'More information'
7965
8170
  */
7966
- readonly label: _angular_core.InputSignal<string>;
8171
+ readonly label: _angular_core.InputSignal<string | undefined>;
7967
8172
  /**
7968
8173
  * Where the panel opens. `bottom-end` by default because the trigger usually
7969
8174
  * sits at the **end** of a label line or a card header, where a panel growing
7970
8175
  * further outward would leave the viewport.
7971
8176
  */
7972
8177
  readonly placement: _angular_core.InputSignal<FoldPopoverPlacement>;
8178
+ private readonly common;
8179
+ /** English default ← app-wide provider ← this instance's own input. */
8180
+ protected readonly triggerLabel: _angular_core.Signal<string>;
7973
8181
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FoldInfoComponent, never>;
7974
8182
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldInfoComponent, "fold-info", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7975
8183
  }
@@ -8440,6 +8648,6 @@ declare class FoldCalendarSourceFilterComponent {
8440
8648
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FoldCalendarSourceFilterComponent, "fold-calendar-source-filter", never, { "sources": { "alias": "sources"; "required": false; "isSignal": true; }; "events": { "alias": "events"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "selectionChange": "selectionChange"; }, never, never, true, [{ directive: typeof FoldCalendarChromeDirective; inputs: { "locale": "locale"; "labels": "labels"; "formats": "formats"; }; outputs: {}; }]>;
8441
8649
  }
8442
8650
 
8443
- export { FOLD_AUTO_PALETTES, FOLD_BLUR_TOKENS, FOLD_BUILTIN_ICONS, FOLD_BUILTIN_ICON_CATEGORIES, FOLD_CALENDAR_DEFAULT_LABELS, FOLD_CALENDAR_FORMATS, FOLD_CALENDAR_LABELS, FOLD_DATA_TABLE_DEFAULT_LABELS, FOLD_DATA_TABLE_LABELS, FOLD_DEFAULT_WEEKEND_DAYS, FOLD_FALLBACK_WEEK_INFO, FOLD_INLINE_CONFIRM_DEFAULT_LABELS, FOLD_INLINE_CONFIRM_LABELS, FOLD_MINUTES_PER_DAY, FOLD_MOTION_TOKENS, FOLD_PAGINATOR_DEFAULT_LABELS, FOLD_PAGINATOR_LABELS, FOLD_PALETTE_DEFAULT, FOLD_PANEL_CLOSE_LABEL, FOLD_PANEL_DEFAULTS, FOLD_RADIUS_TOKENS, FOLD_SEMANTIC_COLOR_TOKENS, FOLD_SHADOW_TOKENS, FOLD_SPACE_TOKENS, FOLD_TEXT_TOKENS, FOLD_TOAST_CONFIG, FoldAppShellComponent, FoldAsideLayoutComponent, FoldAvatarComponent, FoldAvatarDetailComponent, FoldAvatarListComponent, FoldBackLinkComponent, FoldBadgeComponent, FoldBreadcrumbComponent, FoldButtonComponent, FoldButtonIconComponent, FoldCalendarAgendaComponent, FoldCalendarChromeDirective, FoldCalendarDayComponent, FoldCalendarDayDirective, FoldCalendarEventDirective, FoldCalendarHeadingDirective, FoldCalendarListComponent, FoldCalendarMonthComponent, FoldCalendarOverflowDirective, FoldCalendarSourceFilterComponent, FoldCalendarTimegridComponent, FoldCalendarTitleDirective, FoldCalendarToolbarComponent, FoldCalendarWeekComponent, FoldCalloutComponent, FoldCardComponent, FoldCheckboxComponent, FoldChoiceRowComponent, FoldContextCardComponent, FoldDangerZoneComponent, FoldDataTableCellDirective, FoldDataTableComponent, FoldDataTableRowCardDirective, FoldDateComponent, FoldDisclosureComponent, FoldDropdownComponent, FoldDropdownItemComponent, FoldElementTitleComponent, FoldElevatedDirective, FoldEmptyStateComponent, FoldFieldComponent, FoldFieldIdDirective, FoldFieldListComponent, FoldFileDropzoneComponent, FoldHeroCardComponent, FoldHeroSectionComponent, FoldIconComponent, FoldIconRegistry, FoldIdService, FoldInfoComponent, FoldInlineConfirmComponent, FoldInputComponent, FoldLinkComponent, FoldListboxComponent, FoldLoadingStateComponent, FoldMenuComponent, FoldMenuItemComponent, FoldMenuSectionComponent, FoldMenuSeparatorComponent, FoldMultiselectComponent, FoldNavLauncherComponent, FoldNavLayoutComponent, FoldNavTileComponent, FoldNumberInputComponent, FoldOptgroupComponent, FoldOptionComponent, FoldPageLayoutComponent, FoldPageSectionComponent, FoldPageTitleDirective, FoldPaginatorComponent, FoldPaletteRegistry, FoldPanelComponentOutletDirective, FoldPanelFooterComponent, FoldPanelHeaderComponent, FoldPanelHostComponent, FoldPanelHostService, FoldPanelRef, FoldPanelToggle, FoldPasswordFieldComponent, FoldPopoverComponent, FoldPopoverTriggerDirective, FoldRangeSliderComponent, FoldRepeatPressDirective, FoldScrollRegionDirective, FoldSearchComponent, FoldSelectComponent, FoldSliderComponent, FoldSpinnerComponent, FoldStatusBadgeComponent, FoldStickyColumnDirective, FoldSurfaceDirective, FoldTabPanelComponent, FoldTabsComponent, FoldTextareaComponent, FoldTimeComponent, FoldTimelineComponent, FoldToastComponent, FoldToastContainerComponent, FoldToastService, FoldToggleIconComponent, FoldViewNavComponent, FoldViewToggleComponent, ScrollRegionRegistry, autoUpdate, computePlacement, foldAddDays, foldAddMinutes, foldAddMonths, foldBlurVar, foldBuildAgenda, foldBuildDay, foldBuildMonthGrid, foldBuildTimeGrid, foldBuildWeek, foldCalendarNextFocus, foldCardBandChrome, foldColorProperty, foldColorVar, foldCountActionable, foldDaysBetween, foldDefaultPasswordRules, foldEndOfMonth, foldEventsInRange, foldEventsOnDay, foldFilterBySource, foldFromMinutes, foldFromNativeDate, foldFromTemporal, foldHashSeed, foldIsActionable, foldIsCalendarDate, foldIsCalendarTime, foldIsTimed, foldIsWeekend, foldIsoWeek, foldIsoWeekYear, foldLayOutOverlaps, foldLocaleWeekInfo, foldMotionVar, foldRadiusVar, foldRangeForView, foldRegexRule, foldResolvePalette, foldShadowVar, foldShiftDate, foldSpaceVar, foldStartOfMonth, foldStartOfWeek, foldTextVar, foldToMinutes, foldToNativeDate, foldToday, foldViewTitle, foldWeekdayIndex, foldWeekdayOf, isFoldSelectOptionGroup, observeElementWidth, provideFoldCalendarLabels, provideFoldDataTableLabels, provideFoldIcons, provideFoldInlineConfirmLabels, provideFoldPaginatorLabels, provideFoldPalette, provideFoldPanelDefaults, provideFoldPanelLabels, provideFoldToasts };
8444
- export type { FoldAgendaOptions, FoldAutoPaletteName, FoldAvatarListItem, FoldAvatarRing, FoldAvatarRingStyle, FoldAvatarVariant, FoldBadgeVariant, FoldBlurToken, FoldBreadcrumbItem, FoldBuiltinIconName, FoldButtonEmphasis, FoldButtonIconShape, FoldButtonIconSize, FoldButtonIconTone, FoldButtonIntent, FoldButtonShape, FoldButtonSize, FoldCalendarActionable, FoldCalendarAgenda, FoldCalendarAgendaGroup, FoldCalendarAgendaMode, FoldCalendarBand, FoldCalendarBlock, FoldCalendarBuiltInView, FoldCalendarDate, FoldCalendarDay, FoldCalendarDayContext, FoldCalendarDayEvents, FoldCalendarDayModifiers, FoldCalendarEvent, FoldCalendarEventContext, FoldCalendarFormat, FoldCalendarHalfDay, FoldCalendarHeadingContext, FoldCalendarLabels, FoldCalendarOverflowContext, FoldCalendarRange, FoldCalendarSource, FoldCalendarTime, FoldCalendarTitleContext, FoldCalendarTone, FoldCalendarView, FoldCalendarViewOption, FoldCalendarWeek, FoldCalloutAppearance, FoldCalloutVariant, FoldCardBandChrome, FoldCardBandChromeInput, FoldChoiceOption, FoldComponentPanelDescriptor, FoldDataTableLabels, FoldDateType, FoldDayColumnsOptions, FoldIconCategoryId, FoldIconName, FoldIconSet, FoldIconSize, FoldIconTone, FoldInlineConfirmLabels, FoldIsoDateLike, FoldMenuItemBadgeTone, FoldMenuLevel, FoldMenuTint, FoldMenuTogglePlacement, FoldMonthGridOptions, FoldMotionToken, FoldNumberControls, FoldNumberSpinner, FoldOverlapInput, FoldOverlapSlot, FoldPageItem, FoldPaginatorLabels, FoldPaletteInput, FoldPanelConfig, FoldPanelContent, FoldPanelDefaults, FoldPanelDefaultsProvider, FoldPanelDescriptor, FoldPanelHandle, FoldPanelLabels, FoldPanelSide, FoldPanelSize, FoldPanelSurface, FoldPasswordRule, FoldPlacementInput, FoldPlacementResult, FoldPopoverAlign, FoldPopoverPlacement, FoldPopoverSide, FoldRadiusToken, FoldRangeValue, FoldRect, FoldScrollAxis, FoldSelectItem, FoldSelectOption, FoldSelectOptionGroup, FoldSemanticColorToken, FoldShadowToken, FoldSpaceToken, FoldSpinnerSize, FoldStickyColumnAnchor, FoldSurfaceName, FoldTabItem, FoldTableColumn, FoldTableEmpty, FoldTableSort, FoldTableSortDir, FoldTableTone, FoldTabsContext, FoldTemplatePanelDescriptor, FoldTextToken, FoldTimeGrid, FoldTimeGridColumn, FoldTimeGridOptions, FoldTimelineDatePlacement, FoldTimelineNode, FoldToast, FoldToastConfig, FoldToastVariant, FoldViewNavItem, FoldViewToggleOption, FoldWeekInfo, FoldWeekday };
8651
+ export { FOLD_AUTO_PALETTES, FOLD_BLUR_TOKENS, FOLD_BUILTIN_ICONS, FOLD_BUILTIN_ICON_CATEGORIES, FOLD_CALENDAR_DEFAULT_LABELS, FOLD_CALENDAR_FORMATS, FOLD_CALENDAR_LABELS, FOLD_COMMON_DEFAULT_LABELS, FOLD_COMMON_LABELS, FOLD_DATA_TABLE_DEFAULT_LABELS, FOLD_DATA_TABLE_LABELS, FOLD_DEFAULT_WEEKEND_DAYS, FOLD_FALLBACK_WEEK_INFO, FOLD_INLINE_CONFIRM_DEFAULT_LABELS, FOLD_INLINE_CONFIRM_LABELS, FOLD_MINUTES_PER_DAY, FOLD_MOTION_TOKENS, FOLD_PAGINATOR_DEFAULT_LABELS, FOLD_PAGINATOR_LABELS, FOLD_PALETTE_DEFAULT, FOLD_PANEL_CLOSE_LABEL, FOLD_PANEL_DEFAULTS, FOLD_RADIUS_TOKENS, FOLD_SEMANTIC_COLOR_TOKENS, FOLD_SHADOW_TOKENS, FOLD_SPACE_TOKENS, FOLD_TEXT_TOKENS, FOLD_TOAST_CONFIG, FoldAppShellComponent, FoldAsideLayoutComponent, FoldAvatarComponent, FoldAvatarDetailComponent, FoldAvatarListComponent, FoldBackLinkComponent, FoldBadgeComponent, FoldBreadcrumbComponent, FoldButtonComponent, FoldButtonIconComponent, FoldCalendarAgendaComponent, FoldCalendarChromeDirective, FoldCalendarDayComponent, FoldCalendarDayDirective, FoldCalendarEventDirective, FoldCalendarHeadingDirective, FoldCalendarListComponent, FoldCalendarMonthComponent, FoldCalendarOverflowDirective, FoldCalendarSourceFilterComponent, FoldCalendarTimegridComponent, FoldCalendarTitleDirective, FoldCalendarToolbarComponent, FoldCalendarWeekComponent, FoldCalloutComponent, FoldCardComponent, FoldCheckboxComponent, FoldChoiceRowComponent, FoldContextCardComponent, FoldDangerZoneComponent, FoldDataTableCellDirective, FoldDataTableComponent, FoldDataTableRowCardDirective, FoldDateComponent, FoldDisclosureComponent, FoldDropdownComponent, FoldDropdownItemComponent, FoldElementTitleComponent, FoldElevatedDirective, FoldEmptyStateComponent, FoldFieldComponent, FoldFieldIdDirective, FoldFieldListComponent, FoldFileDropzoneComponent, FoldHeroCardComponent, FoldHeroSectionComponent, FoldIconComponent, FoldIconRegistry, FoldIdService, FoldInfoComponent, FoldInlineConfirmComponent, FoldInputComponent, FoldLinkComponent, FoldListboxComponent, FoldLoadingStateComponent, FoldMenuComponent, FoldMenuItemComponent, FoldMenuSectionComponent, FoldMenuSeparatorComponent, FoldMultiselectComponent, FoldNavLauncherComponent, FoldNavLayoutComponent, FoldNavTileComponent, FoldNumberInputComponent, FoldOptgroupComponent, FoldOptionComponent, FoldPageLayoutComponent, FoldPageSectionComponent, FoldPageTitleDirective, FoldPaginatorComponent, FoldPaletteRegistry, FoldPanelComponentOutletDirective, FoldPanelFooterComponent, FoldPanelHeaderComponent, FoldPanelHostComponent, FoldPanelHostService, FoldPanelRef, FoldPanelToggle, FoldPasswordFieldComponent, FoldPopoverComponent, FoldPopoverTriggerDirective, FoldRangeSliderComponent, FoldRepeatPressDirective, FoldScrollRegionDirective, FoldSearchComponent, FoldSelectComponent, FoldSliderComponent, FoldSpinnerComponent, FoldStatusBadgeComponent, FoldStickyColumnDirective, FoldSurfaceDirective, FoldTabPanelComponent, FoldTabsComponent, FoldTextareaComponent, FoldTimeComponent, FoldTimelineComponent, FoldToastComponent, FoldToastContainerComponent, FoldToastService, FoldToggleIconComponent, FoldViewNavComponent, FoldViewToggleComponent, ScrollRegionRegistry, autoUpdate, computePlacement, foldAddDays, foldAddMinutes, foldAddMonths, foldBlurVar, foldBuildAgenda, foldBuildDay, foldBuildMonthGrid, foldBuildTimeGrid, foldBuildWeek, foldCalendarNextFocus, foldCardBandChrome, foldColorProperty, foldColorVar, foldCountActionable, foldDaysBetween, foldDefaultPasswordRules, foldEndOfMonth, foldEventsInRange, foldEventsOnDay, foldFilterBySource, foldFromMinutes, foldFromNativeDate, foldFromTemporal, foldHashSeed, foldIsActionable, foldIsCalendarDate, foldIsCalendarTime, foldIsTimed, foldIsWeekend, foldIsoWeek, foldIsoWeekYear, foldLayOutOverlaps, foldLocaleWeekInfo, foldMotionVar, foldRadiusVar, foldRangeForView, foldRegexRule, foldResolvePalette, foldShadowVar, foldShiftDate, foldSpaceVar, foldStartOfMonth, foldStartOfWeek, foldTextVar, foldToMinutes, foldToNativeDate, foldToday, foldViewTitle, foldWeekdayIndex, foldWeekdayOf, isFoldSelectOptionGroup, observeElementWidth, provideFoldCalendarLabels, provideFoldCommonLabels, provideFoldDataTableLabels, provideFoldIcons, provideFoldInlineConfirmLabels, provideFoldPaginatorLabels, provideFoldPalette, provideFoldPanelDefaults, provideFoldPanelLabels, provideFoldToasts };
8652
+ export type { FoldAgendaOptions, FoldAutoPaletteName, FoldAvatarListItem, FoldAvatarRing, FoldAvatarRingStyle, FoldAvatarVariant, FoldBadgeVariant, FoldBlurToken, FoldBreadcrumbItem, FoldBuiltinIconName, FoldButtonEmphasis, FoldButtonIconShape, FoldButtonIconSize, FoldButtonIconTone, FoldButtonIntent, FoldButtonShape, FoldButtonSize, FoldCalendarActionable, FoldCalendarAgenda, FoldCalendarAgendaGroup, FoldCalendarAgendaMode, FoldCalendarBand, FoldCalendarBlock, FoldCalendarBuiltInView, FoldCalendarDate, FoldCalendarDay, FoldCalendarDayContext, FoldCalendarDayEvents, FoldCalendarDayModifiers, FoldCalendarEvent, FoldCalendarEventContext, FoldCalendarFormat, FoldCalendarHalfDay, FoldCalendarHeadingContext, FoldCalendarLabels, FoldCalendarOverflowContext, FoldCalendarRange, FoldCalendarSource, FoldCalendarTime, FoldCalendarTitleContext, FoldCalendarTone, FoldCalendarView, FoldCalendarViewOption, FoldCalendarWeek, FoldCalloutAppearance, FoldCalloutVariant, FoldCardBandChrome, FoldCardBandChromeInput, FoldChoiceOption, FoldCommonLabels, FoldComponentPanelDescriptor, FoldDataTableLabels, FoldDateType, FoldDayColumnsOptions, FoldIconCategoryId, FoldIconName, FoldIconSet, FoldIconSize, FoldIconTone, FoldInlineConfirmLabels, FoldIsoDateLike, FoldMenuItemBadgeTone, FoldMenuLevel, FoldMenuTint, FoldMenuTogglePlacement, FoldMonthGridOptions, FoldMotionToken, FoldNumberControls, FoldNumberSpinner, FoldOverlapInput, FoldOverlapSlot, FoldPageItem, FoldPaginatorLabels, FoldPaletteInput, FoldPanelConfig, FoldPanelContent, FoldPanelDefaults, FoldPanelDefaultsProvider, FoldPanelDescriptor, FoldPanelHandle, FoldPanelLabels, FoldPanelSide, FoldPanelSize, FoldPanelSurface, FoldPasswordRule, FoldPlacementInput, FoldPlacementResult, FoldPopoverAlign, FoldPopoverPlacement, FoldPopoverSide, FoldRadiusToken, FoldRangeValue, FoldRect, FoldScrollAxis, FoldSelectItem, FoldSelectOption, FoldSelectOptionGroup, FoldSemanticColorToken, FoldShadowToken, FoldSpaceToken, FoldSpinnerSize, FoldStickyColumnAnchor, FoldSurfaceName, FoldTabItem, FoldTableColumn, FoldTableEmpty, FoldTableSort, FoldTableSortDir, FoldTableTone, FoldTabsContext, FoldTemplatePanelDescriptor, FoldTextToken, FoldTimeGrid, FoldTimeGridColumn, FoldTimeGridOptions, FoldTimelineDatePlacement, FoldTimelineNode, FoldToast, FoldToastConfig, FoldToastVariant, FoldViewNavItem, FoldViewToggleOption, FoldWeekInfo, FoldWeekday };
8445
8653
  //# sourceMappingURL=fold-ng.d.ts.map