@myrmidon/gve-core 7.0.16 → 7.0.18

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": "@myrmidon/gve-core",
3
- "version": "7.0.16",
3
+ "version": "7.0.18",
4
4
  "description": "Cadmus - GVE Angular frontend core components.",
5
5
  "keywords": [
6
6
  "GVE"
@@ -17,12 +17,11 @@
17
17
  "@angular/common": "^22.0.1",
18
18
  "@angular/core": "^22.0.1",
19
19
  "@angular/material": "^22.0.1",
20
- "@cisstech/nge": "^18.3.0",
21
20
  "@myrmidon/ngx-mat-tools": "^2.0.0",
22
21
  "@myrmidon/ngx-tools": "^3.0.0",
23
- "@myrmidon/gve-snapshot-rendition": "^2.0.7",
22
+ "@myrmidon/gve-snapshot-rendition": "^2.0.11",
24
23
  "gsap": "^3.15.0",
25
- "nanoid": "^5.1.16"
24
+ "nanoid": "^6.0.0"
26
25
  },
27
26
  "dependencies": {
28
27
  "tslib": "^2.3.0"
@@ -1,7 +1,7 @@
1
1
  import { MatDialogConfig, MatDialogRef, MatDialog } from '@angular/material/dialog';
2
2
  import * as _angular_core from '@angular/core';
3
- import { OnInit, OnDestroy, ElementRef, AfterViewInit } from '@angular/core';
4
- import { FormControl, FormGroup, FormBuilder } from '@angular/forms';
3
+ import { OnInit, OnDestroy, AfterViewInit, ElementRef } from '@angular/core';
4
+ import { FormControl, FormGroup, FormBuilder, ControlValueAccessor } from '@angular/forms';
5
5
  import { DialogService } from '@myrmidon/ngx-mat-tools';
6
6
  import { HttpClient } from '@angular/common/http';
7
7
  import { Observable } from 'rxjs';
@@ -727,6 +727,94 @@ declare class BatchOperationEditorComponent implements OnInit {
727
727
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BatchOperationEditorComponent, "gve-batch-operation-editor", never, { "preset": { "alias": "preset"; "required": false; "isSignal": true; }; }, { "operationsChange": "operationsChange"; }, never, never, true, never>;
728
728
  }
729
729
 
730
+ /**
731
+ * 🔑 `gve-searchable-select`
732
+ *
733
+ * A generic, reusable `mat-select` wrapper adding a sticky filter input
734
+ * pinned to the top of the options panel. Users get the best of both
735
+ * worlds: the full, scrollable list is visible as soon as the panel
736
+ * opens, and typing instantly narrows it down in place.
737
+ *
738
+ * Implements `ControlValueAccessor`, so it's a drop-in replacement for a
739
+ * plain `mat-select` bound via `[formControl]` or `formControlName`: the
740
+ * selected value is the `id` of the chosen `LabeledId`.
741
+ *
742
+ * `mat-error` and `mat-hint` elements can be projected as children, just
743
+ * like when nesting them directly under a `mat-form-field`.
744
+ *
745
+ * - ▶️ `options` (`LabeledId[]`): the selectable items.
746
+ * - ▶️ `label` (`string`): the form field label.
747
+ * - ▶️ `filterPlaceholder` (`string`): placeholder for the filter input.
748
+ * - ▶️ `noOptionsText` (`string`): text shown when no option matches the
749
+ * filter.
750
+ * - ▶️ `required` (`boolean`): whether a value is required.
751
+ */
752
+ declare class SearchableSelectComponent implements ControlValueAccessor {
753
+ private readonly _select;
754
+ private readonly _filterInput;
755
+ /**
756
+ * The selectable items.
757
+ */
758
+ readonly options: _angular_core.InputSignal<LabeledId[]>;
759
+ /**
760
+ * The form field label.
761
+ */
762
+ readonly label: _angular_core.InputSignal<string>;
763
+ /**
764
+ * Placeholder for the sticky filter input.
765
+ */
766
+ readonly filterPlaceholder: _angular_core.InputSignal<string>;
767
+ /**
768
+ * Text shown when no option matches the current filter.
769
+ */
770
+ readonly noOptionsText: _angular_core.InputSignal<string>;
771
+ /**
772
+ * Whether a value is required.
773
+ */
774
+ readonly required: _angular_core.InputSignal<boolean>;
775
+ /**
776
+ * The current filter term, typed into the sticky filter input.
777
+ */
778
+ readonly filterTerm: _angular_core.WritableSignal<string>;
779
+ /**
780
+ * The currently selected option's ID, or null when none is selected.
781
+ */
782
+ readonly value: _angular_core.WritableSignal<string | null>;
783
+ /**
784
+ * Whether the control is disabled.
785
+ */
786
+ readonly disabled: _angular_core.WritableSignal<boolean>;
787
+ /**
788
+ * The options matching the current filter term. Matches against both
789
+ * label and ID, case-insensitively.
790
+ */
791
+ readonly filteredOptions: _angular_core.Signal<LabeledId[]>;
792
+ private _onChange;
793
+ private _onTouched;
794
+ writeValue(value: string | null): void;
795
+ registerOnChange(fn: (value: string | null) => void): void;
796
+ registerOnTouched(fn: () => void): void;
797
+ setDisabledState(isDisabled: boolean): void;
798
+ onSelectionChange(value: string): void;
799
+ onFilterInput(event: Event): void;
800
+ /**
801
+ * Keys that should still reach mat-select's own panel keydown handler
802
+ * (closing, and moving into / activating the option list). Everything
803
+ * else (letters, digits, etc.) is kept local to the filter input so it
804
+ * doesn't trigger mat-select's built-in type-ahead.
805
+ */
806
+ private static readonly PASSTHROUGH_KEYS;
807
+ onFilterKeydown(event: KeyboardEvent): void;
808
+ onOpenedChange(opened: boolean): void;
809
+ /**
810
+ * Moves keyboard focus to the select trigger, without opening the
811
+ * panel. Mirrors the native `focus()` behavior of a plain `mat-select`.
812
+ */
813
+ focus(): void;
814
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchableSelectComponent, never>;
815
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchableSelectComponent, "gve-searchable-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "noOptionsText": { "alias": "noOptionsText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; }, {}, never, ["mat-error", "mat-hint"], true, never>;
816
+ }
817
+
730
818
  /**
731
819
  * Features map. This is used for features from closed sets,
732
820
  * and lists the possible values for each feature.
@@ -776,7 +864,7 @@ interface FeaturePropMap {
776
864
  */
777
865
  declare class FeatureEditorComponent implements OnInit, OnDestroy {
778
866
  private _sub?;
779
- readonly nameControl: _angular_core.Signal<ElementRef<any> | undefined>;
867
+ readonly nameControl: _angular_core.Signal<SearchableSelectComponent | HTMLInputElement | undefined>;
780
868
  /**
781
869
  * The list of feature names to display in the name selection.
782
870
  * This is used when you have a closed list of features.
@@ -1890,5 +1978,5 @@ declare class SettingsService {
1890
1978
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SettingsService>;
1891
1979
  }
1892
1980
 
1893
- export { BaseTextCharComponent, BaseTextEditorComponent, BaseTextPeepholeComponent, BaseTextViewComponent, BatchOperationEditorComponent, ChainOperationEditorComponent, ChainResultViewComponent, FeatureEditorComponent, FeatureSetEditorComponent, FeatureSetPolicy, FeatureSetViewComponent, GveApiService, GveBaseTextService, GveGraphvizService, OperationSourceEditorComponent, OperationType, SettingsService, SnapshotEditorComponent, SnapshotTextEditorComponent, StepsMapComponent };
1981
+ export { BaseTextCharComponent, BaseTextEditorComponent, BaseTextPeepholeComponent, BaseTextViewComponent, BatchOperationEditorComponent, ChainOperationEditorComponent, ChainResultViewComponent, FeatureEditorComponent, FeatureSetEditorComponent, FeatureSetPolicy, FeatureSetViewComponent, GveApiService, GveBaseTextService, GveGraphvizService, OperationSourceEditorComponent, OperationType, SearchableSelectComponent, SettingsService, SnapshotEditorComponent, SnapshotTextEditorComponent, StepsMapComponent };
1894
1982
  export type { BaseTextChar, BaseTextCharEvent, BaseTextRange, ChainOperationContextStep, ChainOperationTags, CharChain, CharChainLink, CharChainNode, CharChainOperation, CharChainResult, CharNode, Feature, FeatureDefinitions, FeatureMap, FeaturePropMap, GraphvizRankdir, LabeledId, OpBaseTextRange, OperationFeature, OperationMetadata, OperationSource, PayloadMatDialogConfig, ResultWrapper, Snapshot, TreeNode };