@eagami/ui 5.34.0 → 5.36.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eagami/ui",
3
- "version": "5.34.0",
3
+ "version": "5.36.0",
4
4
  "description": "Lightweight, accessible, themeable Angular UI component library and icon set built on CSS custom properties",
5
5
  "author": "Michal Wiraszka <michal@eagami.com>",
6
6
  "license": "MIT",
@@ -979,11 +979,13 @@ declare class BadgeComponent {
979
979
  readonly variant: _angular_core.InputSignal<BadgeVariant>;
980
980
  readonly size: _angular_core.InputSignal<BadgeSize>;
981
981
  readonly shape: _angular_core.InputSignal<BadgeShape>;
982
+ readonly uppercase: _angular_core.InputSignal<boolean>;
982
983
  readonly hostClasses: _angular_core.Signal<{
983
984
  [x: string]: boolean;
985
+ 'ea-badge--uppercase': boolean;
984
986
  }>;
985
987
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeComponent, never>;
986
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "ea-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
988
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "ea-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "uppercase": { "alias": "uppercase"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
987
989
  }
988
990
 
989
991
  /** Visual style of the separator rendered between breadcrumb items. */
@@ -1034,8 +1036,9 @@ type ButtonType = 'button' | 'submit' | 'reset';
1034
1036
  * Standard action button supporting primary, secondary, ghost, and danger
1035
1037
  * variants. Includes a loading state that swaps the label for a spinner while
1036
1038
  * preserving the rendered width. Chrome is tunable per instance via
1037
- * `--ea-button-padding` and `--ea-button-min-height`, which is how an
1038
- * icon-only button comes down to little more than its glyph.
1039
+ * `--ea-button-padding`, `--ea-button-min-height` and `--ea-button-radius`,
1040
+ * which is how an icon-only button comes down to little more than its glyph
1041
+ * and how a call-to-action becomes a pill.
1039
1042
  */
1040
1043
  declare class ButtonComponent {
1041
1044
  readonly variant: _angular_core.InputSignal<ButtonVariant>;
@@ -1044,6 +1047,7 @@ declare class ButtonComponent {
1044
1047
  readonly disabled: _angular_core.InputSignal<boolean>;
1045
1048
  readonly loading: _angular_core.InputSignal<boolean>;
1046
1049
  readonly fullWidth: _angular_core.InputSignal<boolean>;
1050
+ readonly uppercase: _angular_core.InputSignal<boolean>;
1047
1051
  /** Optional icon component rendered to the left of the label. */
1048
1052
  readonly icon: _angular_core.InputSignal<Type<unknown> | undefined>;
1049
1053
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
@@ -1054,12 +1058,13 @@ declare class ButtonComponent {
1054
1058
  readonly hostClasses: _angular_core.Signal<{
1055
1059
  [x: string]: boolean;
1056
1060
  'ea-button--full-width': boolean;
1061
+ 'ea-button--uppercase': boolean;
1057
1062
  'ea-button--loading': boolean;
1058
1063
  'ea-button--disabled': boolean;
1059
1064
  }>;
1060
1065
  handleClick(event: MouseEvent): void;
1061
1066
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonComponent, never>;
1062
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonComponent, "ea-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaCurrent": { "alias": "aria-current"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["[slot=prefix]", "*", "[slot=suffix]"], true, never>;
1067
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonComponent, "ea-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "uppercase": { "alias": "uppercase"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaCurrent": { "alias": "aria-current"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["[slot=prefix]", "*", "[slot=suffix]"], true, never>;
1063
1068
  }
1064
1069
 
1065
1070
  /** Visual style of a card surface. */
@@ -3872,6 +3877,7 @@ declare class TagComponent {
3872
3877
  * navigation, since roles like `combobox` forbid focusable descendants.
3873
3878
  */
3874
3879
  readonly removeTabbable: _angular_core.InputSignal<boolean>;
3880
+ readonly uppercase: _angular_core.InputSignal<boolean>;
3875
3881
  /** Fires when the user activates the remove button on a `removable` tag. */
3876
3882
  readonly removed: _angular_core.OutputEmitterRef<void>;
3877
3883
  /** Full label text, held only while the rendered label is clipped. */
@@ -3884,6 +3890,7 @@ declare class TagComponent {
3884
3890
  readonly hostClasses: _angular_core.Signal<{
3885
3891
  [x: string]: boolean;
3886
3892
  'ea-tag--disabled': boolean;
3893
+ 'ea-tag--uppercase': boolean;
3887
3894
  }>;
3888
3895
  /** `maxWidth` as a CSS length; a bare number is px, as the input documents. */
3889
3896
  protected readonly resolvedMaxWidth: _angular_core.Signal<string | null>;
@@ -3899,7 +3906,7 @@ declare class TagComponent {
3899
3906
  */
3900
3907
  private watchLabel;
3901
3908
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagComponent, never>;
3902
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagComponent, "ea-tag", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "removeTabbable": { "alias": "removeTabbable"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, never, ["*"], true, never>;
3909
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagComponent, "ea-tag", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "removeTabbable": { "alias": "removeTabbable"; "required": false; "isSignal": true; }; "uppercase": { "alias": "uppercase"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, never, ["*"], true, never>;
3903
3910
  }
3904
3911
 
3905
3912
  /** Visual size of the textarea. */
@@ -3988,15 +3995,25 @@ interface ParsedTime {
3988
3995
  * configurable steps for minutes and seconds, optional seconds column, and
3989
3996
  * integrates with Angular forms via `ControlValueAccessor`.
3990
3997
  *
3991
- * Keyboard: Tab moves between the hour, minute, (seconds), and AM/PM columns.
3992
- * Each spinner accepts ArrowUp/ArrowDown to step by 1 (or by the configured
3993
- * step), PageUp/PageDown for a coarser bump, and digit keys to type a value
3998
+ * The field itself is a text input: a time can be typed by hand and is read
3999
+ * leniently on Enter or blur. Bare digits are a 24-hour clock ("5" is 05:00,
4000
+ * "1234" is 12:34, "123456" adds seconds), `:`, `.`, `h`, and spaces all
4001
+ * separate units ("17h30", "12.34"), and an AM/PM suffix reads the hour on
4002
+ * the 12-hour clock ("5pm" is 17:00). Text that parses to no time is
4003
+ * discarded and the field falls back to the current value; clearing the text
4004
+ * clears the value.
4005
+ *
4006
+ * Keyboard: ArrowDown opens the popover and moves into the hour column. Tab
4007
+ * moves between the hour, minute, (seconds), and AM/PM columns. Each spinner
4008
+ * accepts ArrowUp/ArrowDown to step by 1 (or by the configured step),
4009
+ * PageUp/PageDown for a coarser bump, and digit keys to type a value
3994
4010
  * directly. After typing two digits (or one digit that already maxes the
3995
4011
  * unit), focus auto-advances to the next column. Backspace clears the typed
3996
4012
  * buffer; Escape closes the popover.
3997
4013
  */
3998
4014
  declare class TimePickerComponent implements ControlValueAccessor {
3999
- protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
4015
+ protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
4016
+ protected readonly inputEl: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
4000
4017
  protected readonly hoursEl: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
4001
4018
  protected readonly minutesEl: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
4002
4019
  protected readonly secondsEl: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
@@ -4025,6 +4042,8 @@ declare class TimePickerComponent implements ControlValueAccessor {
4025
4042
  /** Fires with the new value whenever the user changes the time. */
4026
4043
  readonly changed: _angular_core.OutputEmitterRef<string | null>;
4027
4044
  readonly isOpen: _angular_core.WritableSignal<boolean>;
4045
+ /** Raw text under edit in the field, or `null` while it mirrors the value. */
4046
+ readonly typedText: _angular_core.WritableSignal<string | null>;
4028
4047
  /** Typed-digit buffer for the currently focused column, or `null` when idle. */
4029
4048
  readonly editBuffer: _angular_core.WritableSignal<{
4030
4049
  unit: Unit;
@@ -4063,13 +4082,14 @@ declare class TimePickerComponent implements ControlValueAccessor {
4063
4082
  /** Localized text shown on the trigger. Falls back to placeholder when no value. */
4064
4083
  readonly displayValue: _angular_core.Signal<string | null>;
4065
4084
  readonly resolvedPlaceholder: _angular_core.Signal<string>;
4085
+ /** What the field's input shows: the text mid-edit, else the formatted value. */
4086
+ readonly triggerText: _angular_core.Signal<string>;
4066
4087
  readonly triggerClasses: _angular_core.Signal<{
4067
4088
  [x: string]: boolean;
4068
4089
  'ea-time-picker__trigger--error': boolean;
4069
4090
  'ea-time-picker__trigger--open': boolean;
4070
4091
  'ea-time-picker__trigger--disabled': boolean;
4071
4092
  'ea-time-picker__trigger--readonly': boolean;
4072
- 'ea-time-picker__trigger--placeholder': boolean;
4073
4093
  }>;
4074
4094
  readonly wrapperClasses: _angular_core.Signal<{
4075
4095
  [x: string]: boolean;
@@ -4082,7 +4102,12 @@ declare class TimePickerComponent implements ControlValueAccessor {
4082
4102
  registerOnTouched(fn: () => void): void;
4083
4103
  setDisabledState(isDisabled: boolean): void;
4084
4104
  constructor();
4085
- toggle(): void;
4105
+ /**
4106
+ * A click anywhere on the field opens the popover and leaves the focus in
4107
+ * the input, so the caret lands where it was aimed and typing can start
4108
+ * straight away. A click while open only moves the caret.
4109
+ */
4110
+ onTriggerClick(): void;
4086
4111
  /**
4087
4112
  * Push focus into the hours input once the popover surface has been
4088
4113
  * rendered. `afterNextRender` guarantees the DOM has been updated (and the
@@ -4094,6 +4119,14 @@ declare class TimePickerComponent implements ControlValueAccessor {
4094
4119
  onPopoverCloseRequested(): void;
4095
4120
  clear(event: Event): void;
4096
4121
  handleTriggerKeydown(event: KeyboardEvent): void;
4122
+ onTriggerInput(event: Event): void;
4123
+ onTriggerBlur(): void;
4124
+ /**
4125
+ * Reads the hand-typed text and commits what it says: a time updates the
4126
+ * value, emptied text clears it, and anything unreadable is dropped so the
4127
+ * field falls back to the value it already shows.
4128
+ */
4129
+ private commitTyped;
4097
4130
  /** Stepper button or keyboard arrow nudges one column up or down. */
4098
4131
  step(unit: Unit, direction: 1 | -1): void;
4099
4132
  /**
@@ -4115,7 +4148,7 @@ declare class TimePickerComponent implements ControlValueAccessor {
4115
4148
  /** Switches the AM/PM period in 12h mode by toggling the 12-hour offset. */
4116
4149
  togglePeriod(): void;
4117
4150
  handlePopoverKeydown(event: KeyboardEvent, unit: Unit): void;
4118
- /** Escape from anywhere inside the popover closes it and refocuses the trigger. */
4151
+ /** Escape from anywhere inside the popover closes it and refocuses the field. */
4119
4152
  onPopoverEscape(event: Event): void;
4120
4153
  /** Select-all on focus so the first keystroke replaces the current value. */
4121
4154
  onSpinnerFocus(event: FocusEvent): void;