@ngneers/controls 0.0.1-pre1

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 (40) hide show
  1. package/api/index.d.ts +134 -0
  2. package/custom-types/index.d.ts +7 -0
  3. package/dialog/index.d.ts +43 -0
  4. package/fesm2022/ngneers-controls-api.mjs +318 -0
  5. package/fesm2022/ngneers-controls-api.mjs.map +1 -0
  6. package/fesm2022/ngneers-controls-custom-types.mjs +4 -0
  7. package/fesm2022/ngneers-controls-custom-types.mjs.map +1 -0
  8. package/fesm2022/ngneers-controls-dialog.mjs +74 -0
  9. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -0
  10. package/fesm2022/ngneers-controls-form-field.mjs +33 -0
  11. package/fesm2022/ngneers-controls-form-field.mjs.map +1 -0
  12. package/fesm2022/ngneers-controls-icon.mjs +53 -0
  13. package/fesm2022/ngneers-controls-icon.mjs.map +1 -0
  14. package/fesm2022/ngneers-controls-lazy-cacher.mjs +30 -0
  15. package/fesm2022/ngneers-controls-lazy-cacher.mjs.map +1 -0
  16. package/fesm2022/ngneers-controls-list-box.mjs +119 -0
  17. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -0
  18. package/fesm2022/ngneers-controls-popover.mjs +80 -0
  19. package/fesm2022/ngneers-controls-popover.mjs.map +1 -0
  20. package/fesm2022/ngneers-controls-scroller.mjs +163 -0
  21. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -0
  22. package/fesm2022/ngneers-controls-select.mjs +155 -0
  23. package/fesm2022/ngneers-controls-select.mjs.map +1 -0
  24. package/fesm2022/ngneers-controls-text-field.mjs +23 -0
  25. package/fesm2022/ngneers-controls-text-field.mjs.map +1 -0
  26. package/fesm2022/ngneers-controls-utils.mjs +104 -0
  27. package/fesm2022/ngneers-controls-utils.mjs.map +1 -0
  28. package/fesm2022/ngneers-controls.mjs +6 -0
  29. package/fesm2022/ngneers-controls.mjs.map +1 -0
  30. package/form-field/index.d.ts +19 -0
  31. package/icon/index.d.ts +30 -0
  32. package/index.d.ts +2 -0
  33. package/lazy-cacher/index.d.ts +14 -0
  34. package/list-box/index.d.ts +58 -0
  35. package/package.json +78 -0
  36. package/popover/index.d.ts +41 -0
  37. package/scroller/index.d.ts +95 -0
  38. package/select/index.d.ts +86 -0
  39. package/text-field/index.d.ts +10 -0
  40. package/utils/index.d.ts +36 -0
@@ -0,0 +1,41 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+ import { PositioningSizeConstraints } from '@ngneers/controls/api';
4
+
5
+ type PopoverOptions = {
6
+ /**
7
+ * Constraints for the size of the popover.
8
+ */
9
+ sizeConstraints?: PositioningSizeConstraints;
10
+ /**
11
+ * If true, the content of the popover will be cached and not recreated on each open.
12
+ * This is useful for performance when the content is expensive to create.
13
+ */
14
+ cache?: boolean;
15
+ };
16
+ declare class Popover {
17
+ readonly anchor: _angular_core.InputSignal<HTMLElement>;
18
+ readonly options: _angular_core.InputSignal<PopoverOptions | undefined>;
19
+ protected readonly lazyContent: _angular_core.Signal<TemplateRef<unknown> | undefined>;
20
+ protected readonly appliedOptions: _angular_core.Signal<{
21
+ sizeConstraints?: PositioningSizeConstraints;
22
+ cache: boolean;
23
+ }>;
24
+ readonly opened: _angular_core.OutputEmitterRef<void>;
25
+ readonly closed: _angular_core.OutputEmitterRef<void>;
26
+ private readonly _isOpen;
27
+ readonly isOpen: _angular_core.Signal<boolean>;
28
+ private readonly _injector;
29
+ private readonly _popoverRef;
30
+ private readonly _popover;
31
+ private readonly _autoPos;
32
+ open(): void;
33
+ toggle(): void;
34
+ close(): void;
35
+ protected onToggle(event: Event): void;
36
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Popover, never>;
37
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Popover, "ngn-popover", never, { "anchor": { "alias": "anchor"; "required": true; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, ["lazyContent"], ["*"], true, never>;
38
+ }
39
+
40
+ export { Popover };
41
+ export type { PopoverOptions };
@@ -0,0 +1,95 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+
4
+ declare class Scroller<T> {
5
+ /**
6
+ * The items to be displayed in the scroller.
7
+ * This is a required input and should be an array of items of type T.
8
+ */
9
+ readonly items: _angular_core.InputSignal<readonly T[]>;
10
+ /**
11
+ * Whether the scroller should use virtual scrolling.
12
+ * When set to true, the scroller will only render the items that are currently visible
13
+ * on the screen, improving performance for large lists.
14
+ *
15
+ * When virtual scrolling is enabled, {@link itemHeight} must be set to a non-zero value.
16
+ * @defaultValue `false`
17
+ */
18
+ readonly virtual: _angular_core.InputSignal<boolean | undefined>;
19
+ /**
20
+ * When {@link virtual} scrolling is enabled, this input is required to define the height of each item in pixels.
21
+ */
22
+ readonly itemHeight: _angular_core.InputSignal<number>;
23
+ /**
24
+ * When {@link virtual} scrolling is enabled, this input defines the number of items to be rendered above and below the visible area.
25
+ * This can help to reduce flickering when scrolling.
26
+ * @defaultValue `2`
27
+ */
28
+ readonly padding: _angular_core.InputSignal<number>;
29
+ /**
30
+ * Determines whether the scroller should have a tab index and be focusable.
31
+ * @defaultValue `false`
32
+ */
33
+ readonly focusable: _angular_core.InputSignal<boolean>;
34
+ /**
35
+ * Determines whether an item is sticky or not.
36
+ * If set, the scroller will stick the items with a truthy value for the specified field to the top of the scroller.
37
+ */
38
+ readonly fieldSticky: _angular_core.InputSignal<keyof T | null>;
39
+ private readonly _itemList;
40
+ /**
41
+ * The template to be used for rendering each item in the scroller.
42
+ * Can also be set using the `item` content child.
43
+ */
44
+ readonly templateItem: _angular_core.InputSignal<TemplateRef<{
45
+ $implicit: T;
46
+ index: number;
47
+ }> | null>;
48
+ private readonly _userItemTemplate;
49
+ protected readonly itemTemplate: _angular_core.Signal<TemplateRef<{
50
+ $implicit: T;
51
+ index: number;
52
+ }> | null>;
53
+ private readonly _el;
54
+ private readonly _scrollElement;
55
+ private readonly _elementSize;
56
+ private readonly _visibleItemCount;
57
+ private readonly _scrollTop;
58
+ private readonly _itemStartIndex;
59
+ private readonly _itemEndIndex;
60
+ protected readonly visibleItems: _angular_core.Signal<{
61
+ item: T;
62
+ index: number;
63
+ }[]>;
64
+ /**
65
+ * Returns the last sticky item that is not rendered regularly in the list.
66
+ * Required because sticky items might need to be rendered longer than they would.
67
+ * Only applicable when virtual scrolling is enabled.
68
+ */
69
+ protected readonly latestStickyItem: _angular_core.Signal<{
70
+ item: T;
71
+ index: number;
72
+ } | null>;
73
+ protected readonly itemsTop: _angular_core.Signal<number>;
74
+ protected readonly dummyHeight: _angular_core.Signal<number>;
75
+ constructor();
76
+ /**
77
+ * Scrolls the item with the given index into view.
78
+ * @param index The index of the item to scroll to.
79
+ */
80
+ scrollToIndex(index: number): void;
81
+ /**
82
+ * Template types for the scroller.
83
+ * Can be used with the {@link @ngneers/controls/api#NgnTemplate | NgnTemplate} directive for type safe ng-templates.
84
+ */
85
+ readonly templateTypes: {
86
+ item: {
87
+ $implicit: T;
88
+ index: number;
89
+ };
90
+ };
91
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Scroller<any>, never>;
92
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Scroller<any>, "ngn-scroller", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "fieldSticky": { "alias": "fieldSticky"; "required": false; "isSignal": true; }; "templateItem": { "alias": "templateItem"; "required": false; "isSignal": true; }; }, {}, ["_userItemTemplate"], never, true, never>;
93
+ }
94
+
95
+ export { Scroller };
@@ -0,0 +1,86 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+ import { ValueControlBase, NgnItem, FilterConfig, FilterConfigInternal, FilterFn, NgnItemFields } from '@ngneers/controls/api';
4
+ import { PopoverOptions } from '@ngneers/controls/popover';
5
+
6
+ declare abstract class SelectTemplates<T, K extends keyof T> extends ValueControlBase<T[K]> {
7
+ private readonly _defaultItemTemplate;
8
+ private readonly _userItemTemplate;
9
+ readonly templateItem: _angular_core.InputSignal<TemplateRef<{
10
+ $implicit: NgnItem<T, K> | undefined;
11
+ }> | null>;
12
+ protected readonly itemTemplate: _angular_core.Signal<TemplateRef<{
13
+ $implicit: NgnItem<T, K> | undefined;
14
+ }>>;
15
+ private readonly _defaultSelectedItemTemplate;
16
+ private readonly _userSelectedItemTemplate;
17
+ readonly templateSelectedItem: _angular_core.InputSignal<TemplateRef<unknown> | null>;
18
+ protected readonly selectedItemTemplate: _angular_core.Signal<TemplateRef<unknown>>;
19
+ private readonly _defaultGroupTemplate;
20
+ private readonly _userGroupTemplate;
21
+ readonly templateGroup: _angular_core.InputSignal<TemplateRef<{
22
+ $implicit: NgnItem<T, K> | undefined;
23
+ }> | null>;
24
+ protected readonly groupTemplate: _angular_core.Signal<TemplateRef<{
25
+ $implicit: NgnItem<T, K> | undefined;
26
+ }>>;
27
+ /**
28
+ * Types for the dialog templates.
29
+ */
30
+ readonly templateTypes: {
31
+ item: {
32
+ $implicit: NgnItem<T, K> | undefined;
33
+ };
34
+ };
35
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectTemplates<any, any>, never>;
36
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectTemplates<any, any>, "ng-component", never, { "templateItem": { "alias": "templateItem"; "required": false; "isSignal": true; }; "templateSelectedItem": { "alias": "templateSelectedItem"; "required": false; "isSignal": true; }; "templateGroup": { "alias": "templateGroup"; "required": false; "isSignal": true; }; }, {}, ["_userItemTemplate", "_userSelectedItemTemplate", "_userGroupTemplate"], never, true, never>;
37
+ }
38
+
39
+ type _SelectFilterOptions = {
40
+ clearFilterOnClose?: boolean;
41
+ };
42
+ type SelectFilterOptions<T extends object> = _SelectFilterOptions & FilterConfig<T>;
43
+ type SelectFilterOptionsInternal<T extends object> = _SelectFilterOptions & FilterConfigInternal<T>;
44
+ type SelectFilterFn<T extends object> = FilterFn<NgnItem<T>>;
45
+
46
+ declare class Select<T extends object, K extends keyof T> extends SelectTemplates<T, K> {
47
+ private readonly _popover;
48
+ readonly popoverOptions: _angular_core.InputSignal<PopoverOptions>;
49
+ protected readonly appliedPopoverOptions: _angular_core.Signal<{
50
+ sizeConstraints: {
51
+ width: number | string;
52
+ maxWidth: number | string;
53
+ height?: string;
54
+ maxHeight?: string;
55
+ };
56
+ cache?: boolean;
57
+ }>;
58
+ readonly options: _angular_core.InputSignal<readonly NgnItem<T, K>[] | readonly T[]>;
59
+ readonly fields: _angular_core.InputSignal<NgnItemFields<T, K> | undefined>;
60
+ readonly filter: _angular_core.InputSignal<boolean | SelectFilterOptions<NgnItem<T, K>> | undefined>;
61
+ readonly filterText: _angular_core.InputSignal<string | undefined>;
62
+ readonly filterIcon: _angular_core.InputSignal<string | undefined>;
63
+ readonly virtual: _angular_core.InputSignal<boolean>;
64
+ readonly itemHeight: _angular_core.InputSignal<number | undefined>;
65
+ private readonly _listbox;
66
+ protected readonly filterTextInternal: _angular_core.WritableSignal<string | undefined>;
67
+ protected readonly currentHighlightedValue: _angular_core.WritableSignal<T[K] | null>;
68
+ private readonly _options;
69
+ private readonly _flatOptions;
70
+ private readonly _appliedFilterOptions;
71
+ protected readonly filteredOptions: {
72
+ (): readonly NgnItem[];
73
+ isRunning: Signal<boolean>;
74
+ };
75
+ protected readonly filterIsExecuting: Signal<boolean>;
76
+ protected readonly selectedItem: _angular_core.Signal<NgnItem<any, any> | undefined>;
77
+ protected onKeyDown(event: KeyboardEvent): void;
78
+ protected onPopoverClosed(): void;
79
+ onSelect(value: T[K]): void;
80
+ close(): void;
81
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Select<any, any>, never>;
82
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select<any, any>, "ngn-select", never, { "popoverOptions": { "alias": "popoverOptions"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "fields": { "alias": "fields"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterText": { "alias": "filterText"; "required": false; "isSignal": true; }; "filterIcon": { "alias": "filterIcon"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
83
+ }
84
+
85
+ export { Select };
86
+ export type { SelectFilterFn, SelectFilterOptions, SelectFilterOptionsInternal };
@@ -0,0 +1,10 @@
1
+ import { ValueControlBase } from '@ngneers/controls/api';
2
+ import * as i0 from '@angular/core';
3
+
4
+ declare class TextField extends ValueControlBase<string> {
5
+ onInput(value: Event): void;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextField, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextField, "ngn-text-field", never, {}, {}, never, never, true, never>;
8
+ }
9
+
10
+ export { TextField };
@@ -0,0 +1,36 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Signal } from '@angular/core';
3
+
4
+ declare function throwExp(message: string): never;
5
+
6
+ declare function fuzzyMatch(input: string, search: string): boolean;
7
+
8
+ declare function generateElementId(): string;
9
+
10
+ declare const globalPropertyName = "__ngn-controls-global__";
11
+ interface NgnGlobalType {
12
+ nextElementId: number;
13
+ }
14
+ declare global {
15
+ interface Window {
16
+ [globalPropertyName]: NgnGlobalType;
17
+ }
18
+ }
19
+ declare class NgnGlobal implements NgnGlobalType {
20
+ private readonly _window;
21
+ constructor();
22
+ get nextElementId(): number;
23
+ set nextElementId(value: number);
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgnGlobal, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgnGlobal>;
26
+ }
27
+
28
+ declare function computedWithPrevious<T>(computeFn: (prev?: T) => T, previous?: T): () => T;
29
+ declare function asyncComputed<T>(computeFn: () => Promise<T>, initial: T): {
30
+ (): T;
31
+ isRunning: Signal<boolean>;
32
+ };
33
+
34
+ declare function notNullish<T>(value: T | null | undefined): value is T;
35
+
36
+ export { NgnGlobal, asyncComputed, computedWithPrevious, fuzzyMatch, generateElementId, notNullish, throwExp };