@sinequa/galactik 2.1.1 → 2.3.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.
@@ -14,6 +14,14 @@ import { ToolbarWidget } from "@angular/aria/toolbar";
14
14
  import * as i1$1 from "@angular/aria/listbox";
15
15
  import * as i1 from "@angular/aria/tree";
16
16
  import { Tree, TreeItem, TreeItemGroup } from "@angular/aria/tree";
17
+ /**
18
+ * Whether the user is on an Apple platform (macOS, iPadOS, iOS).
19
+ *
20
+ * An iPad in desktop mode reports itself as a Mac, which is the right answer for its hardware keyboard.
21
+ * Meant for adapting a *hint* or *adding* a key (a MacBook has no dedicated `Delete`, only `fn+⌫`) — never
22
+ * for restricting one.
23
+ */
24
+ export declare function isApplePlatform(): boolean;
17
25
  export declare class ArrowDownIcon {
18
26
  class: import("@angular/core").InputSignal<string | undefined>;
19
27
  classes: import("@angular/core").Signal<string>;
@@ -2264,6 +2272,8 @@ declare function injectPopover(options: {
2264
2272
  config: Signal<PopoverConfig>;
2265
2273
  lockPosition: Signal<boolean>;
2266
2274
  matchTriggerWidth: Signal<boolean>;
2275
+ /** Hides the popover (without closing it) while its trigger is scrolled out of sight. Optional, default `false`. */
2276
+ hideWhenTriggerHidden?: Signal<boolean>;
2267
2277
  }): {
2268
2278
  width: import("@angular/core").WritableSignal<number | undefined>;
2269
2279
  state: import("@angular/core").WritableSignal<"open" | "closed">;
@@ -2314,6 +2324,14 @@ export declare class PopoverDirective {
2314
2324
  * popover element itself instead.
2315
2325
  */
2316
2326
  matchTriggerWidth: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2327
+ /**
2328
+ * When true, the popover is hidden (`visibility: hidden`, still open) while its trigger is scrolled
2329
+ * out of sight — out of the list or container it sits in — and reappears with it. Without it, a
2330
+ * popover in the top layer, which no ancestor clips, keeps floating over nothing.
2331
+ *
2332
+ * @default false
2333
+ */
2334
+ hideWhenTriggerHidden: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2317
2335
  readonly elementRef: ElementRef<HTMLElement>;
2318
2336
  private readonly _isDropdown;
2319
2337
  private readonly _config;
@@ -2355,6 +2373,11 @@ export declare class PopoverDirective {
2355
2373
  "required": false;
2356
2374
  "isSignal": true;
2357
2375
  };
2376
+ "hideWhenTriggerHidden": {
2377
+ "alias": "hideWhenTriggerHidden";
2378
+ "required": false;
2379
+ "isSignal": true;
2380
+ };
2358
2381
  }, {}, never, never, true, never>;
2359
2382
  }
2360
2383
  /** What {@link injectFloatingPanel} needs to know about a panel and the element it hangs from. */
@@ -2393,6 +2416,17 @@ interface FloatingPanelOptions {
2393
2416
  * colours the arrow's visible sides.
2394
2417
  */
2395
2418
  arrow?: () => HTMLElement | null | undefined;
2419
+ /**
2420
+ * Name of a CSS custom property (`"--floating-max-h"`) that receives the height left on the side the panel ended up on
2421
+ * (after `flip`), in pixels, for the panel's own CSS (`max-h-[min(24rem,var(--floating-max-h))]`). Without it, a panel taller
2422
+ * than the room it has runs off the viewport.
2423
+ */
2424
+ maxHeightVariable?: string;
2425
+ /**
2426
+ * Hides the panel (`visibility: hidden`) while the anchor is out of sight — scrolled out of the list it sits in — so that a
2427
+ * panel in the top layer, which no ancestor clips any more, does not float over nothing. A signal read is fine.
2428
+ */
2429
+ hideWhenAnchorHidden?: boolean | (() => boolean);
2396
2430
  /** Runs after each position update, with the anchor and the panel (a submenu that mirrors the anchor's width in a signal…). */
2397
2431
  afterPosition?: (anchor: HTMLElement, panel: HTMLElement) => void;
2398
2432
  }
@@ -3711,7 +3745,7 @@ export declare class ButtonComponent {
3711
3745
  variant: import("@angular/core").InputSignal<"primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined>;
3712
3746
  scheme: import("@angular/core").InputSignal<"default" | "neutral" | null | undefined>;
3713
3747
  iconOnly: import("@angular/core").InputSignal<boolean | null | undefined>;
3714
- size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "xs" | "lg" | "xsmall" | "medium" | "large" | null | undefined>;
3748
+ size: import("@angular/core").InputSignal<"small" | "medium" | "sm" | "md" | "xs" | "lg" | "xsmall" | "large" | null | undefined>;
3715
3749
  variants: import("@angular/core").Signal<string | undefined>;
3716
3750
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
3717
3751
  static ɵdir: i0.ɵɵDirectiveDeclaration<ButtonComponent, "button", never, {
@@ -3755,7 +3789,7 @@ declare const BUTTON_ICON_SOLO_CLASS = "btn-icon-solo";
3755
3789
  declare const buttonVariants: (props?: ({
3756
3790
  variant?: "primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined;
3757
3791
  scheme?: "default" | "neutral" | null | undefined;
3758
- size?: "small" | "sm" | "md" | "xs" | "lg" | "xsmall" | "medium" | "large" | null | undefined;
3792
+ size?: "small" | "medium" | "sm" | "md" | "xs" | "lg" | "xsmall" | "large" | null | undefined;
3759
3793
  iconOnly?: boolean | null | undefined;
3760
3794
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
3761
3795
  type ButtonVariants = VariantProps<typeof buttonVariants>;
@@ -3779,7 +3813,7 @@ export declare class ToggleComponent {
3779
3813
  /** Palette : `unique` (primaire) ou `multi` (secondaire). */
3780
3814
  readonly variant: import("@angular/core").InputSignal<"multi" | "unique" | null | undefined>;
3781
3815
  /** Taille (`sm`/`md`, alias `small`/`medium`). */
3782
- readonly size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "medium" | null | undefined>;
3816
+ readonly size: import("@angular/core").InputSignal<"small" | "medium" | "sm" | "md" | null | undefined>;
3783
3817
  /** Pilule carrée (icône seule). */
3784
3818
  readonly iconOnly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3785
3819
  /** Discriminant de rendu d'icône (piloté par le consommateur). */
@@ -3852,7 +3886,7 @@ export declare class ToggleItemComponent {
3852
3886
  /** Palette explicite ; à défaut, héritée du `<ToggleGroup>` parent, sinon `unique`. */
3853
3887
  readonly variant: import("@angular/core").InputSignal<"multi" | "unique" | null | undefined>;
3854
3888
  /** Taille (`sm`/`md`, alias `small`/`medium`). */
3855
- readonly size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "medium" | null | undefined>;
3889
+ readonly size: import("@angular/core").InputSignal<"small" | "medium" | "sm" | "md" | null | undefined>;
3856
3890
  /** Pilule carrée (icône seule). */
3857
3891
  readonly iconOnly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3858
3892
  /** Discriminant de rendu d'icône (piloté par le consommateur). */
@@ -3989,7 +4023,7 @@ export declare const TOGGLE_ICON_CLASS = "toggle-icon";
3989
4023
  export declare const TOGGLE_LABEL_CLASS = "toggle-label";
3990
4024
  export declare const toggleVariants: (props?: ({
3991
4025
  variant?: "multi" | "unique" | null | undefined;
3992
- size?: "small" | "sm" | "md" | "medium" | null | undefined;
4026
+ size?: "small" | "medium" | "sm" | "md" | null | undefined;
3993
4027
  iconOnly?: boolean | null | undefined;
3994
4028
  showIcon?: boolean | null | undefined;
3995
4029
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -4044,6 +4078,17 @@ export declare class ListComponent {
4044
4078
  * `list-navigation` / `list-menu`.
4045
4079
  */
4046
4080
  readonly size: import("@angular/core").InputSignal<"small" | "medium" | null | undefined>;
4081
+ private readonly host;
4082
+ private readonly keyboardFocusState;
4083
+ /**
4084
+ * Vrai tant que le focus **clavier** est dans la liste (`:focus-visible` : un clic à la souris sur une
4085
+ * ligne ne compte pas). Permet à l'application d'afficher une aide de navigation (« ↑ ↓ pour naviguer »)
4086
+ * exactement quand elle sert, sans aller lire le DOM de la liste.
4087
+ */
4088
+ readonly keyboardFocused: import("@angular/core").Signal<boolean>;
4089
+ protected onFocusIn(event: FocusEvent): void;
4090
+ /** Le focus passe d'une ligne à l'autre par un `focusout` suivi d'un `focusin` : seul un départ de la liste éteint l'état. */
4091
+ protected onFocusOut(event: FocusEvent): void;
4047
4092
  /** Le CVA ne stylise pas le conteneur : classes minimales de layout + `class` consommateur. */
4048
4093
  protected readonly variants: import("@angular/core").Signal<string>;
4049
4094
  static ɵfac: i0.ɵɵFactoryDeclaration<ListComponent, never>;
@@ -4082,28 +4127,6 @@ export declare class ListComponent {
4082
4127
  };
4083
4128
  }]>;
4084
4129
  }
4085
- /**
4086
- * `<ListItem>` — item d'un `<List>`, bâti sur la primitive accessible `@angular/aria/listbox`
4087
- * (`Option` → `role="option"`, `aria-selected`/`aria-disabled` reflétés automatiquement, ce que
4088
- * le CVA `listItemVariants` stylise via ses sélecteurs d'attributs).
4089
- *
4090
- * `variant`/`size` sont hérités du `<List>` parent (via {@link LIST_REF}) sauf s'ils sont fournis
4091
- * explicitement sur l'item. `depth` applique l'indentation d'arbre (`getListDepthStyle`).
4092
- *
4093
- * La sélection appartient au modèle `value` du `<List>` (listbox) — on ne pilote donc pas de
4094
- * `selected` manuel ici.
4095
- *
4096
- * @example
4097
- * ```html
4098
- * <ListItem [value]="u.id">
4099
- * <ListItemLeft>
4100
- * <ListItemAvatar>{{ u.initials }}</ListItemAvatar>
4101
- * <ListItemText [subtext]="u.email">{{ u.name }}</ListItemText>
4102
- * </ListItemLeft>
4103
- * <ListItemAction ariaLabel="Supprimer" (click)="remove(u)"><trash-icon /></ListItemAction>
4104
- * </ListItem>
4105
- * ```
4106
- */
4107
4130
  export declare class ListItemComponent {
4108
4131
  /** Classe(s) additionnelle(s), fusionnée(s) via `cn`. */
4109
4132
  readonly class: import("@angular/core").InputSignal<string | undefined>;
@@ -4123,13 +4146,24 @@ export declare class ListItemComponent {
4123
4146
  protected readonly variants: import("@angular/core").Signal<string>;
4124
4147
  /** Indentation d'arbre (réutilise le helper du CVA) ; `null` à la racine (depth 0). */
4125
4148
  protected readonly paddingLeft: import("@angular/core").Signal<string | null>;
4126
- private readonly host;
4127
- /** Vrai quand la ligne projette une `<ListItemAction>` — conditionne `aria-keyshortcuts`. */
4149
+ /**
4150
+ * Vrai quand la ligne projette une `<ListItemAction>` **utilisable** — conditionne `aria-keyshortcuts`.
4151
+ * Une action désactivée ignore sa touche : l'annoncer promettrait une action qui ne fait rien.
4152
+ */
4128
4153
  protected readonly hasAction: import("@angular/core").Signal<boolean>;
4129
4154
  private readonly action;
4155
+ /** Les touches de l'action, au format de `aria-keyshortcuts` (« Delete Backspace »). */
4156
+ protected readonly keyShortcuts: import("@angular/core").Signal<string | null>;
4130
4157
  /**
4131
- * `Suppr` déclenche l'action de fin de ligne. Celle-ci n'est pas un contrôle focusable (une
4132
- * option de listbox ne peut pas en contenir), donc c'est le seul chemin clavier vers elle.
4158
+ * Relie la ligne au texte masqué de son action. `aria-keyshortcuts` n'est pas lu de façon fiable
4159
+ * (selon le lecteur, le réglage et le navigateur, et alors en anglais brut) : seul un texte relié
4160
+ * garantit que l'utilisateur apprend que `Suppr` supprime la ligne.
4161
+ */
4162
+ protected readonly actionDescriptionId: import("@angular/core").Signal<string | null>;
4163
+ /**
4164
+ * La touche de l'action (`keys` de `<ListItemAction>`, `Delete` par défaut) la déclenche. Celle-ci n'est
4165
+ * pas un contrôle focusable (une option de listbox ne peut pas en contenir), donc c'est le seul chemin
4166
+ * clavier vers elle.
4133
4167
  */
4134
4168
  protected onKeydown(event: KeyboardEvent): void;
4135
4169
  static ɵfac: i0.ɵɵFactoryDeclaration<ListItemComponent, never>;
@@ -4255,6 +4289,20 @@ export declare class ListItemAvatarDirective {
4255
4289
  * L'accès clavier passe donc par `<ListItem>`, qui déclenche l'action sur `Suppr` et l'annonce via
4256
4290
  * `aria-keyshortcuts`. Le `<span>` reste la cible souris, et garde tout son style (le CVA cible la
4257
4291
  * classe, jamais la balise).
4292
+ *
4293
+ * Une ligne n'est pas faite pour contenir un champ de saisie ni aucun contrôle : une `option` de listbox
4294
+ * n'en admet pas, et la ligne prend `Suppr` quelle que soit la cible du clavier. Une ligne éditable relève de
4295
+ * `RowGrid`, pas de `<List>`.
4296
+ *
4297
+ * Une action par ligne : `<ListItem>` ne déclenche que la première, par la touche de `keys` (`Delete`
4298
+ * par défaut). La corbeille n'est qu'une icône posée en contenu : l'action est ce que fait le `(click)`.
4299
+ *
4300
+ * Un utilisateur voyant n'apprend rien d'`aria-keyshortcuts` : tant que la ligne a le focus clavier, une
4301
+ * seconde ligne, dans la ligne, écrit donc la phrase `description` avec la touche en `<kbd>` (« Appuyez
4302
+ * sur Suppr pour supprimer »). Sans `description`, il n'y a pas de seconde ligne : la ligne garde sa hauteur.
4303
+ * Le CVA la garde masquée hors focus clavier : la souris dispose du clic, et l'afficher au survol ferait
4304
+ * bouger les lignes sous le pointeur. Cette ligne est `aria-hidden` : la
4305
+ * même phrase, reliée par `aria-describedby`, porte l'annonce.
4258
4306
  */
4259
4307
  export declare class ListItemActionComponent {
4260
4308
  /**
@@ -4263,9 +4311,48 @@ export declare class ListItemActionComponent {
4263
4311
  * porté par `<ListItem>`. Le nom de l'entrée est conservé pour ne pas casser les appelants.
4264
4312
  */
4265
4313
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
4266
- /** Désactive le bouton d'action. */
4314
+ /**
4315
+ * Désactive l'action : `Suppr` ne la déclenche plus, et ni l'aide visible, ni la phrase reliée par
4316
+ * `aria-describedby`, ni `aria-keyshortcuts` n'annoncent plus un raccourci qui ne ferait rien.
4317
+ */
4267
4318
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4319
+ /**
4320
+ * Les touches (`KeyboardEvent.key`) qui déclenchent l'action quand sa ligne a le focus. `Delete` par
4321
+ * défaut. La première nomme l'action dans `aria-keyshortcuts` et, à défaut de `shortcut`, dans l'aide.
4322
+ *
4323
+ * Ajouter une touche qui n'existe que sur certains claviers est à l'appelant (un Mac n'a pas de
4324
+ * `Delete` dédié : `["Delete", "Backspace"]` quand `isApplePlatform()`), la librairie ne le devine pas.
4325
+ */
4326
+ readonly keys: import("@angular/core").InputSignal<readonly string[]>;
4327
+ /**
4328
+ * Nom de la touche écrit dans la ligne d'aide quand la ligne a le focus clavier (ex. « Suppr »). Il
4329
+ * doit apparaître tel quel dans `description` pour y être mis en forme. La librairie ne dépend pas de
4330
+ * transloco : à l'application de le traduire. Par défaut, le nom de la première de `keys` (`Del` pour
4331
+ * `Delete`).
4332
+ */
4333
+ readonly shortcut: import("@angular/core").InputSignal<string | undefined>;
4334
+ /**
4335
+ * Phrase lue par un lecteur d'écran quand la ligne prend le focus (ex. « Appuyez sur Suppr pour
4336
+ * supprimer »), reliée à la ligne par `aria-describedby`. À traduire par l'application ; sans elle,
4337
+ * seul `aria-keyshortcuts` renseigne les technologies d'assistance.
4338
+ */
4339
+ readonly description: import("@angular/core").InputSignal<string | undefined>;
4340
+ readonly descriptionId: string;
4341
+ protected readonly keyName: import("@angular/core").Signal<string>;
4342
+ private readonly trigger$;
4343
+ /** Déclenche l'action comme le ferait un clic sur son icône (`<ListItem>` l'appelle sur la touche). */
4344
+ trigger(): void;
4345
+ /**
4346
+ * La phrase coupée autour du nom de la touche, qui prend alors la forme d'un `<kbd>`. Une phrase qui ne
4347
+ * contient pas le nom est écrite telle quelle, sans touche.
4348
+ */
4349
+ protected readonly hint: import("@angular/core").Signal<{
4350
+ before: string;
4351
+ after: string;
4352
+ withKey: boolean;
4353
+ }>;
4268
4354
  protected readonly btnClass = "list-item-icon-right";
4355
+ protected readonly hintClass = "list-item-action-hint";
4269
4356
  static ɵfac: i0.ɵɵFactoryDeclaration<ListItemActionComponent, never>;
4270
4357
  static ɵcmp: i0.ɵɵComponentDeclaration<ListItemActionComponent, "ListItemAction,list-item-action,listitemaction", ["listItemAction"], {
4271
4358
  "ariaLabel": {
@@ -4278,6 +4365,21 @@ export declare class ListItemActionComponent {
4278
4365
  "required": false;
4279
4366
  "isSignal": true;
4280
4367
  };
4368
+ "keys": {
4369
+ "alias": "keys";
4370
+ "required": false;
4371
+ "isSignal": true;
4372
+ };
4373
+ "shortcut": {
4374
+ "alias": "shortcut";
4375
+ "required": false;
4376
+ "isSignal": true;
4377
+ };
4378
+ "description": {
4379
+ "alias": "description";
4380
+ "required": false;
4381
+ "isSignal": true;
4382
+ };
4281
4383
  }, {}, never, ["*"], true, never>;
4282
4384
  }
4283
4385
  /**
@@ -4326,6 +4428,7 @@ export declare const LIST_ITEM_EXPANDER_CLASS = "list-item-expander";
4326
4428
  export declare const LIST_ITEM_EXPANDER_BUTTON_CLASS = "list-item-expander-btn";
4327
4429
  export declare const LIST_ITEM_AVATAR_CLASS = "list-item-avatar";
4328
4430
  export declare const LIST_ITEM_ICON_RIGHT_CLASS = "list-item-icon-right";
4431
+ declare const LIST_ITEM_ACTION_HINT_CLASS = "list-item-action-hint";
4329
4432
  export declare const LIST_ITEM_CHEVRON_RIGHT_CLASS = "list-item-chevron-right";
4330
4433
  export declare function getListDepthStyle(depth?: number): {
4331
4434
  paddingLeft: string;
@@ -4663,6 +4766,11 @@ export declare class RowFeedComponent<T> extends RowListBase<T> {
4663
4766
  };
4664
4767
  }, {}, never, never, true, never>;
4665
4768
  }
4769
+ /**
4770
+ * On/off toggle. The projected content is its visible label: it renders to the right of the switch, inside
4771
+ * the switch's own `<label>`, so it names the switch and a click on it toggles the switch (RGAA 11.1 / 11.4).
4772
+ * Same contract as `Checkbox`.
4773
+ */
4666
4774
  export declare class SwitchComponent {
4667
4775
  readonly checked: import("@angular/core").ModelSignal<boolean>;
4668
4776
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
@@ -4671,15 +4779,16 @@ export declare class SwitchComponent {
4671
4779
  /**
4672
4780
  * Accessible name of the inner `<input>`, for a switch whose label is not projected.
4673
4781
  *
4674
- * A switch has no content, so without a name it is unlabelled (RGAA 11.1). Aliased on the
4782
+ * A switch with no projected content has no name, so it is unlabelled (RGAA 11.1). Aliased on the
4675
4783
  * attribute, as `Checkbox.ariaLabel` is, and applied to the `<input>`: the host is in
4676
4784
  * `display: contents` and carries no role, so a name on it would be read by nobody.
4677
4785
  */
4678
4786
  readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
4679
4787
  /**
4680
4788
  * Id of the element that names the inner `<input>`, for a switch labelled by visible text elsewhere
4681
- * in the template. Wrapping the switch in a `<label>` is not an option: it already renders its own
4682
- * (nested labels are invalid, RGAA 8.2). Takes precedence over `aria-label`.
4789
+ * in the template (a label that must not toggle the switch, e.g. the header of an expandable card).
4790
+ * To label the switch with text that toggles it, project that text instead: it renders to the right of
4791
+ * the switch, inside the switch's own `<label>`. Takes precedence over `aria-label` and over the projected text.
4683
4792
  */
4684
4793
  readonly ariaLabelledby: import("@angular/core").InputSignal<string | undefined>;
4685
4794
  /**
@@ -4691,6 +4800,13 @@ export declare class SwitchComponent {
4691
4800
  * Le clic traverse vers le parent, et `:checked` continue de piloter le rendu.
4692
4801
  */
4693
4802
  readonly presentational: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4803
+ /**
4804
+ * Drops the 44×44 touch target: the hitbox shrinks to the track (24 px in `small`, 18 px in `xsmall`).
4805
+ *
4806
+ * For a switch whose parent already is the touch target (a menu or list row, a toolbar). Implied by
4807
+ * `presentational`. Below the 24 px WCAG 2.5.8 minimum in `xsmall`/`xs`, so do not use it on a standalone switch.
4808
+ */
4809
+ readonly compact: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4694
4810
  /**
4695
4811
  * Index de tabulation de l'`<input>`, pour un hôte qui possède l'ordre de tabulation.
4696
4812
  *
@@ -4741,6 +4857,11 @@ export declare class SwitchComponent {
4741
4857
  "required": false;
4742
4858
  "isSignal": true;
4743
4859
  };
4860
+ "compact": {
4861
+ "alias": "compact";
4862
+ "required": false;
4863
+ "isSignal": true;
4864
+ };
4744
4865
  "tabIndex": {
4745
4866
  "alias": "tabIndex";
4746
4867
  "required": false;
@@ -4748,9 +4869,11 @@ export declare class SwitchComponent {
4748
4869
  };
4749
4870
  }, {
4750
4871
  "checked": "checkedChange";
4751
- }, never, never, true, never>;
4872
+ }, never, ["*"], true, never>;
4752
4873
  }
4753
4874
  declare const SWITCH_INPUT_CLASS = "switch-input";
4875
+ declare const SWITCH_HITBOX_CLASS = "switch-hitbox";
4876
+ declare const SWITCH_LABEL_CLASS = "switch-label";
4754
4877
  declare const SWITCH_TRACK_CLASS = "switch-track";
4755
4878
  declare const SWITCH_THUMB_CLASS = "switch-thumb";
4756
4879
  declare const SWITCH_THUMB_ICON_CLASS = "switch-thumb-icon";
@@ -4881,7 +5004,7 @@ export declare class TagComponent {
4881
5004
  class: import("@angular/core").InputSignal<string | undefined>;
4882
5005
  variant: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
4883
5006
  scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
4884
- size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "xs" | "xsmall" | "medium" | null | undefined>;
5007
+ size: import("@angular/core").InputSignal<"small" | "medium" | "sm" | "md" | "xs" | "xsmall" | null | undefined>;
4885
5008
  variants: import("@angular/core").Signal<string>;
4886
5009
  static ɵfac: i0.ɵɵFactoryDeclaration<TagComponent, never>;
4887
5010
  static ɵdir: i0.ɵɵDirectiveDeclaration<TagComponent, "tag, Tag", never, {
@@ -4913,7 +5036,7 @@ declare const TAG_FLAG_CLASS = "tag-flag";
4913
5036
  declare const tagVariants: (props?: ({
4914
5037
  variant?: "primary" | "secondary" | null | undefined;
4915
5038
  scheme?: "error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined;
4916
- size?: "small" | "sm" | "md" | "xs" | "xsmall" | "medium" | null | undefined;
5039
+ size?: "small" | "medium" | "sm" | "md" | "xs" | "xsmall" | null | undefined;
4917
5040
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
4918
5041
  type TagVariants = VariantProps<typeof tagVariants>;
4919
5042
  /**
@@ -5317,14 +5440,14 @@ export declare class AvatarFallbackComponent {
5317
5440
  canrender: import("@angular/core").WritableSignal<boolean>;
5318
5441
  class: import("@angular/core").InputSignal<string | undefined>;
5319
5442
  /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `"large"` (aligné sur le cva). */
5320
- size: import("@angular/core").InputSignal<"small" | "xsmall" | "medium" | "large" | null | undefined>;
5443
+ size: import("@angular/core").InputSignal<"small" | "medium" | "xsmall" | "large" | null | undefined>;
5321
5444
  /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `"primary"`. */
5322
5445
  fill: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
5323
5446
  /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `"sage"`. */
5324
5447
  scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
5325
5448
  /** Conteneur parent, pour hériter size/fill/scheme par défaut. */
5326
5449
  private readonly avatar;
5327
- protected readonly resolvedSize: import("@angular/core").Signal<NonNullable<"small" | "xsmall" | "medium" | "large" | null | undefined>>;
5450
+ protected readonly resolvedSize: import("@angular/core").Signal<NonNullable<"small" | "medium" | "xsmall" | "large" | null | undefined>>;
5328
5451
  protected readonly resolvedFill: import("@angular/core").Signal<NonNullable<"primary" | "secondary" | null | undefined>>;
5329
5452
  protected readonly resolvedScheme: import("@angular/core").Signal<NonNullable<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>>;
5330
5453
  variants: import("@angular/core").Signal<string>;
@@ -5406,7 +5529,7 @@ export declare class AvatarComponent {
5406
5529
  avatarImage: import("@angular/core").Signal<AvatarImageComponent | undefined>;
5407
5530
  avatarFallback: import("@angular/core").Signal<AvatarFallbackComponent | undefined>;
5408
5531
  class: import("@angular/core").InputSignal<string | undefined>;
5409
- size: import("@angular/core").InputSignal<"small" | "xsmall" | "medium" | "large" | null | undefined>;
5532
+ size: import("@angular/core").InputSignal<"small" | "medium" | "xsmall" | "large" | null | undefined>;
5410
5533
  fill: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
5411
5534
  scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
5412
5535
  variants: import("@angular/core").Signal<string>;
@@ -5467,7 +5590,7 @@ declare const avatarVariants: (props?: ({
5467
5590
  content?: "picture" | "initials" | null | undefined;
5468
5591
  style?: "primary" | "secondary" | null | undefined;
5469
5592
  scheme?: "error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined;
5470
- size?: "small" | "xsmall" | "medium" | "large" | null | undefined;
5593
+ size?: "small" | "medium" | "xsmall" | "large" | null | undefined;
5471
5594
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5472
5595
  type AvatarVariants = VariantProps<typeof avatarVariants>;
5473
5596
  /** Left icon slot — tags its host with the `link-icon-left` class and pins it to the start. */
@@ -5525,7 +5648,7 @@ export declare class LinkIconRightDirective {
5525
5648
  */
5526
5649
  export declare class LinkComponent {
5527
5650
  class: import("@angular/core").InputSignal<string | undefined>;
5528
- size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "medium" | null | undefined>;
5651
+ size: import("@angular/core").InputSignal<"small" | "medium" | "sm" | "md" | null | undefined>;
5529
5652
  visited: import("@angular/core").InputSignal<boolean | null | undefined>;
5530
5653
  icon: import("@angular/core").InputSignal<boolean | null | undefined>;
5531
5654
  openWindow: import("@angular/core").InputSignal<boolean | null | undefined>;
@@ -5584,13 +5707,13 @@ export declare class LinkComponent {
5584
5707
  }
5585
5708
  export declare const LINK_LABEL_CLASS = "link-label";
5586
5709
  declare const linkVariants: (props?: ({
5587
- size?: "small" | "sm" | "md" | "medium" | null | undefined;
5710
+ size?: "small" | "medium" | "sm" | "md" | null | undefined;
5588
5711
  visited?: boolean | null | undefined;
5589
5712
  icon?: boolean | null | undefined;
5590
5713
  openWindow?: boolean | null | undefined;
5591
5714
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5592
5715
  export declare const linkIconVariants: (props?: ({
5593
- size?: "small" | "sm" | "md" | "medium" | null | undefined;
5716
+ size?: "small" | "medium" | "sm" | "md" | null | undefined;
5594
5717
  position?: "right" | "left" | null | undefined;
5595
5718
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5596
5719
  type LinkVariants = VariantProps<typeof linkVariants>;
@@ -5887,25 +6010,14 @@ export declare const textareaWrapVariants: (props?: ({
5887
6010
  filled?: boolean | null | undefined;
5888
6011
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5889
6012
  type TextareaWrapVariants = VariantProps<typeof textareaWrapVariants>;
5890
- export declare class SearchInputComponent implements FormValueControl<string> {
6013
+ /**
6014
+ * What the plain field and the one with suggestions share: every input, the value, the sizes and the clear button.
6015
+ * Not a component of its own: `SearchInputComponent` and `SearchInputSuggestionsComponent` differ only by the
6016
+ * `ngCombobox` on the inner `<input>`.
6017
+ */
6018
+ declare abstract class SearchInputBase implements FormValueControl<string> {
5891
6019
  cn: import("cn").CnFunction;
5892
6020
  searchInput: import("@angular/core").Signal<ElementRef<any>>;
5893
- /**
5894
- * The `ngCombobox` directive instance applied to the inner input element.
5895
- *
5896
- * @remarks
5897
- * Use this reference to attach a suggestions popup from the consumer side:
5898
- *
5899
- * ```html
5900
- * <SearchInput #si [(value)]="query" />
5901
- * <ng-template ngComboboxPopup [combobox]="si.combobox()">
5902
- * <ul ngComboboxWidget ngListbox #lb="ngListbox" [activeDescendant]="lb.activeDescendant()">
5903
- * <li ngOption [value]="suggestion">…</li>
5904
- * </ul>
5905
- * </ng-template>
5906
- * ```
5907
- */
5908
- combobox: import("@angular/core").Signal<Combobox>;
5909
6021
  /**
5910
6022
  * The search text, kept in sync with the inner input element.
5911
6023
  *
@@ -5957,10 +6069,9 @@ export declare class SearchInputComponent implements FormValueControl<string> {
5957
6069
  iconClass: import("@angular/core").Signal<"" | "size-3">;
5958
6070
  /** Leading magnifier: focus-rotation animation + size-aware sizing. */
5959
6071
  searchIconClass: import("@angular/core").Signal<string>;
5960
- constructor();
5961
6072
  clearSearch(e: Event): void;
5962
- static ɵfac: i0.ɵɵFactoryDeclaration<SearchInputComponent, never>;
5963
- static ɵcmp: i0.ɵɵComponentDeclaration<SearchInputComponent, "SearchInput, search-input, searchinput", never, {
6073
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchInputBase, never>;
6074
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SearchInputBase, never, never, {
5964
6075
  "value": {
5965
6076
  "alias": "value";
5966
6077
  "required": false;
@@ -6008,7 +6119,41 @@ export declare class SearchInputComponent implements FormValueControl<string> {
6008
6119
  };
6009
6120
  }, {
6010
6121
  "value": "valueChange";
6011
- }, never, ["*"], true, never>;
6122
+ }, never, never, true, never>;
6123
+ }
6124
+ /**
6125
+ * A search field: a native `<input type="search">`, with no combobox semantics.
6126
+ *
6127
+ * For a field that shows suggestions, write `<SearchInput suggestions>` and import
6128
+ * `SearchInputSuggestionsComponent` instead: that one is a real ARIA combobox.
6129
+ */
6130
+ export declare class SearchInputComponent extends SearchInputBase {
6131
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchInputComponent, never>;
6132
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchInputComponent, "SearchInput:not([suggestions]), search-input:not([suggestions]), searchinput:not([suggestions])", never, {}, {}, never, ["*"], true, never>;
6133
+ }
6134
+ /**
6135
+ * A search field with a suggestions popup: its inner `<input>` carries `ngCombobox`, so it is announced as a combobox.
6136
+ * Selected by the `suggestions` attribute, which must be static (`<SearchInput suggestions>`).
6137
+ */
6138
+ export declare class SearchInputSuggestionsComponent extends SearchInputBase {
6139
+ /**
6140
+ * The `ngCombobox` directive instance applied to the inner input element.
6141
+ *
6142
+ * @remarks
6143
+ * Use this reference to attach a suggestions popup from the consumer side:
6144
+ *
6145
+ * ```html
6146
+ * <SearchInput suggestions #si [(value)]="query" />
6147
+ * <ng-template ngComboboxPopup [combobox]="si.combobox()">
6148
+ * <ul ngComboboxWidget ngListbox #lb="ngListbox" [activeDescendant]="lb.activeDescendant()">
6149
+ * <li ngOption [value]="suggestion">…</li>
6150
+ * </ul>
6151
+ * </ng-template>
6152
+ * ```
6153
+ */
6154
+ combobox: import("@angular/core").Signal<Combobox>;
6155
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchInputSuggestionsComponent, never>;
6156
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchInputSuggestionsComponent, "SearchInput[suggestions], search-input[suggestions], searchinput[suggestions]", never, {}, {}, never, ["*"], true, never>;
6012
6157
  }
6013
6158
  /**
6014
6159
  * Makes the active option of an `ngListbox` follow the mouse pointer.
@@ -6036,47 +6181,17 @@ export declare class ListboxActivateOnHover {
6036
6181
  static ɵdir: i0.ɵɵDirectiveDeclaration<ListboxActivateOnHover, "[ngListbox][activateOnHover]", never, {}, {}, never, never, true, never>;
6037
6182
  }
6038
6183
  /**
6039
- * Workaround for https://github.com/angular/components/issues/33361.
6040
- *
6041
- * `@angular/aria`'s `keyboardEventRelayEffect` reads `controlTarget()` outside of `untracked()`, so it re-runs when the
6042
- * popup widget registers again on a later expansion and re-dispatches the LAST relayed keyboard event onto the fresh
6043
- * listbox: reopening the popup with ArrowDown lands on the 2nd option instead of the 1st. Clearing the relayed event
6044
- * whenever the popup collapses prevents the replay.
6045
- *
6046
- * Call it from the constructor (an injection context) of every component that owns an `ngCombobox`. It is the one place
6047
- * to delete once the issue is fixed upstream.
6048
- *
6049
- * ```ts
6050
- * private readonly combobox = viewChild.required(Combobox);
6051
- * constructor() {
6052
- * fixStaleComboboxRelay(() => this.combobox());
6053
- * }
6054
- * ```
6184
+ * What the plain bar and the one with suggestions share: every input, the value, the sizes and the buttons.
6185
+ * Not a component of its own: `SearchBarComponent` and `SearchBarSuggestionsComponent` differ only by the
6186
+ * `ngCombobox` on the inner `<input>`.
6055
6187
  */
6056
- export declare function fixStaleComboboxRelay(combobox: () => Combobox): void;
6057
- export declare class SearchBarComponent implements FormValueControl<string> {
6188
+ declare abstract class SearchBarBase implements FormValueControl<string> {
6058
6189
  cn: import("cn").CnFunction;
6059
6190
  searchBarVariants: (props?: ({
6060
6191
  size?: "small" | "medium" | "large" | null | undefined;
6061
6192
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6062
6193
  protected readonly searchNativeReset: string;
6063
6194
  searchInput: import("@angular/core").Signal<ElementRef<any>>;
6064
- /**
6065
- * The `ngCombobox` directive instance applied to the inner input element.
6066
- *
6067
- * @remarks
6068
- * Use this reference to attach a suggestions popup from the consumer side:
6069
- *
6070
- * ```html
6071
- * <SearchBar #sb [(value)]="query" />
6072
- * <ng-template ngComboboxPopup [combobox]="sb.combobox()">
6073
- * <ul ngComboboxWidget ngListbox #lb="ngListbox" [activeDescendant]="lb.activeDescendant()">
6074
- * <li ngOption [value]="suggestion">…</li>
6075
- * </ul>
6076
- * </ng-template>
6077
- * ```
6078
- */
6079
- combobox: import("@angular/core").Signal<Combobox>;
6080
6195
  /**
6081
6196
  * The search text, kept in sync with the inner input element.
6082
6197
  *
@@ -6090,11 +6205,12 @@ export declare class SearchBarComponent implements FormValueControl<string> {
6090
6205
  search: import("@angular/core").OutputEmitterRef<string>;
6091
6206
  placeholder: import("@angular/core").InputSignal<string>;
6092
6207
  /**
6093
- * Nom accessible du champ, posé sur l'`<input>` interne.
6208
+ * Accessible name of the inner `<input>`.
6094
6209
  *
6095
- * À utiliser plutôt qu'un `aria-label` sur `<SearchBar>` : l'hôte est un élément personnalisé
6096
- * sans rôle, où ARIA interdit `aria-label` — l'attribut y est ignoré et le champ retombe sur son
6097
- * `placeholder` pour tout nom accessible.
6210
+ * A placeholder is not a label: it disappears on the first keystroke and screen readers are not
6211
+ * required to announce it (RGAA 11.1). Aliased on the attribute, as `SearchInput.ariaLabel` and
6212
+ * `Badge.ariaLabel` are, so a caller writes `aria-label="…"` on the element and the name lands where
6213
+ * it is read: the `<input>`, this host being an unknown element with no role of its own.
6098
6214
  */
6099
6215
  ariaLabel: import("@angular/core").InputSignal<string | undefined>;
6100
6216
  /** Accessible name of the clear button. Nothing in the library translates: pass it translated. */
@@ -6132,11 +6248,10 @@ export declare class SearchBarComponent implements FormValueControl<string> {
6132
6248
  iconClass: import("@angular/core").Signal<string>;
6133
6249
  /** Leading magnifier class: focus-rotation animation + size-aware sizing. */
6134
6250
  searchIconClass: import("@angular/core").Signal<string>;
6135
- constructor();
6136
6251
  clearSearch(e: Event): void;
6137
6252
  emitSearch(e: Event): void;
6138
- static ɵfac: i0.ɵɵFactoryDeclaration<SearchBarComponent, never>;
6139
- static ɵcmp: i0.ɵɵComponentDeclaration<SearchBarComponent, "SearchBar, search-bar, searchbar", never, {
6253
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchBarBase, never>;
6254
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SearchBarBase, never, never, {
6140
6255
  "value": {
6141
6256
  "alias": "value";
6142
6257
  "required": false;
@@ -6148,7 +6263,7 @@ export declare class SearchBarComponent implements FormValueControl<string> {
6148
6263
  "isSignal": true;
6149
6264
  };
6150
6265
  "ariaLabel": {
6151
- "alias": "ariaLabel";
6266
+ "alias": "aria-label";
6152
6267
  "required": false;
6153
6268
  "isSignal": true;
6154
6269
  };
@@ -6185,7 +6300,41 @@ export declare class SearchBarComponent implements FormValueControl<string> {
6185
6300
  }, {
6186
6301
  "value": "valueChange";
6187
6302
  "search": "search";
6188
- }, never, ["*", "[slot='trailing']"], true, never>;
6303
+ }, never, never, true, never>;
6304
+ }
6305
+ /**
6306
+ * A search bar: a native `<input type="search">`, with no combobox semantics.
6307
+ *
6308
+ * For a bar that shows suggestions, write `<SearchBar suggestions>` and import `SearchBarSuggestionsComponent`
6309
+ * instead: that one is a real ARIA combobox.
6310
+ */
6311
+ export declare class SearchBarComponent extends SearchBarBase {
6312
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchBarComponent, never>;
6313
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchBarComponent, "SearchBar:not([suggestions]), search-bar:not([suggestions]), searchbar:not([suggestions])", never, {}, {}, never, ["*", "[slot='trailing']"], true, never>;
6314
+ }
6315
+ /**
6316
+ * A search bar with a suggestions popup: its inner `<input>` carries `ngCombobox`, so it is announced as a combobox.
6317
+ * Selected by the `suggestions` attribute, which must be static (`<SearchBar suggestions>`).
6318
+ */
6319
+ export declare class SearchBarSuggestionsComponent extends SearchBarBase {
6320
+ /**
6321
+ * The `ngCombobox` directive instance applied to the inner input element.
6322
+ *
6323
+ * @remarks
6324
+ * Use this reference to attach a suggestions popup from the consumer side:
6325
+ *
6326
+ * ```html
6327
+ * <SearchBar suggestions #sb [(value)]="query" />
6328
+ * <ng-template ngComboboxPopup [combobox]="sb.combobox()">
6329
+ * <ul ngComboboxWidget ngListbox #lb="ngListbox" [activeDescendant]="lb.activeDescendant()">
6330
+ * <li ngOption [value]="suggestion">…</li>
6331
+ * </ul>
6332
+ * </ng-template>
6333
+ * ```
6334
+ */
6335
+ combobox: import("@angular/core").Signal<Combobox>;
6336
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchBarSuggestionsComponent, never>;
6337
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchBarSuggestionsComponent, "SearchBar[suggestions], search-bar[suggestions], searchbar[suggestions]", never, {}, {}, never, ["*", "[slot='trailing']"], true, never>;
6189
6338
  }
6190
6339
  export declare const SB_ICON_CLASS = "sb-icon";
6191
6340
  export declare const SB_INPUT_CLASS = "sb-input";