@muxima-ui/core 1.0.0 → 1.1.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 (35) hide show
  1. package/README.md +7 -4
  2. package/fesm2022/muxima-ui-core-chips.mjs +349 -0
  3. package/fesm2022/muxima-ui-core-chips.mjs.map +1 -0
  4. package/fesm2022/muxima-ui-core-clipboard.mjs +110 -0
  5. package/fesm2022/muxima-ui-core-clipboard.mjs.map +1 -0
  6. package/fesm2022/muxima-ui-core-date-picker.mjs +494 -12
  7. package/fesm2022/muxima-ui-core-date-picker.mjs.map +1 -1
  8. package/fesm2022/muxima-ui-core-file-upload.mjs +392 -0
  9. package/fesm2022/muxima-ui-core-file-upload.mjs.map +1 -0
  10. package/fesm2022/muxima-ui-core-rating.mjs +212 -0
  11. package/fesm2022/muxima-ui-core-rating.mjs.map +1 -0
  12. package/fesm2022/muxima-ui-core-slider.mjs +211 -3
  13. package/fesm2022/muxima-ui-core-slider.mjs.map +1 -1
  14. package/fesm2022/muxima-ui-core-time-picker.mjs +389 -0
  15. package/fesm2022/muxima-ui-core-time-picker.mjs.map +1 -0
  16. package/fesm2022/muxima-ui-core.mjs +1 -1
  17. package/fesm2022/muxima-ui-core.mjs.map +1 -1
  18. package/package.json +21 -1
  19. package/styles/base.css +9 -1
  20. package/styles/components/chips.css +170 -0
  21. package/styles/components/clipboard.css +52 -0
  22. package/styles/components/date-picker.css +135 -0
  23. package/styles/components/file-upload.css +164 -0
  24. package/styles/components/rating.css +89 -0
  25. package/styles/components/slider.css +111 -0
  26. package/styles/components/time-picker.css +39 -0
  27. package/styles/muxima.css +5 -0
  28. package/types/muxima-ui-core-chips.d.ts +120 -0
  29. package/types/muxima-ui-core-clipboard.d.ts +42 -0
  30. package/types/muxima-ui-core-date-picker.d.ts +130 -2
  31. package/types/muxima-ui-core-file-upload.d.ts +96 -0
  32. package/types/muxima-ui-core-rating.d.ts +64 -0
  33. package/types/muxima-ui-core-slider.d.ts +68 -6
  34. package/types/muxima-ui-core-time-picker.d.ts +83 -0
  35. package/types/muxima-ui-core.d.ts +1 -1
@@ -1,6 +1,7 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
2
  import { OnInit } from '@angular/core';
3
- import { MxNativeControl } from '@muxima-ui/core/form-field';
3
+ import { MxNativeControl, MxFormFieldControl, MxFormField } from '@muxima-ui/core/form-field';
4
+ import { ControlValueAccessor } from '@angular/forms';
4
5
 
5
6
  /**
6
7
  * Cursor de intervalo sobre o `<input type="range">` nativo: setas, Page Up/Down,
@@ -15,13 +16,74 @@ import { MxNativeControl } from '@muxima-ui/core/form-field';
15
16
  */
16
17
  declare class MxSlider extends MxNativeControl implements OnInit {
17
18
  /** Espessura da barra: sm 4 px, md 6 px, lg 8 px. */
18
- readonly size: i0.InputSignal<"sm" | "md" | "lg">;
19
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
19
20
  constructor();
20
21
  private readonly destroyRef;
21
22
  ngOnInit(): void;
22
23
  protected paint(): void;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<MxSlider, never>;
24
- static ɵdir: i0.ɵɵDirectiveDeclaration<MxSlider, "input[type=range][mxSlider]", ["mxSlider"], { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
24
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MxSlider, never>;
25
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MxSlider, "input[type=range][mxSlider]", ["mxSlider"], { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
25
26
  }
26
27
 
27
- export { MxSlider };
28
+ /**
29
+ * Intervalo com dois cursores (mínimo e máximo), feito com dois `<input type="range">`
30
+ * nativos: cada cursor tem o seu teclado e é anunciado como "Preço, mínimo, 20 000 Kz".
31
+ *
32
+ * ```html
33
+ * <mx-form-field>
34
+ * <label mxLabel>Preço</label>
35
+ * <mx-range-slider formControlName="preco" [min]="0" [max]="100000" [step]="1000" [format]="kz" />
36
+ * </mx-form-field>
37
+ * ```
38
+ *
39
+ * O valor é `[mínimo, máximo]`. Os cursores não se cruzam: ficam a pelo menos `minGap` um do outro.
40
+ */
41
+ declare class MxRangeSlider implements ControlValueAccessor, MxFormFieldControl {
42
+ readonly value: _angular_core.ModelSignal<[number, number] | null>;
43
+ readonly min: _angular_core.InputSignalWithTransform<number, unknown>;
44
+ readonly max: _angular_core.InputSignalWithTransform<number, unknown>;
45
+ readonly step: _angular_core.InputSignalWithTransform<number, unknown>;
46
+ /** Distância mínima entre os dois cursores. */
47
+ readonly minGap: _angular_core.InputSignalWithTransform<number, unknown>;
48
+ /** Texto de cada valor, para o leitor de ecrã e as etiquetas. */
49
+ readonly format: _angular_core.InputSignal<(v: number) => string>;
50
+ /** Mostra os dois valores por baixo da barra. */
51
+ readonly showValues: _angular_core.InputSignalWithTransform<boolean, unknown>;
52
+ readonly lowLabel: _angular_core.InputSignal<string>;
53
+ readonly highLabel: _angular_core.InputSignal<string>;
54
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
55
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
56
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
57
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
58
+ readonly id: _angular_core.InputSignal<string | undefined>;
59
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
60
+ protected readonly field: MxFormField | null;
61
+ private readonly ngControl;
62
+ private readonly generatedId;
63
+ readonly controlId: _angular_core.Signal<string>;
64
+ protected readonly lowId: string;
65
+ protected readonly highId: string;
66
+ protected readonly nameId: string;
67
+ private readonly formDisabled;
68
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
69
+ protected readonly low: _angular_core.Signal<number>;
70
+ protected readonly high: _angular_core.Signal<number>;
71
+ private pct;
72
+ protected readonly fromPct: _angular_core.Signal<number>;
73
+ protected readonly toPct: _angular_core.Signal<number>;
74
+ private onChange;
75
+ protected onTouched: () => void;
76
+ constructor();
77
+ protected labelledBy(partId: string): string;
78
+ protected onInput(which: 0 | 1, event: Event): void;
79
+ errorState(): boolean;
80
+ isRequired(): boolean;
81
+ writeValue(value: [number, number] | null): void;
82
+ registerOnChange(fn: (value: [number, number] | null) => void): void;
83
+ registerOnTouched(fn: () => void): void;
84
+ setDisabledState(isDisabled: boolean): void;
85
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MxRangeSlider, never>;
86
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MxRangeSlider, "mx-range-slider", ["mxRangeSlider"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "minGap": { "alias": "minGap"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "lowLabel": { "alias": "lowLabel"; "required": false; "isSignal": true; }; "highLabel": { "alias": "highLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
87
+ }
88
+
89
+ export { MxRangeSlider, MxSlider };
@@ -0,0 +1,83 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ConnectedPosition } from '@angular/cdk/overlay';
3
+ import { ControlValueAccessor } from '@angular/forms';
4
+ import { MxFormFieldControl, MxFormField } from '@muxima-ui/core/form-field';
5
+
6
+ /**
7
+ * Converte o que se escreve numa hora "HH:mm". Aceita "9", "930", "9:30", "9h30", "9.30" e "21h".
8
+ * Devolve null se não for uma hora válida.
9
+ */
10
+ declare function mxParseTime(text: string): string | null;
11
+ /** Minutos desde a meia-noite de uma hora "HH:mm". */
12
+ declare function mxTimeToMinutes(time: string): number;
13
+ /**
14
+ * Campo de hora: escreve-se (9, 930, 9h30, 09:30) ou escolhe-se numa lista com o intervalo
15
+ * definido em `step`. Padrão WAI-ARIA "combobox com lista".
16
+ *
17
+ * ```html
18
+ * <mx-form-field>
19
+ * <label mxLabel>Hora da reunião</label>
20
+ * <mx-time-picker formControlName="hora" [step]="15" min="08:00" max="18:00" />
21
+ * </mx-form-field>
22
+ * ```
23
+ *
24
+ * O valor é uma string "HH:mm" (24 horas) ou null. Uma hora fora de min/max deixa o campo com erro.
25
+ * Para uma hora isolada sem lista, o input type=time nativo com mxInput também serve.
26
+ */
27
+ declare class MxTimePicker implements ControlValueAccessor, MxFormFieldControl {
28
+ readonly value: _angular_core.ModelSignal<string | null>;
29
+ /** Minutos entre as horas da lista. */
30
+ readonly step: _angular_core.InputSignalWithTransform<number, unknown>;
31
+ /** Primeira e última hora permitidas, "HH:mm". */
32
+ readonly min: _angular_core.InputSignal<string | null>;
33
+ readonly max: _angular_core.InputSignal<string | null>;
34
+ readonly placeholder: _angular_core.InputSignal<string>;
35
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
36
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
37
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
38
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
39
+ readonly id: _angular_core.InputSignal<string | undefined>;
40
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
41
+ protected readonly field: MxFormField | null;
42
+ private readonly ngControl;
43
+ private readonly host;
44
+ protected readonly positions: ConnectedPosition[];
45
+ protected readonly listId: string;
46
+ private readonly generatedId;
47
+ readonly controlId: _angular_core.Signal<string>;
48
+ protected readonly isOpen: _angular_core.WritableSignal<boolean>;
49
+ protected readonly panelWidth: _angular_core.WritableSignal<number>;
50
+ protected readonly active: _angular_core.WritableSignal<number>;
51
+ private readonly draft;
52
+ private readonly formDisabled;
53
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
54
+ protected readonly text: _angular_core.Signal<string>;
55
+ protected readonly slots: _angular_core.Signal<string[]>;
56
+ /** Texto que não é hora, ou hora fora de min/max. */
57
+ readonly badValue: _angular_core.Signal<boolean>;
58
+ private onChange;
59
+ private onTouched;
60
+ constructor();
61
+ protected optionId(i: number): string;
62
+ /** Índice da hora da lista mais próxima de um valor (ou da hora actual). */
63
+ private nearest;
64
+ open(): void;
65
+ close(): void;
66
+ protected scrollToActive(): void;
67
+ protected choose(time: string): void;
68
+ protected onInput(event: Event): void;
69
+ protected onKeydown(event: KeyboardEvent): void;
70
+ protected onOutside(event: MouseEvent): void;
71
+ protected onBlur(): void;
72
+ private setValue;
73
+ errorState(): boolean;
74
+ isRequired(): boolean;
75
+ writeValue(value: string | null): void;
76
+ registerOnChange(fn: (value: string | null) => void): void;
77
+ registerOnTouched(fn: () => void): void;
78
+ setDisabledState(isDisabled: boolean): void;
79
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MxTimePicker, never>;
80
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MxTimePicker, "mx-time-picker", ["mxTimePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
81
+ }
82
+
83
+ export { MxTimePicker, mxParseTime, mxTimeToMinutes };
@@ -1,3 +1,3 @@
1
- declare const MUXIMA_VERSION = "1.0.0";
1
+ declare const MUXIMA_VERSION = "1.1.0";
2
2
 
3
3
  export { MUXIMA_VERSION };