@elasticias/ui 1.0.13 → 1.0.15

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": "@elasticias/ui",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",
@@ -888,7 +888,8 @@
888
888
  than inventing a third kind of icon button. */
889
889
 
890
890
  .ef-theme-toggle,
891
- .ef-app-top__logout {
891
+ .ef-app-top__logout,
892
+ .ef-app-top__action {
892
893
  appearance: none;
893
894
  background: var(--paper-alt);
894
895
  border: 1px solid var(--rule);
@@ -906,13 +907,15 @@
906
907
  }
907
908
 
908
909
  .ef-theme-toggle:hover,
909
- .ef-app-top__logout:hover {
910
+ .ef-app-top__logout:hover,
911
+ .ef-app-top__action:hover {
910
912
  color: var(--text);
911
913
  border-color: var(--ink-400);
912
914
  }
913
915
 
914
916
  .ef-theme-toggle:focus-visible,
915
- .ef-app-top__logout:focus-visible {
917
+ .ef-app-top__logout:focus-visible,
918
+ .ef-app-top__action:focus-visible {
916
919
  outline: 0;
917
920
  border-color: var(--tenant-400);
918
921
  box-shadow: 0 0 0 4px var(--tenant-100);
@@ -920,7 +923,8 @@
920
923
  }
921
924
 
922
925
  .ef-theme-toggle i,
923
- .ef-app-top__logout i {
926
+ .ef-app-top__logout i,
927
+ .ef-app-top__action i {
924
928
  font-size: 14px;
925
929
  line-height: 1;
926
930
  }
@@ -1079,6 +1079,24 @@ declare class EfTooltipDirective {
1079
1079
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<EfTooltipDirective, "[efTooltip]", never, {}, {}, never, never, true, [{ directive: typeof i1.Tooltip; inputs: { "pTooltip": "efTooltip"; "tooltipPosition": "efTooltipPosition"; "tooltipDisabled": "efTooltipDisabled"; "tooltipStyleClass": "efTooltipStyleClass"; "tooltipEvent": "efTooltipEvent"; "showDelay": "efTooltipShowDelay"; "hideDelay": "efTooltipHideDelay"; "appendTo": "efTooltipAppendTo"; "autoHide": "efTooltipAutoHide"; "escape": "efTooltipEscape"; "life": "efTooltipLife"; }; outputs: {}; }]>;
1080
1080
  }
1081
1081
 
1082
+ /**
1083
+ * The three tiers a shortcut can belong to, outer to inner: a Global
1084
+ * shortcut works anywhere in the app, a Screen shortcut works anywhere on
1085
+ * the current screen, a Row shortcut only while a row's menu is open.
1086
+ * `list()` returns groups in registration order, which is really "whatever
1087
+ * happened to construct first." This fixes the section order so it
1088
+ * always reads outer to inner regardless of what rendered when.
1089
+ */
1090
+ /** One action and every key bound to it, which is what a reader wants: the
1091
+ * action once, its bindings beside it. */
1092
+ interface ShortcutActionView {
1093
+ labelKey: string;
1094
+ keys: string[];
1095
+ }
1096
+ interface ShortcutGroupView {
1097
+ group: string;
1098
+ actions: ShortcutActionView[];
1099
+ }
1082
1100
  /**
1083
1101
  * The keyboard-shortcuts reference: every registration currently sitting
1084
1102
  * in `EfShortcutService`, grouped and rendered with the same `.kbd` chip
@@ -1098,10 +1116,16 @@ declare class EfShortcutsDialogComponent {
1098
1116
  private readonly shortcutService;
1099
1117
  /** Two-way open state. */
1100
1118
  readonly visible: _angular_core.ModelSignal<boolean>;
1101
- protected readonly groups: _angular_core.Signal<_elasticias_core.EfShortcutGroup[]>;
1102
- /** Only macOS reads `⌘` at a glance. Everyone else needs the line
1103
- * spelling out that it means Ctrl. */
1104
- protected readonly isMacPlatform: boolean;
1119
+ /** `list()`, reordered Global → Screen → Row, with the bindings for one
1120
+ * action collapsed onto a single row.
1121
+ *
1122
+ * An action can be reachable by more than one key: opening this dialog
1123
+ * answers to both `?` and `mod+/`. Listing registrations verbatim
1124
+ * printed that action's name twice, once per binding, which reads as a
1125
+ * duplicate rather than as a choice. An unrecognised group (a future
1126
+ * tier this component does not know about) sorts last rather than
1127
+ * being dropped. */
1128
+ protected readonly groups: _angular_core.Signal<ShortcutGroupView[]>;
1105
1129
  protected readonly closeAction: EfDialogAction[];
1106
1130
  protected formatKeys(keys: string): string;
1107
1131
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfShortcutsDialogComponent, never>;
@@ -4694,8 +4718,8 @@ declare class EfEmptyStateComponent {
4694
4718
  /**
4695
4719
  * Comptoir smart bar — the search/filter card every list screen
4696
4720
  * starts with. Composes:
4697
- * 1. Search input (with `⌘K` kbd hint) + Effacer / Rechercher
4698
- * action buttons.
4721
+ * 1. Search input (with an optional keyboard-shortcut hint chip) +
4722
+ * Effacer / Rechercher action buttons.
4699
4723
  * 2. A filter-row slot for `[filters]` (pill-group + filter-pill +
4700
4724
  * preset-pill + "+ Plus de filtres").
4701
4725
  * 3. A drawer slot for `[drawer]` (advanced filters via
@@ -4705,6 +4729,12 @@ declare class EfEmptyStateComponent {
4705
4729
  * for two-way binding, or watch the (search) output for explicit
4706
4730
  * Rechercher clicks.
4707
4731
  *
4732
+ * `shortcut` defaults to `'mod+k'`: this component registers it with
4733
+ * `EfShortcutService` and focuses the search input when it fires (the
4734
+ * user still has to type and submit; the shortcut only gets them into
4735
+ * the field). Pass `[shortcut]="null"` on a screen with a second smart
4736
+ * bar so only one of them claims the binding.
4737
+ *
4708
4738
  * ```html
4709
4739
  * <ef-smart-bar
4710
4740
  * [(searchText)]="searchQuery"
@@ -4724,6 +4754,12 @@ declare class EfEmptyStateComponent {
4724
4754
  * ```
4725
4755
  */
4726
4756
  declare class EfSmartBarComponent {
4757
+ private readonly shortcuts;
4758
+ /** Distinguishes this instance's registration from any other
4759
+ * ef-smart-bar on screen, the same convention ef-row-actions uses. */
4760
+ private static nextInstanceId;
4761
+ private readonly instanceId;
4762
+ private readonly searchInput;
4727
4763
  /** Two-way bound search input. */
4728
4764
  readonly searchText: _angular_core.ModelSignal<string>;
4729
4765
  readonly placeholderKey: _angular_core.InputSignal<string>;
@@ -4735,12 +4771,18 @@ declare class EfSmartBarComponent {
4735
4771
  readonly hideClear: _angular_core.InputSignalWithTransform<boolean, unknown>;
4736
4772
  readonly hideSearch: _angular_core.InputSignalWithTransform<boolean, unknown>;
4737
4773
  readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
4774
+ /** Keyboard shortcut that focuses the search input. `null` opts out
4775
+ * (a screen with two smart bars registers the binding on only one
4776
+ * of them). Defaults to `'mod+k'`. */
4777
+ readonly shortcut: _angular_core.InputSignal<string>;
4778
+ protected readonly kbdLabel: _angular_core.Signal<string>;
4738
4779
  readonly search: _angular_core.OutputEmitterRef<string>;
4739
4780
  readonly clear: _angular_core.OutputEmitterRef<void>;
4781
+ constructor();
4740
4782
  onSubmit(): void;
4741
4783
  onClear(): void;
4742
4784
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfSmartBarComponent, never>;
4743
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfSmartBarComponent, "ef-smart-bar", never, { "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; "placeholderKey": { "alias": "placeholderKey"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearLabelKey": { "alias": "clearLabelKey"; "required": false; "isSignal": true; }; "clearTitleKey": { "alias": "clearTitleKey"; "required": false; "isSignal": true; }; "searchLabelKey": { "alias": "searchLabelKey"; "required": false; "isSignal": true; }; "showKbdHint": { "alias": "showKbdHint"; "required": false; "isSignal": true; }; "hideClear": { "alias": "hideClear"; "required": false; "isSignal": true; }; "hideSearch": { "alias": "hideSearch"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "searchText": "searchTextChange"; "search": "search"; "clear": "clear"; }, never, ["[filters]", "[drawer]"], true, never>;
4785
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfSmartBarComponent, "ef-smart-bar", never, { "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; "placeholderKey": { "alias": "placeholderKey"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearLabelKey": { "alias": "clearLabelKey"; "required": false; "isSignal": true; }; "clearTitleKey": { "alias": "clearTitleKey"; "required": false; "isSignal": true; }; "searchLabelKey": { "alias": "searchLabelKey"; "required": false; "isSignal": true; }; "showKbdHint": { "alias": "showKbdHint"; "required": false; "isSignal": true; }; "hideClear": { "alias": "hideClear"; "required": false; "isSignal": true; }; "hideSearch": { "alias": "hideSearch"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; }, { "searchText": "searchTextChange"; "search": "search"; "clear": "clear"; }, never, ["[filters]", "[drawer]"], true, never>;
4744
4786
  }
4745
4787
 
4746
4788
  /**