@ngneers/controls 0.0.1-pre1 → 0.0.1-pre3

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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/fesm2022/ngneers-controls-accordion.mjs +194 -0
  3. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -0
  4. package/fesm2022/ngneers-controls-api-ng.mjs +668 -0
  5. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -0
  6. package/fesm2022/ngneers-controls-api.mjs +256 -227
  7. package/fesm2022/ngneers-controls-api.mjs.map +1 -1
  8. package/fesm2022/ngneers-controls-avatar.mjs +70 -0
  9. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -0
  10. package/fesm2022/ngneers-controls-base.mjs +397 -0
  11. package/fesm2022/ngneers-controls-base.mjs.map +1 -0
  12. package/fesm2022/ngneers-controls-breadcrumb.mjs +74 -0
  13. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -0
  14. package/fesm2022/ngneers-controls-button-group.mjs +51 -0
  15. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -0
  16. package/fesm2022/ngneers-controls-button.mjs +62 -0
  17. package/fesm2022/ngneers-controls-button.mjs.map +1 -0
  18. package/fesm2022/ngneers-controls-calendar-time-C7UnIFzU.mjs +63 -0
  19. package/fesm2022/ngneers-controls-calendar-time-C7UnIFzU.mjs.map +1 -0
  20. package/fesm2022/ngneers-controls-calendar.mjs +468 -0
  21. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -0
  22. package/fesm2022/ngneers-controls-checkbox.mjs +58 -0
  23. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -0
  24. package/fesm2022/ngneers-controls-chip.mjs +52 -0
  25. package/fesm2022/ngneers-controls-chip.mjs.map +1 -0
  26. package/fesm2022/ngneers-controls-defer.mjs +43 -0
  27. package/fesm2022/ngneers-controls-defer.mjs.map +1 -0
  28. package/fesm2022/ngneers-controls-dialog.mjs +329 -33
  29. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  30. package/fesm2022/ngneers-controls-directives.mjs +443 -0
  31. package/fesm2022/ngneers-controls-directives.mjs.map +1 -0
  32. package/fesm2022/ngneers-controls-drawer.mjs +232 -0
  33. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -0
  34. package/fesm2022/ngneers-controls-edit-inplace.mjs +120 -0
  35. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -0
  36. package/fesm2022/ngneers-controls-filter.mjs +516 -0
  37. package/fesm2022/ngneers-controls-filter.mjs.map +1 -0
  38. package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs +87 -0
  39. package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +1 -0
  40. package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs +87 -0
  41. package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +1 -0
  42. package/fesm2022/ngneers-controls-i18n.mjs +57 -0
  43. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -0
  44. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +4 -0
  45. package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +1 -0
  46. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +4 -0
  47. package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +1 -0
  48. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +4 -0
  49. package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +1 -0
  50. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +4 -0
  51. package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +1 -0
  52. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +4 -0
  53. package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +1 -0
  54. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +4 -0
  55. package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +1 -0
  56. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +4 -0
  57. package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +1 -0
  58. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +4 -0
  59. package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +1 -0
  60. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +4 -0
  61. package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +1 -0
  62. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +4 -0
  63. package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +1 -0
  64. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +4 -0
  65. package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +1 -0
  66. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +4 -0
  67. package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +1 -0
  68. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +4 -0
  69. package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +1 -0
  70. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +4 -0
  71. package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +1 -0
  72. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +4 -0
  73. package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +1 -0
  74. package/fesm2022/ngneers-controls-icon.mjs +60 -18
  75. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  76. package/fesm2022/ngneers-controls-inplace.mjs +107 -0
  77. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -0
  78. package/fesm2022/ngneers-controls-input-field.mjs +141 -0
  79. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -0
  80. package/fesm2022/ngneers-controls-input-mask.mjs +282 -0
  81. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -0
  82. package/fesm2022/ngneers-controls-input.mjs +69 -0
  83. package/fesm2022/ngneers-controls-input.mjs.map +1 -0
  84. package/fesm2022/ngneers-controls-item-view.mjs +441 -0
  85. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -0
  86. package/fesm2022/ngneers-controls-list-box.mjs +157 -53
  87. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  88. package/fesm2022/ngneers-controls-menu.mjs +332 -0
  89. package/fesm2022/ngneers-controls-menu.mjs.map +1 -0
  90. package/fesm2022/ngneers-controls-message.mjs +29 -0
  91. package/fesm2022/ngneers-controls-message.mjs.map +1 -0
  92. package/fesm2022/ngneers-controls-paginator.mjs +111 -0
  93. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -0
  94. package/fesm2022/ngneers-controls-popover.mjs +129 -40
  95. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  96. package/fesm2022/ngneers-controls-progress.mjs +82 -0
  97. package/fesm2022/ngneers-controls-progress.mjs.map +1 -0
  98. package/fesm2022/ngneers-controls-scroller.mjs +162 -78
  99. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  100. package/fesm2022/ngneers-controls-select-button.mjs +55 -0
  101. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -0
  102. package/fesm2022/ngneers-controls-select.mjs +313 -103
  103. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  104. package/fesm2022/ngneers-controls-slider.mjs +155 -0
  105. package/fesm2022/ngneers-controls-slider.mjs.map +1 -0
  106. package/fesm2022/ngneers-controls-spinner.mjs +169 -0
  107. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -0
  108. package/fesm2022/ngneers-controls-splitter.mjs +717 -0
  109. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -0
  110. package/fesm2022/ngneers-controls-switch.mjs +39 -0
  111. package/fesm2022/ngneers-controls-switch.mjs.map +1 -0
  112. package/fesm2022/ngneers-controls-table.mjs +379 -0
  113. package/fesm2022/ngneers-controls-table.mjs.map +1 -0
  114. package/fesm2022/ngneers-controls-tabs.mjs +287 -0
  115. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -0
  116. package/fesm2022/ngneers-controls-tag.mjs +29 -0
  117. package/fesm2022/ngneers-controls-tag.mjs.map +1 -0
  118. package/fesm2022/ngneers-controls-toast.mjs +184 -0
  119. package/fesm2022/ngneers-controls-toast.mjs.map +1 -0
  120. package/fesm2022/ngneers-controls-toggle-button.mjs +65 -0
  121. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -0
  122. package/fesm2022/ngneers-controls-tooltip.mjs +454 -0
  123. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -0
  124. package/fesm2022/ngneers-controls-utils-ng.mjs +227 -0
  125. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -0
  126. package/fesm2022/ngneers-controls-utils.mjs +217 -60
  127. package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
  128. package/fesm2022/ngneers-controls.mjs.map +1 -1
  129. package/package.json +167 -32
  130. package/types/ngneers-controls-accordion.d.ts +114 -0
  131. package/types/ngneers-controls-api-ng.d.ts +291 -0
  132. package/types/ngneers-controls-api.d.ts +99 -0
  133. package/types/ngneers-controls-avatar.d.ts +50 -0
  134. package/types/ngneers-controls-base.d.ts +166 -0
  135. package/types/ngneers-controls-breadcrumb.d.ts +86 -0
  136. package/types/ngneers-controls-button-group.d.ts +30 -0
  137. package/types/ngneers-controls-button.d.ts +34 -0
  138. package/types/ngneers-controls-calendar.d.ts +275 -0
  139. package/types/ngneers-controls-checkbox.d.ts +38 -0
  140. package/types/ngneers-controls-chip.d.ts +37 -0
  141. package/types/ngneers-controls-defer.d.ts +22 -0
  142. package/types/ngneers-controls-dialog.d.ts +218 -0
  143. package/types/ngneers-controls-directives.d.ts +146 -0
  144. package/types/ngneers-controls-drawer.d.ts +220 -0
  145. package/types/ngneers-controls-edit-inplace.d.ts +182 -0
  146. package/types/ngneers-controls-filter.d.ts +304 -0
  147. package/types/ngneers-controls-i18n.d.ts +108 -0
  148. package/types/ngneers-controls-icon.d.ts +74 -0
  149. package/types/ngneers-controls-inplace.d.ts +95 -0
  150. package/types/ngneers-controls-input-field.d.ts +159 -0
  151. package/types/ngneers-controls-input-mask.d.ts +83 -0
  152. package/types/ngneers-controls-input.d.ts +27 -0
  153. package/types/ngneers-controls-item-view.d.ts +211 -0
  154. package/types/ngneers-controls-list-box.d.ts +216 -0
  155. package/types/ngneers-controls-menu.d.ts +178 -0
  156. package/types/ngneers-controls-message.d.ts +19 -0
  157. package/types/ngneers-controls-paginator.d.ts +162 -0
  158. package/types/ngneers-controls-popover.d.ts +101 -0
  159. package/types/ngneers-controls-progress.d.ts +44 -0
  160. package/types/ngneers-controls-scroller.d.ts +137 -0
  161. package/types/ngneers-controls-select-button.d.ts +37 -0
  162. package/types/ngneers-controls-select.d.ts +314 -0
  163. package/types/ngneers-controls-slider.d.ts +53 -0
  164. package/types/ngneers-controls-spinner.d.ts +105 -0
  165. package/types/ngneers-controls-splitter.d.ts +391 -0
  166. package/types/ngneers-controls-switch.d.ts +18 -0
  167. package/types/ngneers-controls-table.d.ts +157 -0
  168. package/types/ngneers-controls-tabs.d.ts +106 -0
  169. package/types/ngneers-controls-tag.d.ts +19 -0
  170. package/types/ngneers-controls-toast.d.ts +70 -0
  171. package/types/ngneers-controls-toggle-button.d.ts +46 -0
  172. package/types/ngneers-controls-tooltip.d.ts +188 -0
  173. package/types/ngneers-controls-utils-ng.d.ts +57 -0
  174. package/types/ngneers-controls-utils.d.ts +130 -0
  175. package/api/index.d.ts +0 -134
  176. package/custom-types/index.d.ts +0 -7
  177. package/dialog/index.d.ts +0 -43
  178. package/fesm2022/ngneers-controls-custom-types.mjs +0 -4
  179. package/fesm2022/ngneers-controls-custom-types.mjs.map +0 -1
  180. package/fesm2022/ngneers-controls-form-field.mjs +0 -33
  181. package/fesm2022/ngneers-controls-form-field.mjs.map +0 -1
  182. package/fesm2022/ngneers-controls-lazy-cacher.mjs +0 -30
  183. package/fesm2022/ngneers-controls-lazy-cacher.mjs.map +0 -1
  184. package/fesm2022/ngneers-controls-text-field.mjs +0 -23
  185. package/fesm2022/ngneers-controls-text-field.mjs.map +0 -1
  186. package/form-field/index.d.ts +0 -19
  187. package/icon/index.d.ts +0 -30
  188. package/lazy-cacher/index.d.ts +0 -14
  189. package/list-box/index.d.ts +0 -58
  190. package/popover/index.d.ts +0 -41
  191. package/scroller/index.d.ts +0 -95
  192. package/select/index.d.ts +0 -86
  193. package/text-field/index.d.ts +0 -10
  194. package/utils/index.d.ts +0 -36
  195. /package/{index.d.ts → types/ngneers-controls.d.ts} +0 -0
@@ -0,0 +1,99 @@
1
+ import { AllKeysOfUnion } from '@ngneers/controls/utils';
2
+ import { IconType, CustomKind, CustomColor } from '@ngneers/controls-custom-types';
3
+ import { DefaultIcon } from '@ngneers/controls/icon';
4
+
5
+ type NgnFilterDataType = 'string' | 'number' | 'date' | 'dateTime' | 'boolean' | 'custom' | 'list';
6
+ type NgnFilterMatchMode = 'all' | 'any';
7
+ type NgnFilterOperatorId = 'isEqual' | 'isNotEqual' | 'contains' | 'startsWith' | 'endsWith' | 'in' | 'isEmpty' | 'isNotEmpty' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'isTrue' | 'isFalse' | 'custom';
8
+ type NgnFilterConditionConfig = {
9
+ operator: NgnFilterOperatorId;
10
+ rawValue: string | null;
11
+ };
12
+ type NgnFilterConfig = {
13
+ dataType: NgnFilterDataType;
14
+ matchMode: NgnFilterMatchMode;
15
+ conditions: readonly NgnFilterConditionConfig[];
16
+ };
17
+ type NgnFilterCondition = {
18
+ operator: NgnFilterOperatorId;
19
+ value: unknown;
20
+ };
21
+ type NgnFilterValueSelector<T> = (item: T) => unknown;
22
+ declare function parseFilterRawValue(raw: string | null, dataType: NgnFilterDataType): unknown;
23
+ declare function getActiveFilterConditions(config: NgnFilterConfig): readonly NgnFilterCondition[];
24
+ declare function executeFilter<T>(data: readonly T[], config: NgnFilterConfig, selector?: NgnFilterValueSelector<T>): readonly T[];
25
+ declare function executeMultiFilter<T extends object>(data: readonly T[], configs: {
26
+ [key in Extract<AllKeysOfUnion<T>, string>]?: NgnFilterConfig;
27
+ }): readonly T[];
28
+
29
+ type PredefinedStringMatchFunction = 'contains' | 'startsWith' | 'endsWith' | 'equals' | 'fuzzy';
30
+ declare function stringMatches(value: string, query: string, filterFn: PredefinedStringMatchFunction): boolean;
31
+
32
+ type PredefinedFilterFunctions = PredefinedStringMatchFunction;
33
+ type FilterConfigInternal<T extends object> = FilterConfig<T> & {
34
+ filterFieldsCallback: (item: T) => string | string[] | (() => string) | (() => string[]);
35
+ fieldItems?: keyof T;
36
+ };
37
+ type FilterConfig<T extends object> = {
38
+ splitWords?: boolean;
39
+ caseSensitive?: boolean;
40
+ filterFn?: FilterFn<T>;
41
+ };
42
+ type FilterFn<T extends object> = PredefinedFilterFunctions | ((value: string, item: T) => Promise<boolean> | boolean);
43
+ declare function filterOptions<T extends object>(options: readonly T[], filterText: string, filterOptions: FilterConfigInternal<T>): Promise<readonly T[]>;
44
+
45
+ type NgnActionItem = {
46
+ id: string;
47
+ label: string | (() => string);
48
+ icon?: IconType;
49
+ callback?: () => void;
50
+ disabled?: boolean;
51
+ testId?: string;
52
+ children?: NgnActionItem[];
53
+ route?: string | string[];
54
+ };
55
+ type NgnActionItemFlat<T> = Omit<T, 'children'>;
56
+
57
+ type NgnActionButtonConfig<T = unknown> = {
58
+ label: string | (() => string);
59
+ value: T;
60
+ action?: (event: PointerEvent) => void;
61
+ icon?: IconType;
62
+ defaultIcon?: DefaultIcon;
63
+ kind?: CustomKind<'button'>;
64
+ color?: CustomColor;
65
+ disabled?: boolean;
66
+ testId?: string;
67
+ };
68
+
69
+ type NgnItem<T = any, V = any> = {
70
+ data?: T;
71
+ label: string | (() => string);
72
+ icon?: IconType;
73
+ value: V;
74
+ testId?: string;
75
+ items?: NgnItem<T, V>[];
76
+ };
77
+ type NgnItemFields<T, K extends keyof T> = {
78
+ label: keyof T;
79
+ value: K;
80
+ translate?: keyof T;
81
+ testId?: keyof T;
82
+ children?: keyof T;
83
+ };
84
+ type NgnItemValue<Item extends NgnItem> = Item extends {
85
+ items: readonly (infer A)[];
86
+ } ? A extends NgnItem ? NgnItemValue<A> : never : Item extends {
87
+ value: infer T;
88
+ } ? T : never;
89
+ type NgnItemsValue<Items extends readonly NgnItem[]> = Items[number] extends infer A ? A extends NgnItem ? NgnItemValue<A> : never : never;
90
+ declare function transformToNgnItem<T extends object, K extends keyof T>(item: T, fields: NgnItemFields<T, K>): NgnItem<T, T[K]>;
91
+ declare function transformToNgnItemPrimitive<T extends string | number>(item: T): NgnItem<unknown, T>;
92
+ declare function transformToNgnItems<Items extends readonly object[], K extends keyof Items[number]>(items: Items, fields: NgnItemFields<Items[number], K>): {
93
+ [P in keyof Items]: NgnItem<Items[P], K>;
94
+ } & readonly NgnItem<Items[number], K>[];
95
+ declare function mapToItems(items: readonly NgnItem[]): readonly NgnItem[];
96
+ declare function flatItems(items: readonly NgnItem[]): NgnItem[];
97
+
98
+ export { executeFilter, executeMultiFilter, filterOptions, flatItems, getActiveFilterConditions, mapToItems, parseFilterRawValue, stringMatches, transformToNgnItem, transformToNgnItemPrimitive, transformToNgnItems };
99
+ export type { FilterConfig, FilterConfigInternal, FilterFn, NgnActionButtonConfig, NgnActionItem, NgnActionItemFlat, NgnFilterValueSelector, NgnItem, NgnItemFields, NgnItemValue, NgnItemsValue, PredefinedFilterFunctions, PredefinedStringMatchFunction };
@@ -0,0 +1,50 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
3
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
4
+ import { NgnBase } from '@ngneers/controls/base';
5
+
6
+ /**
7
+ * @category control
8
+ */
9
+ declare class NgnAvatar extends NgnBase<'avatar'> {
10
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"avatar", ["root", "image", "initials", `kind-${string}`], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>>;
11
+ /**
12
+ * The initials to display when no image is available.
13
+ * Max 4 characters.
14
+ */
15
+ readonly initials: _angular_core.InputSignal<string | undefined>;
16
+ /**
17
+ * The background color of the avatar, if the initials are used.
18
+ */
19
+ readonly bgColor: _angular_core.InputSignal<string | undefined>;
20
+ /**
21
+ * The image URL to display in the avatar.
22
+ */
23
+ readonly image: _angular_core.InputSignal<string | undefined>;
24
+ /**
25
+ * The alt text for the image.
26
+ */
27
+ readonly alt: _angular_core.InputSignal<string | undefined>;
28
+ /**
29
+ * The size of the avatar in pixels.
30
+ * @default 48
31
+ */
32
+ readonly size: _angular_core.InputSignal<number>;
33
+ protected readonly imageLoadFailed: _angular_core.WritableSignal<boolean>;
34
+ protected readonly initialsLimited: _angular_core.Signal<string | undefined>;
35
+ constructor();
36
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnAvatar, never>;
37
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnAvatar, "ngn-avatar", never, { "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "bgColor": { "alias": "bgColor"; "required": false; "isSignal": true; }; "image": { "alias": "image"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
38
+ }
39
+
40
+ /**
41
+ * @category control
42
+ */
43
+ declare class NgnAvatarGroup extends NgnBase<'avatarGroup'> {
44
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"avatar-group", ["root", `kind-${string}`], readonly [_ngneers_controls_themes.ControlTemplate<"avatar", ["root", "image", "initials", `kind-${string}`], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>>;
45
+ constructor();
46
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnAvatarGroup, never>;
47
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnAvatarGroup, "ngn-avatar-group", never, {}, {}, never, ["*"], true, never>;
48
+ }
49
+
50
+ export { NgnAvatar, NgnAvatarGroup };
@@ -0,0 +1,166 @@
1
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
2
+ import { ControlTemplate, ControlName as ControlName$1, ThemeTemplate as ThemeTemplate$1, ThemeClasses } from '@ngneers/controls-themes';
3
+ import * as _angular_core from '@angular/core';
4
+ import { ElementRef, Injector, InputSignal, Signal, InjectionToken, Type, Provider } from '@angular/core';
5
+ import { ControlTemplateInfo, AppliedThemeClassCfg } from '@ngneers/controls/api/ng';
6
+ import { CustomKind } from '@ngneers/controls-custom-types';
7
+ import { ControlName, ThemeTemplate } from '@ngneers/controls-themes/templates';
8
+ import { FormValueControl } from '@angular/forms/signals';
9
+
10
+ declare const NGN_CONTROL: InjectionToken<NgnBase<never>>;
11
+ type AnyNgnBase = NgnBaseSafe<any>;
12
+ type NgnBaseSafe<T extends ControlName | null> = Omit<NgnBase<T>, 'kind' | 'appliedKind' | 'pt'>;
13
+ type FullAnyNgnBase = Omit<NgnBase<any>, 'kind' | 'appliedKind' | 'pt'> & {
14
+ kind: InputSignal<CustomKind<any> | undefined>;
15
+ appliedKind: InputSignal<CustomKind<any> | undefined>;
16
+ pt: InputSignal<NgnPassthrough<any> | undefined>;
17
+ };
18
+ /**
19
+ * @internal
20
+ * Provides the control itself for dependency injection.
21
+ * @param control - The control class to provide.
22
+ * @returns A provider for the control itself.
23
+ */
24
+ declare function provideSelf(control: Type<unknown>): Provider;
25
+ declare abstract class NgnBase<T extends ControlName | null> {
26
+ protected abstract theme: ControlTemplateInfo<never> | null;
27
+ private readonly _defaultKind;
28
+ private readonly _defaultColor;
29
+ /**
30
+ * The element reference for the host element.
31
+ */
32
+ readonly element: ElementRef<HTMLElement>;
33
+ /**
34
+ * The injector for the component.
35
+ */
36
+ readonly injector: Injector;
37
+ /**
38
+ * If true, the control will not apply any theme styles.
39
+ * The base styles of the control will still be applied.
40
+ * @default false
41
+ */
42
+ readonly unstyled: _angular_core.InputSignalWithTransform<boolean, unknown>;
43
+ /**
44
+ * Some controls support custom kinds for styling purposes.
45
+ * The available kinds depend on the control and the theme used.
46
+ *
47
+ * TODO: link to custom types documentation
48
+ */
49
+ readonly kind: InputSignal<CustomKind<T> | undefined>;
50
+ readonly color: InputSignal<unknown>;
51
+ readonly appliedKind: Signal<CustomKind<T> | undefined>;
52
+ readonly appliedColor: Signal<unknown>;
53
+ /**
54
+ * Custom passthrough attributes to apply to the control's theme classes and its dependencies.
55
+ * This allows for fine-grained customization of attributes, styles and more.
56
+ */
57
+ readonly pt: InputSignal<(T extends string ? NgnPassthrough<T> : never) | undefined>;
58
+ private readonly _childNgnControls;
59
+ private readonly _afterLeaveCbs;
60
+ constructor();
61
+ /**
62
+ * Prepares the after leave hook to be called when the control is destroyed
63
+ * and its leave animation has finished.
64
+ */
65
+ private prepareAfterLeaveHook;
66
+ private afterLeaveInternal;
67
+ /**
68
+ * Lifecycle hook that is called after the control has left (been removed from) the DOM.
69
+ * Can be overridden by subclasses to perform custom actions after the leave animation.
70
+ */
71
+ protected afterLeave(): void;
72
+ /**
73
+ * @internal
74
+ */
75
+ protected injectThemeTemplate<External extends boolean = false>(template: External extends true ? ControlTemplate : T extends string ? ThemeTemplate[T] : never, hostClass?: null extends T ? never : AppliedThemeClassCfg<T & string>): ControlTemplateInfo<External extends true ? ControlTemplate : T extends string ? ThemeTemplate[T] : never>;
76
+ /**
77
+ * Toggles the kind and color theme classes based on the current values of the kind and color inputs.
78
+ */
79
+ private initializeKindAndColorClasses;
80
+ /**
81
+ * Initializes automatic theme class toggling for a given prefix based on the provided string signal.
82
+ *
83
+ * ⚠️ Caution: This method assumes that the control's theme supports classes with the given prefix.
84
+ *
85
+ * ⚠️ Caution: Make sure the signal provides only string or nullish values.
86
+ *
87
+ * @param prefix The prefix for the theme class (e.g., 'kind' or 'color').
88
+ * @param signal The signal that provides the current string value for the theme class.
89
+ */
90
+ protected initializeAutoThemeClasses(prefix: string, signal: Signal<unknown | undefined>): void;
91
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnBase<any>, never>;
92
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgnBase<any>, never, never, { "unstyled": { "alias": "unstyled"; "required": false; "isSignal": true; }; "kind": { "alias": "kind"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "pt": { "alias": "pt"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
93
+ }
94
+
95
+ declare class NgnPt<T extends NgnBaseSafe<Name>, Name extends ControlName$1> {
96
+ readonly ptInt: _angular_core.InputSignal<T>;
97
+ readonly ptClass: _angular_core.InputSignal<AppliedThemeClassCfg<T extends NgnBaseSafe<infer A extends keyof _ngneers_controls_themes.ThemeTemplate | null> ? A extends null ? never : A : never>>;
98
+ private readonly _engine;
99
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnPt<any, any>, never>;
100
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgnPt<any, any>, "[ptInt]", never, { "ptInt": { "alias": "ptInt"; "required": true; "isSignal": true; }; "ptClass": { "alias": "ptClass"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
101
+ }
102
+
103
+ declare class NgnPtEngine<T extends NgnBaseSafe<Name>, Name extends ControlName$1> {
104
+ private readonly pt;
105
+ private readonly ptClass;
106
+ private readonly _elementRef;
107
+ private readonly classes;
108
+ private readonly _appliedPts;
109
+ constructor(pt: Signal<T> | T, ptClass: Signal<AppliedThemeClassCfg<T extends NgnBaseSafe<infer A> ? (A extends null ? never : A) : never>> | AppliedThemeClassCfg<T extends NgnBaseSafe<infer A> ? (A extends null ? never : A) : never>);
110
+ private setNewPtValues;
111
+ private removePreviousPtValues;
112
+ }
113
+
114
+ type PassthroughValue = {
115
+ $attributes?: Record<string, string>;
116
+ $styles?: Partial<CSSStyleDeclaration>;
117
+ $classes?: string | string[];
118
+ };
119
+ type ThemeClassToPassthrough<T> = {
120
+ [K in keyof T]?: T[K] extends string ? PassthroughValue : K extends `$${string}` ? ThemeClassToPassthrough<T[K]> : ThemeClassToPassthrough<T[K]> & PassthroughValue;
121
+ };
122
+ type NgnPassthrough<T extends ControlName$1> = T extends null ? never : ThemeTemplate$1[T] extends ControlTemplate ? ThemeClassToPassthrough<ThemeClasses<ThemeTemplate$1[T]>> & PassthroughValue : never;
123
+ type AnyNgnPassthrough = NgnPassthrough<any>;
124
+
125
+ declare function setNgnInstance(element: HTMLElement, instance: AnyNgnBase): void;
126
+ declare function getNgnInstance(element: HTMLElement): FullAnyNgnBase;
127
+ declare function getNearestNgnInstance<T extends Type<Omit<AnyNgnBase, 'kind'>>>(element: HTMLElement, kind?: T): InstanceType<T> | null;
128
+ declare function getNearestNgnInstanceSig<T extends Type<AnyNgnBase>>(element: HTMLElement, kind?: T): Signal<InstanceType<T> | null>;
129
+
130
+ declare abstract class ValueControlBase<C extends ControlName, T> extends NgnBase<C> implements FormValueControl<T> {
131
+ /**
132
+ * The label for the control.
133
+ */
134
+ readonly label: _angular_core.InputSignal<string | null>;
135
+ /**
136
+ * Sets the `aria-labelledby` attribute on the control.
137
+ * @default null
138
+ */
139
+ readonly labelledBy: _angular_core.InputSignal<string | null>;
140
+ /**
141
+ * The ID for the control
142
+ * @default generateElementId()
143
+ */
144
+ readonly inputId: _angular_core.InputSignal<string>;
145
+ /**
146
+ * Explicitly apply invalid state styling
147
+ * @default false
148
+ */
149
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
150
+ /**
151
+ * The value of the control.
152
+ */
153
+ readonly value: _angular_core.ModelSignal<T>;
154
+ /**
155
+ * Set the disabled state of the control.
156
+ */
157
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
158
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
159
+ readonly touched: _angular_core.ModelSignal<boolean>;
160
+ readonly dirty: _angular_core.InputSignalWithTransform<boolean, unknown>;
161
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ValueControlBase<any, any>, never>;
162
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ValueControlBase<any, any>, never, never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelledBy": { "alias": "labelledBy"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
163
+ }
164
+
165
+ export { NGN_CONTROL, NgnBase, NgnPt, NgnPtEngine, ValueControlBase, getNearestNgnInstance, getNearestNgnInstanceSig, getNgnInstance, provideSelf, setNgnInstance };
166
+ export type { AnyNgnBase, AnyNgnPassthrough, FullAnyNgnBase, NgnBaseSafe, NgnPassthrough, PassthroughValue };
@@ -0,0 +1,86 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
4
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
5
+ import { maybeCallback } from '@ngneers/controls/utils';
6
+ import { NgnBase } from '@ngneers/controls/base';
7
+ import { NgnActionItemFlat, NgnActionItem } from '@ngneers/controls/api';
8
+ import { IconType } from '@ngneers/controls-custom-types';
9
+
10
+ type BreadcrumbItem = NgnActionItemFlat<NgnActionItem>;
11
+ type ItemTemplateType = {
12
+ $implicit: BreadcrumbItem;
13
+ };
14
+ type SeparatorTemplateType = {
15
+ $implicit: {
16
+ icon: IconType;
17
+ };
18
+ };
19
+ type OverflowTemplateType = {
20
+ $implicit: {
21
+ icon: IconType;
22
+ overflowingItems: BreadcrumbItem[];
23
+ };
24
+ };
25
+
26
+ declare abstract class BreadcrumbTemplates extends NgnBase<'breadcrumb'> {
27
+ private readonly _defaultItemTemplate;
28
+ private readonly _userItemTemplate;
29
+ /**
30
+ * Set a custom template for an item.
31
+ * Can also be set using an `<ng-template>` element with `#item` template reference variable.
32
+ */
33
+ readonly templateItem: _angular_core.InputSignal<TemplateRef<ItemTemplateType> | null>;
34
+ protected readonly itemTemplate: _angular_core.Signal<TemplateRef<ItemTemplateType>>;
35
+ private readonly _defaultSeparatorTemplate;
36
+ private readonly _userSeparatorTemplate;
37
+ /**
38
+ * Set a custom template for a separator.
39
+ * Can also be set using an `<ng-template>` element with `#separator` template reference variable.
40
+ */
41
+ readonly templateSeparator: _angular_core.InputSignal<TemplateRef<SeparatorTemplateType> | null>;
42
+ protected readonly separatorTemplate: _angular_core.Signal<TemplateRef<SeparatorTemplateType>>;
43
+ private readonly _defaultOverflowTemplate;
44
+ private readonly _userOverflowTemplate;
45
+ /**
46
+ * Set a custom template for the overflowing items.
47
+ * Can also be set using an `<ng-template>` element with `#overflow` template reference variable.
48
+ */
49
+ readonly templateOverflow: _angular_core.InputSignal<TemplateRef<OverflowTemplateType> | null>;
50
+ protected readonly overflowTemplate: _angular_core.Signal<TemplateRef<OverflowTemplateType>>;
51
+ /**
52
+ * Types for the breadcrumb templates.
53
+ */
54
+ readonly templateTypes: {
55
+ /**
56
+ * Type of the template variable for the item template.
57
+ */
58
+ item: ItemTemplateType;
59
+ separator: SeparatorTemplateType;
60
+ overflow: OverflowTemplateType;
61
+ } & {
62
+ $implicit: {
63
+ item: Partial<ItemTemplateType>;
64
+ separator: Partial<SeparatorTemplateType>;
65
+ overflow: Partial<OverflowTemplateType>;
66
+ };
67
+ };
68
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BreadcrumbTemplates, never>;
69
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BreadcrumbTemplates, never, never, { "templateItem": { "alias": "templateItem"; "required": false; "isSignal": true; }; "templateSeparator": { "alias": "templateSeparator"; "required": false; "isSignal": true; }; "templateOverflow": { "alias": "templateOverflow"; "required": false; "isSignal": true; }; }, {}, ["_userItemTemplate", "_userSeparatorTemplate", "_userOverflowTemplate"], never, true, never>;
70
+ }
71
+
72
+ /**
73
+ * @category control
74
+ */
75
+ declare class NgnBreadcrumb extends BreadcrumbTemplates {
76
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"breadcrumb", ["root", "item", "item-clickable", "separator", "overflow"], readonly [_ngneers_controls_themes.ControlTemplate<"item-view", ["root", "item", "item-overflowing", "more-items", "more-items-hidden", "more-items-default", "hidden-separator"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"menu", ["root", "submenu", "popover", "item", "item-opened", "icon-children", "separator"], readonly [_ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing", "anim-in", "anim-out"], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>]>]>>;
77
+ readonly items: _angular_core.InputSignal<BreadcrumbItem[]>;
78
+ readonly iconItemSeparator: _angular_core.InputSignal<string | undefined>;
79
+ readonly iconOverflow: _angular_core.InputSignal<string | undefined>;
80
+ protected readonly maybeCallback: typeof maybeCallback;
81
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnBreadcrumb, never>;
82
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnBreadcrumb, "ngn-breadcrumb", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "iconItemSeparator": { "alias": "iconItemSeparator"; "required": false; "isSignal": true; }; "iconOverflow": { "alias": "iconOverflow"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
83
+ }
84
+
85
+ export { NgnBreadcrumb };
86
+ export type { BreadcrumbItem, ItemTemplateType, OverflowTemplateType, SeparatorTemplateType };
@@ -0,0 +1,30 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
3
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
4
+ import { NgnBase } from '@ngneers/controls/base';
5
+
6
+ /**
7
+ * @category control
8
+ */
9
+ declare class NgnButtonGroup extends NgnBase<'buttonGroup'> {
10
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"button-group", ["root", "vertical", "horizontal"], readonly [_ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>, _ngneers_controls_themes.ControlTemplate<"toggle-button", ["root", "invalid", "button", "label", "active", "placeholder", "placeholder-active"], readonly []>]>>;
11
+ private readonly _contentRef;
12
+ private readonly _content;
13
+ private readonly _parentSize;
14
+ private readonly _contentSizes;
15
+ private readonly _contentWidth;
16
+ /**
17
+ * Defines the orientation of the button group.
18
+ * - 'auto' - The orientation is determined based on the available space.
19
+ * - 'horizontal' - The buttons are arranged horizontally. (Default for `auto` if enough space)
20
+ * - 'vertical' - The buttons are arranged vertically.
21
+ * @default 'auto'
22
+ */
23
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal" | "auto">;
24
+ protected readonly appliedOrientation: _angular_core.Signal<"vertical" | "horizontal" | "auto">;
25
+ constructor();
26
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnButtonGroup, never>;
27
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnButtonGroup, "ngn-button-group", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, ["_contentRef"], ["*"], true, never>;
28
+ }
29
+
30
+ export { NgnButtonGroup };
@@ -0,0 +1,34 @@
1
+ import * as i0 from '@angular/core';
2
+ import { NgnBase } from '@ngneers/controls/base';
3
+ import { maybeCallback } from '@ngneers/controls/utils';
4
+ import { NgnActionButtonConfig } from '@ngneers/controls/api';
5
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
6
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
7
+
8
+ declare class NgnActionButton<T> extends NgnBase<null> {
9
+ protected readonly theme: null;
10
+ readonly config: i0.InputSignal<NgnActionButtonConfig<T>>;
11
+ readonly clicked: i0.OutputEmitterRef<T>;
12
+ protected readonly maybeCallback: typeof maybeCallback;
13
+ protected click(event: PointerEvent): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgnActionButton<any>, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgnActionButton<any>, "ngn-action-button", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
16
+ }
17
+
18
+ /**
19
+ * @category control
20
+ */
21
+ declare class NgnButton extends NgnBase<'button'> {
22
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"button", ["root", "inline", "loading", `kind-${string}`, `color-${string}`], readonly _ngneers_controls_themes.ControlTemplate<string, string[], readonly any[]>[]>>;
23
+ /**
24
+ * Whether the button is displayed inline.
25
+ * This will make the button height fit the current line height.
26
+ */
27
+ readonly inline: i0.InputSignalWithTransform<boolean, unknown>;
28
+ constructor();
29
+ protected afterLeave(): void;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgnButton, never>;
31
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgnButton, "button[ngnButton], a[ngnButton]", never, { "inline": { "alias": "inline"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
32
+ }
33
+
34
+ export { NgnActionButton, NgnButton };