@sinequa/atomic-angular 1.9.8 → 1.10.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/index.d.ts CHANGED
@@ -7843,6 +7843,8 @@ type DateRange = {
7843
7843
  declare class AggregationDateRangeDialogComponent {
7844
7844
  cn: typeof cn;
7845
7845
  readonly hasSelection: _angular_core.WritableSignal<boolean>;
7846
+ /** Drives an @if around the pickers so they are recreated fresh on each open. */
7847
+ readonly isDialogOpen: _angular_core.WritableSignal<boolean>;
7846
7848
  readonly dialog: _angular_core.Signal<DialogComponent | undefined>;
7847
7849
  readonly customRange: _angular_core.Signal<AggregationDateCustomRangeComponent | undefined>;
7848
7850
  readonly dualPickers: _angular_core.Signal<AggregationDateDualPickersComponent | undefined>;
@@ -7859,7 +7861,12 @@ declare class AggregationDateRangeDialogComponent {
7859
7861
  readonly useDateRange: _angular_core.InputSignalWithTransform<boolean, unknown>;
7860
7862
  readonly rangeSelected: _angular_core.OutputEmitterRef<DateRange>;
7861
7863
  open(): void;
7864
+ /** Runs on every close (confirm, cancel, Escape, backdrop): tear down the pickers and
7865
+ * reset transient state so the next open starts clean — no stale dates. */
7866
+ onClosed(): void;
7862
7867
  confirm(): void;
7868
+ /** Reads the selected [from, to] dates from whichever picker variant is rendered. */
7869
+ private getSelectedDates;
7863
7870
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AggregationDateRangeDialogComponent, never>;
7864
7871
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationDateRangeDialogComponent, "aggregation-date-range-dialog", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "lang": { "alias": "lang"; "required": false; "isSignal": true; }; "useDateRange": { "alias": "useDateRange"; "required": false; "isSignal": true; }; }, { "rangeSelected": "rangeSelected"; }, never, never, true, never>;
7865
7872
  }
@@ -7913,6 +7920,15 @@ declare class AggregationDateComponent {
7913
7920
  * @default undefined — derive from `QueryParamsStore` filters (current behavior)
7914
7921
  */
7915
7922
  controlledSelection: _angular_core.InputSignal<AggregationSelection | undefined>;
7923
+ /**
7924
+ * When emissions surface in controlled mode. `'selection'` (default) emits live
7925
+ * on each preset pick / range confirm (historical behavior). `'apply'` defers all
7926
+ * emissions to the visible Apply button, matching the list/tree facets — the
7927
+ * select-then-Apply flow. Ignored outside controlled mode.
7928
+ *
7929
+ * @default 'selection'
7930
+ */
7931
+ emitOn: _angular_core.InputSignal<"selection" | "apply">;
7916
7932
  readonly title: _angular_core.InputSignal<AggregationTitle>;
7917
7933
  readonly displayEmptyDistributionIntervals: _angular_core.InputSignal<boolean>;
7918
7934
  onSelect: _angular_core.OutputEmitterRef<AggregationItem[]>;
@@ -8122,7 +8138,7 @@ declare class AggregationDateComponent {
8122
8138
  private toEndOfDay;
8123
8139
  private getFormValueFilter;
8124
8140
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AggregationDateComponent, never>;
8125
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationDateComponent, "aggregation-date, AggregationDate, aggregationdate", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "displayEmptyDistributionIntervals": { "alias": "displayEmptyDistributionIntervals"; "required": false; "isSignal": true; }; "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; "searchText": "searchTextChange"; }, never, ["label"], true, never>;
8141
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationDateComponent, "aggregation-date, AggregationDate, aggregationdate", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "emitOn": { "alias": "emitOn"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "displayEmptyDistributionIntervals": { "alias": "displayEmptyDistributionIntervals"; "required": false; "isSignal": true; }; "searchText": { "alias": "searchText"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; "searchText": "searchTextChange"; }, never, ["label"], true, never>;
8126
8142
  }
8127
8143
 
8128
8144
  /**
@@ -11360,7 +11376,22 @@ declare class AggregationListComponent {
11360
11376
  readonly itemTemplateInput: _angular_core.InputSignal<TemplateRef<AggregationItemContext> | undefined>;
11361
11377
  protected readonly resolvedItemTemplate: _angular_core.Signal<TemplateRef<AggregationItemContext> | undefined>;
11362
11378
  selection: _angular_core.WritableSignal<boolean>;
11363
- isAllSelected: _angular_core.WritableSignal<boolean>;
11379
+ /**
11380
+ * Explicit, not-yet-applied selection intents keyed by item value
11381
+ * (`true` = checked, `false` = unchecked). Kept separately so a pending intent survives
11382
+ * an `items()` recompute (e.g. after "Load more" refreshes the aggregation), where
11383
+ * `$selected` is otherwise reset and re-derived from the applied filters only.
11384
+ * A `Map` (not a `Set` of checked values) so that *unchecking* an already-applied item
11385
+ * is remembered too — otherwise the recompute would re-derive it as checked.
11386
+ */
11387
+ private readonly pendingSelection;
11388
+ /**
11389
+ * Whether every selectable item is currently checked — drives the select-all toggle.
11390
+ * Derived (not imperative) so it stays correct after "Load more" adds unchecked items
11391
+ * or after an item is unchecked individually. Reads `pendingSelection` so per-click
11392
+ * toggles refresh it even when `items()` itself does not recompute.
11393
+ */
11394
+ isAllSelected: _angular_core.Signal<boolean>;
11364
11395
  searchText: _angular_core.ModelSignal<string>;
11365
11396
  private readonly base;
11366
11397
  readonly isControlled: _angular_core.Signal<boolean>;
@@ -12262,6 +12293,16 @@ declare class AggregationComponent {
12262
12293
  * @default undefined — derive from `QueryParamsStore` filters (current behavior)
12263
12294
  */
12264
12295
  controlledSelection: _angular_core.InputSignal<AggregationSelection | undefined>;
12296
+ /**
12297
+ * **Date variant only** (relayed to `<AggregationDate>`; list/tree already defer
12298
+ * by design). Controls when emissions surface in controlled mode: `'selection'`
12299
+ * (default) emits live on each preset pick / range confirm; `'apply'` defers all
12300
+ * emissions to a visible Apply button, matching the list/tree select-then-Apply
12301
+ * flow. Ignored outside controlled mode.
12302
+ *
12303
+ * @default 'selection'
12304
+ */
12305
+ emitOn: _angular_core.InputSignal<"selection" | "apply">;
12265
12306
  /**
12266
12307
  * Which sub-component renders the aggregation.
12267
12308
  *
@@ -12322,7 +12363,7 @@ declare class AggregationComponent {
12322
12363
  */
12323
12364
  protected isDate(column: string | undefined): boolean;
12324
12365
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AggregationComponent, never>;
12325
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationComponent, "Aggregation, aggregation", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "expandedLevel": { "alias": "expandedLevel"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; }, ["itemDirective"], never, true, never>;
12366
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AggregationComponent, "Aggregation, aggregation", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "column": { "alias": "column"; "required": true; "isSignal": true; }; "showFiltersCount": { "alias": "showFiltersCount"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "expandedLevel": { "alias": "expandedLevel"; "required": false; "isSignal": true; }; "syncUrl": { "alias": "syncUrl"; "required": false; "isSignal": true; }; "controlledQuery": { "alias": "query"; "required": false; "isSignal": true; }; "controlledAggregation": { "alias": "aggregation"; "required": false; "isSignal": true; }; "controlledSelection": { "alias": "selection"; "required": false; "isSignal": true; }; "emitOn": { "alias": "emitOn"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onApply": "onApply"; "onClear": "onClear"; "selectionChange": "selectionChange"; "filtersChange": "filtersChange"; }, ["itemDirective"], never, true, never>;
12326
12367
  }
12327
12368
 
12328
12369
  declare class AggregationPanelComponent {
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@sinequa/atomic-angular",
3
- "version": "1.9.8",
3
+ "version": "1.10.0",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
4
7
  "peerDependencies": {
5
8
  "@angular/core": "^20.0.0"
6
9
  },