@sinequa/galactik 2.4.0 → 2.5.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sinequa/galactik",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -226,6 +226,23 @@ export declare class BellIcon {
226
226
  */
227
227
  export declare const BellIconComponent: typeof BellIcon;
228
228
  export type BellIconComponent = BellIcon;
229
+ export declare class BellSlashIcon {
230
+ class: import("@angular/core").InputSignal<string | undefined>;
231
+ classes: import("@angular/core").Signal<string>;
232
+ static ɵfac: i0.ɵɵFactoryDeclaration<BellSlashIcon, never>;
233
+ static ɵcmp: i0.ɵɵComponentDeclaration<BellSlashIcon, "bell-slash, bell-slash-icon, BellSlash, BellSlashIcon", never, {
234
+ "class": {
235
+ "alias": "class";
236
+ "required": false;
237
+ "isSignal": true;
238
+ };
239
+ }, {}, never, never, true, never>;
240
+ }
241
+ /**
242
+ * @deprecated Use BellSlashIcon instead.
243
+ */
244
+ export declare const BellSlashIconComponent: typeof BellSlashIcon;
245
+ export type BellSlashIconComponent = BellSlashIcon;
229
246
  export declare class BookmarkIcon {
230
247
  class: import("@angular/core").InputSignal<string | undefined>;
231
248
  classes: import("@angular/core").Signal<string>;
@@ -1088,6 +1105,23 @@ export declare class GridIcon {
1088
1105
  */
1089
1106
  export declare const GridIconComponent: typeof GridIcon;
1090
1107
  export type GridIconComponent = GridIcon;
1108
+ export declare class GripVerticalIcon {
1109
+ class: import("@angular/core").InputSignal<string | undefined>;
1110
+ classes: import("@angular/core").Signal<string>;
1111
+ static ɵfac: i0.ɵɵFactoryDeclaration<GripVerticalIcon, never>;
1112
+ static ɵcmp: i0.ɵɵComponentDeclaration<GripVerticalIcon, "grip-vertical, grip-vertical-icon, GripVertical, GripVerticalIcon", never, {
1113
+ "class": {
1114
+ "alias": "class";
1115
+ "required": false;
1116
+ "isSignal": true;
1117
+ };
1118
+ }, {}, never, never, true, never>;
1119
+ }
1120
+ /**
1121
+ * @deprecated Use GripVerticalIcon instead.
1122
+ */
1123
+ export declare const GripVerticalIconComponent: typeof GripVerticalIcon;
1124
+ export type GripVerticalIconComponent = GripVerticalIcon;
1091
1125
  export declare class HighlighterIcon {
1092
1126
  class: import("@angular/core").InputSignal<string | undefined>;
1093
1127
  classes: import("@angular/core").Signal<string>;
@@ -2728,6 +2762,48 @@ export declare const tooltipVariants: (props?: ({
2728
2762
  interactive?: boolean | null | undefined;
2729
2763
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
2730
2764
  type TooltipVariants = VariantProps<typeof tooltipVariants>;
2765
+ /**
2766
+ * `[truncated]` — tells whether the text of an element is cut off (a one-line `truncate` or a multi-line
2767
+ * `line-clamp-*`), so that a tooltip is shown only when it adds something:
2768
+ * `[tooltipDisabled]="!cut.isTruncated()"`. A tooltip that repeats a text already fully visible is noise;
2769
+ * one that is missing on a cut-off text hides information.
2770
+ *
2771
+ * The state is measured when the element is rendered, then again whenever its size changes.
2772
+ *
2773
+ * The element that is actually cut is the host by default. When the cut element is inside the host (a
2774
+ * component whose host is never clamped itself, like the label of a `<ListItemText>`), give its CSS selector
2775
+ * as the value: `truncated=".list-item-text"`.
2776
+ *
2777
+ * A tooltip is a pointer help: a host that cannot take the keyboard focus never opens it from the keyboard.
2778
+ * Give a keyboard user the full text another way — for instance by lifting the clamp while an ancestor has
2779
+ * `:focus-visible` (`in-focus-visible:line-clamp-none`).
2780
+ *
2781
+ * @example
2782
+ * ```html
2783
+ * <span class="truncate" truncated #cut="truncated" [tooltip]="label" [tooltipDisabled]="!cut.isTruncated()">{{ label }}</span>
2784
+ *
2785
+ * <ListItemText truncated=".list-item-text" #cut="truncated" [tooltip]="label" [tooltipDisabled]="!cut.isTruncated()">
2786
+ * {{ label }}
2787
+ * </ListItemText>
2788
+ * ```
2789
+ */
2790
+ export declare class TruncatedDirective {
2791
+ /** CSS selector, relative to the host, of the element that is cut. Empty: the host itself. */
2792
+ readonly truncated: import("@angular/core").InputSignal<string>;
2793
+ private readonly host;
2794
+ private readonly cut;
2795
+ /** Whether the text is currently cut off. */
2796
+ readonly isTruncated: import("@angular/core").Signal<boolean>;
2797
+ constructor();
2798
+ static ɵfac: i0.ɵɵFactoryDeclaration<TruncatedDirective, never>;
2799
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TruncatedDirective, "[truncated]", ["truncated"], {
2800
+ "truncated": {
2801
+ "alias": "truncated";
2802
+ "required": false;
2803
+ "isSignal": true;
2804
+ };
2805
+ }, {}, never, never, true, never>;
2806
+ }
2731
2807
  export declare class MenuComponent {
2732
2808
  class: import("@angular/core").InputSignal<string | undefined>;
2733
2809
  classes: import("@angular/core").Signal<string>;
@@ -3779,7 +3855,7 @@ export declare class ButtonComponent {
3779
3855
  variant: import("@angular/core").InputSignal<"primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined>;
3780
3856
  scheme: import("@angular/core").InputSignal<"default" | "neutral" | null | undefined>;
3781
3857
  iconOnly: import("@angular/core").InputSignal<boolean | null | undefined>;
3782
- size: import("@angular/core").InputSignal<"small" | "medium" | "large" | "xs" | "sm" | "md" | "lg" | "xsmall" | null | undefined>;
3858
+ size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "xs" | "lg" | "xsmall" | "medium" | "large" | null | undefined>;
3783
3859
  variants: import("@angular/core").Signal<string | undefined>;
3784
3860
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
3785
3861
  static ɵdir: i0.ɵɵDirectiveDeclaration<ButtonComponent, "button", never, {
@@ -3823,7 +3899,7 @@ declare const BUTTON_ICON_SOLO_CLASS = "btn-icon-solo";
3823
3899
  declare const buttonVariants: (props?: ({
3824
3900
  variant?: "primary" | "secondary" | "none" | "light-accent" | "accent" | "tertiary" | null | undefined;
3825
3901
  scheme?: "default" | "neutral" | null | undefined;
3826
- size?: "small" | "medium" | "large" | "xs" | "sm" | "md" | "lg" | "xsmall" | null | undefined;
3902
+ size?: "small" | "sm" | "md" | "xs" | "lg" | "xsmall" | "medium" | "large" | null | undefined;
3827
3903
  iconOnly?: boolean | null | undefined;
3828
3904
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
3829
3905
  type ButtonVariants = VariantProps<typeof buttonVariants>;
@@ -3847,7 +3923,7 @@ export declare class ToggleComponent {
3847
3923
  /** Palette : `unique` (primaire) ou `multi` (secondaire). */
3848
3924
  readonly variant: import("@angular/core").InputSignal<"multi" | "unique" | null | undefined>;
3849
3925
  /** Taille (`sm`/`md`, alias `small`/`medium`). */
3850
- readonly size: import("@angular/core").InputSignal<"small" | "medium" | "sm" | "md" | null | undefined>;
3926
+ readonly size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "medium" | null | undefined>;
3851
3927
  /** Pilule carrée (icône seule). */
3852
3928
  readonly iconOnly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3853
3929
  /** Discriminant de rendu d'icône (piloté par le consommateur). */
@@ -3920,7 +3996,7 @@ export declare class ToggleItemComponent {
3920
3996
  /** Palette explicite ; à défaut, héritée du `<ToggleGroup>` parent, sinon `unique`. */
3921
3997
  readonly variant: import("@angular/core").InputSignal<"multi" | "unique" | null | undefined>;
3922
3998
  /** Taille (`sm`/`md`, alias `small`/`medium`). */
3923
- readonly size: import("@angular/core").InputSignal<"small" | "medium" | "sm" | "md" | null | undefined>;
3999
+ readonly size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "medium" | null | undefined>;
3924
4000
  /** Pilule carrée (icône seule). */
3925
4001
  readonly iconOnly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3926
4002
  /** Discriminant de rendu d'icône (piloté par le consommateur). */
@@ -4057,7 +4133,7 @@ export declare const TOGGLE_ICON_CLASS = "toggle-icon";
4057
4133
  export declare const TOGGLE_LABEL_CLASS = "toggle-label";
4058
4134
  export declare const toggleVariants: (props?: ({
4059
4135
  variant?: "multi" | "unique" | null | undefined;
4060
- size?: "small" | "medium" | "sm" | "md" | null | undefined;
4136
+ size?: "small" | "sm" | "md" | "medium" | null | undefined;
4061
4137
  iconOnly?: boolean | null | undefined;
4062
4138
  showIcon?: boolean | null | undefined;
4063
4139
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -5038,7 +5114,7 @@ export declare class TagComponent {
5038
5114
  class: import("@angular/core").InputSignal<string | undefined>;
5039
5115
  variant: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
5040
5116
  scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
5041
- size: import("@angular/core").InputSignal<"small" | "medium" | "xs" | "sm" | "md" | "xsmall" | null | undefined>;
5117
+ size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "xs" | "xsmall" | "medium" | null | undefined>;
5042
5118
  variants: import("@angular/core").Signal<string>;
5043
5119
  static ɵfac: i0.ɵɵFactoryDeclaration<TagComponent, never>;
5044
5120
  static ɵdir: i0.ɵɵDirectiveDeclaration<TagComponent, "tag, Tag", never, {
@@ -5070,7 +5146,7 @@ declare const TAG_FLAG_CLASS = "tag-flag";
5070
5146
  declare const tagVariants: (props?: ({
5071
5147
  variant?: "primary" | "secondary" | null | undefined;
5072
5148
  scheme?: "error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined;
5073
- size?: "small" | "medium" | "xs" | "sm" | "md" | "xsmall" | null | undefined;
5149
+ size?: "small" | "sm" | "md" | "xs" | "xsmall" | "medium" | null | undefined;
5074
5150
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5075
5151
  type TagVariants = VariantProps<typeof tagVariants>;
5076
5152
  /**
@@ -5281,7 +5357,7 @@ export declare class BadgeComponent {
5281
5357
  variant: import("@angular/core").InputSignal<"number" | "icon" | null | undefined>;
5282
5358
  fill: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
5283
5359
  scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
5284
- size: import("@angular/core").InputSignal<"xs" | "sm" | "md" | null | undefined>;
5360
+ size: import("@angular/core").InputSignal<"sm" | "md" | "xs" | null | undefined>;
5285
5361
  ariaLabel: import("@angular/core").InputSignal<string | undefined>;
5286
5362
  variants: import("@angular/core").Signal<string>;
5287
5363
  static ɵfac: i0.ɵɵFactoryDeclaration<BadgeComponent, never>;
@@ -5325,7 +5401,7 @@ declare const badgeVariants: (props?: ({
5325
5401
  variant?: "number" | "icon" | null | undefined;
5326
5402
  style?: "primary" | "secondary" | null | undefined;
5327
5403
  scheme?: "error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined;
5328
- size?: "xs" | "sm" | "md" | null | undefined;
5404
+ size?: "sm" | "md" | "xs" | null | undefined;
5329
5405
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5330
5406
  type BadgeVariants = VariantProps<typeof badgeVariants>;
5331
5407
  /**
@@ -5347,7 +5423,7 @@ export declare class BulletComponent {
5347
5423
  readonly class: import("@angular/core").InputSignal<string | undefined>;
5348
5424
  readonly scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
5349
5425
  readonly fill: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
5350
- readonly size: import("@angular/core").InputSignal<"xs" | "sm" | "md" | null | undefined>;
5426
+ readonly size: import("@angular/core").InputSignal<"sm" | "md" | "xs" | null | undefined>;
5351
5427
  /**
5352
5428
  * Wraps the dot in an expanding, fading halo — the "live" status light. Off by default; it
5353
5429
  * animates nothing under `prefers-reduced-motion`.
@@ -5392,7 +5468,7 @@ export declare class BulletComponent {
5392
5468
  declare const bulletVariants: (props?: ({
5393
5469
  scheme?: "error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined;
5394
5470
  fill?: "primary" | "secondary" | null | undefined;
5395
- size?: "xs" | "sm" | "md" | null | undefined;
5471
+ size?: "sm" | "md" | "xs" | null | undefined;
5396
5472
  pulse?: boolean | null | undefined;
5397
5473
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5398
5474
  type BulletVariants = VariantProps<typeof bulletVariants>;
@@ -5406,7 +5482,7 @@ type BulletVariants = VariantProps<typeof bulletVariants>;
5406
5482
  */
5407
5483
  export declare class KbdComponent {
5408
5484
  class: import("@angular/core").InputSignal<string | undefined>;
5409
- size: import("@angular/core").InputSignal<"xs" | "sm" | "md" | null | undefined>;
5485
+ size: import("@angular/core").InputSignal<"sm" | "md" | "xs" | null | undefined>;
5410
5486
  variants: import("@angular/core").Signal<string>;
5411
5487
  static ɵfac: i0.ɵɵFactoryDeclaration<KbdComponent, never>;
5412
5488
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbdComponent, "kbd, Kbd", never, {
@@ -5460,7 +5536,7 @@ export declare class KbdGroupComponent {
5460
5536
  * n'aurait pas de sens et gêne le copier d'un texte l'entourant.
5461
5537
  */
5462
5538
  declare const kbdVariants: (props?: ({
5463
- size?: "xs" | "sm" | "md" | null | undefined;
5539
+ size?: "sm" | "md" | "xs" | null | undefined;
5464
5540
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5465
5541
  type KbdVariants = VariantProps<typeof kbdVariants>;
5466
5542
  /**
@@ -5474,14 +5550,14 @@ export declare class AvatarFallbackComponent {
5474
5550
  canrender: import("@angular/core").WritableSignal<boolean>;
5475
5551
  class: import("@angular/core").InputSignal<string | undefined>;
5476
5552
  /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `"large"` (aligné sur le cva). */
5477
- size: import("@angular/core").InputSignal<"small" | "medium" | "large" | "xsmall" | null | undefined>;
5553
+ size: import("@angular/core").InputSignal<"small" | "xsmall" | "medium" | "large" | null | undefined>;
5478
5554
  /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `"primary"`. */
5479
5555
  fill: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
5480
5556
  /** Explicite ; à défaut, hérité de l'`<avatar>` parent, sinon `"sage"`. */
5481
5557
  scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
5482
5558
  /** Conteneur parent, pour hériter size/fill/scheme par défaut. */
5483
5559
  private readonly avatar;
5484
- protected readonly resolvedSize: import("@angular/core").Signal<NonNullable<"small" | "medium" | "large" | "xsmall" | null | undefined>>;
5560
+ protected readonly resolvedSize: import("@angular/core").Signal<NonNullable<"small" | "xsmall" | "medium" | "large" | null | undefined>>;
5485
5561
  protected readonly resolvedFill: import("@angular/core").Signal<NonNullable<"primary" | "secondary" | null | undefined>>;
5486
5562
  protected readonly resolvedScheme: import("@angular/core").Signal<NonNullable<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>>;
5487
5563
  variants: import("@angular/core").Signal<string>;
@@ -5563,7 +5639,7 @@ export declare class AvatarComponent {
5563
5639
  avatarImage: import("@angular/core").Signal<AvatarImageComponent | undefined>;
5564
5640
  avatarFallback: import("@angular/core").Signal<AvatarFallbackComponent | undefined>;
5565
5641
  class: import("@angular/core").InputSignal<string | undefined>;
5566
- size: import("@angular/core").InputSignal<"small" | "medium" | "large" | "xsmall" | null | undefined>;
5642
+ size: import("@angular/core").InputSignal<"small" | "xsmall" | "medium" | "large" | null | undefined>;
5567
5643
  fill: import("@angular/core").InputSignal<"primary" | "secondary" | null | undefined>;
5568
5644
  scheme: import("@angular/core").InputSignal<"error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined>;
5569
5645
  variants: import("@angular/core").Signal<string>;
@@ -5624,7 +5700,7 @@ declare const avatarVariants: (props?: ({
5624
5700
  content?: "picture" | "initials" | null | undefined;
5625
5701
  style?: "primary" | "secondary" | null | undefined;
5626
5702
  scheme?: "error" | "sage" | "success" | "almond" | "pink" | "grey" | "yellow" | "cherry" | "indigo" | "cyan" | "warning" | "info" | null | undefined;
5627
- size?: "small" | "medium" | "large" | "xsmall" | null | undefined;
5703
+ size?: "small" | "xsmall" | "medium" | "large" | null | undefined;
5628
5704
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5629
5705
  type AvatarVariants = VariantProps<typeof avatarVariants>;
5630
5706
  /** Left icon slot — tags its host with the `link-icon-left` class and pins it to the start. */
@@ -5682,7 +5758,7 @@ export declare class LinkIconRightDirective {
5682
5758
  */
5683
5759
  export declare class LinkComponent {
5684
5760
  class: import("@angular/core").InputSignal<string | undefined>;
5685
- size: import("@angular/core").InputSignal<"small" | "medium" | "sm" | "md" | null | undefined>;
5761
+ size: import("@angular/core").InputSignal<"small" | "sm" | "md" | "medium" | null | undefined>;
5686
5762
  visited: import("@angular/core").InputSignal<boolean | null | undefined>;
5687
5763
  icon: import("@angular/core").InputSignal<boolean | null | undefined>;
5688
5764
  openWindow: import("@angular/core").InputSignal<boolean | null | undefined>;
@@ -5741,13 +5817,13 @@ export declare class LinkComponent {
5741
5817
  }
5742
5818
  export declare const LINK_LABEL_CLASS = "link-label";
5743
5819
  declare const linkVariants: (props?: ({
5744
- size?: "small" | "medium" | "sm" | "md" | null | undefined;
5820
+ size?: "small" | "sm" | "md" | "medium" | null | undefined;
5745
5821
  visited?: boolean | null | undefined;
5746
5822
  icon?: boolean | null | undefined;
5747
5823
  openWindow?: boolean | null | undefined;
5748
5824
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5749
5825
  export declare const linkIconVariants: (props?: ({
5750
- size?: "small" | "medium" | "sm" | "md" | null | undefined;
5826
+ size?: "small" | "sm" | "md" | "medium" | null | undefined;
5751
5827
  position?: "right" | "left" | null | undefined;
5752
5828
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5753
5829
  type LinkVariants = VariantProps<typeof linkVariants>;
@@ -6098,7 +6174,7 @@ declare abstract class SearchInputBase implements FormValueControl<string> {
6098
6174
  * The clear button is a square box: it drops to `xs` (16px) with small text, and always at `size="sm"`
6099
6175
  * so it fits inside the 24px field whatever the text size.
6100
6176
  */
6101
- buttonSize: import("@angular/core").Signal<"xs" | "sm">;
6177
+ buttonSize: import("@angular/core").Signal<"sm" | "xs">;
6102
6178
  /** Icon size follows the text: below the default 16px with small text, like `SearchBar`'s `small`. */
6103
6179
  iconClass: import("@angular/core").Signal<"" | "size-3">;
6104
6180
  /** Leading magnifier: focus-rotation animation + size-aware sizing. */
@@ -6277,7 +6353,7 @@ declare abstract class SearchBarBase implements FormValueControl<string> {
6277
6353
  * Icon-only action buttons (clear / send) shrink to `xs` at the `small`
6278
6354
  * size so their square box fits inside the `h-6` pill instead of overflowing.
6279
6355
  */
6280
- buttonSize: import("@angular/core").Signal<"xs" | "sm">;
6356
+ buttonSize: import("@angular/core").Signal<"sm" | "xs">;
6281
6357
  /**
6282
6358
  * Trailing/leading icons drop below the default 16px at the `small` size
6283
6359
  * so they leave breathing room inside the smaller buttons/pill.
@@ -8002,6 +8078,147 @@ export declare const resizableHandleVariants: (props?: ({
8002
8078
  withHandle?: boolean | null | undefined;
8003
8079
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8004
8080
  type ResizableHandleVariants = VariantProps<typeof resizableHandleVariants>;
8081
+ /**
8082
+ * `[sortable]` — makes the items of a list reorderable by drag and drop, with the browser's own drag and drop
8083
+ * (no dependency), and from the keyboard with <kbd>Alt</kbd> + <kbd>↑</kbd> / <kbd>↓</kbd>.
8084
+ *
8085
+ * The directive owns the gesture, not the data. It is given the items in their current order and reports the new
8086
+ * order through `(reorder)`; saving it, and updating the list it was given, is up to the consumer. While an item is
8087
+ * dragged the others slide out of the way and a slightly tilted copy of the dragged item follows the pointer, leaning
8088
+ * the other way when it goes up; dropped, it settles in its slot. A drag that is abandoned (dropped outside the list,
8089
+ * <kbd>Esc</kbd>) leaves the order as it was and nothing is emitted.
8090
+ *
8091
+ * Render the list from `items()` — the order **shown**, which is the given order, or the order the drop would give
8092
+ * while an item is being dragged — and mark each element with `[sortableItem]`, giving the item. Track the `@for` by
8093
+ * the item itself: the elements are moved, not recreated, which is what lets them slide and keep the focus.
8094
+ *
8095
+ * The dragged item's element carries `data-dragging` (a placeholder to style: `data-dragging:bg-…`). The copy that follows
8096
+ * the pointer is built from the dragged element, so it looks like it, and is placed in the top layer, above a popover
8097
+ * that may host the list.
8098
+ *
8099
+ * A touch screen that does not start a native drag has no way to reorder: the keyboard shortcut is the only
8100
+ * alternative, and it is not available there either.
8101
+ *
8102
+ * @example
8103
+ * ```html
8104
+ * <ul [sortable]="tags()" #sortable="sortable" (reorder)="tags.set($event)" [sortableAnnounce]="moved">
8105
+ * @for (tag of sortable.items(); track tag) {
8106
+ * <li [sortableItem]="tag" class="data-dragging:opacity-40">{{ tag }}</li>
8107
+ * }
8108
+ * </ul>
8109
+ * ```
8110
+ */
8111
+ export declare class SortableDirective<T = unknown> {
8112
+ /** The items, in their current order. */
8113
+ readonly sortable: import("@angular/core").InputSignal<readonly T[]>;
8114
+ /** Turns the reordering off: nothing is draggable, the keyboard shortcut does nothing. */
8115
+ readonly sortableDisabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8116
+ /**
8117
+ * Text announced to screen readers after a keyboard move: « "Annual report" moved to position 2 of 3 ». The
8118
+ * library translates nothing, so without it a move is silent.
8119
+ */
8120
+ readonly sortableAnnounce: import("@angular/core").InputSignal<((item: T, position: number, total: number) => string) | undefined>;
8121
+ /** The new order, when an item is dropped in a new place or moved from the keyboard. */
8122
+ readonly reorder: import("@angular/core").OutputEmitterRef<T[]>;
8123
+ private readonly document;
8124
+ private readonly injector;
8125
+ private readonly entries;
8126
+ /** The order the list would take if the dragged item were dropped now. */
8127
+ private readonly preview;
8128
+ private readonly draggedItem;
8129
+ /** The item being dragged, if any. */
8130
+ readonly dragged: import("@angular/core").Signal<T | undefined>;
8131
+ /** The order to render: the one given, or the preview of the drop while an item is being dragged. */
8132
+ readonly items: import("@angular/core").Signal<readonly T[]>;
8133
+ private ghost;
8134
+ private stopGhost;
8135
+ /** True from the drop (or the end of an abandoned drag) until the copy has settled in its slot. */
8136
+ private landing;
8137
+ private liveRegion;
8138
+ constructor();
8139
+ /** @internal */
8140
+ startDrag(event: DragEvent, item: T, row: HTMLElement): void;
8141
+ /** @internal Over an item: the dragged item takes the place of that item's half under the pointer, and the others shift. */
8142
+ dragOver(event: DragEvent, item: T, row: HTMLElement): void;
8143
+ /** Anywhere in the list — between two items, in its margin — a drop is accepted: it lands where the preview is. */
8144
+ protected onContainerDragOver(event: DragEvent): void;
8145
+ protected onDrop(event: DragEvent): void;
8146
+ /** @internal The end of every drag, dropped or not: `drop` has already started the landing, which is then left alone. */
8147
+ endDrag(): void;
8148
+ /**
8149
+ * What follows the pointer: a copy of the item, tilted and lifted by a shadow, drawn here rather than handed to
8150
+ * `setDragImage` — a browser may flatten or ignore the transform of a drag image, and a drag image cannot move
8151
+ * with the page. The native image is made invisible. The copy is a `popover` so that it sits in the top layer.
8152
+ */
8153
+ private startGhost;
8154
+ /**
8155
+ * Ends the drag smoothly: the copy glides to the slot it was dropped in (or, for an abandoned drag, back to where
8156
+ * the item came from), straightens, and its shadow fades — then it gives way to the real item.
8157
+ */
8158
+ private land;
8159
+ /** Runs `change`, which reorders the items, and slides each item from where it was to where it now is. */
8160
+ private slide;
8161
+ /** @internal Alt + ↑ / ↓: moves `item` one place. The focus follows it, and the move is announced. */
8162
+ moveBy(item: T, delta: -1 | 1): void;
8163
+ /** A visually hidden live region, created on the first announcement and shared by the whole list. */
8164
+ private announce;
8165
+ static ɵfac: i0.ɵɵFactoryDeclaration<SortableDirective<any>, never>;
8166
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SortableDirective<any>, "[sortable]", ["sortable"], {
8167
+ "sortable": {
8168
+ "alias": "sortable";
8169
+ "required": true;
8170
+ "isSignal": true;
8171
+ };
8172
+ "sortableDisabled": {
8173
+ "alias": "sortableDisabled";
8174
+ "required": false;
8175
+ "isSignal": true;
8176
+ };
8177
+ "sortableAnnounce": {
8178
+ "alias": "sortableAnnounce";
8179
+ "required": false;
8180
+ "isSignal": true;
8181
+ };
8182
+ }, {
8183
+ "reorder": "reorder";
8184
+ }, ["entries"], never, true, never>;
8185
+ }
8186
+ /**
8187
+ * `[sortableItem]` — one reorderable element of a `[sortable]` list; the value is the item it stands for. The
8188
+ * element becomes draggable, carries `data-dragging` while it is the one being dragged, and answers to
8189
+ * <kbd>Alt</kbd> + <kbd>↑</kbd> / <kbd>↓</kbd> while it has the focus.
8190
+ *
8191
+ * `[sortableItemDisabled]` keeps one item from being moved — by the pointer or by the keyboard — while the others
8192
+ * stay free to move, and may be dropped before or after it: it is not moved by the user, but its position still
8193
+ * shifts to make room. A disabled item carries `data-disabled`.
8194
+ */
8195
+ export declare class SortableItemDirective<T = unknown> {
8196
+ /** The item this element stands for — the same value as in the list given to `[sortable]`. */
8197
+ readonly sortableItem: import("@angular/core").InputSignal<T>;
8198
+ protected readonly list: SortableDirective<T>;
8199
+ readonly element: HTMLElement;
8200
+ /** Keeps this item from being moved, by the pointer or by the keyboard. The others stay free to move around it. */
8201
+ readonly sortableItemDisabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8202
+ /** Not movable: this item is disabled, or the whole list is. */
8203
+ protected readonly locked: import("@angular/core").Signal<boolean>;
8204
+ protected readonly dragging: import("@angular/core").Signal<boolean>;
8205
+ protected onDragStart(event: DragEvent): void;
8206
+ /** Only when the element itself has the focus (Alt + arrows inside a field or a button of the item are theirs), and it is not disabled. */
8207
+ protected onMoveKey(event: Event, delta: -1 | 1): void;
8208
+ static ɵfac: i0.ɵɵFactoryDeclaration<SortableItemDirective<any>, never>;
8209
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SortableItemDirective<any>, "[sortableItem]", never, {
8210
+ "sortableItem": {
8211
+ "alias": "sortableItem";
8212
+ "required": true;
8213
+ "isSignal": true;
8214
+ };
8215
+ "sortableItemDisabled": {
8216
+ "alias": "sortableItemDisabled";
8217
+ "required": false;
8218
+ "isSignal": true;
8219
+ };
8220
+ }, {}, never, never, true, never>;
8221
+ }
8005
8222
  /**
8006
8223
  * Observes viewport breakpoints.
8007
8224
  *