@muxima-ui/core 1.4.0 → 1.5.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 (87) hide show
  1. package/README.md +11 -0
  2. package/fesm2022/muxima-ui-core-alert.mjs +5 -3
  3. package/fesm2022/muxima-ui-core-alert.mjs.map +1 -1
  4. package/fesm2022/muxima-ui-core-breadcrumb.mjs +5 -3
  5. package/fesm2022/muxima-ui-core-breadcrumb.mjs.map +1 -1
  6. package/fesm2022/muxima-ui-core-carousel.mjs +19 -17
  7. package/fesm2022/muxima-ui-core-carousel.mjs.map +1 -1
  8. package/fesm2022/muxima-ui-core-chips.mjs +19 -14
  9. package/fesm2022/muxima-ui-core-chips.mjs.map +1 -1
  10. package/fesm2022/muxima-ui-core-clipboard.mjs +10 -6
  11. package/fesm2022/muxima-ui-core-clipboard.mjs.map +1 -1
  12. package/fesm2022/muxima-ui-core-color-picker.mjs +53 -50
  13. package/fesm2022/muxima-ui-core-color-picker.mjs.map +1 -1
  14. package/fesm2022/muxima-ui-core-combobox.mjs +15 -12
  15. package/fesm2022/muxima-ui-core-combobox.mjs.map +1 -1
  16. package/fesm2022/muxima-ui-core-command.mjs +21 -16
  17. package/fesm2022/muxima-ui-core-command.mjs.map +1 -1
  18. package/fesm2022/muxima-ui-core-data-grid.mjs +50 -52
  19. package/fesm2022/muxima-ui-core-data-grid.mjs.map +1 -1
  20. package/fesm2022/muxima-ui-core-date-picker.mjs +97 -69
  21. package/fesm2022/muxima-ui-core-date-picker.mjs.map +1 -1
  22. package/fesm2022/muxima-ui-core-editor.mjs +25 -19
  23. package/fesm2022/muxima-ui-core-editor.mjs.map +1 -1
  24. package/fesm2022/muxima-ui-core-file-upload.mjs +30 -25
  25. package/fesm2022/muxima-ui-core-file-upload.mjs.map +1 -1
  26. package/fesm2022/muxima-ui-core-i18n.mjs +550 -0
  27. package/fesm2022/muxima-ui-core-i18n.mjs.map +1 -0
  28. package/fesm2022/muxima-ui-core-image-cropper.mjs +27 -24
  29. package/fesm2022/muxima-ui-core-image-cropper.mjs.map +1 -1
  30. package/fesm2022/muxima-ui-core-kanban.mjs +22 -19
  31. package/fesm2022/muxima-ui-core-kanban.mjs.map +1 -1
  32. package/fesm2022/muxima-ui-core-notification-center.mjs +41 -36
  33. package/fesm2022/muxima-ui-core-notification-center.mjs.map +1 -1
  34. package/fesm2022/muxima-ui-core-pagination.mjs +29 -26
  35. package/fesm2022/muxima-ui-core-pagination.mjs.map +1 -1
  36. package/fesm2022/muxima-ui-core-progress.mjs +5 -3
  37. package/fesm2022/muxima-ui-core-progress.mjs.map +1 -1
  38. package/fesm2022/muxima-ui-core-rating.mjs +12 -8
  39. package/fesm2022/muxima-ui-core-rating.mjs.map +1 -1
  40. package/fesm2022/muxima-ui-core-select.mjs +14 -11
  41. package/fesm2022/muxima-ui-core-select.mjs.map +1 -1
  42. package/fesm2022/muxima-ui-core-sidebar.mjs +10 -7
  43. package/fesm2022/muxima-ui-core-sidebar.mjs.map +1 -1
  44. package/fesm2022/muxima-ui-core-slider.mjs +8 -6
  45. package/fesm2022/muxima-ui-core-slider.mjs.map +1 -1
  46. package/fesm2022/muxima-ui-core-stepper.mjs +5 -3
  47. package/fesm2022/muxima-ui-core-stepper.mjs.map +1 -1
  48. package/fesm2022/muxima-ui-core-table.mjs +4 -4
  49. package/fesm2022/muxima-ui-core-table.mjs.map +1 -1
  50. package/fesm2022/muxima-ui-core-time-picker.mjs +7 -5
  51. package/fesm2022/muxima-ui-core-time-picker.mjs.map +1 -1
  52. package/fesm2022/muxima-ui-core-toast.mjs +8 -5
  53. package/fesm2022/muxima-ui-core-toast.mjs.map +1 -1
  54. package/fesm2022/muxima-ui-core-tour.mjs +10 -11
  55. package/fesm2022/muxima-ui-core-tour.mjs.map +1 -1
  56. package/fesm2022/muxima-ui-core.mjs +1 -1
  57. package/fesm2022/muxima-ui-core.mjs.map +1 -1
  58. package/package.json +6 -2
  59. package/styles/components/data-grid.css +1 -0
  60. package/types/muxima-ui-core-alert.d.ts +3 -1
  61. package/types/muxima-ui-core-breadcrumb.d.ts +6 -4
  62. package/types/muxima-ui-core-carousel.d.ts +4 -2
  63. package/types/muxima-ui-core-chips.d.ts +23 -3
  64. package/types/muxima-ui-core-clipboard.d.ts +6 -3
  65. package/types/muxima-ui-core-color-picker.d.ts +40 -7
  66. package/types/muxima-ui-core-combobox.d.ts +6 -3
  67. package/types/muxima-ui-core-command.d.ts +7 -3
  68. package/types/muxima-ui-core-data-grid.d.ts +31 -11
  69. package/types/muxima-ui-core-date-picker.d.ts +59 -14
  70. package/types/muxima-ui-core-editor.d.ts +13 -2
  71. package/types/muxima-ui-core-file-upload.d.ts +22 -6
  72. package/types/muxima-ui-core-i18n.d.ts +322 -0
  73. package/types/muxima-ui-core-image-cropper.d.ts +19 -6
  74. package/types/muxima-ui-core-kanban.d.ts +16 -3
  75. package/types/muxima-ui-core-notification-center.d.ts +30 -8
  76. package/types/muxima-ui-core-pagination.d.ts +16 -1
  77. package/types/muxima-ui-core-progress.d.ts +10 -8
  78. package/types/muxima-ui-core-rating.d.ts +6 -2
  79. package/types/muxima-ui-core-select.d.ts +6 -3
  80. package/types/muxima-ui-core-sidebar.d.ts +6 -3
  81. package/types/muxima-ui-core-slider.d.ts +4 -2
  82. package/types/muxima-ui-core-stepper.d.ts +10 -8
  83. package/types/muxima-ui-core-table.d.ts +3 -3
  84. package/types/muxima-ui-core-time-picker.d.ts +3 -1
  85. package/types/muxima-ui-core-toast.d.ts +3 -0
  86. package/types/muxima-ui-core-tour.d.ts +6 -1
  87. package/types/muxima-ui-core.d.ts +1 -1
@@ -0,0 +1,322 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Signal, EnvironmentProviders } from '@angular/core';
3
+
4
+ /**
5
+ * Todos os textos que os componentes mostram ou anunciam ao leitor de ecrã.
6
+ * Os textos com valores variáveis são funções; os números e as datas chegam já formatados.
7
+ */
8
+ interface MxMessages {
9
+ /** Locale BCP 47 usado em Intl (números, datas, ordenação). Ex.: "pt-AO", "en-US". */
10
+ intlLocale: string;
11
+ /** Ordem do dia, mês e ano nos campos de data escritos à mão. */
12
+ dateOrder: 'dmy' | 'mdy' | 'ymd';
13
+ /** Primeiro dia da semana no calendário: 0 = domingo, 1 = segunda-feira. */
14
+ firstDayOfWeek: number;
15
+ alert: {
16
+ close: string;
17
+ };
18
+ breadcrumb: {
19
+ label: string;
20
+ };
21
+ calendar: {
22
+ previousMonth: (month: string) => string;
23
+ nextMonth: (month: string) => string;
24
+ rangeStart: string;
25
+ rangeEnd: string;
26
+ rangeStartEnd: string;
27
+ rangeHint: (start: string, end: string) => string;
28
+ rangeStartHint: (start: string) => string;
29
+ };
30
+ carousel: {
31
+ carousel: string;
32
+ slide: string;
33
+ previous: string;
34
+ next: string;
35
+ choose: string;
36
+ goTo: (n: number) => string;
37
+ position: (n: number, total: number) => string;
38
+ play: string;
39
+ pause: string;
40
+ };
41
+ chips: {
42
+ remove: string;
43
+ list: string;
44
+ help: string;
45
+ added: (tag: string) => string;
46
+ removed: (tag: string) => string;
47
+ max: (max: number) => string;
48
+ duplicate: (tag: string) => string;
49
+ };
50
+ clipboard: {
51
+ copy: string;
52
+ copied: string;
53
+ failed: string;
54
+ };
55
+ colorPicker: {
56
+ choose: string;
57
+ change: (name: string, hex: string) => string;
58
+ area: string;
59
+ hue: string;
60
+ alpha: string;
61
+ swatches: string;
62
+ eyeDropper: string;
63
+ hex: string;
64
+ areaValue: (saturation: number, brightness: number, name: string) => string;
65
+ hueValue: (degrees: number, name: string) => string;
66
+ names: MxColorNames;
67
+ };
68
+ combobox: {
69
+ placeholder: string;
70
+ empty: string;
71
+ loading: string;
72
+ };
73
+ command: {
74
+ placeholder: string;
75
+ label: string;
76
+ empty: string;
77
+ results: (n: number) => string;
78
+ };
79
+ dataGrid: {
80
+ label: string;
81
+ empty: string;
82
+ loading: string;
83
+ columns: string;
84
+ filter: string;
85
+ all: string;
86
+ selectAll: string;
87
+ selectRow: string;
88
+ selection: string;
89
+ resizeHint: string;
90
+ numberFilter: (filter: string, column: string) => string;
91
+ rows: (n: string, count: number) => string;
92
+ of: (total: string) => string;
93
+ selected: (n: string, count: number) => string;
94
+ sorted: (column: string, direction: 'asc' | 'desc') => string;
95
+ unsorted: string;
96
+ width: (column: string, px: number) => string;
97
+ };
98
+ datePicker: {
99
+ placeholder: string;
100
+ choose: string;
101
+ change: (date: string) => string;
102
+ };
103
+ dateRangePicker: {
104
+ start: string;
105
+ end: string;
106
+ choose: string;
107
+ change: (start: string, end: string) => string;
108
+ presets: string;
109
+ last7Days: string;
110
+ last30Days: string;
111
+ thisMonth: string;
112
+ lastMonth: string;
113
+ };
114
+ editor: {
115
+ toolbar: string;
116
+ link: string;
117
+ apply: string;
118
+ remove: string;
119
+ cancel: string;
120
+ characters: string;
121
+ tools: Record<'bold' | 'italic' | 'underline' | 'strike' | 'code' | 'heading2' | 'heading3' | 'paragraph' | 'bulletList' | 'orderedList' | 'blockquote' | 'link' | 'undo' | 'redo', string>;
122
+ };
123
+ fileUpload: {
124
+ drop: string;
125
+ browse: string;
126
+ list: string;
127
+ remove: string;
128
+ done: string;
129
+ uploading: (name: string) => string;
130
+ rejectedType: (name: string) => string;
131
+ rejectedSize: (name: string, size: string, max: string) => string;
132
+ rejectedCount: (name: string, max: number) => string;
133
+ addedOne: (name: string) => string;
134
+ addedMany: (n: number) => string;
135
+ removed: (name: string) => string;
136
+ };
137
+ imageCropper: {
138
+ alt: string;
139
+ help: string;
140
+ zoom: string;
141
+ rotateLeft: string;
142
+ rotateRight: string;
143
+ reset: string;
144
+ area: string;
145
+ size: (width: number, height: number) => string;
146
+ position: (width: number, height: number, x: number, y: number) => string;
147
+ rotated: (degrees: number) => string;
148
+ };
149
+ kanban: {
150
+ label: string;
151
+ empty: string;
152
+ help: string;
153
+ cards: (n: number, limit: number | null) => string;
154
+ grabbed: (card: string) => string;
155
+ position: (column: string, position: number, total: number) => string;
156
+ pickedUp: (card: string, where: string) => string;
157
+ dropped: (card: string, where: string) => string;
158
+ cancelled: (card: string, where: string) => string;
159
+ full: (column: string, limit: number) => string;
160
+ };
161
+ notifications: {
162
+ title: string;
163
+ markAll: string;
164
+ empty: string;
165
+ emptyUnread: string;
166
+ filter: string;
167
+ all: string;
168
+ unread: string;
169
+ unreadPrefix: string;
170
+ unreadCount: (n: number) => string;
171
+ markRead: (title: string) => string;
172
+ remove: (title: string) => string;
173
+ removed: (title: string) => string;
174
+ newOne: (title: string) => string;
175
+ newMany: (n: number) => string;
176
+ now: string;
177
+ bellCount: (label: string, n: number) => string;
178
+ };
179
+ pagination: {
180
+ label: string;
181
+ rowsPerPage: string;
182
+ first: string;
183
+ previous: string;
184
+ previousShort: string;
185
+ next: string;
186
+ nextShort: string;
187
+ last: string;
188
+ page: (n: number) => string;
189
+ pageOf: (current: number, total: number) => string;
190
+ range: (from: string, to: string, total: string) => string;
191
+ noResults: string;
192
+ };
193
+ progress: {
194
+ label: string;
195
+ };
196
+ rangeSlider: {
197
+ low: string;
198
+ high: string;
199
+ };
200
+ rating: {
201
+ label: string;
202
+ star: (n: number) => string;
203
+ summary: (value: string, max: number) => string;
204
+ };
205
+ select: {
206
+ placeholder: string;
207
+ empty: string;
208
+ loading: string;
209
+ };
210
+ sidebar: {
211
+ label: string;
212
+ collapse: string;
213
+ expand: string;
214
+ };
215
+ stepper: {
216
+ complete: string;
217
+ };
218
+ timePicker: {
219
+ placeholder: string;
220
+ label: string;
221
+ };
222
+ toast: {
223
+ region: string;
224
+ close: string;
225
+ action: (label: string) => string;
226
+ };
227
+ tour: {
228
+ next: string;
229
+ previous: string;
230
+ done: string;
231
+ skip: string;
232
+ close: string;
233
+ progress: (current: number, total: number) => string;
234
+ };
235
+ }
236
+ /** Nomes aproximados das cores, para o leitor de ecrã. */
237
+ interface MxColorNames {
238
+ black: string;
239
+ white: string;
240
+ lightGray: string;
241
+ gray: string;
242
+ darkGray: string;
243
+ brown: string;
244
+ red: string;
245
+ orange: string;
246
+ yellow: string;
247
+ lime: string;
248
+ green: string;
249
+ teal: string;
250
+ blue: string;
251
+ purple: string;
252
+ magenta: string;
253
+ /** Junta o tom ao nome: "azul escuro", "dark blue". */
254
+ tone: (name: string, tone: 'dark' | 'light') => string;
255
+ }
256
+ /** Objecto com todas as chaves opcionais, a qualquer profundidade. */
257
+ type MxDeepPartial<T> = {
258
+ [K in keyof T]?: T[K] extends (...args: never[]) => unknown ? T[K] : T[K] extends object ? MxDeepPartial<T[K]> : T[K];
259
+ };
260
+
261
+ /** Português (Angola). */
262
+ declare const MX_MESSAGES_PT: MxMessages;
263
+
264
+ /** English (United States). */
265
+ declare const MX_MESSAGES_EN: MxMessages;
266
+
267
+ /** Idiomas incluídos na biblioteca. Outros podem ser registados com `messages`. */
268
+ type MxBuiltInLocale = 'pt' | 'en';
269
+ interface MxI18nConfig {
270
+ /** Idioma inicial: "pt" (por omissão na 1.x) ou "en". Aceita também "pt-BR", "en-GB", etc. */
271
+ locale?: string;
272
+ /**
273
+ * Textos por idioma. Para "pt" e "en" basta indicar o que muda; um idioma novo
274
+ * (ex.: "fr") parte do inglês e substitui o que indicares.
275
+ */
276
+ messages?: Record<string, MxDeepPartial<MxMessages>>;
277
+ }
278
+ declare const MX_I18N_CONFIG: InjectionToken<MxI18nConfig>;
279
+ /** Junta `patch` sobre `base`, objecto a objecto; funções, textos e números substituem. */
280
+ declare function mxMergeMessages<T>(base: T, patch: MxDeepPartial<T> | undefined): T;
281
+ /** Dicionário incluído para o idioma ("pt-BR" usa "pt"); inglês quando não há. */
282
+ declare function mxBuiltInMessages(locale: string): MxMessages;
283
+ /**
284
+ * Idioma activo e os textos dos componentes. Mudar o idioma com `setLocale`
285
+ * actualiza logo todos os componentes no ecrã.
286
+ *
287
+ * ```ts
288
+ * readonly i18n = inject(MxI18n);
289
+ * this.i18n.setLocale('en');
290
+ * ```
291
+ */
292
+ declare class MxI18n {
293
+ private readonly config;
294
+ private readonly custom;
295
+ private readonly current;
296
+ /** Idioma activo, tal como foi indicado ("pt", "en", "en-GB"...). */
297
+ readonly locale: Signal<string>;
298
+ /** Todos os textos do idioma activo. */
299
+ readonly messages: Signal<MxMessages>;
300
+ /** Locale para Intl (números, datas): "pt-AO", "en-US"... */
301
+ readonly intlLocale: Signal<string>;
302
+ setLocale(locale: string): void;
303
+ /** Acrescenta ou corrige textos de um idioma, sem perder os que já existem. */
304
+ register(locale: string, messages: MxDeepPartial<MxMessages>): void;
305
+ static ɵfac: i0.ɵɵFactoryDeclaration<MxI18n, never>;
306
+ static ɵprov: i0.ɵɵInjectableDeclaration<MxI18n>;
307
+ }
308
+ /**
309
+ * Configura o idioma dos componentes.
310
+ *
311
+ * ```ts
312
+ * bootstrapApplication(App, {
313
+ * providers: [provideMuximaI18n({ locale: 'en' })],
314
+ * });
315
+ * ```
316
+ */
317
+ declare function provideMuximaI18n(config: MxI18nConfig): EnvironmentProviders;
318
+ /** Textos do idioma activo; usar dentro de um componente ou serviço. */
319
+ declare function injectMxMessages(): Signal<MxMessages>;
320
+
321
+ export { MX_I18N_CONFIG, MX_MESSAGES_EN, MX_MESSAGES_PT, MxI18n, injectMxMessages, mxBuiltInMessages, mxMergeMessages, provideMuximaI18n };
322
+ export type { MxBuiltInLocale, MxColorNames, MxDeepPartial, MxI18nConfig, MxMessages };
@@ -37,7 +37,20 @@ interface MxCropArea extends MxRect {
37
37
  */
38
38
  declare class MxImageCropper {
39
39
  readonly src: _angular_core.InputSignal<string | File | Blob | null>;
40
- readonly alt: _angular_core.InputSignal<string>;
40
+ readonly alt: _angular_core.InputSignal<string | undefined>;
41
+ private readonly i18n;
42
+ protected readonly msg: _angular_core.Signal<{
43
+ alt: string;
44
+ help: string;
45
+ zoom: string;
46
+ rotateLeft: string;
47
+ rotateRight: string;
48
+ reset: string;
49
+ area: string;
50
+ size: (width: number, height: number) => string;
51
+ position: (width: number, height: number, x: number, y: number) => string;
52
+ rotated: (degrees: number) => string;
53
+ }>;
41
54
  /** Largura / altura da área (1 = quadrado, 16/9...). null = livre. */
42
55
  readonly aspectRatio: _angular_core.InputSignal<number | null>;
43
56
  /** Máscara redonda (fotografias de perfil). toBlob devolve PNG com cantos transparentes. */
@@ -48,11 +61,11 @@ declare class MxImageCropper {
48
61
  readonly minSize: _angular_core.InputSignalWithTransform<number, unknown>;
49
62
  readonly zoom: _angular_core.ModelSignal<number>;
50
63
  readonly rotation: _angular_core.ModelSignal<number>;
51
- readonly helpText: _angular_core.InputSignal<string>;
52
- readonly zoomText: _angular_core.InputSignal<string>;
53
- readonly rotateLeftText: _angular_core.InputSignal<string>;
54
- readonly rotateRightText: _angular_core.InputSignal<string>;
55
- readonly resetText: _angular_core.InputSignal<string>;
64
+ readonly helpText: _angular_core.InputSignal<string | undefined>;
65
+ readonly zoomText: _angular_core.InputSignal<string | undefined>;
66
+ readonly rotateLeftText: _angular_core.InputSignal<string | undefined>;
67
+ readonly rotateRightText: _angular_core.InputSignal<string | undefined>;
68
+ readonly resetText: _angular_core.InputSignal<string | undefined>;
56
69
  /** Área recortada em píxeis da imagem original. */
57
70
  readonly areaChange: _angular_core.OutputEmitterRef<MxCropArea>;
58
71
  private readonly stage;
@@ -45,10 +45,23 @@ declare class MxKanban<T = any> {
45
45
  readonly itemKey: _angular_core.InputSignal<string | ((item: T) => unknown)>;
46
46
  /** Nome do cartão nos anúncios. Por omissão o campo `title` ou `titulo`. */
47
47
  readonly itemLabel: _angular_core.InputSignal<(item: T) => string>;
48
- readonly ariaLabel: _angular_core.InputSignal<string>;
48
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
49
+ private readonly i18n;
50
+ protected readonly msg: _angular_core.Signal<{
51
+ label: string;
52
+ empty: string;
53
+ help: string;
54
+ cards: (n: number, limit: number | null) => string;
55
+ grabbed: (card: string) => string;
56
+ position: (column: string, position: number, total: number) => string;
57
+ pickedUp: (card: string, where: string) => string;
58
+ dropped: (card: string, where: string) => string;
59
+ cancelled: (card: string, where: string) => string;
60
+ full: (column: string, limit: number) => string;
61
+ }>;
49
62
  readonly headingLevel: _angular_core.InputSignal<number>;
50
- readonly emptyText: _angular_core.InputSignal<string>;
51
- readonly helpText: _angular_core.InputSignal<string>;
63
+ readonly emptyText: _angular_core.InputSignal<string | undefined>;
64
+ readonly helpText: _angular_core.InputSignal<string | undefined>;
52
65
  readonly moved: _angular_core.OutputEmitterRef<MxKanbanMove<T>>;
53
66
  protected readonly cardTpl: _angular_core.Signal<MxKanbanCard | undefined>;
54
67
  protected readonly footerTpl: _angular_core.Signal<MxKanbanColumnFooter | undefined>;
@@ -1,3 +1,4 @@
1
+ import * as _muxima_ui_core_i18n from '@muxima-ui/core/i18n';
1
2
  import * as _angular_core from '@angular/core';
2
3
  import { TemplateRef } from '@angular/core';
3
4
 
@@ -14,7 +15,7 @@ interface MxNotification<D = unknown> {
14
15
  data?: D;
15
16
  }
16
17
  /** "agora", "há 5 min", "ontem", "há 3 dias" e, depois de uma semana, a data. */
17
- declare function mxRelativeTime(date: Date, now?: Date, locale?: string): string;
18
+ declare function mxRelativeTime(date: Date, now?: Date, locale?: string, nowText?: string): string;
18
19
  /** Modelo para o conteúdo de cada notificação: `<ng-template mxNotificationContent let-n>`. */
19
20
  declare class MxNotificationContent {
20
21
  readonly template: TemplateRef<any>;
@@ -35,13 +36,13 @@ declare class MxNotificationContent {
35
36
  */
36
37
  declare class MxNotificationCenter<D = unknown> {
37
38
  readonly items: _angular_core.InputSignal<readonly MxNotification<D>[]>;
38
- readonly title: _angular_core.InputSignal<string>;
39
+ readonly title: _angular_core.InputSignal<string | undefined>;
39
40
  /** Nível do título para o leitor de ecrã (h2 por omissão). */
40
41
  readonly headingLevel: _angular_core.InputSignal<number>;
41
- readonly markAllText: _angular_core.InputSignal<string>;
42
- readonly emptyText: _angular_core.InputSignal<string>;
43
- readonly emptyUnreadText: _angular_core.InputSignal<string>;
44
- readonly filterLabel: _angular_core.InputSignal<string>;
42
+ readonly markAllText: _angular_core.InputSignal<string | undefined>;
43
+ readonly emptyText: _angular_core.InputSignal<string | undefined>;
44
+ readonly emptyUnreadText: _angular_core.InputSignal<string | undefined>;
45
+ readonly filterLabel: _angular_core.InputSignal<string | undefined>;
45
46
  /** Mostra os filtros Todas, Por ler e as categorias. */
46
47
  readonly showFilter: _angular_core.InputSignalWithTransform<boolean, unknown>;
47
48
  /** Mostra o botão de remover em cada notificação. */
@@ -50,7 +51,27 @@ declare class MxNotificationCenter<D = unknown> {
50
51
  readonly markReadOnOpen: _angular_core.InputSignalWithTransform<boolean, unknown>;
51
52
  /** Anuncia ao leitor de ecrã quando chegam notificações por ler. */
52
53
  readonly announce: _angular_core.InputSignalWithTransform<boolean, unknown>;
53
- readonly locale: _angular_core.InputSignal<string>;
54
+ /** Locale das datas; por omissão o do idioma activo. */
55
+ readonly locale: _angular_core.InputSignal<string | undefined>;
56
+ private readonly i18n;
57
+ protected readonly msg: _angular_core.Signal<{
58
+ title: string;
59
+ markAll: string;
60
+ empty: string;
61
+ emptyUnread: string;
62
+ filter: string;
63
+ all: string;
64
+ unread: string;
65
+ unreadPrefix: string;
66
+ unreadCount: (n: number) => string;
67
+ markRead: (title: string) => string;
68
+ remove: (title: string) => string;
69
+ removed: (title: string) => string;
70
+ newOne: (title: string) => string;
71
+ newMany: (n: number) => string;
72
+ now: string;
73
+ bellCount: (label: string, n: number) => string;
74
+ }>;
54
75
  readonly opened: _angular_core.OutputEmitterRef<MxNotification<D>>;
55
76
  readonly markRead: _angular_core.OutputEmitterRef<MxNotification<D>>;
56
77
  readonly markAllRead: _angular_core.OutputEmitterRef<void>;
@@ -82,7 +103,8 @@ declare class MxNotificationCenter<D = unknown> {
82
103
  declare class MxNotificationBell {
83
104
  readonly count: _angular_core.InputSignal<number>;
84
105
  readonly max: _angular_core.InputSignal<number>;
85
- readonly label: _angular_core.InputSignal<string>;
106
+ readonly label: _angular_core.InputSignal<string | undefined>;
107
+ protected readonly i18n: _angular_core.Signal<_muxima_ui_core_i18n.MxMessages>;
86
108
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MxNotificationBell, never>;
87
109
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MxNotificationBell, "button[mxNotificationBell]", ["mxNotificationBell"], { "count": { "alias": "count"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
88
110
  }
@@ -37,7 +37,22 @@ declare class MxPagination {
37
37
  readonly variant: _angular_core.InputSignal<MxPaginationVariant>;
38
38
  /** Páginas mostradas de cada lado da actual (variante default). */
39
39
  readonly siblings: _angular_core.InputSignal<number>;
40
- readonly ariaLabel: _angular_core.InputSignal<string>;
40
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
41
+ private readonly i18n;
42
+ protected readonly msg: _angular_core.Signal<{
43
+ label: string;
44
+ rowsPerPage: string;
45
+ first: string;
46
+ previous: string;
47
+ previousShort: string;
48
+ next: string;
49
+ nextShort: string;
50
+ last: string;
51
+ page: (n: number) => string;
52
+ pageOf: (current: number, total: number) => string;
53
+ range: (from: string, to: string, total: string) => string;
54
+ noResults: string;
55
+ }>;
41
56
  protected readonly sizeId: string;
42
57
  readonly pageCount: _angular_core.Signal<number>;
43
58
  protected readonly current: _angular_core.Signal<number>;
@@ -1,4 +1,5 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _muxima_ui_core_i18n from '@muxima-ui/core/i18n';
2
+ import * as _angular_core from '@angular/core';
2
3
 
3
4
  /**
4
5
  * Barra de progresso sobre o `<progress>` nativo. Sem `value` fica indeterminada.
@@ -11,20 +12,21 @@ import * as i0 from '@angular/core';
11
12
  */
12
13
  declare class MxProgress {
13
14
  /** Espessura: sm 4 px, md 8 px, lg 12 px. */
14
- readonly size: i0.InputSignal<"sm" | "md" | "lg">;
15
- static ɵfac: i0.ɵɵFactoryDeclaration<MxProgress, never>;
16
- static ɵdir: i0.ɵɵDirectiveDeclaration<MxProgress, "progress[mxProgress]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
16
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MxProgress, never>;
17
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MxProgress, "progress[mxProgress]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17
18
  }
18
19
  /**
19
20
  * Indicador circular para esperas curtas. Tem role="status" e um nome acessível
20
21
  * ("A carregar" por omissão); dentro de um botão, usa antes `loading` no botão.
21
22
  */
22
23
  declare class MxSpinner {
23
- readonly label: i0.InputSignal<string>;
24
+ readonly label: _angular_core.InputSignal<string | undefined>;
25
+ protected readonly i18n: _angular_core.Signal<_muxima_ui_core_i18n.MxMessages>;
24
26
  /** sm 14 px, md 20 px, lg 28 px. */
25
- readonly size: i0.InputSignal<"sm" | "md" | "lg">;
26
- static ɵfac: i0.ɵɵFactoryDeclaration<MxSpinner, never>;
27
- static ɵdir: i0.ɵɵDirectiveDeclaration<MxSpinner, "[mxSpinner]", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
27
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
28
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MxSpinner, never>;
29
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MxSpinner, "[mxSpinner]", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
28
30
  }
29
31
 
30
32
  export { MxProgress, MxSpinner };
@@ -1,3 +1,4 @@
1
+ import * as _muxima_ui_core_i18n from '@muxima-ui/core/i18n';
1
2
  import * as _angular_core from '@angular/core';
2
3
  import { ControlValueAccessor } from '@angular/forms';
3
4
  import { MxFormFieldControl, MxFormField } from '@muxima-ui/core/form-field';
@@ -23,8 +24,11 @@ declare class MxRating implements ControlValueAccessor, MxFormFieldControl {
23
24
  readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
24
25
  /** Mostra o número ao lado ("4,5"). */
25
26
  readonly showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
26
- readonly starLabel: _angular_core.InputSignal<(n: number) => string>;
27
- readonly locale: _angular_core.InputSignal<string>;
27
+ /** Nome de cada estrela; por omissão "1 estrela", "2 estrelas" no idioma activo. */
28
+ readonly starLabel: _angular_core.InputSignal<((n: number) => string) | undefined>;
29
+ /** Locale dos números; por omissão o do idioma activo. */
30
+ readonly locale: _angular_core.InputSignal<string | undefined>;
31
+ protected readonly i18n: _angular_core.Signal<_muxima_ui_core_i18n.MxMessages>;
28
32
  readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
29
33
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
30
34
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -1,3 +1,4 @@
1
+ import * as _muxima_ui_core_i18n from '@muxima-ui/core/i18n';
1
2
  import * as _angular_core from '@angular/core';
2
3
  import { AfterContentInit } from '@angular/core';
3
4
  import { Highlightable } from '@angular/cdk/a11y';
@@ -43,7 +44,9 @@ declare class MxSelect<T = unknown> implements ControlValueAccessor, MxFormField
43
44
  readonly value: _angular_core.ModelSignal<T | T[] | null>;
44
45
  /** Escolha múltipla: o valor passa a ser uma lista e o painel não fecha ao escolher. */
45
46
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
46
- readonly placeholder: _angular_core.InputSignal<string>;
47
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
48
+ protected readonly i18n: _angular_core.Signal<_muxima_ui_core_i18n.MxMessages>;
49
+ protected readonly placeholderText: _angular_core.Signal<string>;
47
50
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
48
51
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
49
52
  /** Força o estado de erro (sem formulário). Com Reactive Forms o erro vem do controlo. */
@@ -51,10 +54,10 @@ declare class MxSelect<T = unknown> implements ControlValueAccessor, MxFormField
51
54
  /** Altura: sm 32 px, md 36 px, lg 40 px. */
52
55
  readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
53
56
  /** Texto mostrado quando não há opções. */
54
- readonly emptyText: _angular_core.InputSignal<string>;
57
+ readonly emptyText: _angular_core.InputSignal<string | undefined>;
55
58
  /** Opções a carregar (ex.: de um servidor): mostra um indicador no botão e no painel. */
56
59
  readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
57
- readonly loadingText: _angular_core.InputSignal<string>;
60
+ readonly loadingText: _angular_core.InputSignal<string | undefined>;
58
61
  readonly id: _angular_core.InputSignal<string | undefined>;
59
62
  /** Nome acessível quando não existe um `label[mxLabel]` no campo. */
60
63
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
@@ -1,3 +1,4 @@
1
+ import * as _muxima_ui_core_i18n from '@muxima-ui/core/i18n';
1
2
  import * as i0 from '@angular/core';
2
3
 
3
4
  /**
@@ -23,7 +24,8 @@ import * as i0 from '@angular/core';
23
24
  */
24
25
  declare class MxSidebar {
25
26
  readonly collapsed: i0.ModelSignal<boolean>;
26
- readonly ariaLabel: i0.InputSignal<string>;
27
+ readonly ariaLabel: i0.InputSignal<string | undefined>;
28
+ protected readonly i18n: i0.Signal<_muxima_ui_core_i18n.MxMessages>;
27
29
  /** `default` com fundo de superfície; `subtle` com o fundo do papel. */
28
30
  readonly variant: i0.InputSignal<"default" | "subtle">;
29
31
  readonly id: i0.InputSignal<string>;
@@ -105,8 +107,9 @@ declare class MxSidebarSection {
105
107
  */
106
108
  declare class MxSidebarToggle {
107
109
  readonly sidebar: i0.InputSignal<MxSidebar>;
108
- readonly collapseLabel: i0.InputSignal<string>;
109
- readonly expandLabel: i0.InputSignal<string>;
110
+ readonly collapseLabel: i0.InputSignal<string | undefined>;
111
+ readonly expandLabel: i0.InputSignal<string | undefined>;
112
+ protected readonly i18n: i0.Signal<_muxima_ui_core_i18n.MxMessages>;
110
113
  static ɵfac: i0.ɵɵFactoryDeclaration<MxSidebarToggle, never>;
111
114
  static ɵdir: i0.ɵɵDirectiveDeclaration<MxSidebarToggle, "button[mxSidebarToggle]", ["mxSidebarToggle"], { "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
112
115
  }
@@ -1,6 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnInit } from '@angular/core';
3
3
  import { MxNativeControl, MxFormFieldControl, MxFormField } from '@muxima-ui/core/form-field';
4
+ import * as _muxima_ui_core_i18n from '@muxima-ui/core/i18n';
4
5
  import { ControlValueAccessor } from '@angular/forms';
5
6
 
6
7
  /**
@@ -49,8 +50,9 @@ declare class MxRangeSlider implements ControlValueAccessor, MxFormFieldControl
49
50
  readonly format: _angular_core.InputSignal<(v: number) => string>;
50
51
  /** Mostra os dois valores por baixo da barra. */
51
52
  readonly showValues: _angular_core.InputSignalWithTransform<boolean, unknown>;
52
- readonly lowLabel: _angular_core.InputSignal<string>;
53
- readonly highLabel: _angular_core.InputSignal<string>;
53
+ readonly lowLabel: _angular_core.InputSignal<string | undefined>;
54
+ readonly highLabel: _angular_core.InputSignal<string | undefined>;
55
+ protected readonly i18n: _angular_core.Signal<_muxima_ui_core_i18n.MxMessages>;
54
56
  readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
55
57
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
56
58
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -1,4 +1,5 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _muxima_ui_core_i18n from '@muxima-ui/core/i18n';
2
+ import * as _angular_core from '@angular/core';
2
3
 
3
4
  type MxStepState = 'complete' | 'current' | 'upcoming';
4
5
  /**
@@ -16,17 +17,18 @@ type MxStepState = 'complete' | 'current' | 'upcoming';
16
17
  * A etapa actual recebe aria-current="step" e as concluídas são anunciadas como tal.
17
18
  */
18
19
  declare class MxStepper {
19
- readonly orientation: i0.InputSignal<"horizontal" | "vertical">;
20
- static ɵfac: i0.ɵɵFactoryDeclaration<MxStepper, never>;
21
- static ɵdir: i0.ɵɵDirectiveDeclaration<MxStepper, "ol[mxStepper]", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
20
+ readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
21
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MxStepper, never>;
22
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MxStepper, "ol[mxStepper]", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
22
23
  }
23
24
  /** Uma etapa da lista. */
24
25
  declare class MxStep {
25
- readonly state: i0.InputSignal<MxStepState>;
26
+ readonly state: _angular_core.InputSignal<MxStepState>;
26
27
  /** Texto lido nas etapas concluídas. */
27
- readonly completeText: i0.InputSignal<string>;
28
- static ɵfac: i0.ɵɵFactoryDeclaration<MxStep, never>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<MxStep, "li[mxStep]", never, { "state": { "alias": "state"; "required": false; "isSignal": true; }; "completeText": { "alias": "completeText"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
28
+ readonly completeText: _angular_core.InputSignal<string | undefined>;
29
+ protected readonly i18n: _angular_core.Signal<_muxima_ui_core_i18n.MxMessages>;
30
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MxStep, never>;
31
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MxStep, "li[mxStep]", never, { "state": { "alias": "state"; "required": false; "isSignal": true; }; "completeText": { "alias": "completeText"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
30
32
  }
31
33
  declare const MX_STEPPER: readonly [typeof MxStepper, typeof MxStep];
32
34