@ngneers/controls 0.0.1-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +234 -0
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -0
  3. package/fesm2022/ngneers-controls-api-ng.mjs +959 -0
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -0
  5. package/fesm2022/ngneers-controls-api-resize.mjs +712 -0
  6. package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
  7. package/fesm2022/ngneers-controls-api.mjs +347 -0
  8. package/fesm2022/ngneers-controls-api.mjs.map +1 -0
  9. package/fesm2022/ngneers-controls-avatar.mjs +77 -0
  10. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -0
  11. package/fesm2022/ngneers-controls-base.mjs +620 -0
  12. package/fesm2022/ngneers-controls-base.mjs.map +1 -0
  13. package/fesm2022/ngneers-controls-breadcrumb.mjs +100 -0
  14. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -0
  15. package/fesm2022/ngneers-controls-button-group.mjs +110 -0
  16. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -0
  17. package/fesm2022/ngneers-controls-button.mjs +83 -0
  18. package/fesm2022/ngneers-controls-button.mjs.map +1 -0
  19. package/fesm2022/ngneers-controls-calendar-time-CJT5AFlA.mjs +74 -0
  20. package/fesm2022/ngneers-controls-calendar-time-CJT5AFlA.mjs.map +1 -0
  21. package/fesm2022/ngneers-controls-calendar.mjs +801 -0
  22. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -0
  23. package/fesm2022/ngneers-controls-checkbox.mjs +63 -0
  24. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -0
  25. package/fesm2022/ngneers-controls-chip.mjs +55 -0
  26. package/fesm2022/ngneers-controls-chip.mjs.map +1 -0
  27. package/fesm2022/ngneers-controls-default-icons.mjs +82 -0
  28. package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
  29. package/fesm2022/ngneers-controls-defer.mjs +72 -0
  30. package/fesm2022/ngneers-controls-defer.mjs.map +1 -0
  31. package/fesm2022/ngneers-controls-dialog.mjs +407 -0
  32. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -0
  33. package/fesm2022/ngneers-controls-directives.mjs +498 -0
  34. package/fesm2022/ngneers-controls-directives.mjs.map +1 -0
  35. package/fesm2022/ngneers-controls-drawer.mjs +271 -0
  36. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -0
  37. package/fesm2022/ngneers-controls-edit-inplace.mjs +127 -0
  38. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -0
  39. package/fesm2022/ngneers-controls-errors.mjs +329 -0
  40. package/fesm2022/ngneers-controls-errors.mjs.map +1 -0
  41. package/fesm2022/ngneers-controls-filter.mjs +708 -0
  42. package/fesm2022/ngneers-controls-filter.mjs.map +1 -0
  43. package/fesm2022/ngneers-controls-hint.mjs +153 -0
  44. package/fesm2022/ngneers-controls-hint.mjs.map +1 -0
  45. package/fesm2022/ngneers-controls-i18n-translations-de.mjs +170 -0
  46. package/fesm2022/ngneers-controls-i18n-translations-de.mjs.map +1 -0
  47. package/fesm2022/ngneers-controls-i18n-translations-en.mjs +170 -0
  48. package/fesm2022/ngneers-controls-i18n-translations-en.mjs.map +1 -0
  49. package/fesm2022/ngneers-controls-i18n.mjs +57 -0
  50. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -0
  51. package/fesm2022/ngneers-controls-icon.mjs +195 -0
  52. package/fesm2022/ngneers-controls-icon.mjs.map +1 -0
  53. package/fesm2022/ngneers-controls-inplace.mjs +150 -0
  54. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -0
  55. package/fesm2022/ngneers-controls-input-field.mjs +165 -0
  56. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -0
  57. package/fesm2022/ngneers-controls-input.mjs +72 -0
  58. package/fesm2022/ngneers-controls-input.mjs.map +1 -0
  59. package/fesm2022/ngneers-controls-item-view.mjs +473 -0
  60. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -0
  61. package/fesm2022/ngneers-controls-list-box.mjs +281 -0
  62. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -0
  63. package/fesm2022/ngneers-controls-mask-input.mjs +888 -0
  64. package/fesm2022/ngneers-controls-mask-input.mjs.map +1 -0
  65. package/fesm2022/ngneers-controls-menu.mjs +371 -0
  66. package/fesm2022/ngneers-controls-menu.mjs.map +1 -0
  67. package/fesm2022/ngneers-controls-message.mjs +30 -0
  68. package/fesm2022/ngneers-controls-message.mjs.map +1 -0
  69. package/fesm2022/ngneers-controls-number-input.mjs +366 -0
  70. package/fesm2022/ngneers-controls-number-input.mjs.map +1 -0
  71. package/fesm2022/ngneers-controls-paginator.mjs +129 -0
  72. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -0
  73. package/fesm2022/ngneers-controls-popover.mjs +215 -0
  74. package/fesm2022/ngneers-controls-popover.mjs.map +1 -0
  75. package/fesm2022/ngneers-controls-progress.mjs +98 -0
  76. package/fesm2022/ngneers-controls-progress.mjs.map +1 -0
  77. package/fesm2022/ngneers-controls-radio.mjs +152 -0
  78. package/fesm2022/ngneers-controls-radio.mjs.map +1 -0
  79. package/fesm2022/ngneers-controls-roving-focus.mjs +323 -0
  80. package/fesm2022/ngneers-controls-roving-focus.mjs.map +1 -0
  81. package/fesm2022/ngneers-controls-scroll-shadow.mjs +65 -0
  82. package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
  83. package/fesm2022/ngneers-controls-scroller.mjs +308 -0
  84. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -0
  85. package/fesm2022/ngneers-controls-select-button.mjs +58 -0
  86. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -0
  87. package/fesm2022/ngneers-controls-select.mjs +417 -0
  88. package/fesm2022/ngneers-controls-select.mjs.map +1 -0
  89. package/fesm2022/ngneers-controls-slider.mjs +167 -0
  90. package/fesm2022/ngneers-controls-slider.mjs.map +1 -0
  91. package/fesm2022/ngneers-controls-snackbar.mjs +414 -0
  92. package/fesm2022/ngneers-controls-snackbar.mjs.map +1 -0
  93. package/fesm2022/ngneers-controls-spin-buttons.mjs +126 -0
  94. package/fesm2022/ngneers-controls-spin-buttons.mjs.map +1 -0
  95. package/fesm2022/ngneers-controls-spinner.mjs +184 -0
  96. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -0
  97. package/fesm2022/ngneers-controls-splitter.mjs +604 -0
  98. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -0
  99. package/fesm2022/ngneers-controls-state.mjs +185 -0
  100. package/fesm2022/ngneers-controls-state.mjs.map +1 -0
  101. package/fesm2022/ngneers-controls-switch.mjs +39 -0
  102. package/fesm2022/ngneers-controls-switch.mjs.map +1 -0
  103. package/fesm2022/ngneers-controls-table.mjs +2634 -0
  104. package/fesm2022/ngneers-controls-table.mjs.map +1 -0
  105. package/fesm2022/ngneers-controls-tabs.mjs +336 -0
  106. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -0
  107. package/fesm2022/ngneers-controls-tag.mjs +30 -0
  108. package/fesm2022/ngneers-controls-tag.mjs.map +1 -0
  109. package/fesm2022/ngneers-controls-toast.mjs +350 -0
  110. package/fesm2022/ngneers-controls-toast.mjs.map +1 -0
  111. package/fesm2022/ngneers-controls-toggle-button.mjs +70 -0
  112. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -0
  113. package/fesm2022/ngneers-controls-tooltip.mjs +506 -0
  114. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -0
  115. package/fesm2022/ngneers-controls-tree.mjs +599 -0
  116. package/fesm2022/ngneers-controls-tree.mjs.map +1 -0
  117. package/fesm2022/ngneers-controls-upload.mjs +377 -0
  118. package/fesm2022/ngneers-controls-upload.mjs.map +1 -0
  119. package/fesm2022/ngneers-controls-utils-ng.mjs +411 -0
  120. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -0
  121. package/fesm2022/ngneers-controls-utils.mjs +261 -0
  122. package/fesm2022/ngneers-controls-utils.mjs.map +1 -0
  123. package/fesm2022/ngneers-controls.mjs +6 -0
  124. package/fesm2022/ngneers-controls.mjs.map +1 -0
  125. package/package.json +302 -0
  126. package/types/ngneers-controls-accordion.d.ts +139 -0
  127. package/types/ngneers-controls-api-ng.d.ts +364 -0
  128. package/types/ngneers-controls-api-resize.d.ts +318 -0
  129. package/types/ngneers-controls-api.d.ts +145 -0
  130. package/types/ngneers-controls-avatar.d.ts +54 -0
  131. package/types/ngneers-controls-base.d.ts +277 -0
  132. package/types/ngneers-controls-breadcrumb.d.ts +272 -0
  133. package/types/ngneers-controls-button-group.d.ts +46 -0
  134. package/types/ngneers-controls-button.d.ts +48 -0
  135. package/types/ngneers-controls-calendar.d.ts +466 -0
  136. package/types/ngneers-controls-checkbox.d.ts +40 -0
  137. package/types/ngneers-controls-chip.d.ts +202 -0
  138. package/types/ngneers-controls-default-icons.d.ts +5 -0
  139. package/types/ngneers-controls-defer.d.ts +48 -0
  140. package/types/ngneers-controls-dialog.d.ts +399 -0
  141. package/types/ngneers-controls-directives.d.ts +171 -0
  142. package/types/ngneers-controls-drawer.d.ts +308 -0
  143. package/types/ngneers-controls-edit-inplace.d.ts +263 -0
  144. package/types/ngneers-controls-errors.d.ts +155 -0
  145. package/types/ngneers-controls-filter.d.ts +609 -0
  146. package/types/ngneers-controls-hint.d.ts +88 -0
  147. package/types/ngneers-controls-i18n-translations-de.d.ts +164 -0
  148. package/types/ngneers-controls-i18n-translations-en.d.ts +164 -0
  149. package/types/ngneers-controls-i18n.d.ts +186 -0
  150. package/types/ngneers-controls-icon.d.ts +68 -0
  151. package/types/ngneers-controls-inplace.d.ts +98 -0
  152. package/types/ngneers-controls-input-field.d.ts +248 -0
  153. package/types/ngneers-controls-input.d.ts +30 -0
  154. package/types/ngneers-controls-item-view.d.ts +215 -0
  155. package/types/ngneers-controls-list-box.d.ts +334 -0
  156. package/types/ngneers-controls-mask-input.d.ts +434 -0
  157. package/types/ngneers-controls-menu.d.ts +192 -0
  158. package/types/ngneers-controls-message.d.ts +21 -0
  159. package/types/ngneers-controls-number-input.d.ts +146 -0
  160. package/types/ngneers-controls-paginator.d.ts +255 -0
  161. package/types/ngneers-controls-popover.d.ts +116 -0
  162. package/types/ngneers-controls-progress.d.ts +49 -0
  163. package/types/ngneers-controls-radio.d.ts +91 -0
  164. package/types/ngneers-controls-roving-focus.d.ts +107 -0
  165. package/types/ngneers-controls-scroll-shadow.d.ts +25 -0
  166. package/types/ngneers-controls-scroller.d.ts +151 -0
  167. package/types/ngneers-controls-select-button.d.ts +51 -0
  168. package/types/ngneers-controls-select.d.ts +409 -0
  169. package/types/ngneers-controls-slider.d.ts +57 -0
  170. package/types/ngneers-controls-snackbar.d.ts +330 -0
  171. package/types/ngneers-controls-spin-buttons.d.ts +69 -0
  172. package/types/ngneers-controls-spinner.d.ts +117 -0
  173. package/types/ngneers-controls-splitter.d.ts +465 -0
  174. package/types/ngneers-controls-state.d.ts +102 -0
  175. package/types/ngneers-controls-switch.d.ts +18 -0
  176. package/types/ngneers-controls-table.d.ts +3127 -0
  177. package/types/ngneers-controls-tabs.d.ts +118 -0
  178. package/types/ngneers-controls-tag.d.ts +21 -0
  179. package/types/ngneers-controls-toast.d.ts +298 -0
  180. package/types/ngneers-controls-toggle-button.d.ts +48 -0
  181. package/types/ngneers-controls-tooltip.d.ts +189 -0
  182. package/types/ngneers-controls-tree.d.ts +409 -0
  183. package/types/ngneers-controls-upload.d.ts +347 -0
  184. package/types/ngneers-controls-utils-ng.d.ts +129 -0
  185. package/types/ngneers-controls-utils.d.ts +130 -0
  186. package/types/ngneers-controls.d.ts +2 -0
@@ -0,0 +1,434 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import * as _ngneers_signal_translate from '@ngneers/signal-translate';
3
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
4
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
5
+ import { ValueControlBase } from '@ngneers/controls/base';
6
+ import { NgnRovingGroup } from '@ngneers/controls/roving-focus';
7
+
8
+ type NumberSegment = {
9
+ kind: 'number';
10
+ segment: string;
11
+ min: number;
12
+ max: number;
13
+ /** Omit for a variable-length (non-padded) segment; provide for a fixed, zero-padded width. */
14
+ length?: number;
15
+ placeholder?: string;
16
+ };
17
+ type EnumSegment = {
18
+ kind: 'enum';
19
+ segment: string;
20
+ values: string[];
21
+ placeholder?: string;
22
+ };
23
+ type MaskSegment = NumberSegment | EnumSegment;
24
+ /** A mask config is an ordered list of segments and literal separator strings. */
25
+ type MaskInputCfg = (MaskSegment | string)[];
26
+ type Separator = {
27
+ kind: 'sep';
28
+ text: string;
29
+ };
30
+ type NumberField = {
31
+ kind: 'number';
32
+ name: string;
33
+ min: number;
34
+ max: number;
35
+ /** Maximum digit count. */
36
+ maxLen: number;
37
+ /** When true, render to maxLen with leading zeros once the field is no longer the active one. */
38
+ pad: boolean;
39
+ placeholder: string;
40
+ };
41
+ type EnumField = {
42
+ kind: 'enum';
43
+ name: string;
44
+ values: string[];
45
+ /** Maximum value length. */
46
+ maxLen: number;
47
+ placeholder: string;
48
+ };
49
+ type Field = NumberField | EnumField;
50
+ type Part = Separator | Field;
51
+
52
+ type RenderToken = {
53
+ kind: 'sep';
54
+ text: string;
55
+ } | {
56
+ kind: 'section';
57
+ ord: number;
58
+ text: string;
59
+ placeholder: boolean;
60
+ };
61
+
62
+ /**
63
+ * @category control
64
+ */
65
+ declare class NgnMaskInput extends ValueControlBase<'maskInput', string | null> {
66
+ readonly isFieldControl = true;
67
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"mask-input", ["root", "section", "section-active", "section-placeholder", "separator", "proxy", "sr-only"], readonly []>>;
68
+ protected readonly i18n: _ngneers_signal_translate.TranslationsSignal<{
69
+ calendar: {
70
+ today: string;
71
+ input: string;
72
+ selectYear: string;
73
+ selectMonth: string;
74
+ previousMonth: string;
75
+ nextMonth: string;
76
+ weekdays: {
77
+ monday: string;
78
+ tuesday: string;
79
+ wednesday: string;
80
+ thursday: string;
81
+ friday: string;
82
+ saturday: string;
83
+ sunday: string;
84
+ };
85
+ weekdaysShort: {
86
+ monday: string;
87
+ tuesday: string;
88
+ wednesday: string;
89
+ thursday: string;
90
+ friday: string;
91
+ saturday: string;
92
+ sunday: string;
93
+ };
94
+ months: {
95
+ january: string;
96
+ february: string;
97
+ march: string;
98
+ april: string;
99
+ may: string;
100
+ june: string;
101
+ july: string;
102
+ august: string;
103
+ september: string;
104
+ october: string;
105
+ november: string;
106
+ december: string;
107
+ };
108
+ };
109
+ editInplace: {
110
+ placeholder: string;
111
+ confirm: string;
112
+ };
113
+ filter: {
114
+ noFilter: string;
115
+ addCondition: string;
116
+ removeCondition: string;
117
+ operator: string;
118
+ value: string;
119
+ clear: string;
120
+ apply: string;
121
+ cancel: string;
122
+ matchModeLabel: string;
123
+ match: {
124
+ all: string;
125
+ any: string;
126
+ and: string;
127
+ or: string;
128
+ };
129
+ selected: string;
130
+ conditions: string;
131
+ operators: {
132
+ isEqual: string;
133
+ isNotEqual: string;
134
+ contains: string;
135
+ startsWith: string;
136
+ endsWith: string;
137
+ in: string;
138
+ isEmpty: string;
139
+ isNotEmpty: string;
140
+ greaterThan: string;
141
+ greaterThanOrEqual: string;
142
+ lessThan: string;
143
+ lessThanOrEqual: string;
144
+ after: string;
145
+ onOrAfter: string;
146
+ before: string;
147
+ onOrBefore: string;
148
+ isTrue: string;
149
+ isFalse: string;
150
+ custom: string;
151
+ };
152
+ };
153
+ splitter: {
154
+ handleLabel: string;
155
+ };
156
+ inputField: {
157
+ clearInput: string;
158
+ };
159
+ maskInput: {
160
+ roleDescription: string;
161
+ segmentRange: string;
162
+ optionSeparator: string;
163
+ };
164
+ drawer: {
165
+ close: string;
166
+ };
167
+ dialog: {
168
+ close: string;
169
+ };
170
+ chip: {
171
+ close: string;
172
+ };
173
+ breadcrumb: {
174
+ overflow: string;
175
+ };
176
+ toast: {
177
+ close: string;
178
+ region: string;
179
+ };
180
+ snackbar: {
181
+ close: string;
182
+ region: string;
183
+ severity: {
184
+ error: string;
185
+ warning: string;
186
+ success: string;
187
+ info: string;
188
+ };
189
+ };
190
+ upload: {
191
+ upload: string;
192
+ uploadNamed: string;
193
+ retryNamed: string;
194
+ cancelNamed: string;
195
+ removeNamed: string;
196
+ progressNamed: string;
197
+ };
198
+ select: {
199
+ filterOptions: string;
200
+ };
201
+ paginator: {
202
+ previousPage: string;
203
+ nextPage: string;
204
+ };
205
+ listBox: {
206
+ noItemsFound: string;
207
+ };
208
+ tree: {
209
+ noItemsFound: string;
210
+ };
211
+ table: {
212
+ selectAllRows: string;
213
+ selectRow: string;
214
+ sortedBy: string;
215
+ sortAscending: string;
216
+ sortDescending: string;
217
+ sortCleared: string;
218
+ selectedCount: string;
219
+ page: string;
220
+ resultCount: string;
221
+ };
222
+ state: {
223
+ loading: string;
224
+ success: string;
225
+ warning: string;
226
+ error: string;
227
+ cancelled: string;
228
+ };
229
+ }, "_">;
230
+ /**
231
+ * The mask to apply to the input. Can be a predefined mask key or a custom mask configuration.
232
+ */
233
+ readonly mask: _angular_core.InputSignal<string | MaskInputCfg | null>;
234
+ private readonly _parts;
235
+ private readonly _fields;
236
+ /**
237
+ * Structural signature of the resolved mask — field kinds/names/widths and
238
+ * separators, but deliberately NOT numeric min/max. The section values are
239
+ * reset only when this changes, so a consumer narrowing a field's range (e.g.
240
+ * a calendar shrinking the day field's max to the current month's length) does
241
+ * not wipe what the user has already typed.
242
+ */
243
+ private readonly _structureSig;
244
+ /** Source of truth: one raw string per field ordinal. */
245
+ protected readonly values: _angular_core.WritableSignal<string[]>;
246
+ /** Whether the proxy input currently holds focus. The active-section
247
+ * highlight and "actively edited" treatment only apply while focused. */
248
+ protected readonly focused: _angular_core.WritableSignal<boolean>;
249
+ /** RenderTokens for template `@for` loop. While unfocused there is no active
250
+ * section, so padded fields render in their resting (padded) form. */
251
+ protected readonly tokens: _angular_core.Signal<RenderToken[]>;
252
+ /** The roving group on the proxy input element. */
253
+ protected readonly rovingGroup: _angular_core.Signal<NgnRovingGroup>;
254
+ /** The proxy input element reference. */
255
+ private readonly _proxyRef;
256
+ /** Active field ordinal (identity: item index === field ordinal). */
257
+ protected readonly activeOrd: _angular_core.Signal<number>;
258
+ protected readonly proxyInputMode: _angular_core.Signal<"text" | "numeric">;
259
+ protected readonly liveAnnouncement: _angular_core.WritableSignal<string>;
260
+ protected sectionValueNow(ord: number): number | null;
261
+ protected sectionMin(ord: number): number | null;
262
+ protected sectionMax(ord: number): number | null;
263
+ /** Accessible name for a section's `role="spinbutton"` — the field's name. */
264
+ protected sectionName(ord: number): string;
265
+ protected sectionValueText(ord: number): string;
266
+ /**
267
+ * Whether every section holds a finished value — i.e. the mask is fully
268
+ * filled and a serialized output value has been emitted.
269
+ */
270
+ readonly complete: _angular_core.Signal<boolean>;
271
+ /** Whether no section holds any value (the whole field is blank). Lets a host
272
+ * (e.g. calendar) distinguish a fully-cleared field from mid-typing, both of
273
+ * which emit a `null` value. */
274
+ readonly empty: _angular_core.Signal<boolean>;
275
+ /**
276
+ * Returns the resolved CSS class string for `section-active` from the theme,
277
+ * used to highlight the currently active section span in the template.
278
+ */
279
+ protected readonly activeSectionClass: _angular_core.Signal<string>;
280
+ protected readonly segmentDescriptions: _angular_core.Signal<{
281
+ id: string;
282
+ text: string;
283
+ }[]>;
284
+ /** Returns the description span id for a given field ordinal, or null if none. */
285
+ protected sectionDescId(ord: number): string | null;
286
+ constructor();
287
+ /**
288
+ * Places focus on the proxy input and selects the section nearest the
289
+ * pointer's horizontal position. Invoked both by the control's own
290
+ * `pointerdown` and by a surrounding `ngn-input-field` when its padding is
291
+ * clicked (so a click "above" a section selects that section). Returns `true`
292
+ * to signal the field it handled focus.
293
+ */
294
+ focusFromPointer(event: MouseEvent): boolean;
295
+ /** Clears every section (invoked by a surrounding field's clear button). */
296
+ clearValue(): boolean;
297
+ /** Field ordinal of the section nearest `clientX`, or -1 when there are none. */
298
+ private _sectionIndexAt;
299
+ private _onBeforeInput;
300
+ private _onKeyDown;
301
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnMaskInput, never>;
302
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnMaskInput, "ngn-mask-input", never, { "mask": { "alias": "mask"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
303
+ }
304
+
305
+ declare const MASKS: {
306
+ readonly phoneNumber: ["(", {
307
+ readonly kind: "number";
308
+ readonly segment: "areaCode";
309
+ readonly min: 0;
310
+ readonly max: 999;
311
+ readonly length: 3;
312
+ readonly placeholder: "000";
313
+ }, ")", " ", {
314
+ readonly kind: "number";
315
+ readonly segment: "exchange";
316
+ readonly min: 0;
317
+ readonly max: 999;
318
+ readonly length: 3;
319
+ readonly placeholder: "000";
320
+ }, "-", {
321
+ readonly kind: "number";
322
+ readonly segment: "subscriber";
323
+ readonly min: 0;
324
+ readonly max: 9999;
325
+ readonly length: 4;
326
+ readonly placeholder: "0000";
327
+ }];
328
+ readonly creditCard: [{
329
+ readonly kind: "number";
330
+ readonly segment: "cardPart1";
331
+ readonly min: 0;
332
+ readonly max: 9999;
333
+ readonly length: 4;
334
+ readonly placeholder: "0000";
335
+ }, " ", {
336
+ readonly kind: "number";
337
+ readonly segment: "cardPart2";
338
+ readonly min: 0;
339
+ readonly max: 9999;
340
+ readonly length: 4;
341
+ readonly placeholder: "0000";
342
+ }, " ", {
343
+ readonly kind: "number";
344
+ readonly segment: "cardPart3";
345
+ readonly min: 0;
346
+ readonly max: 9999;
347
+ readonly length: 4;
348
+ readonly placeholder: "0000";
349
+ }, " ", {
350
+ readonly kind: "number";
351
+ readonly segment: "cardPart4";
352
+ readonly min: 0;
353
+ readonly max: 9999;
354
+ readonly length: 4;
355
+ readonly placeholder: "0000";
356
+ }];
357
+ readonly ssn: [{
358
+ readonly kind: "number";
359
+ readonly segment: "areaNumber";
360
+ readonly min: 0;
361
+ readonly max: 999;
362
+ readonly length: 3;
363
+ readonly placeholder: "000";
364
+ }, "-", {
365
+ readonly kind: "number";
366
+ readonly segment: "groupNumber";
367
+ readonly min: 0;
368
+ readonly max: 99;
369
+ readonly length: 2;
370
+ readonly placeholder: "00";
371
+ }, "-", {
372
+ readonly kind: "number";
373
+ readonly segment: "serialNumber";
374
+ readonly min: 0;
375
+ readonly max: 9999;
376
+ readonly length: 4;
377
+ readonly placeholder: "0000";
378
+ }];
379
+ readonly zipCode: [{
380
+ readonly kind: "number";
381
+ readonly segment: "zipBase";
382
+ readonly min: 0;
383
+ readonly max: 99999;
384
+ readonly length: 5;
385
+ readonly placeholder: "00000";
386
+ }, "-", {
387
+ readonly kind: "number";
388
+ readonly segment: "zipPlus4";
389
+ readonly min: 0;
390
+ readonly max: 9999;
391
+ readonly length: 4;
392
+ readonly placeholder: "0000";
393
+ }];
394
+ readonly currency: ["$", {
395
+ readonly kind: "number";
396
+ readonly segment: "dollars";
397
+ readonly min: 0;
398
+ readonly max: 999999999;
399
+ readonly length: 9;
400
+ readonly placeholder: "000000000";
401
+ }, ".", {
402
+ readonly kind: "number";
403
+ readonly segment: "cents";
404
+ readonly min: 0;
405
+ readonly max: 99;
406
+ readonly length: 2;
407
+ readonly placeholder: "00";
408
+ }];
409
+ readonly percentage: [{
410
+ readonly kind: "number";
411
+ readonly segment: "percent";
412
+ readonly min: 0;
413
+ readonly max: 100;
414
+ readonly length: 3;
415
+ readonly placeholder: "000";
416
+ }, "%"];
417
+ };
418
+
419
+ /**
420
+ * Returns the input mask configuration for a given date or time mask.
421
+ * @param mask The mask string representing the date or time format.
422
+ * For example, 'MM/dd/yyyy' for date, 'HH:mm:ss' for time, 'hh:mm:ss a' for 12-hour time with period.
423
+ * @returns The input mask configuration that can be used with the input mask component.
424
+ */
425
+ declare function getDateOrTimeMask(mask: string): MaskInputCfg;
426
+ declare const DATE_TIME_MASKS: {
427
+ date: MaskInputCfg;
428
+ time: MaskInputCfg;
429
+ timeShort: MaskInputCfg;
430
+ time12: MaskInputCfg;
431
+ };
432
+
433
+ export { DATE_TIME_MASKS, MASKS, NgnMaskInput, getDateOrTimeMask };
434
+ export type { EnumField, EnumSegment, Field, MaskInputCfg, MaskSegment, NumberField, NumberSegment, Part, Separator };
@@ -0,0 +1,192 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnDestroy, TemplateRef, ViewContainerRef, ComponentRef } from '@angular/core';
3
+ import { NgnActionItem } from '@ngneers/controls/api';
4
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
5
+ import * as _iconify_types from '@iconify/types';
6
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
7
+ import { Openable, Anchor } from '@ngneers/controls/api/ng';
8
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
9
+ import { maybeCallback } from '@ngneers/controls/utils';
10
+ import { NgnBase } from '@ngneers/controls/base';
11
+ import { Placement } from '@floating-ui/dom';
12
+
13
+ type MenuItem = MenuItemDefault | MenuItemSeparator;
14
+ type MenuItemDefault = NgnActionItem;
15
+ type MenuItemSeparator = {
16
+ separator: true;
17
+ };
18
+
19
+ declare class NgnContextMenu implements OnDestroy {
20
+ private readonly _elementRef;
21
+ private readonly _vcr;
22
+ private _menu?;
23
+ /**
24
+ * The menu items to display in the context menu opened on right-click.
25
+ */
26
+ readonly ngnContextMenu: _angular_core.InputSignal<MenuItem[]>;
27
+ constructor();
28
+ ngOnDestroy(): void;
29
+ private handleClick;
30
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnContextMenu, never>;
31
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgnContextMenu, "[ngnContextMenu]", never, { "ngnContextMenu": { "alias": "ngnContextMenu"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
32
+ }
33
+
34
+ declare abstract class MenuTemplates extends NgnBase<'menu'> {
35
+ private readonly _defaultItemTemplate;
36
+ private readonly _userItemTemplate;
37
+ /**
38
+ * Set a custom template for an item of the menu.
39
+ * Can also be set using an `<ng-template>` element with `#item` template reference variable.
40
+ */
41
+ readonly templateItem: _angular_core.InputSignal<TemplateRef<{
42
+ $implicit: MenuItemDefault;
43
+ }> | null>;
44
+ protected readonly itemTemplate: _angular_core.Signal<TemplateRef<{
45
+ $implicit: MenuItemDefault;
46
+ }>>;
47
+ private readonly _defaultGroupTemplate;
48
+ private readonly _userGroupTemplate;
49
+ /**
50
+ * Set a custom template for a group of items in the menu.
51
+ * Can also be set using an `<ng-template>` element with `#group` template reference variable.
52
+ */
53
+ readonly templateGroup: _angular_core.InputSignal<TemplateRef<unknown> | null>;
54
+ protected readonly groupTemplate: _angular_core.Signal<TemplateRef<unknown>>;
55
+ /**
56
+ * Types for the dialog templates.
57
+ */
58
+ readonly templateTypes: {
59
+ item: {
60
+ $implicit: MenuItemDefault;
61
+ };
62
+ } & {
63
+ $implicit: {
64
+ item: Partial<{
65
+ $implicit: MenuItemDefault;
66
+ }>;
67
+ };
68
+ };
69
+ protected readonly internalTemplateTypes: {
70
+ regularItem: {
71
+ $implicit: MenuItemDefault;
72
+ index: number;
73
+ };
74
+ } & {
75
+ $implicit: {
76
+ regularItem: Partial<{
77
+ $implicit: MenuItemDefault;
78
+ index: number;
79
+ }>;
80
+ };
81
+ };
82
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuTemplates, never>;
83
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MenuTemplates, never, never, { "templateItem": { "alias": "templateItem"; "required": false; "isSignal": true; }; "templateGroup": { "alias": "templateGroup"; "required": false; "isSignal": true; }; }, {}, ["_userItemTemplate", "_userGroupTemplate"], never, true, never>;
84
+ }
85
+
86
+ /**
87
+ * @category control
88
+ */
89
+ declare class NgnMenu extends MenuTemplates implements Openable {
90
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"menu", ["root", "submenu", "item", "item-opened", "icon-children", "separator"], readonly [{
91
+ readonly class: "popover";
92
+ readonly template: _ngneers_controls_themes.ControlTemplate<"popover", ["root", "content", "content-closing"], readonly []>;
93
+ }]>>;
94
+ protected readonly elementId: _angular_core.InputSignal<string>;
95
+ /**
96
+ * The element to which the menu is anchored. Required if {@link popover} is `true`.
97
+ */
98
+ readonly anchor: _angular_core.InputSignal<Anchor | undefined>;
99
+ /**
100
+ * The menu items to display.
101
+ */
102
+ readonly items: _angular_core.InputSignal<MenuItem[]>;
103
+ /**
104
+ * Whether to automatically set ARIA attributes on the anchor element.
105
+ * @default true if anchor is an HTMLButtonElement, false otherwise.
106
+ */
107
+ readonly autoAnchorAria: _angular_core.InputSignal<boolean | undefined>;
108
+ /**
109
+ * Whether the menu is a popover. Requires {@link anchor} to be set.
110
+ * @default false
111
+ */
112
+ readonly popover: _angular_core.InputSignalWithTransform<boolean, unknown>;
113
+ /**
114
+ * The placement of the menu relative to the anchor element. Only used when {@link popover} is `true`.
115
+ * @default bottom-start
116
+ */
117
+ readonly placement: _angular_core.InputSignal<Placement>;
118
+ /**
119
+ * Icon type for children indicator (submenu indicator). If not set, a default icon will be used.
120
+ */
121
+ readonly iconSubmenuIndicator: _angular_core.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
122
+ /**
123
+ * Whether this menu is a submenu. Used internally.
124
+ * @internal
125
+ */
126
+ readonly isSubMenu: _angular_core.InputSignalWithTransform<boolean, unknown>;
127
+ /**
128
+ * Whether to open submenus on hover. Defaults to true in popover mode.
129
+ * @default popover()
130
+ */
131
+ readonly openSubmenuOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
132
+ /**
133
+ * Emitted when the menu is fully closed.
134
+ */
135
+ readonly closed: _angular_core.OutputEmitterRef<void>;
136
+ /**
137
+ * Emitted when the menu is about to close.
138
+ */
139
+ readonly closing: _angular_core.OutputEmitterRef<void>;
140
+ /**
141
+ * Emitted when all menus should be closed (including parent menus). Used internally.
142
+ * @internal
143
+ */
144
+ readonly closeAll: _angular_core.OutputEmitterRef<void>;
145
+ /**
146
+ * Shows or hides the menu.
147
+ *
148
+ * You probably want to react to openChange events from outside to update your variable accordingly.
149
+ */
150
+ readonly open: _angular_core.ModelSignal<boolean>;
151
+ protected readonly maybeCallback: typeof maybeCallback;
152
+ private readonly _isTouchDevice;
153
+ private readonly _popover;
154
+ private readonly _menuItems;
155
+ private readonly _childMenus;
156
+ private readonly _openSubmenuOnHover;
157
+ protected readonly autofocus: _angular_core.WritableSignal<boolean>;
158
+ constructor();
159
+ /**
160
+ * Shows the menu.
161
+ * @param focus Whether to focus the menu after showing it. Defaults to `true`.
162
+ */
163
+ show(focus?: boolean): void;
164
+ /**
165
+ * Hides the menu.
166
+ * @param emitCloseEvent Whether to emit the close event. Defaults to `true`.
167
+ */
168
+ hide(emitCloseEvent?: boolean): void;
169
+ /**
170
+ * Toggles the menu open or closed.
171
+ */
172
+ toggle(): void;
173
+ protected handleKeydown(event: KeyboardEvent, subMenu?: NgnMenu): void;
174
+ protected doCloseAll(): void;
175
+ protected itemClicked(item: MenuItem): void;
176
+ protected closeChildMenus(closeBy: 'hover' | 'click' | 'arrow', menuItem: HTMLButtonElement | null): void;
177
+ protected openChildMenu(childMenu: NgnMenu, menuItem: HTMLButtonElement | null, openBy: 'hover' | 'click' | 'arrow'): void;
178
+ protected popoverOpenChange(newState: boolean): void;
179
+ protected popoverClosed(): void;
180
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgnMenu, never>;
181
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgnMenu, "ngn-menu", never, { "elementId": { "alias": "elementId"; "required": false; "isSignal": true; }; "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "autoAnchorAria": { "alias": "autoAnchorAria"; "required": false; "isSignal": true; }; "popover": { "alias": "popover"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "iconSubmenuIndicator": { "alias": "iconSubmenuIndicator"; "required": false; "isSignal": true; }; "isSubMenu": { "alias": "isSubMenu"; "required": false; "isSignal": true; }; "openSubmenuOnHover": { "alias": "openSubmenuOnHover"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "closing": "closing"; "closeAll": "closeAll"; "open": "openChange"; }, never, never, true, never>;
182
+ }
183
+
184
+ /**
185
+ * Lazily creates (or reuses) an `NgnMenu` popover and shows it anchored either
186
+ * at a viewport point (context-menu style) or to an element. Returns the
187
+ * `ComponentRef` so callers can keep it for reuse and destroy it on teardown.
188
+ */
189
+ declare function openMenuAt(vcr: ViewContainerRef, existing: ComponentRef<NgnMenu> | undefined, items: MenuItem[], anchor: Anchor, placement?: Placement): ComponentRef<NgnMenu>;
190
+
191
+ export { NgnContextMenu, NgnMenu, openMenuAt };
192
+ export type { MenuItem, MenuItemDefault, MenuItemSeparator };
@@ -0,0 +1,21 @@
1
+ import * as i0 from '@angular/core';
2
+ import * as _ngneers_controls_custom_types from '@ngneers/controls-custom-types';
3
+ import * as _iconify_types from '@iconify/types';
4
+ import * as _ngneers_controls_api_ng from '@ngneers/controls/api/ng';
5
+ import * as _ngneers_controls_themes from '@ngneers/controls-themes';
6
+ import { NgnBase } from '@ngneers/controls/base';
7
+
8
+ /**
9
+ * @category control
10
+ */
11
+ declare class NgnMessage extends NgnBase<'message'> {
12
+ protected readonly theme: _ngneers_controls_api_ng.ControlTemplateInfo<_ngneers_controls_themes.ControlTemplate<"message", ["root", "content", "icon", `kind-${string}`, `color-${string}`], readonly []>>;
13
+ /**
14
+ * Set an icon to display before the text.
15
+ */
16
+ readonly icon: i0.InputSignal<_iconify_types.IconifyIcon | _ngneers_controls_custom_types.NgnIconEntry | undefined>;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgnMessage, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgnMessage, "ngn-message", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
19
+ }
20
+
21
+ export { NgnMessage };