@nexterajs/ui 0.0.2 → 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.
- package/README.md +279 -34
- package/fesm2022/nexterajs-ui-charts.mjs +1096 -0
- package/fesm2022/nexterajs-ui-charts.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-core.mjs +652 -12
- package/fesm2022/nexterajs-ui-core.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-display.mjs +1142 -0
- package/fesm2022/nexterajs-ui-display.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-dropdowns.mjs +321 -33
- package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-file-uploader.mjs +572 -10
- package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-forms.mjs +2027 -136
- package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-grid.mjs +1222 -188
- package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-intl.mjs +103 -11
- package/fesm2022/nexterajs-ui-intl.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-navigation.mjs +1054 -0
- package/fesm2022/nexterajs-ui-navigation.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-notify.mjs +46 -44
- package/fesm2022/nexterajs-ui-notify.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-overlay.mjs +1671 -0
- package/fesm2022/nexterajs-ui-overlay.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-pivot.mjs +51 -26
- package/fesm2022/nexterajs-ui-pivot.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-shell.mjs +542 -0
- package/fesm2022/nexterajs-ui-shell.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-tree-view.mjs +5 -2
- package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-validation.mjs +42 -11
- package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
- package/fesm2022/nexterajs-ui.mjs +5 -0
- package/fesm2022/nexterajs-ui.mjs.map +1 -1
- package/package.json +33 -2
- package/styles/_dropdown.scss +5 -5
- package/styles/_editor.scss +52 -17
- package/styles/_mixins.scss +1 -1
- package/styles/_scrollbar.scss +5 -5
- package/styles/_status.scss +21 -0
- package/styles/_toast.scss +14 -14
- package/styles/_tokens.scss +420 -3
- package/styles/_widget.scss +14 -3
- package/styles/index.scss +6 -4
- package/types/nexterajs-ui-charts.d.ts +446 -0
- package/types/nexterajs-ui-core.d.ts +387 -22
- package/types/nexterajs-ui-display.d.ts +720 -0
- package/types/nexterajs-ui-dropdowns.d.ts +191 -48
- package/types/nexterajs-ui-file-uploader.d.ts +236 -7
- package/types/nexterajs-ui-forms.d.ts +675 -30
- package/types/nexterajs-ui-grid.d.ts +448 -93
- package/types/nexterajs-ui-intl.d.ts +39 -4
- package/types/nexterajs-ui-navigation.d.ts +531 -0
- package/types/nexterajs-ui-notify.d.ts +4 -2
- package/types/nexterajs-ui-overlay.d.ts +703 -0
- package/types/nexterajs-ui-pivot.d.ts +56 -48
- package/types/nexterajs-ui-shell.d.ts +294 -0
- package/types/nexterajs-ui-tree-view.d.ts +6 -3
- package/types/nexterajs-ui-validation.d.ts +20 -11
- package/types/nexterajs-ui.d.ts +5 -0
|
@@ -2,6 +2,7 @@ import { NxeColumnFormat, NxeGridInstance, NxeExcelExportOptions, NxeScrollingCo
|
|
|
2
2
|
import { NxeNumberSeparators } from '@nexterajs/ui/intl';
|
|
3
3
|
import * as _angular_core from '@angular/core';
|
|
4
4
|
import { OnDestroy, TemplateRef, Signal, EventEmitter } from '@angular/core';
|
|
5
|
+
import { NxeMessageService } from '@nexterajs/ui/core';
|
|
5
6
|
|
|
6
7
|
type NxePivotArea = 'row' | 'column' | 'data' | 'filter';
|
|
7
8
|
type NxePivotSummaryType = 'sum' | 'count' | 'min' | 'max' | 'avg' | 'custom';
|
|
@@ -743,9 +744,9 @@ declare class NxePivotDataSource {
|
|
|
743
744
|
declare class NxeStateStoringComponent {
|
|
744
745
|
readonly enabled: _angular_core.InputSignal<boolean>;
|
|
745
746
|
readonly type: _angular_core.InputSignal<"custom" | "localStorage" | "sessionStorage">;
|
|
746
|
-
readonly storageKey: _angular_core.InputSignal<string>;
|
|
747
|
-
readonly customSave: _angular_core.InputSignal<(state: any) => void>;
|
|
748
|
-
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>;
|
|
749
750
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeStateStoringComponent, never>;
|
|
750
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>;
|
|
751
752
|
}
|
|
@@ -817,7 +818,7 @@ interface NxePivotFieldMoveEvent {
|
|
|
817
818
|
}
|
|
818
819
|
declare class NxePivotFieldPanelComponent implements OnDestroy {
|
|
819
820
|
/** The pivot's CURRENT engine — overrides already merged, so chips track every mutation. */
|
|
820
|
-
readonly engine: _angular_core.InputSignal<NxePivotDataSource>;
|
|
821
|
+
readonly engine: _angular_core.InputSignal<NxePivotDataSource | null>;
|
|
821
822
|
readonly showFilterFields: _angular_core.InputSignal<boolean>;
|
|
822
823
|
readonly showDataFields: _angular_core.InputSignal<boolean>;
|
|
823
824
|
readonly showColumnFields: _angular_core.InputSignal<boolean>;
|
|
@@ -835,14 +836,14 @@ declare class NxePivotFieldPanelComponent implements OnDestroy {
|
|
|
835
836
|
readonly showBorders: _angular_core.InputSignal<boolean>;
|
|
836
837
|
/** P3-C3: the pivot's `.nxe-pivotgrid-toolbar` template (field-chooser button) — rendered
|
|
837
838
|
* where dx prepends its toolbar container (m_widget.js `_renderDescriptionArea`). */
|
|
838
|
-
readonly toolbarTemplate: _angular_core.InputSignal<TemplateRef<unknown
|
|
839
|
+
readonly toolbarTemplate: _angular_core.InputSignal<TemplateRef<unknown> | null>;
|
|
839
840
|
/** Which panel band hosts the toolbar (the pivot resolves dx's placement branches):
|
|
840
841
|
* 'filter' = the filter-header cell; 'column' = the column-header cell (dx's middle
|
|
841
842
|
* branch — showFilterFields off but data/column bands shown; the cell renders for the
|
|
842
843
|
* toolbar even when showColumnFields is off, exactly as dx's always-present
|
|
843
844
|
* $columnHeader does); null = the toolbar lives in the cross-tab corner (or no
|
|
844
845
|
* chooser) — nothing renders here. */
|
|
845
|
-
readonly toolbarArea: _angular_core.InputSignal<"column" | "filter">;
|
|
846
|
+
readonly toolbarArea: _angular_core.InputSignal<"column" | "filter" | null>;
|
|
846
847
|
/** A chip was dropped — the pivot recomputes areaIndexes and writes its override map. */
|
|
847
848
|
readonly fieldMove: _angular_core.OutputEmitterRef<NxePivotFieldMoveEvent>;
|
|
848
849
|
/** A sortable chip was clicked — the pivot flips the field's effective sortOrder. */
|
|
@@ -853,8 +854,9 @@ declare class NxePivotFieldPanelComponent implements OnDestroy {
|
|
|
853
854
|
readonly filterOpen: _angular_core.OutputEmitterRef<NxePivotFilterOpenEvent>;
|
|
854
855
|
/** The ROW fields area — NxePivotGridComponent outlets this into its corner cell (dx hosts
|
|
855
856
|
* the row chips inside `.nxe-area-description-cell`, never in a band of their own). */
|
|
856
|
-
readonly rowAreaTemplate: _angular_core.Signal<TemplateRef<unknown
|
|
857
|
+
readonly rowAreaTemplate: _angular_core.Signal<TemplateRef<unknown> | undefined>;
|
|
857
858
|
private readonly elementRef;
|
|
859
|
+
private readonly messages;
|
|
858
860
|
private readonly zone;
|
|
859
861
|
protected readonly filterArea: _angular_core.Signal<PanelArea>;
|
|
860
862
|
protected readonly dataArea: _angular_core.Signal<PanelArea>;
|
|
@@ -892,14 +894,14 @@ declare class NxePivotFieldPanelComponent implements OnDestroy {
|
|
|
892
894
|
* applyChangesMode 'instantly' (no OK/Cancel — changes hit the pivot live). */
|
|
893
895
|
declare class NxeFieldChooserComponent {
|
|
894
896
|
readonly enabled: _angular_core.InputSignal<boolean>;
|
|
895
|
-
readonly height: _angular_core.InputSignal<number>;
|
|
896
|
-
readonly width: _angular_core.InputSignal<number>;
|
|
897
|
+
readonly height: _angular_core.InputSignal<number | undefined>;
|
|
898
|
+
readonly width: _angular_core.InputSignal<number | undefined>;
|
|
897
899
|
readonly allowSearch: _angular_core.InputSignal<boolean>;
|
|
898
900
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeFieldChooserComponent, never>;
|
|
899
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>;
|
|
900
902
|
}
|
|
901
903
|
declare class NxePivotGridComponent implements OnDestroy {
|
|
902
|
-
readonly dataSource: _angular_core.InputSignal<NxePivotDataSourceOptions | NxePivotDataSource>;
|
|
904
|
+
readonly dataSource: _angular_core.InputSignal<NxePivotDataSourceOptions | NxePivotDataSource | null | undefined>;
|
|
903
905
|
/** dx `allowFiltering` (default false) — LIVE since P3-C4: filterable dimension chips
|
|
904
906
|
* (panel AND chooser) render the `.nxe-header-filter` funnel and open the shared
|
|
905
907
|
* header-filter panel; per-field `field.allowFiltering` overrides the widget flag
|
|
@@ -920,8 +922,8 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
920
922
|
readonly rowHeaderLayout: _angular_core.InputSignal<NxePivotRowHeaderLayout>;
|
|
921
923
|
/** dx `height`: number (px) or CSS string, applied to the widget root — the internal
|
|
922
924
|
* scroll container tracks it at 100%. */
|
|
923
|
-
readonly height: _angular_core.InputSignal<string | number>;
|
|
924
|
-
readonly texts: _angular_core.InputSignal<NxePivotTexts>;
|
|
925
|
+
readonly height: _angular_core.InputSignal<string | number | undefined>;
|
|
926
|
+
readonly texts: _angular_core.InputSignal<NxePivotTexts | undefined>;
|
|
925
927
|
readonly showColumnTotals: _angular_core.InputSignal<boolean>;
|
|
926
928
|
readonly showRowTotals: _angular_core.InputSignal<boolean>;
|
|
927
929
|
readonly showColumnGrandTotals: _angular_core.InputSignal<boolean>;
|
|
@@ -931,7 +933,7 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
931
933
|
/** dx `dataFieldArea` (default 'column'): 'row' renders the measures as the innermost ROW
|
|
932
934
|
* level when two or more exist (with one, dx omits the metric level on either axis).
|
|
933
935
|
* Left undefined the engine falls back to the dataSource options' own `dataFieldArea`. */
|
|
934
|
-
readonly dataFieldArea: _angular_core.InputSignal<"row" | "column">;
|
|
936
|
+
readonly dataFieldArea: _angular_core.InputSignal<"row" | "column" | undefined>;
|
|
935
937
|
/** dx `allowSorting` (default false, P3-C2): field-panel chips toggle their field's
|
|
936
938
|
* sortOrder on click and carry the `.nxe-sort` arrow in `.nxe-column-indicators`. */
|
|
937
939
|
readonly allowSorting: _angular_core.InputSignal<boolean>;
|
|
@@ -950,14 +952,14 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
950
952
|
protected readonly showBordersEff: Signal<boolean>;
|
|
951
953
|
protected readonly wordWrapEnabledEff: Signal<boolean>;
|
|
952
954
|
protected readonly rowHeaderLayoutEff: Signal<NxePivotRowHeaderLayout>;
|
|
953
|
-
protected readonly heightEff: Signal<string | number>;
|
|
954
|
-
protected readonly textsEff: Signal<NxePivotTexts>;
|
|
955
|
+
protected readonly heightEff: Signal<string | number | undefined>;
|
|
956
|
+
protected readonly textsEff: Signal<NxePivotTexts | undefined>;
|
|
955
957
|
protected readonly showColumnTotalsEff: Signal<boolean>;
|
|
956
958
|
protected readonly showRowTotalsEff: Signal<boolean>;
|
|
957
959
|
protected readonly showColumnGrandTotalsEff: Signal<boolean>;
|
|
958
960
|
protected readonly showRowGrandTotalsEff: Signal<boolean>;
|
|
959
961
|
protected readonly showTotalsPriorEff: Signal<NxePivotTotalsPrior>;
|
|
960
|
-
protected readonly dataFieldAreaEff: Signal<"row" | "column">;
|
|
962
|
+
protected readonly dataFieldAreaEff: Signal<"row" | "column" | undefined>;
|
|
961
963
|
/** The documented option names `option()` gets/sets (DEFAULTS.md lists the exclusions). */
|
|
962
964
|
private readonly effOptions;
|
|
963
965
|
/**
|
|
@@ -977,12 +979,12 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
977
979
|
* the same diff — never twice). `dataSource` rides along, get-only.
|
|
978
980
|
*/
|
|
979
981
|
private readonly optionSnapshot;
|
|
980
|
-
protected readonly fieldChooser: Signal<NxeFieldChooserComponent>;
|
|
982
|
+
protected readonly fieldChooser: Signal<NxeFieldChooserComponent | undefined>;
|
|
981
983
|
/** The projected `nxe-field-panel` config (P3-C2) — the panel renders when it is visible. */
|
|
982
|
-
protected readonly fieldPanel: Signal<NxeFieldPanelComponent>;
|
|
984
|
+
protected readonly fieldPanel: Signal<NxeFieldPanelComponent | undefined>;
|
|
983
985
|
/** The projected `nxe-state-storing` config — LIVE since P3-C4 for `type: 'custom'`:
|
|
984
986
|
* every layout mutation fires `customSave(state)` and `customLoad` is honored on init. */
|
|
985
|
-
protected readonly stateStoring: Signal<NxeStateStoringComponent>;
|
|
987
|
+
protected readonly stateStoring: Signal<NxeStateStoringComponent | undefined>;
|
|
986
988
|
/** dx `fieldPanel.visible` (default false): gates the panel, the corner's chips-vs-caption
|
|
987
989
|
* switch, and the dx marker classes on the host. */
|
|
988
990
|
protected readonly panelVisible: Signal<boolean>;
|
|
@@ -990,7 +992,7 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
990
992
|
private readonly panelCmp;
|
|
991
993
|
/** The ROW fields area, outletted into the corner cell (dx hosts the row chips inside
|
|
992
994
|
* `.nxe-area-description-cell` — oracle §c; the corner shows NO caption text then). */
|
|
993
|
-
protected readonly panelRowAreaTpl: Signal<_angular_core.TemplateRef<unknown
|
|
995
|
+
protected readonly panelRowAreaTpl: Signal<_angular_core.TemplateRef<unknown> | null>;
|
|
994
996
|
/** The `.nxe-pivotgrid-field-chooser-button` renders only when an `nxe-field-chooser` is
|
|
995
997
|
* projected with `enabled` not false (the DA page passes [enabled]="true"). */
|
|
996
998
|
protected readonly chooserEnabled: Signal<boolean>;
|
|
@@ -1001,9 +1003,9 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
1001
1003
|
* (c) else -> the cross-tab corner `.nxe-area-description-cell`, where the button is
|
|
1002
1004
|
* transparent until hover and the corner drops its caption (the library's own rules,
|
|
1003
1005
|
* nxe-pivot-grid.component.scss — dx.light's description-cell toolbar rules). */
|
|
1004
|
-
protected readonly chooserToolbarHost: Signal<"column" | "filter" | "corner">;
|
|
1006
|
+
protected readonly chooserToolbarHost: Signal<"column" | "filter" | "corner" | null>;
|
|
1005
1007
|
/** The panel-hosted placements, bound into the panel's `toolbarArea` input. */
|
|
1006
|
-
protected readonly panelToolbarArea: Signal<"column" | "filter">;
|
|
1008
|
+
protected readonly panelToolbarArea: Signal<"column" | "filter" | null>;
|
|
1007
1009
|
protected readonly chooserInCorner: Signal<boolean>;
|
|
1008
1010
|
private chooserOverlayRef;
|
|
1009
1011
|
private readonly overlay;
|
|
@@ -1011,6 +1013,8 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
1011
1013
|
private readonly elementRef;
|
|
1012
1014
|
/** Locale separators for every number the pivot renders; threaded into the data source. */
|
|
1013
1015
|
private readonly separators;
|
|
1016
|
+
/** The library's runtime-switchable messages. */
|
|
1017
|
+
protected readonly messages: NxeMessageService;
|
|
1014
1018
|
/** Bumped by `getDataSource().reload()` to force a re-aggregate. */
|
|
1015
1019
|
private readonly reloadTick;
|
|
1016
1020
|
/**
|
|
@@ -1038,7 +1042,7 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
1038
1042
|
* `expandAll()`/`collapseAll()`, so expand-all no longer wipes a dragged layout.)
|
|
1039
1043
|
*/
|
|
1040
1044
|
private readonly fieldOverrides;
|
|
1041
|
-
protected readonly engine: Signal<NxePivotDataSource>;
|
|
1045
|
+
protected readonly engine: Signal<NxePivotDataSource | null>;
|
|
1042
1046
|
/**
|
|
1043
1047
|
* The "layout changed" hook (P3-C2, consumed since P3-C4): the caller's fields with the
|
|
1044
1048
|
* panel's overrides merged — a NEW array identity after every mutation (drag move, sort
|
|
@@ -1059,11 +1063,11 @@ declare class NxePivotGridComponent implements OnDestroy {
|
|
|
1059
1063
|
* simply stop matching any node — harmless, dx-alike.
|
|
1060
1064
|
*/
|
|
1061
1065
|
private readonly manualExpanded;
|
|
1062
|
-
protected readonly model: Signal<NxePivotModel>;
|
|
1066
|
+
protected readonly model: Signal<NxePivotModel | null>;
|
|
1063
1067
|
/** Host height style — dx `height`: numbers are px, strings pass through, unset removes it. */
|
|
1064
|
-
protected readonly hostHeight: Signal<string>;
|
|
1068
|
+
protected readonly hostHeight: Signal<string | null>;
|
|
1065
1069
|
/** The projected `nxe-scrolling` config — `mode: 'virtual'` opts into row windowing. */
|
|
1066
|
-
protected readonly scrolling: Signal<NxeScrollingComponent>;
|
|
1070
|
+
protected readonly scrolling: Signal<NxeScrollingComponent | undefined>;
|
|
1067
1071
|
/** Scroll offset of `.nxe-pivotgrid-scroll` (its own scroll handler feeds it). */
|
|
1068
1072
|
private readonly scrollTop;
|
|
1069
1073
|
/** The scroll container's clientHeight, measured in the render effect (0 = unmeasured). */
|
|
@@ -1335,6 +1339,15 @@ declare class NxePivotFieldChipComponent {
|
|
|
1335
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>;
|
|
1336
1340
|
}
|
|
1337
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
|
+
};
|
|
1338
1351
|
/** One All-Fields tree row (the fixture's flat leaf list — local fields have no groups). */
|
|
1339
1352
|
interface ChooserTreeItem {
|
|
1340
1353
|
fieldIndex: number;
|
|
@@ -1350,11 +1363,11 @@ interface ChooserArea {
|
|
|
1350
1363
|
}
|
|
1351
1364
|
declare class NxePivotFieldChooserComponent implements OnDestroy {
|
|
1352
1365
|
/** The pivot's LIVE engine signal (overrides merged) — instant applies re-read it here. */
|
|
1353
|
-
readonly engine: _angular_core.InputSignal<Signal<NxePivotDataSource>>;
|
|
1366
|
+
readonly engine: _angular_core.InputSignal<Signal<NxePivotDataSource | null>>;
|
|
1354
1367
|
/** dx `fieldChooser.width`/`height` — applied to the popup box; dxPivotGrid defaults 600
|
|
1355
1368
|
* (m_widget.js `fieldChooser` defaults; the DA page passes height 400). */
|
|
1356
|
-
readonly width: _angular_core.InputSignal<number>;
|
|
1357
|
-
readonly height: _angular_core.InputSignal<number>;
|
|
1369
|
+
readonly width: _angular_core.InputSignal<number | undefined>;
|
|
1370
|
+
readonly height: _angular_core.InputSignal<number | undefined>;
|
|
1358
1371
|
/** dx `fieldChooser.allowSearch` (default false — the capture has NO search box). */
|
|
1359
1372
|
readonly allowSearch: _angular_core.InputSignal<boolean>;
|
|
1360
1373
|
/** Widget `allowSorting`: dimension chips inside the chooser sort on click, same as the
|
|
@@ -1375,14 +1388,9 @@ declare class NxePivotFieldChooserComponent implements OnDestroy {
|
|
|
1375
1388
|
readonly filterOpen: _angular_core.OutputEmitterRef<NxePivotFilterOpenEvent>;
|
|
1376
1389
|
/** The title-bar X — the pivot disposes the overlay (Escape/backdrop close there too). */
|
|
1377
1390
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
1378
|
-
protected readonly
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
columnFields: string;
|
|
1382
|
-
filterFields: string;
|
|
1383
|
-
dataFields: string;
|
|
1384
|
-
title: string;
|
|
1385
|
-
};
|
|
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>;
|
|
1386
1394
|
protected readonly allIcon: string;
|
|
1387
1395
|
protected readonly searchText: _angular_core.WritableSignal<string>;
|
|
1388
1396
|
private readonly elementRef;
|
|
@@ -1426,22 +1434,22 @@ declare class NxePivotFieldChooserComponent implements OnDestroy {
|
|
|
1426
1434
|
/** `dxo-common-series-settings` — the series type (only `bar` is used). */
|
|
1427
1435
|
declare class NxeCommonSeriesSettingsComponent {
|
|
1428
1436
|
readonly type: _angular_core.InputSignal<"area" | "line" | "bar" | "spline">;
|
|
1429
|
-
readonly argumentField: _angular_core.InputSignal<string>;
|
|
1430
|
-
readonly valueField: _angular_core.InputSignal<string>;
|
|
1437
|
+
readonly argumentField: _angular_core.InputSignal<string | undefined>;
|
|
1438
|
+
readonly valueField: _angular_core.InputSignal<string | undefined>;
|
|
1431
1439
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeCommonSeriesSettingsComponent, never>;
|
|
1432
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>;
|
|
1433
1441
|
}
|
|
1434
1442
|
/** `dxo-size` — fixed chart height. */
|
|
1435
1443
|
declare class NxeSizeComponent {
|
|
1436
|
-
readonly width: _angular_core.InputSignal<number>;
|
|
1437
|
-
readonly height: _angular_core.InputSignal<number>;
|
|
1444
|
+
readonly width: _angular_core.InputSignal<number | undefined>;
|
|
1445
|
+
readonly height: _angular_core.InputSignal<number | undefined>;
|
|
1438
1446
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeSizeComponent, never>;
|
|
1439
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>;
|
|
1440
1448
|
}
|
|
1441
1449
|
/** `dxo-adaptive-layout` — responsive breakpoint width (the chart fills its container above it). */
|
|
1442
1450
|
declare class NxeAdaptiveLayoutComponent {
|
|
1443
|
-
readonly width: _angular_core.InputSignal<number>;
|
|
1444
|
-
readonly height: _angular_core.InputSignal<number>;
|
|
1451
|
+
readonly width: _angular_core.InputSignal<number | undefined>;
|
|
1452
|
+
readonly height: _angular_core.InputSignal<number | undefined>;
|
|
1445
1453
|
readonly keepLabels: _angular_core.InputSignal<boolean>;
|
|
1446
1454
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeAdaptiveLayoutComponent, never>;
|
|
1447
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>;
|
|
@@ -1454,13 +1462,13 @@ interface BarRect {
|
|
|
1454
1462
|
fill: string;
|
|
1455
1463
|
}
|
|
1456
1464
|
declare class NxeChartComponent {
|
|
1457
|
-
readonly dataSource: _angular_core.InputSignal<NxeChartSeries>;
|
|
1458
|
-
protected readonly commonSeries: _angular_core.Signal<NxeCommonSeriesSettingsComponent>;
|
|
1459
|
-
protected readonly size: _angular_core.Signal<NxeSizeComponent>;
|
|
1460
|
-
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>;
|
|
1461
1469
|
/** Series pushed by `pivotGrid.bindChart(...)`; falls back to the `[dataSource]` input. */
|
|
1462
1470
|
private readonly pushed;
|
|
1463
|
-
protected readonly series: _angular_core.Signal<NxeChartSeries>;
|
|
1471
|
+
protected readonly series: _angular_core.Signal<NxeChartSeries | null>;
|
|
1464
1472
|
protected readonly chartHeight: _angular_core.Signal<number>;
|
|
1465
1473
|
protected readonly chartWidth: _angular_core.Signal<number>;
|
|
1466
1474
|
protected readonly hasData: _angular_core.Signal<boolean>;
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken, Signal, TemplateRef } from '@angular/core';
|
|
3
|
+
import { Params } from '@angular/router';
|
|
4
|
+
import { NxeStatusFamily } from '@nexterajs/ui/display';
|
|
5
|
+
import { NxeMessageKey } from '@nexterajs/ui/core';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* One entry of the side navigation.
|
|
9
|
+
*
|
|
10
|
+
* - A **link** has `route` (router) or `href` (plain anchor).
|
|
11
|
+
* - A **parent** has `children`: it is a disclosure button, not a link. Its children appear under it
|
|
12
|
+
* when it is open, and it opens by itself when one of them is the current page.
|
|
13
|
+
* - A **group** has `heading: true` and `children`: a non-interactive heading, with its items in a
|
|
14
|
+
* labelled list under it. Groups sit at the top level; items inside them nest as deep as needed.
|
|
15
|
+
* - An entry with none of those is a plain button; `itemClick` reports it.
|
|
16
|
+
*/
|
|
17
|
+
interface NxeNavItem {
|
|
18
|
+
/** Unique within the tree. Keys the open state and the DOM ids. */
|
|
19
|
+
readonly id: string;
|
|
20
|
+
/** What the entry says. Translate it. */
|
|
21
|
+
readonly label: string;
|
|
22
|
+
/**
|
|
23
|
+
* The icon, named for `<i class="nxe-icon nxe-icon-NAME">`, or, when the app supplies an
|
|
24
|
+
* `ng-template[nxeSidenavIcon]`, any key that template maps to an icon. An entry without one
|
|
25
|
+
* shows the first letter of its label so a collapsed rail is still usable.
|
|
26
|
+
*/
|
|
27
|
+
readonly icon?: string;
|
|
28
|
+
/** Router link: a URL (`'/buyer/inbox'`) or commands (`['/buyer/price-lists', id]`). */
|
|
29
|
+
readonly route?: string | unknown[];
|
|
30
|
+
/** Query parameters for `route`. When set they take part in the active match. */
|
|
31
|
+
readonly queryParams?: Params;
|
|
32
|
+
/** A plain `href`, for a link that leaves the app. Never shown as the current page. */
|
|
33
|
+
readonly href?: string;
|
|
34
|
+
/** A count, or a signal of one (read in the template, so it updates without a new tree). */
|
|
35
|
+
readonly badge?: number | Signal<number | null | undefined>;
|
|
36
|
+
/** Colour of the badge; `danger` by default. */
|
|
37
|
+
readonly badgeFamily?: NxeStatusFamily;
|
|
38
|
+
/** Spoken name of the badge ("5 items need action"); defaults to the number. */
|
|
39
|
+
readonly badgeLabel?: string;
|
|
40
|
+
/** Children of a parent entry, or the items of a group. */
|
|
41
|
+
readonly children?: readonly NxeNavItem[];
|
|
42
|
+
/** Make this a group heading; its `children` are the group's items. */
|
|
43
|
+
readonly heading?: boolean;
|
|
44
|
+
/** Not interactive, not focusable, announced as disabled. */
|
|
45
|
+
readonly disabled?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Match the URL exactly. Without it an entry is the current page for its URL and everything
|
|
48
|
+
* below it (`/buyer/purchase-orders` for `/buyer/purchase-orders/42`). Give the home entry
|
|
49
|
+
* (`/buyer`) `exact: true`, or it is current everywhere.
|
|
50
|
+
*/
|
|
51
|
+
readonly exact?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/** `docked`: beside the content, expanded or a rail. `drawer`: off-canvas, over the content. */
|
|
54
|
+
type NxeShellMode = 'docked' | 'drawer';
|
|
55
|
+
/**
|
|
56
|
+
* What `nxe-topbar` and `nxe-sidenav` need from the `nxe-shell` around them, through
|
|
57
|
+
* {@link NXE_SHELL}. Both also work without a shell; they then do not toggle anything.
|
|
58
|
+
*/
|
|
59
|
+
interface NxeShellState {
|
|
60
|
+
readonly mode: Signal<NxeShellMode>;
|
|
61
|
+
/** The sidenav is a narrow icon rail (docked and collapsed). */
|
|
62
|
+
readonly rail: Signal<boolean>;
|
|
63
|
+
/** Docked: the user's collapsed choice. */
|
|
64
|
+
readonly collapsed: Signal<boolean>;
|
|
65
|
+
/** The drawer is on screen (drawer mode and open). */
|
|
66
|
+
readonly drawerShown: Signal<boolean>;
|
|
67
|
+
/** DOM id of the projected `nxe-sidenav`, for `aria-controls`. */
|
|
68
|
+
readonly sidenavId: Signal<string | null>;
|
|
69
|
+
setCollapsed(collapsed: boolean): void;
|
|
70
|
+
/** Hamburger: open or close the drawer, or collapse or expand the dock. */
|
|
71
|
+
toggleNavigation(): void;
|
|
72
|
+
closeDrawer(): void;
|
|
73
|
+
}
|
|
74
|
+
/** Provided by `nxe-shell` to the topbar and sidenav projected into it. */
|
|
75
|
+
declare const NXE_SHELL: InjectionToken<NxeShellState>;
|
|
76
|
+
/**
|
|
77
|
+
* `<ng-template nxeSidenavIcon let-item>` inside `nxe-sidenav` draws the icon of every entry that
|
|
78
|
+
* has an `icon`, given the entry. Use it to map `icon` keys to your own SVGs:
|
|
79
|
+
*
|
|
80
|
+
* ```html
|
|
81
|
+
* <nxe-sidenav [items]="items">
|
|
82
|
+
* <ng-template nxeSidenavIcon let-item>
|
|
83
|
+
* <svg viewBox="0 0 24 24"><path [attr.d]="paths[item.icon]" /></svg>
|
|
84
|
+
* </ng-template>
|
|
85
|
+
* </nxe-sidenav>
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
declare class NxeSidenavIconDirective {
|
|
89
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeSidenavIconDirective, never>;
|
|
90
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NxeSidenavIconDirective, "ng-template[nxeSidenavIcon]", never, {}, {}, never, never, true, never>;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* `nxe-shell` is the page frame of an application: an optional banner, the topbar, the sidenav and
|
|
95
|
+
* the main content.
|
|
96
|
+
*
|
|
97
|
+
* ```html
|
|
98
|
+
* <nxe-shell [(collapsed)]="collapsed">
|
|
99
|
+
* <sb-impersonation-banner nxeShellBanner />
|
|
100
|
+
* <nxe-topbar>...</nxe-topbar>
|
|
101
|
+
* <nxe-sidenav [items]="items" />
|
|
102
|
+
* <router-outlet />
|
|
103
|
+
* </nxe-shell>
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* **Slots.** `[nxeShellBanner]` (full width above the topbar, for a banner that must stay on screen),
|
|
107
|
+
* an `nxe-topbar`, an `nxe-sidenav`, and everything else, which goes in the `<main>` landmark. A
|
|
108
|
+
* "Skip to content" link, the first tab stop, jumps to that `<main>`.
|
|
109
|
+
*
|
|
110
|
+
* **Responsive.** The shell measures its own width. At or above `breakpoint` (960px by default, the
|
|
111
|
+
* design system's `md`) the sidenav is docked beside the content, expanded or, when `collapsed`, an
|
|
112
|
+
* icon rail. Below it the sidenav is an off-canvas drawer over the content with a scrim: the
|
|
113
|
+
* topbar's toggle button opens it, focus is trapped inside while it is open, Esc and a click on the
|
|
114
|
+
* scrim close it, a navigation closes it, and focus returns to the control that opened it.
|
|
115
|
+
* Widening the shell past the breakpoint closes the drawer.
|
|
116
|
+
*
|
|
117
|
+
* The shell is as tall as `--nxe-shell-height` (default `100dvh`): give it the height of the space
|
|
118
|
+
* it fills, and the content scrolls inside `<main>`.
|
|
119
|
+
*/
|
|
120
|
+
declare class NxeShellComponent implements NxeShellState {
|
|
121
|
+
private readonly host;
|
|
122
|
+
private readonly messages;
|
|
123
|
+
private readonly router;
|
|
124
|
+
private readonly injector;
|
|
125
|
+
private readonly focusTrapFactory;
|
|
126
|
+
/** Docked sidenav shows only icons. Two-way: `[(collapsed)]`. */
|
|
127
|
+
readonly collapsed: _angular_core.ModelSignal<boolean>;
|
|
128
|
+
/** The off-canvas drawer is open (only meaningful below the breakpoint). Two-way: `[(drawerOpen)]`. */
|
|
129
|
+
readonly drawerOpen: _angular_core.ModelSignal<boolean>;
|
|
130
|
+
/** Shell width, in CSS px, from which the sidenav is docked rather than a drawer. */
|
|
131
|
+
readonly breakpoint: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
132
|
+
/** Skip-link target id; unique per shell. */
|
|
133
|
+
protected readonly mainId: string;
|
|
134
|
+
private readonly sidenav;
|
|
135
|
+
/** Own width, kept by a ResizeObserver; the window's until the first measurement. */
|
|
136
|
+
private readonly width;
|
|
137
|
+
readonly mode: _angular_core.Signal<NxeShellMode>;
|
|
138
|
+
readonly rail: _angular_core.Signal<boolean>;
|
|
139
|
+
readonly drawerShown: _angular_core.Signal<boolean>;
|
|
140
|
+
readonly sidenavId: _angular_core.Signal<string | null>;
|
|
141
|
+
private trap;
|
|
142
|
+
private returnFocusTo;
|
|
143
|
+
constructor();
|
|
144
|
+
setCollapsed(collapsed: boolean): void;
|
|
145
|
+
/** The hamburger: the drawer below the breakpoint, the dock's collapsed state above it. */
|
|
146
|
+
toggleNavigation(): void;
|
|
147
|
+
closeDrawer(): void;
|
|
148
|
+
protected t(key: 'shell.skipToContent'): string;
|
|
149
|
+
protected skipToContent(event: Event): void;
|
|
150
|
+
protected onEscape(event: Event): void;
|
|
151
|
+
private onDrawerShown;
|
|
152
|
+
private onDrawerHidden;
|
|
153
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeShellComponent, never>;
|
|
154
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeShellComponent, "nxe-shell", never, { "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "drawerOpen": { "alias": "drawerOpen"; "required": false; "isSignal": true; }; "breakpoint": { "alias": "breakpoint"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "drawerOpen": "drawerOpenChange"; }, ["sidenav"], ["[nxeShellBanner]", "nxe-topbar", "nxe-sidenav", "*"], true, never>;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* `nxe-sidenav` is the application's primary navigation, drawn from a tree of {@link NxeNavItem}.
|
|
159
|
+
*
|
|
160
|
+
* ```html
|
|
161
|
+
* <nxe-sidenav [items]="items" (itemClick)="track($event)">
|
|
162
|
+
* <img nxeSidenavHeader src="logo.svg" alt="Nextera" />
|
|
163
|
+
* </nxe-sidenav>
|
|
164
|
+
* ```
|
|
165
|
+
*
|
|
166
|
+
* **Structure and ARIA.** A `<nav>` landmark holding nested lists, in the pattern the ARIA Authoring
|
|
167
|
+
* Practices call a *disclosure navigation menu*: a link is `<a aria-current="page">` when it is the
|
|
168
|
+
* current page; a parent is a `<button aria-expanded aria-controls>` that shows or hides the list
|
|
169
|
+
* under it; a group heading labels its list (`aria-labelledby`). It is deliberately not
|
|
170
|
+
* `role="tree"`: a tree makes one node focusable and needs the full tree keyboard contract, where
|
|
171
|
+
* every link here is an ordinary tab stop and the arrow keys are a shortcut on top of Tab.
|
|
172
|
+
*
|
|
173
|
+
* **Keyboard.** Tab and Shift+Tab visit every link and parent. On a link or parent, Arrow Down/Up
|
|
174
|
+
* move to the next/previous visible entry, Home/End to the first/last. Arrow Right opens a closed
|
|
175
|
+
* parent, or moves into an open one's first child; Arrow Left closes an open parent, or moves from
|
|
176
|
+
* a child to its parent (Right and Left swap in a right-to-left document). Enter and Space activate.
|
|
177
|
+
*
|
|
178
|
+
* **Current page.** From the router: an entry is current when its URL matches (a prefix, or the
|
|
179
|
+
* whole URL with `exact`), and when several do, the most specific one alone is `aria-current`
|
|
180
|
+
* (`/payments/aging` over `/payments`). The parents of the current page open themselves on
|
|
181
|
+
* navigation; what the user opened or closed by hand holds until the next navigation into it.
|
|
182
|
+
*
|
|
183
|
+
* **Collapsed rail.** With the sidenav collapsed (through `nxe-shell` or the `collapsed` model) only
|
|
184
|
+
* the icons show, each with its label as a native `title` and as visually-hidden text, and a badge
|
|
185
|
+
* pins to the icon. There is no flyout for children (that waits for the menu): activating a parent
|
|
186
|
+
* in the rail expands the rail with that parent open.
|
|
187
|
+
*
|
|
188
|
+
* Inside an `nxe-shell` the shell owns the collapsed state and the off-canvas drawer; on its own the
|
|
189
|
+
* sidenav is a plain docked column.
|
|
190
|
+
*/
|
|
191
|
+
declare class NxeSidenavComponent {
|
|
192
|
+
private readonly router;
|
|
193
|
+
private readonly messages;
|
|
194
|
+
private readonly shell;
|
|
195
|
+
/** The sidenav's own element; `nxe-shell` traps focus in it while the drawer is open. */
|
|
196
|
+
readonly element: HTMLElement;
|
|
197
|
+
private readonly navElement;
|
|
198
|
+
/** DOM id, which the topbar's toggle button names in `aria-controls`. */
|
|
199
|
+
readonly id: string;
|
|
200
|
+
/** The navigation tree. */
|
|
201
|
+
readonly items: _angular_core.InputSignal<readonly NxeNavItem[]>;
|
|
202
|
+
/** Accessible name of the `<nav>` landmark; "Main navigation" in the active language by default. */
|
|
203
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
204
|
+
/**
|
|
205
|
+
* Collapsed to the icon rail. Inside an `nxe-shell` the shell's `collapsed` wins and this is
|
|
206
|
+
* left alone; the sidenav writes the user's choice through the shell instead.
|
|
207
|
+
*/
|
|
208
|
+
readonly collapsed: _angular_core.ModelSignal<boolean>;
|
|
209
|
+
/** Show the collapse/expand button at the foot of a docked sidenav. Default true. */
|
|
210
|
+
readonly collapsible: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
211
|
+
/** An entry was activated: a link followed, a plain button pressed. Parents do not emit. */
|
|
212
|
+
readonly itemClick: _angular_core.OutputEmitterRef<NxeNavItem>;
|
|
213
|
+
/** Draws the icon of every entry that has an `icon`. */
|
|
214
|
+
protected readonly iconTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
215
|
+
protected readonly navLabel: _angular_core.Signal<string>;
|
|
216
|
+
protected readonly rail: _angular_core.Signal<boolean>;
|
|
217
|
+
protected readonly drawer: _angular_core.Signal<boolean>;
|
|
218
|
+
protected readonly drawerOpen: _angular_core.Signal<boolean>;
|
|
219
|
+
/** Every entry by id, with its place in the tree and the URL it points at. */
|
|
220
|
+
private readonly nodes;
|
|
221
|
+
/** The router's URL, re-read at every navigation so what is current is a signal. */
|
|
222
|
+
private readonly url;
|
|
223
|
+
/** Id of the one entry that is the current page. */
|
|
224
|
+
private readonly currentId;
|
|
225
|
+
/** Ids of the parents above the current page. They open by themselves. */
|
|
226
|
+
private readonly currentAncestors;
|
|
227
|
+
/**
|
|
228
|
+
* What the user opened or closed by hand. Navigating to a new page forgets the choices about
|
|
229
|
+
* its ancestors, so they open for it, and keeps the rest.
|
|
230
|
+
*/
|
|
231
|
+
private readonly manual;
|
|
232
|
+
protected t(key: NxeMessageKey): string;
|
|
233
|
+
protected isCurrent(id: string): boolean;
|
|
234
|
+
/** The current page is somewhere under this parent. */
|
|
235
|
+
protected holdsCurrent(id: string): boolean;
|
|
236
|
+
protected isOpen(id: string): boolean;
|
|
237
|
+
protected hasChildren(item: NxeNavItem): boolean;
|
|
238
|
+
protected badgeValue(item: NxeNavItem): number | null | undefined;
|
|
239
|
+
protected badgeName(item: NxeNavItem): string;
|
|
240
|
+
protected initial(item: NxeNavItem): string;
|
|
241
|
+
/** Toggle a parent; in the rail, expand the rail with the parent open instead. */
|
|
242
|
+
protected onParent(item: NxeNavItem): void;
|
|
243
|
+
protected onActivate(item: NxeNavItem): void;
|
|
244
|
+
protected toggleCollapsed(): void;
|
|
245
|
+
protected closeDrawer(): void;
|
|
246
|
+
protected onKeydown(event: KeyboardEvent, item: NxeNavItem): void;
|
|
247
|
+
/** Links and parent buttons in document order; the ones inside a closed parent are not rendered. */
|
|
248
|
+
private focusables;
|
|
249
|
+
private setOpen;
|
|
250
|
+
private setCollapsed;
|
|
251
|
+
private treeOf;
|
|
252
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeSidenavComponent, never>;
|
|
253
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeSidenavComponent, "nxe-sidenav", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "itemClick": "itemClick"; }, ["iconTemplate"], ["[nxeSidenavHeader]", "[nxeSidenavFooter]"], true, never>;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* `nxe-topbar` is the bar across the top of an `nxe-shell`: a start, a centre and an end slot.
|
|
258
|
+
*
|
|
259
|
+
* ```html
|
|
260
|
+
* <nxe-topbar>
|
|
261
|
+
* <img nxeTopbarStart src="logo.svg" alt="Nextera" />
|
|
262
|
+
* <sb-search nxeTopbarCenter />
|
|
263
|
+
* <ng-container nxeTopbarEnd>
|
|
264
|
+
* <sb-company-switcher />
|
|
265
|
+
* <sb-notifications />
|
|
266
|
+
* </ng-container>
|
|
267
|
+
* </nxe-topbar>
|
|
268
|
+
* ```
|
|
269
|
+
*
|
|
270
|
+
* The start slot is preceded by a hamburger button: an icon-only `nxe-button` named "Toggle
|
|
271
|
+
* navigation" with `aria-controls` the sidenav and `aria-expanded` the sidenav's state. Inside an
|
|
272
|
+
* `nxe-shell` it opens and closes the drawer below the breakpoint and collapses and expands the dock
|
|
273
|
+
* above it. `menuToggle` also fires, so a topbar used without a shell can drive its own sidenav.
|
|
274
|
+
* `[nxeTopbarEnd]` elements sit at the inline end of the bar, where a company switcher, language
|
|
275
|
+
* toggle, notification bell and user menu go.
|
|
276
|
+
*/
|
|
277
|
+
declare class NxeTopbarComponent {
|
|
278
|
+
private readonly messages;
|
|
279
|
+
private readonly shell;
|
|
280
|
+
/** Show the hamburger button. Default true. */
|
|
281
|
+
readonly menuButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
282
|
+
/** The hamburger was pressed. */
|
|
283
|
+
readonly menuToggle: _angular_core.OutputEmitterRef<void>;
|
|
284
|
+
protected readonly label: _angular_core.Signal<string>;
|
|
285
|
+
protected readonly controls: _angular_core.Signal<string | null>;
|
|
286
|
+
/** Drawer: open. Dock: not collapsed. Without a shell the button says nothing about it. */
|
|
287
|
+
protected readonly expanded: _angular_core.Signal<boolean | null>;
|
|
288
|
+
protected toggle(): void;
|
|
289
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeTopbarComponent, never>;
|
|
290
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeTopbarComponent, "nxe-topbar", never, { "menuButton": { "alias": "menuButton"; "required": false; "isSignal": true; }; }, { "menuToggle": "menuToggle"; }, never, ["[nxeTopbarStart]", "[nxeTopbarCenter]", "[nxeTopbarEnd]"], true, never>;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export { NXE_SHELL, NxeShellComponent, NxeSidenavComponent, NxeSidenavIconDirective, NxeTopbarComponent };
|
|
294
|
+
export type { NxeNavItem, NxeShellMode, NxeShellState };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { NxeMessageService } from '@nexterajs/ui/core';
|
|
2
3
|
|
|
3
4
|
/** A node in the assembled tree (children built from the flat `parentIdExpr` list). */
|
|
4
5
|
interface NxeTreeNode {
|
|
@@ -36,7 +37,9 @@ interface NxeTreeItemClickEvent {
|
|
|
36
37
|
*/
|
|
37
38
|
declare class NxeTreeViewComponent {
|
|
38
39
|
private readonly elementRef;
|
|
39
|
-
|
|
40
|
+
/** The library's runtime-switchable messages. */
|
|
41
|
+
protected readonly messages: NxeMessageService;
|
|
42
|
+
readonly dataSource: _angular_core.InputSignal<readonly unknown[] | null | undefined>;
|
|
40
43
|
/** Accepted for parity; this component always assembles a tree from the flat list. */
|
|
41
44
|
readonly dataStructure: _angular_core.InputSignal<"plain" | "tree">;
|
|
42
45
|
readonly keyExpr: _angular_core.InputSignal<string>;
|
|
@@ -51,7 +54,7 @@ declare class NxeTreeViewComponent {
|
|
|
51
54
|
readonly searchMode: _angular_core.InputSignal<"contains" | "startswith" | "equals">;
|
|
52
55
|
/** Accepted for parity (native scrolling is the default here anyway). */
|
|
53
56
|
readonly useNativeScrolling: _angular_core.InputSignal<boolean>;
|
|
54
|
-
readonly width: _angular_core.InputSignal<string | number>;
|
|
57
|
+
readonly width: _angular_core.InputSignal<string | number | undefined>;
|
|
55
58
|
readonly onItemClick: _angular_core.OutputEmitterRef<NxeTreeItemClickEvent>;
|
|
56
59
|
readonly expanded: _angular_core.WritableSignal<ReadonlySet<unknown>>;
|
|
57
60
|
readonly selectedKey: _angular_core.WritableSignal<unknown>;
|
|
@@ -59,7 +62,7 @@ declare class NxeTreeViewComponent {
|
|
|
59
62
|
private readonly searchInput;
|
|
60
63
|
/** DevExtreme `.instance` facade — `expandAll()` is the only method used. */
|
|
61
64
|
get instance(): this;
|
|
62
|
-
protected readonly widthStyle: _angular_core.Signal<string>;
|
|
65
|
+
protected readonly widthStyle: _angular_core.Signal<string | undefined>;
|
|
63
66
|
private readonly tree;
|
|
64
67
|
/**
|
|
65
68
|
* The visible nodes, each with its position among its siblings.
|