@nexterajs/ui 0.0.1 → 0.1.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.
Files changed (63) hide show
  1. package/README.md +279 -34
  2. package/fesm2022/nexterajs-ui-charts.mjs +1096 -0
  3. package/fesm2022/nexterajs-ui-charts.mjs.map +1 -0
  4. package/fesm2022/nexterajs-ui-core.mjs +835 -11
  5. package/fesm2022/nexterajs-ui-core.mjs.map +1 -1
  6. package/fesm2022/nexterajs-ui-display.mjs +1142 -0
  7. package/fesm2022/nexterajs-ui-display.mjs.map +1 -0
  8. package/fesm2022/nexterajs-ui-dropdowns.mjs +621 -69
  9. package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
  10. package/fesm2022/nexterajs-ui-file-uploader.mjs +576 -11
  11. package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
  12. package/fesm2022/nexterajs-ui-forms.mjs +2702 -452
  13. package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
  14. package/fesm2022/nexterajs-ui-grid.mjs +2350 -336
  15. package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
  16. package/fesm2022/nexterajs-ui-intl.mjs +117 -15
  17. package/fesm2022/nexterajs-ui-intl.mjs.map +1 -1
  18. package/fesm2022/nexterajs-ui-navigation.mjs +1054 -0
  19. package/fesm2022/nexterajs-ui-navigation.mjs.map +1 -0
  20. package/fesm2022/nexterajs-ui-notify.mjs +353 -0
  21. package/fesm2022/nexterajs-ui-notify.mjs.map +1 -0
  22. package/fesm2022/nexterajs-ui-overlay.mjs +1671 -0
  23. package/fesm2022/nexterajs-ui-overlay.mjs.map +1 -0
  24. package/fesm2022/nexterajs-ui-pivot.mjs +191 -136
  25. package/fesm2022/nexterajs-ui-pivot.mjs.map +1 -1
  26. package/fesm2022/nexterajs-ui-shell.mjs +542 -0
  27. package/fesm2022/nexterajs-ui-shell.mjs.map +1 -0
  28. package/fesm2022/nexterajs-ui-styling.mjs +568 -3
  29. package/fesm2022/nexterajs-ui-styling.mjs.map +1 -1
  30. package/fesm2022/nexterajs-ui-tree-view.mjs +150 -18
  31. package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
  32. package/fesm2022/nexterajs-ui-validation.mjs +283 -97
  33. package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
  34. package/fesm2022/nexterajs-ui.mjs +6 -0
  35. package/fesm2022/nexterajs-ui.mjs.map +1 -1
  36. package/package.json +37 -2
  37. package/styles/_dropdown.scss +150 -1
  38. package/styles/_editor.scss +75 -21
  39. package/styles/_icons.scss +92 -0
  40. package/styles/_mixins.scss +104 -1
  41. package/styles/_scrollbar.scss +134 -0
  42. package/styles/_status.scss +21 -0
  43. package/styles/_toast.scss +243 -0
  44. package/styles/_tokens.scss +467 -2
  45. package/styles/_widget.scss +14 -3
  46. package/styles/index.scss +10 -4
  47. package/types/nexterajs-ui-charts.d.ts +446 -0
  48. package/types/nexterajs-ui-core.d.ts +515 -30
  49. package/types/nexterajs-ui-display.d.ts +720 -0
  50. package/types/nexterajs-ui-dropdowns.d.ts +318 -57
  51. package/types/nexterajs-ui-file-uploader.d.ts +240 -8
  52. package/types/nexterajs-ui-forms.d.ts +772 -43
  53. package/types/nexterajs-ui-grid.d.ts +878 -135
  54. package/types/nexterajs-ui-intl.d.ts +39 -4
  55. package/types/nexterajs-ui-navigation.d.ts +531 -0
  56. package/types/nexterajs-ui-notify.d.ts +149 -0
  57. package/types/nexterajs-ui-overlay.d.ts +703 -0
  58. package/types/nexterajs-ui-pivot.d.ts +91 -70
  59. package/types/nexterajs-ui-shell.d.ts +294 -0
  60. package/types/nexterajs-ui-styling.d.ts +163 -3
  61. package/types/nexterajs-ui-tree-view.d.ts +56 -4
  62. package/types/nexterajs-ui-validation.d.ts +110 -22
  63. package/types/nexterajs-ui.d.ts +6 -0
@@ -1,6 +1,8 @@
1
1
  import { NxeColumnFormat, NxeGridInstance, NxeExcelExportOptions, NxeScrollingComponent, NxeHeaderFilterModel } from '@nexterajs/ui/grid';
2
+ import { NxeNumberSeparators } from '@nexterajs/ui/intl';
2
3
  import * as _angular_core from '@angular/core';
3
4
  import { OnDestroy, TemplateRef, Signal, EventEmitter } from '@angular/core';
5
+ import { NxeMessageService } from '@nexterajs/ui/core';
4
6
 
5
7
  type NxePivotArea = 'row' | 'column' | 'data' | 'filter';
6
8
  type NxePivotSummaryType = 'sum' | 'count' | 'min' | 'max' | 'avg' | 'custom';
@@ -142,6 +144,11 @@ interface NxePivotDataSourceOptions {
142
144
  store?: any[];
143
145
  retrieveFields?: boolean;
144
146
  dataFieldArea?: 'row' | 'column';
147
+ /**
148
+ * Locale separators for rendered cell text. Supplied by the pivot component from
149
+ * `NXE_NUMBER_SEPARATORS`; omitted means en-US, which is what the engine always did.
150
+ */
151
+ separators?: NxeNumberSeparators;
145
152
  }
146
153
  /**
147
154
  * A rendered column leaf = (column-path × data-field). Since P2-C2 the column axis is N-level:
@@ -177,7 +184,7 @@ interface NxePivotHeaderCell {
177
184
  /** Set when > 1: a 'T'/'GT'/collapsed-parent cell filling the remaining value rows (dx
178
185
  * `depthSize`, m_data_controller). */
179
186
  rowspan?: number;
180
- /** True on "{value} Total" cells (dx `dx-row-total dx-total`, on both axes). */
187
+ /** True on "{value} Total" cells (dx `dx-row-total nxe-total`, on both axes). */
181
188
  isTotal?: boolean;
182
189
  /** True when the cell carries an expand/collapse chevron (dx `dx-expand-icon-container`). */
183
190
  expandable?: boolean;
@@ -206,7 +213,7 @@ interface NxePivotRowHeaderCell {
206
213
  /** True when the cell carries an expand/collapse chevron (a parent node's label). */
207
214
  expandable: boolean;
208
215
  expanded: boolean;
209
- /** True for a "{value} Total" label cell (dx `dx-row-total dx-total`). */
216
+ /** True for a "{value} Total" label cell (dx `dx-row-total nxe-total`). */
210
217
  isTotal: boolean;
211
218
  pathKey: string;
212
219
  }
@@ -737,9 +744,9 @@ declare class NxePivotDataSource {
737
744
  declare class NxeStateStoringComponent {
738
745
  readonly enabled: _angular_core.InputSignal<boolean>;
739
746
  readonly type: _angular_core.InputSignal<"custom" | "localStorage" | "sessionStorage">;
740
- readonly storageKey: _angular_core.InputSignal<string>;
741
- readonly customSave: _angular_core.InputSignal<(state: any) => void>;
742
- readonly customLoad: _angular_core.InputSignal<() => any>;
747
+ readonly storageKey: _angular_core.InputSignal<string | undefined>;
748
+ readonly customSave: _angular_core.InputSignal<((state: any) => void) | undefined>;
749
+ readonly customLoad: _angular_core.InputSignal<(() => any) | undefined>;
743
750
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeStateStoringComponent, never>;
744
751
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeStateStoringComponent, "nxe-state-storing", never, { "enabled": { "alias": "enabled"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": false; "isSignal": true; }; "customSave": { "alias": "customSave"; "required": false; "isSignal": true; }; "customLoad": { "alias": "customLoad"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
745
752
  }
@@ -771,7 +778,7 @@ interface NxePivotPanelChip {
771
778
  caption: string;
772
779
  sortOrder: 'asc' | 'desc';
773
780
  sortable: boolean;
774
- /** P3-C4: the chip renders the `.dx-header-filter` funnel (never on data-area chips). */
781
+ /** P3-C4: the chip renders the `.nxe-header-filter` funnel (never on data-area chips). */
775
782
  filterable: boolean;
776
783
  /** A filter is applied (`filterValues` non-empty) — full-alpha funnel, no `-empty` class. */
777
784
  filterActive: boolean;
@@ -811,7 +818,7 @@ interface NxePivotFieldMoveEvent {
811
818
  }
812
819
  declare class NxePivotFieldPanelComponent implements OnDestroy {
813
820
  /** The pivot's CURRENT engine — overrides already merged, so chips track every mutation. */
814
- readonly engine: _angular_core.InputSignal<NxePivotDataSource>;
821
+ readonly engine: _angular_core.InputSignal<NxePivotDataSource | null>;
815
822
  readonly showFilterFields: _angular_core.InputSignal<boolean>;
816
823
  readonly showDataFields: _angular_core.InputSignal<boolean>;
817
824
  readonly showColumnFields: _angular_core.InputSignal<boolean>;
@@ -825,18 +832,18 @@ declare class NxePivotFieldPanelComponent implements OnDestroy {
825
832
  * header-filter funnel. Same per-field precedence as `allowSorting`. */
826
833
  readonly allowFiltering: _angular_core.InputSignal<boolean>;
827
834
  /** Widget `showBorders`: the panel bands sit INSIDE the border box (dx draws the outer
828
- * border around the filter/chip bands — `.dx-pivotgrid-border .dx-filter-header` et al). */
835
+ * border around the filter/chip bands — `.nxe-pivotgrid-border .nxe-filter-header` et al). */
829
836
  readonly showBorders: _angular_core.InputSignal<boolean>;
830
- /** P3-C3: the pivot's `.dx-pivotgrid-toolbar` template (field-chooser button) — rendered
837
+ /** P3-C3: the pivot's `.nxe-pivotgrid-toolbar` template (field-chooser button) — rendered
831
838
  * where dx prepends its toolbar container (m_widget.js `_renderDescriptionArea`). */
832
- readonly toolbarTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
839
+ readonly toolbarTemplate: _angular_core.InputSignal<TemplateRef<unknown> | null>;
833
840
  /** Which panel band hosts the toolbar (the pivot resolves dx's placement branches):
834
841
  * 'filter' = the filter-header cell; 'column' = the column-header cell (dx's middle
835
842
  * branch — showFilterFields off but data/column bands shown; the cell renders for the
836
843
  * toolbar even when showColumnFields is off, exactly as dx's always-present
837
844
  * $columnHeader does); null = the toolbar lives in the cross-tab corner (or no
838
845
  * chooser) — nothing renders here. */
839
- readonly toolbarArea: _angular_core.InputSignal<"column" | "filter">;
846
+ readonly toolbarArea: _angular_core.InputSignal<"column" | "filter" | null>;
840
847
  /** A chip was dropped — the pivot recomputes areaIndexes and writes its override map. */
841
848
  readonly fieldMove: _angular_core.OutputEmitterRef<NxePivotFieldMoveEvent>;
842
849
  /** A sortable chip was clicked — the pivot flips the field's effective sortOrder. */
@@ -846,9 +853,10 @@ declare class NxePivotFieldPanelComponent implements OnDestroy {
846
853
  /** A chip's funnel was clicked — the pivot opens the header-filter panel (P3-C4). */
847
854
  readonly filterOpen: _angular_core.OutputEmitterRef<NxePivotFilterOpenEvent>;
848
855
  /** The ROW fields area — NxePivotGridComponent outlets this into its corner cell (dx hosts
849
- * the row chips inside `.dx-area-description-cell`, never in a band of their own). */
850
- readonly rowAreaTemplate: _angular_core.Signal<TemplateRef<unknown>>;
856
+ * the row chips inside `.nxe-area-description-cell`, never in a band of their own). */
857
+ readonly rowAreaTemplate: _angular_core.Signal<TemplateRef<unknown> | undefined>;
851
858
  private readonly elementRef;
859
+ private readonly messages;
852
860
  private readonly zone;
853
861
  protected readonly filterArea: _angular_core.Signal<PanelArea>;
854
862
  protected readonly dataArea: _angular_core.Signal<PanelArea>;
@@ -867,12 +875,12 @@ declare class NxePivotFieldPanelComponent implements OnDestroy {
867
875
  private dragRoot;
868
876
  /**
869
877
  * Drop zones. For filter/data/column the fields-area element is both hit rect and highlight
870
- * target; for ROW the enclosing corner cell (`th.dx-area-description-cell`) is — dx's row
878
+ * target; for ROW the enclosing corner cell (`th.nxe-area-description-cell`) is — dx's row
871
879
  * area IS the corner, so a drop anywhere on it must land in rows, not read as "outside".
872
880
  */
873
881
  private dropZones;
874
882
  private trackPointer;
875
- /** dx `.dx-position-indicator`: a 2px gray bar between chips, inside the (positioned) area. */
883
+ /** dx `.nxe-position-indicator`: a 2px gray bar between chips, inside the (positioned) area. */
876
884
  private placeIndicator;
877
885
  private completeDrop;
878
886
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxePivotFieldPanelComponent, never>;
@@ -880,22 +888,22 @@ declare class NxePivotFieldPanelComponent implements OnDestroy {
880
888
  }
881
889
 
882
890
  /** `dxo-field-chooser` — LIVE since P3-C3: with `enabled` the pivot renders the
883
- * `.dx-pivotgrid-field-chooser-button` toolbar button and opens the chooser popup
891
+ * `.nxe-pivotgrid-field-chooser-button` toolbar button and opens the chooser popup
884
892
  * (nxe-pivot-field-chooser) in a CDK overlay. Defaults are dxPivotGrid's `fieldChooser`
885
893
  * defaults (m_widget.js): enabled true, width/height 600, allowSearch false,
886
894
  * applyChangesMode 'instantly' (no OK/Cancel — changes hit the pivot live). */
887
895
  declare class NxeFieldChooserComponent {
888
896
  readonly enabled: _angular_core.InputSignal<boolean>;
889
- readonly height: _angular_core.InputSignal<number>;
890
- readonly width: _angular_core.InputSignal<number>;
897
+ readonly height: _angular_core.InputSignal<number | undefined>;
898
+ readonly width: _angular_core.InputSignal<number | undefined>;
891
899
  readonly allowSearch: _angular_core.InputSignal<boolean>;
892
900
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeFieldChooserComponent, never>;
893
901
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeFieldChooserComponent, "nxe-field-chooser", never, { "enabled": { "alias": "enabled"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "allowSearch": { "alias": "allowSearch"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
894
902
  }
895
903
  declare class NxePivotGridComponent implements OnDestroy {
896
- readonly dataSource: _angular_core.InputSignal<NxePivotDataSourceOptions | NxePivotDataSource>;
904
+ readonly dataSource: _angular_core.InputSignal<NxePivotDataSourceOptions | NxePivotDataSource | null | undefined>;
897
905
  /** dx `allowFiltering` (default false) — LIVE since P3-C4: filterable dimension chips
898
- * (panel AND chooser) render the `.dx-header-filter` funnel and open the shared
906
+ * (panel AND chooser) render the `.nxe-header-filter` funnel and open the shared
899
907
  * header-filter panel; per-field `field.allowFiltering` overrides the widget flag
900
908
  * (dx m_widget `_updateCalculatedOptions`). */
901
909
  readonly allowFiltering: _angular_core.InputSignal<boolean>;
@@ -908,14 +916,14 @@ declare class NxePivotGridComponent implements OnDestroy {
908
916
  * `expandAll()`/`collapseAll()` work regardless, exactly as dx's data-source methods do. */
909
917
  readonly allowExpandAll: _angular_core.InputSignal<boolean>;
910
918
  readonly showBorders: _angular_core.InputSignal<boolean>;
911
- /** dx default TRUE (m_widget.js defaultOptions): `dx-word-wrap` on the table lets header
919
+ /** dx default TRUE (m_widget.js defaultOptions): `nxe-word-wrap` on the table lets header
912
920
  * cells wrap; data cells stay nowrap either way (dx.light's direct td rule). */
913
921
  readonly wordWrapEnabled: _angular_core.InputSignal<boolean>;
914
922
  readonly rowHeaderLayout: _angular_core.InputSignal<NxePivotRowHeaderLayout>;
915
923
  /** dx `height`: number (px) or CSS string, applied to the widget root — the internal
916
924
  * scroll container tracks it at 100%. */
917
- readonly height: _angular_core.InputSignal<string | number>;
918
- readonly texts: _angular_core.InputSignal<NxePivotTexts>;
925
+ readonly height: _angular_core.InputSignal<string | number | undefined>;
926
+ readonly texts: _angular_core.InputSignal<NxePivotTexts | undefined>;
919
927
  readonly showColumnTotals: _angular_core.InputSignal<boolean>;
920
928
  readonly showRowTotals: _angular_core.InputSignal<boolean>;
921
929
  readonly showColumnGrandTotals: _angular_core.InputSignal<boolean>;
@@ -925,9 +933,9 @@ declare class NxePivotGridComponent implements OnDestroy {
925
933
  /** dx `dataFieldArea` (default 'column'): 'row' renders the measures as the innermost ROW
926
934
  * level when two or more exist (with one, dx omits the metric level on either axis).
927
935
  * Left undefined the engine falls back to the dataSource options' own `dataFieldArea`. */
928
- readonly dataFieldArea: _angular_core.InputSignal<"row" | "column">;
936
+ readonly dataFieldArea: _angular_core.InputSignal<"row" | "column" | undefined>;
929
937
  /** dx `allowSorting` (default false, P3-C2): field-panel chips toggle their field's
930
- * sortOrder on click and carry the `.dx-sort` arrow in `.dx-column-indicators`. */
938
+ * sortOrder on click and carry the `.nxe-sort` arrow in `.nxe-column-indicators`. */
931
939
  readonly allowSorting: _angular_core.InputSignal<boolean>;
932
940
  /**
933
941
  * Facade `option(name, value)` writes land here and WIN over the input bindings — the dx
@@ -944,14 +952,14 @@ declare class NxePivotGridComponent implements OnDestroy {
944
952
  protected readonly showBordersEff: Signal<boolean>;
945
953
  protected readonly wordWrapEnabledEff: Signal<boolean>;
946
954
  protected readonly rowHeaderLayoutEff: Signal<NxePivotRowHeaderLayout>;
947
- protected readonly heightEff: Signal<string | number>;
948
- protected readonly textsEff: Signal<NxePivotTexts>;
955
+ protected readonly heightEff: Signal<string | number | undefined>;
956
+ protected readonly textsEff: Signal<NxePivotTexts | undefined>;
949
957
  protected readonly showColumnTotalsEff: Signal<boolean>;
950
958
  protected readonly showRowTotalsEff: Signal<boolean>;
951
959
  protected readonly showColumnGrandTotalsEff: Signal<boolean>;
952
960
  protected readonly showRowGrandTotalsEff: Signal<boolean>;
953
961
  protected readonly showTotalsPriorEff: Signal<NxePivotTotalsPrior>;
954
- protected readonly dataFieldAreaEff: Signal<"row" | "column">;
962
+ protected readonly dataFieldAreaEff: Signal<"row" | "column" | undefined>;
955
963
  /** The documented option names `option()` gets/sets (DEFAULTS.md lists the exclusions). */
956
964
  private readonly effOptions;
957
965
  /**
@@ -971,37 +979,42 @@ declare class NxePivotGridComponent implements OnDestroy {
971
979
  * the same diff — never twice). `dataSource` rides along, get-only.
972
980
  */
973
981
  private readonly optionSnapshot;
974
- protected readonly fieldChooser: Signal<NxeFieldChooserComponent>;
982
+ protected readonly fieldChooser: Signal<NxeFieldChooserComponent | undefined>;
975
983
  /** The projected `nxe-field-panel` config (P3-C2) — the panel renders when it is visible. */
976
- protected readonly fieldPanel: Signal<NxeFieldPanelComponent>;
984
+ protected readonly fieldPanel: Signal<NxeFieldPanelComponent | undefined>;
977
985
  /** The projected `nxe-state-storing` config — LIVE since P3-C4 for `type: 'custom'`:
978
986
  * every layout mutation fires `customSave(state)` and `customLoad` is honored on init. */
979
- protected readonly stateStoring: Signal<NxeStateStoringComponent>;
987
+ protected readonly stateStoring: Signal<NxeStateStoringComponent | undefined>;
980
988
  /** dx `fieldPanel.visible` (default false): gates the panel, the corner's chips-vs-caption
981
989
  * switch, and the dx marker classes on the host. */
982
990
  protected readonly panelVisible: Signal<boolean>;
983
991
  /** The rendered panel component — source of the corner-hosted row-area template. */
984
992
  private readonly panelCmp;
985
993
  /** The ROW fields area, outletted into the corner cell (dx hosts the row chips inside
986
- * `.dx-area-description-cell` — oracle §c; the corner shows NO caption text then). */
987
- protected readonly panelRowAreaTpl: Signal<_angular_core.TemplateRef<unknown>>;
988
- /** The `.dx-pivotgrid-field-chooser-button` renders only when an `nxe-field-chooser` is
994
+ * `.nxe-area-description-cell` — oracle §c; the corner shows NO caption text then). */
995
+ protected readonly panelRowAreaTpl: Signal<_angular_core.TemplateRef<unknown> | null>;
996
+ /** The `.nxe-pivotgrid-field-chooser-button` renders only when an `nxe-field-chooser` is
989
997
  * projected with `enabled` not false (the DA page passes [enabled]="true"). */
990
998
  protected readonly chooserEnabled: Signal<boolean>;
991
999
  /** dx toolbar placement (m_widget.js `_renderDescriptionArea`, verbatim branch order):
992
- * (a) panel visible && showFilterFields -> the `.dx-filter-header` band;
993
- * (b) panel visible && (showDataFields || showColumnFields) -> the `.dx-column-header`
1000
+ * (a) panel visible && showFilterFields -> the `.nxe-filter-header` band;
1001
+ * (b) panel visible && (showDataFields || showColumnFields) -> the `.nxe-column-header`
994
1002
  * band (dx-compat's dormant column-header button rules go live);
995
- * (c) else -> the cross-tab corner `.dx-area-description-cell`, where the
996
- * transparent-until-hover button rules (dx-compat ~1113-1118) apply. */
997
- protected readonly chooserToolbarHost: Signal<"column" | "filter" | "corner">;
1003
+ * (c) else -> the cross-tab corner `.nxe-area-description-cell`, where the button is
1004
+ * transparent until hover and the corner drops its caption (the library's own rules,
1005
+ * nxe-pivot-grid.component.scss — dx.light's description-cell toolbar rules). */
1006
+ protected readonly chooserToolbarHost: Signal<"column" | "filter" | "corner" | null>;
998
1007
  /** The panel-hosted placements, bound into the panel's `toolbarArea` input. */
999
- protected readonly panelToolbarArea: Signal<"column" | "filter">;
1008
+ protected readonly panelToolbarArea: Signal<"column" | "filter" | null>;
1000
1009
  protected readonly chooserInCorner: Signal<boolean>;
1001
1010
  private chooserOverlayRef;
1002
1011
  private readonly overlay;
1003
1012
  private readonly viewContainerRef;
1004
1013
  private readonly elementRef;
1014
+ /** Locale separators for every number the pivot renders; threaded into the data source. */
1015
+ private readonly separators;
1016
+ /** The library's runtime-switchable messages. */
1017
+ protected readonly messages: NxeMessageService;
1005
1018
  /** Bumped by `getDataSource().reload()` to force a re-aggregate. */
1006
1019
  private readonly reloadTick;
1007
1020
  /**
@@ -1029,7 +1042,7 @@ declare class NxePivotGridComponent implements OnDestroy {
1029
1042
  * `expandAll()`/`collapseAll()`, so expand-all no longer wipes a dragged layout.)
1030
1043
  */
1031
1044
  private readonly fieldOverrides;
1032
- protected readonly engine: Signal<NxePivotDataSource>;
1045
+ protected readonly engine: Signal<NxePivotDataSource | null>;
1033
1046
  /**
1034
1047
  * The "layout changed" hook (P3-C2, consumed since P3-C4): the caller's fields with the
1035
1048
  * panel's overrides merged — a NEW array identity after every mutation (drag move, sort
@@ -1050,11 +1063,11 @@ declare class NxePivotGridComponent implements OnDestroy {
1050
1063
  * simply stop matching any node — harmless, dx-alike.
1051
1064
  */
1052
1065
  private readonly manualExpanded;
1053
- protected readonly model: Signal<NxePivotModel>;
1066
+ protected readonly model: Signal<NxePivotModel | null>;
1054
1067
  /** Host height style — dx `height`: numbers are px, strings pass through, unset removes it. */
1055
- protected readonly hostHeight: Signal<string>;
1068
+ protected readonly hostHeight: Signal<string | null>;
1056
1069
  /** The projected `nxe-scrolling` config — `mode: 'virtual'` opts into row windowing. */
1057
- protected readonly scrolling: Signal<NxeScrollingComponent>;
1070
+ protected readonly scrolling: Signal<NxeScrollingComponent | undefined>;
1058
1071
  /** Scroll offset of `.nxe-pivotgrid-scroll` (its own scroll handler feeds it). */
1059
1072
  private readonly scrollTop;
1060
1073
  /** The scroll container's clientHeight, measured in the render effect (0 = unmeasured). */
@@ -1086,7 +1099,7 @@ declare class NxePivotGridComponent implements OnDestroy {
1086
1099
  protected readonly totalColCount: Signal<number>;
1087
1100
  protected onPivotScroll(event: Event): void;
1088
1101
  /**
1089
- * dx `.dx-pivotgrid-nodata` (gridCoreUtils.renderNoDataText): shown when the data source
1102
+ * dx `.nxe-pivotgrid-nodata` (gridCoreUtils.renderNoDataText): shown when the data source
1090
1103
  * `isEmpty()` — no VISIBLE data field or nothing aggregated (empty/fully-filtered store);
1091
1104
  * text `texts.noData` (dx default "No data"). The reloadTick read re-checks after an
1092
1105
  * in-place instance reload.
@@ -1311,6 +1324,10 @@ declare class NxePivotGridComponent implements OnDestroy {
1311
1324
 
1312
1325
  declare class NxePivotFieldChipComponent {
1313
1326
  readonly chip: _angular_core.InputSignal<NxePivotPanelChip>;
1327
+ /** dx showColumnLines for this chip's surface: true in the field chooser and the panel's
1328
+ * ROW area — the indicators come FIRST and float right; false (panel column / filter /
1329
+ * data areas) — they follow the caption inline. */
1330
+ readonly floatIndicators: _angular_core.InputSignal<boolean>;
1314
1331
  /** Raw pointerdown — the host decides whether a drag gesture may begin. */
1315
1332
  readonly chipPointerDown: _angular_core.OutputEmitterRef<PointerEvent>;
1316
1333
  /** Chip click (the host consults its gesture's click suppression before sorting). */
@@ -1319,9 +1336,18 @@ declare class NxePivotFieldChipComponent {
1319
1336
  readonly chipFilterClick: _angular_core.OutputEmitterRef<MouseEvent>;
1320
1337
  protected onFunnelClick(event: MouseEvent): void;
1321
1338
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxePivotFieldChipComponent, never>;
1322
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxePivotFieldChipComponent, "div[nxePivotFieldChip]", never, { "chip": { "alias": "chip"; "required": true; "isSignal": true; }; }, { "chipPointerDown": "chipPointerDown"; "chipClick": "chipClick"; "chipFilterClick": "chipFilterClick"; }, never, never, true, never>;
1339
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxePivotFieldChipComponent, "div[nxePivotFieldChip]", never, { "chip": { "alias": "chip"; "required": true; "isSignal": true; }; "floatIndicators": { "alias": "floatIndicators"; "required": false; "isSignal": true; }; }, { "chipPointerDown": "chipPointerDown"; "chipClick": "chipClick"; "chipFilterClick": "chipFilterClick"; }, never, never, true, never>;
1323
1340
  }
1324
1341
 
1342
+ /** dx fieldChooser texts (m_field_chooser.js `_getDefaultOptions` messages), as library message keys. */
1343
+ declare const CHOOSER_TEXT_KEYS: {
1344
+ readonly allFields: "pivot.chooser.allFields";
1345
+ readonly rowFields: "pivot.chooser.rowFields";
1346
+ readonly columnFields: "pivot.chooser.columnFields";
1347
+ readonly filterFields: "pivot.chooser.filterFields";
1348
+ readonly dataFields: "pivot.chooser.dataFields";
1349
+ readonly title: "pivot.chooser.title";
1350
+ };
1325
1351
  /** One All-Fields tree row (the fixture's flat leaf list — local fields have no groups). */
1326
1352
  interface ChooserTreeItem {
1327
1353
  fieldIndex: number;
@@ -1337,11 +1363,11 @@ interface ChooserArea {
1337
1363
  }
1338
1364
  declare class NxePivotFieldChooserComponent implements OnDestroy {
1339
1365
  /** The pivot's LIVE engine signal (overrides merged) — instant applies re-read it here. */
1340
- readonly engine: _angular_core.InputSignal<Signal<NxePivotDataSource>>;
1366
+ readonly engine: _angular_core.InputSignal<Signal<NxePivotDataSource | null>>;
1341
1367
  /** dx `fieldChooser.width`/`height` — applied to the popup box; dxPivotGrid defaults 600
1342
1368
  * (m_widget.js `fieldChooser` defaults; the DA page passes height 400). */
1343
- readonly width: _angular_core.InputSignal<number>;
1344
- readonly height: _angular_core.InputSignal<number>;
1369
+ readonly width: _angular_core.InputSignal<number | undefined>;
1370
+ readonly height: _angular_core.InputSignal<number | undefined>;
1345
1371
  /** dx `fieldChooser.allowSearch` (default false — the capture has NO search box). */
1346
1372
  readonly allowSearch: _angular_core.InputSignal<boolean>;
1347
1373
  /** Widget `allowSorting`: dimension chips inside the chooser sort on click, same as the
@@ -1362,19 +1388,14 @@ declare class NxePivotFieldChooserComponent implements OnDestroy {
1362
1388
  readonly filterOpen: _angular_core.OutputEmitterRef<NxePivotFilterOpenEvent>;
1363
1389
  /** The title-bar X — the pivot disposes the overlay (Escape/backdrop close there too). */
1364
1390
  readonly closed: _angular_core.OutputEmitterRef<void>;
1365
- protected readonly texts: {
1366
- allFields: string;
1367
- rowFields: string;
1368
- columnFields: string;
1369
- filterFields: string;
1370
- dataFields: string;
1371
- title: string;
1372
- };
1391
+ protected readonly messages: NxeMessageService;
1392
+ /** The chooser's captions in the active language; read in the template, so a switch re-renders. */
1393
+ protected get texts(): Record<keyof typeof CHOOSER_TEXT_KEYS, string>;
1373
1394
  protected readonly allIcon: string;
1374
1395
  protected readonly searchText: _angular_core.WritableSignal<string>;
1375
1396
  private readonly elementRef;
1376
1397
  private readonly zone;
1377
- /** Popup box size — dx puts fieldChooser.width/height on `.dx-overlay-content` (600 dflt). */
1398
+ /** Popup box size — dx puts fieldChooser.width/height on `.nxe-overlay-content` (600 dflt). */
1378
1399
  protected readonly boxWidth: Signal<string>;
1379
1400
  protected readonly boxHeight: Signal<string>;
1380
1401
  /**
@@ -1403,7 +1424,7 @@ declare class NxePivotFieldChooserComponent implements OnDestroy {
1403
1424
  */
1404
1425
  private allowedIn;
1405
1426
  private trackPointer;
1406
- /** dx `.dx-position-indicator-vertical`: a 2px bar between the stacked chips. */
1427
+ /** dx `.nxe-position-indicator-vertical`: a 2px bar between the stacked chips. */
1407
1428
  private placeIndicator;
1408
1429
  private completeDrop;
1409
1430
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxePivotFieldChooserComponent, never>;
@@ -1413,22 +1434,22 @@ declare class NxePivotFieldChooserComponent implements OnDestroy {
1413
1434
  /** `dxo-common-series-settings` — the series type (only `bar` is used). */
1414
1435
  declare class NxeCommonSeriesSettingsComponent {
1415
1436
  readonly type: _angular_core.InputSignal<"area" | "line" | "bar" | "spline">;
1416
- readonly argumentField: _angular_core.InputSignal<string>;
1417
- readonly valueField: _angular_core.InputSignal<string>;
1437
+ readonly argumentField: _angular_core.InputSignal<string | undefined>;
1438
+ readonly valueField: _angular_core.InputSignal<string | undefined>;
1418
1439
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeCommonSeriesSettingsComponent, never>;
1419
1440
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeCommonSeriesSettingsComponent, "nxe-common-series-settings", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "argumentField": { "alias": "argumentField"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1420
1441
  }
1421
1442
  /** `dxo-size` — fixed chart height. */
1422
1443
  declare class NxeSizeComponent {
1423
- readonly width: _angular_core.InputSignal<number>;
1424
- readonly height: _angular_core.InputSignal<number>;
1444
+ readonly width: _angular_core.InputSignal<number | undefined>;
1445
+ readonly height: _angular_core.InputSignal<number | undefined>;
1425
1446
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeSizeComponent, never>;
1426
1447
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeSizeComponent, "nxe-size", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1427
1448
  }
1428
1449
  /** `dxo-adaptive-layout` — responsive breakpoint width (the chart fills its container above it). */
1429
1450
  declare class NxeAdaptiveLayoutComponent {
1430
- readonly width: _angular_core.InputSignal<number>;
1431
- readonly height: _angular_core.InputSignal<number>;
1451
+ readonly width: _angular_core.InputSignal<number | undefined>;
1452
+ readonly height: _angular_core.InputSignal<number | undefined>;
1432
1453
  readonly keepLabels: _angular_core.InputSignal<boolean>;
1433
1454
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeAdaptiveLayoutComponent, never>;
1434
1455
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeAdaptiveLayoutComponent, "nxe-adaptive-layout", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "keepLabels": { "alias": "keepLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -1441,13 +1462,13 @@ interface BarRect {
1441
1462
  fill: string;
1442
1463
  }
1443
1464
  declare class NxeChartComponent {
1444
- readonly dataSource: _angular_core.InputSignal<NxeChartSeries>;
1445
- protected readonly commonSeries: _angular_core.Signal<NxeCommonSeriesSettingsComponent>;
1446
- protected readonly size: _angular_core.Signal<NxeSizeComponent>;
1447
- protected readonly adaptiveLayout: _angular_core.Signal<NxeAdaptiveLayoutComponent>;
1465
+ readonly dataSource: _angular_core.InputSignal<NxeChartSeries | null | undefined>;
1466
+ protected readonly commonSeries: _angular_core.Signal<NxeCommonSeriesSettingsComponent | undefined>;
1467
+ protected readonly size: _angular_core.Signal<NxeSizeComponent | undefined>;
1468
+ protected readonly adaptiveLayout: _angular_core.Signal<NxeAdaptiveLayoutComponent | undefined>;
1448
1469
  /** Series pushed by `pivotGrid.bindChart(...)`; falls back to the `[dataSource]` input. */
1449
1470
  private readonly pushed;
1450
- protected readonly series: _angular_core.Signal<NxeChartSeries>;
1471
+ protected readonly series: _angular_core.Signal<NxeChartSeries | null>;
1451
1472
  protected readonly chartHeight: _angular_core.Signal<number>;
1452
1473
  protected readonly chartWidth: _angular_core.Signal<number>;
1453
1474
  protected readonly hasData: _angular_core.Signal<boolean>;