@ngstarter-ui/components 21.0.48 → 21.0.50

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 (36) hide show
  1. package/ai/component-registry.json +78 -27
  2. package/fesm2022/ngstarter-ui-components-country-select.mjs +1 -1
  3. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
  4. package/fesm2022/ngstarter-ui-components-currency-select.mjs +1 -1
  5. package/fesm2022/ngstarter-ui-components-currency-select.mjs.map +1 -1
  6. package/fesm2022/ngstarter-ui-components-data-view.mjs +70 -10
  7. package/fesm2022/ngstarter-ui-components-data-view.mjs.map +1 -1
  8. package/fesm2022/ngstarter-ui-components-date-format-select.mjs +1 -1
  9. package/fesm2022/ngstarter-ui-components-date-format-select.mjs.map +1 -1
  10. package/fesm2022/ngstarter-ui-components-filter-builder.mjs +1 -1
  11. package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
  12. package/fesm2022/ngstarter-ui-components-form-builder.mjs +273 -31
  13. package/fesm2022/ngstarter-ui-components-form-builder.mjs.map +1 -1
  14. package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
  15. package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
  16. package/fesm2022/ngstarter-ui-components-option.mjs +2 -2
  17. package/fesm2022/ngstarter-ui-components-option.mjs.map +1 -1
  18. package/fesm2022/ngstarter-ui-components-paginator.mjs +1 -1
  19. package/fesm2022/ngstarter-ui-components-paginator.mjs.map +1 -1
  20. package/fesm2022/ngstarter-ui-components-pdf-viewer.mjs +3 -3
  21. package/fesm2022/ngstarter-ui-components-pdf-viewer.mjs.map +1 -1
  22. package/fesm2022/ngstarter-ui-components-select.mjs +474 -27
  23. package/fesm2022/ngstarter-ui-components-select.mjs.map +1 -1
  24. package/fesm2022/ngstarter-ui-components-tabs.mjs +4 -4
  25. package/fesm2022/ngstarter-ui-components-tabs.mjs.map +1 -1
  26. package/fesm2022/ngstarter-ui-components-timezone-select.mjs +1 -1
  27. package/fesm2022/ngstarter-ui-components-timezone-select.mjs.map +1 -1
  28. package/fesm2022/ngstarter-ui-components-toolbar.mjs +9 -6
  29. package/fesm2022/ngstarter-ui-components-toolbar.mjs.map +1 -1
  30. package/package.json +1 -1
  31. package/styles/_common.scss +1 -1
  32. package/styles/_tokens.scss +7 -1
  33. package/types/ngstarter-ui-components-data-view.d.ts +23 -11
  34. package/types/ngstarter-ui-components-form-builder.d.ts +63 -14
  35. package/types/ngstarter-ui-components-select.d.ts +112 -3
  36. package/types/ngstarter-ui-components-toolbar.d.ts +5 -2
@@ -56,6 +56,63 @@ declare abstract class _Select {
56
56
  }
57
57
  declare const SELECT: InjectionToken<_Select>;
58
58
 
59
+ interface SelectDataSourceRequest {
60
+ search: string;
61
+ page: number;
62
+ pageSize: number;
63
+ cursor?: unknown;
64
+ selectedValues: unknown[];
65
+ reason: 'initial' | 'open' | 'search' | 'page';
66
+ signal?: AbortSignal;
67
+ }
68
+ interface SelectDataSourceOption<T = unknown> {
69
+ label: string;
70
+ value: unknown;
71
+ disabled?: boolean;
72
+ data?: T;
73
+ }
74
+ interface SelectDataSourceResult<T = unknown> {
75
+ items: SelectDataSourceOption<T>[];
76
+ hasMore?: boolean;
77
+ total?: number;
78
+ nextCursor?: unknown;
79
+ }
80
+ type SelectDataSource<T = unknown> = (request: SelectDataSourceRequest) => Promise<SelectDataSourceResult<T> | SelectDataSourceOption<T>[]>;
81
+
82
+ interface SelectOptionContentContext<T = any> {
83
+ $implicit: T;
84
+ data: T;
85
+ option: SelectDataSourceOption<T>;
86
+ value: unknown;
87
+ label: string;
88
+ selected: boolean;
89
+ disabled: boolean;
90
+ multiple: boolean;
91
+ }
92
+ declare class SelectOptionContentDef<T = any> {
93
+ readonly templateRef: TemplateRef<SelectOptionContentContext<T>>;
94
+ static ngTemplateContextGuard<T>(_directive: SelectOptionContentDef<T>, _context: unknown): _context is SelectOptionContentContext<T>;
95
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectOptionContentDef<any>, never>;
96
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectOptionContentDef<any>, "ng-template[ngsOptionContentDef]", never, {}, {}, never, never, true, never>;
97
+ }
98
+
99
+ interface SelectValueContext<T = any> {
100
+ $implicit: T | T[] | null;
101
+ data: T | T[] | null;
102
+ option: SelectDataSourceOption<T> | SelectDataSourceOption<T>[] | null;
103
+ value: unknown | unknown[] | null;
104
+ label: string;
105
+ labels: string[];
106
+ count: number;
107
+ multiple: boolean;
108
+ }
109
+ declare class SelectValueDef<T = any> {
110
+ readonly templateRef: TemplateRef<SelectValueContext<T>>;
111
+ static ngTemplateContextGuard<T>(_directive: SelectValueDef<T>, _context: unknown): _context is SelectValueContext<T>;
112
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectValueDef<any>, never>;
113
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDef<any>, "ng-template[ngsSelectValueDef]", never, {}, {}, never, never, true, never>;
114
+ }
115
+
59
116
  declare class SelectChange {
60
117
  source: Select;
61
118
  value: any;
@@ -82,6 +139,12 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
82
139
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
83
140
  hideCheckIcon: _angular_core.InputSignalWithTransform<boolean, unknown>;
84
141
  clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
142
+ dataSource: _angular_core.InputSignal<SelectDataSource | null | undefined>;
143
+ pageSize: _angular_core.InputSignalWithTransform<number, unknown>;
144
+ searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
145
+ searchDebounce: _angular_core.InputSignalWithTransform<number, unknown>;
146
+ minSearchLength: _angular_core.InputSignalWithTransform<number, unknown>;
147
+ loadOnOpen: _angular_core.InputSignalWithTransform<boolean, unknown>;
85
148
  ariaLabel: _angular_core.InputSignal<string | null>;
86
149
  tabIndex: _angular_core.InputSignalWithTransform<number, any>;
87
150
  ariaDescribedby: _angular_core.InputSignal<string | null>;
@@ -90,10 +153,14 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
90
153
  readonly selectionChange: _angular_core.OutputEmitterRef<any>;
91
154
  readonly opened: _angular_core.OutputEmitterRef<void>;
92
155
  readonly closed: _angular_core.OutputEmitterRef<void>;
93
- options: _angular_core.Signal<readonly _Option[]>;
156
+ private projectedOptions;
157
+ private dataSourceOptions;
158
+ options: _angular_core.Signal<_Option[]>;
94
159
  optionGroups: _angular_core.Signal<readonly Optgroup[]>;
95
160
  customTrigger: _angular_core.Signal<readonly SelectTrigger[]>;
96
161
  filterTrigger: _angular_core.Signal<readonly FilterTrigger[]>;
162
+ optionContentDef: _angular_core.Signal<SelectOptionContentDef<any> | undefined>;
163
+ selectValueDef: _angular_core.Signal<SelectValueDef<any> | undefined>;
97
164
  overlayDir: _angular_core.Signal<CdkConnectedOverlay | undefined>;
98
165
  panel: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
99
166
  origin: _angular_core.Signal<CdkOverlayOrigin | undefined>;
@@ -109,6 +176,22 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
109
176
  _optionsContentChanges: _angular_core.WritableSignal<number>;
110
177
  private _errorState;
111
178
  get errorState(): boolean;
179
+ protected readonly asyncOptions: _angular_core.WritableSignal<SelectDataSourceOption<unknown>[]>;
180
+ protected readonly asyncSearch: _angular_core.WritableSignal<string>;
181
+ protected readonly asyncLoading: _angular_core.WritableSignal<boolean>;
182
+ protected readonly asyncLoadingMore: _angular_core.WritableSignal<boolean>;
183
+ protected readonly asyncError: _angular_core.WritableSignal<unknown>;
184
+ protected readonly asyncHasMore: _angular_core.WritableSignal<boolean>;
185
+ protected readonly asyncEnabled: _angular_core.Signal<boolean>;
186
+ private readonly _asyncSelectedCache;
187
+ private _asyncPage;
188
+ private _asyncCursor;
189
+ private _asyncSearchTimer;
190
+ private _asyncRequestId;
191
+ private _asyncAbortController;
192
+ private _lastDataSource;
193
+ private _lastInitialSelectedKey;
194
+ private _destroyed;
112
195
  private _empty;
113
196
  get empty(): boolean;
114
197
  readonly hasValue: _angular_core.Signal<boolean>;
@@ -122,6 +205,8 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
122
205
  triggerValue: _angular_core.Signal<string>;
123
206
  selectedCount: _angular_core.Signal<number>;
124
207
  selectedData: _angular_core.Signal<any>;
208
+ protected readonly selectValueContext: _angular_core.Signal<SelectValueContext<any>>;
209
+ protected readonly selectValueTemplateReady: _angular_core.Signal<boolean>;
125
210
  ngAfterContentInit(): void;
126
211
  private _resetOptions;
127
212
  ngOnDestroy(): void;
@@ -141,15 +226,38 @@ declare class Select implements ControlValueAccessor, OnDestroy, AfterContentIni
141
226
  focus(): void;
142
227
  _handleKeydown(event: KeyboardEvent): void;
143
228
  _onOptionClick(option: _Option): void;
229
+ protected onAsyncSearchInput(value: string): void;
230
+ protected onAsyncContentScroll(event: Event): void;
231
+ protected retryAsyncLoad(): void;
232
+ protected asyncOptionContext(option: SelectDataSourceOption): SelectOptionContentContext;
144
233
  private _selectOption;
234
+ private _selectAsyncMultipleOption;
145
235
  private _propagateChanges;
146
236
  private _setSelectionByValue;
147
237
  private _scrollToSelectedOption;
238
+ private _scrollToAsyncOptionValue;
239
+ private _scrollOptionElementIntoContainer;
240
+ private _setScrollTop;
148
241
  private _getOptionIndex;
149
242
  private _getOptionData;
150
243
  private _selectValue;
244
+ private _loadFirstPage;
245
+ private _loadNextPage;
246
+ private _loadAsyncPage;
247
+ private _normalizeAsyncResult;
248
+ private _mergeAsyncOptions;
249
+ private _cacheAsyncSelectedOptions;
250
+ private _resetAsyncState;
251
+ private _selectedValues;
252
+ private _selectedValuesKey;
253
+ private _viewValueForValue;
254
+ private _dataForValue;
255
+ private _displayOptionForValue;
256
+ private _optionForValue;
257
+ private _asyncOptionForValue;
258
+ private _compareValues;
151
259
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Select, never>;
152
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select, "ngs-select", ["ngsSelect"], { "_id": { "alias": "id"; "required": false; "isSignal": true; }; "_placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "hideCheckIcon": { "alias": "hideCheckIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; "value": "valueChange"; }, ["selectBody", "options", "optionGroups", "customTrigger", "filterTrigger"], ["ngs-select-trigger", "ngs-filter-trigger", "ngs-select-header", "ngs-select-body", "ngs-optgroup,ngs-option", "*", "ngs-select-footer"], true, never>;
260
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select, "ngs-select", ["ngsSelect"], { "_id": { "alias": "id"; "required": false; "isSignal": true; }; "_placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "hideCheckIcon": { "alias": "hideCheckIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchDebounce": { "alias": "searchDebounce"; "required": false; "isSignal": true; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; "isSignal": true; }; "loadOnOpen": { "alias": "loadOnOpen"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; "value": "valueChange"; }, ["selectBody", "projectedOptions", "optionGroups", "customTrigger", "filterTrigger", "optionContentDef", "selectValueDef"], ["ngs-select-trigger", "ngs-filter-trigger", "ngs-select-header", "ngs-select-body", "ngs-optgroup,ngs-option", "*", "ngs-select-footer"], true, never>;
153
261
  }
154
262
 
155
263
  declare class SelectHeader {
@@ -162,4 +270,5 @@ declare class SelectFooter {
162
270
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectFooter, "ngs-select-footer", never, {}, {}, never, ["*"], true, never>;
163
271
  }
164
272
 
165
- export { FilterTrigger, FilterTriggerValueDirective, SELECT, Select, SelectBody, SelectChange, SelectFooter, SelectHeader, SelectTrigger, _Select };
273
+ export { FilterTrigger, FilterTriggerValueDirective, SELECT, Select, SelectBody, SelectChange, SelectFooter, SelectHeader, SelectOptionContentDef, SelectTrigger, SelectValueDef, _Select };
274
+ export type { SelectDataSource, SelectDataSourceOption, SelectDataSourceRequest, SelectDataSourceResult, SelectOptionContentContext, SelectValueContext };
@@ -56,7 +56,7 @@ declare class Toolbar implements AfterViewInit, OnDestroy {
56
56
  protected _closeOverflowDialog(): void;
57
57
  private _updateOverflow;
58
58
  static ɵfac: i0.ɵɵFactoryDeclaration<Toolbar, never>;
59
- static ɵcmp: i0.ɵɵComponentDeclaration<Toolbar, "ngs-toolbar", ["ngsToolbar"], {}, {}, ["toolbarItems", "navItems", "spacers", "_rows"], ["ngs-toolbar-title,ngs-toolbar-subtitle", "*"], true, never>;
59
+ static ɵcmp: i0.ɵɵComponentDeclaration<Toolbar, "ngs-toolbar", ["ngsToolbar"], {}, {}, ["toolbarItems", "navItems", "spacers", "_rows"], ["*"], true, never>;
60
60
  }
61
61
 
62
62
  declare class ToolbarNavLink {
@@ -66,9 +66,11 @@ declare class ToolbarNavLink {
66
66
  static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarNavLink, "ngs-toolbar-nav-link,a[ngs-toolbar-nav-link]", ["ngsToolbarNavLink"], { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
67
67
  }
68
68
 
69
+ type ToolbarTitleAppearance = 'none' | 'large';
69
70
  declare class ToolbarTitle {
71
+ appearance: i0.InputSignal<ToolbarTitleAppearance>;
70
72
  static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarTitle, never>;
71
- static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarTitle, "ngs-toolbar-title", ["ngsToolbarTitle"], {}, {}, never, ["*"], true, never>;
73
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarTitle, "ngs-toolbar-title", ["ngsToolbarTitle"], { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
72
74
  }
73
75
 
74
76
  declare class ToolbarSubtitle {
@@ -77,3 +79,4 @@ declare class ToolbarSubtitle {
77
79
  }
78
80
 
79
81
  export { Toolbar, ToolbarItem, ToolbarNav, ToolbarNavLink, ToolbarRow, ToolbarSpacer, ToolbarSubtitle, ToolbarTitle };
82
+ export type { ToolbarTitleAppearance };