@eagami/ui 5.66.0 → 5.68.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.66.0",
3
+ "version": "5.68.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",
@@ -26,7 +26,6 @@
26
26
  }
27
27
 
28
28
  &:focus {
29
- border-color: var(--color-border-focus);
30
29
  @include ea.focus-ring;
31
30
  }
32
31
 
@@ -10,6 +10,8 @@ html {
10
10
  font-size: 16px;
11
11
  -webkit-text-size-adjust: 100%;
12
12
  tab-size: 4;
13
+ // The touch tap flash is a plain rectangle that ignores rounded corners
14
+ -webkit-tap-highlight-color: transparent;
13
15
  }
14
16
 
15
17
  body {
@@ -348,10 +348,25 @@ export interface PaletteConfig {
348
348
  * unset and accept the defaults. */
349
349
  roles?: Partial<PaletteRoles>;
350
350
  }
351
+ /**
352
+ * A focus colour of its own, for focus rings and outlines. Light mode draws
353
+ * focus in the derived 500 shade and dark mode in the 300 shade, the same
354
+ * steps the primary colour uses when no focus colour is set.
355
+ */
356
+ export interface FocusColorConfig {
357
+ /** Anchor hex (`#RRGGBB`) the focus shades are derived from. */
358
+ base: string;
359
+ /** Pin individual shades to specific hex values, bypassing derivation for
360
+ * those slots. */
361
+ overrides?: Partial<Record<PaletteShade, string>>;
362
+ }
351
363
  /** Top-level palette config accepted by `provideEagamiUi()`. */
352
364
  export interface EagamiPaletteConfig {
353
365
  primary?: PaletteConfig;
354
366
  secondary?: PaletteConfig;
367
+ /** Focus follows the primary colour unless this sets one apart, as a brand
368
+ * whose hue reads as an error or a warning needs. */
369
+ focus?: FocusColorConfig;
355
370
  }
356
371
  /** Flat CSS-custom-property name to value map for a single mode. */
357
372
  export type DerivedPalette = Record<string, string>;
@@ -541,6 +556,8 @@ export interface ContrastSurfaces {
541
556
  * - `--color-brand-text` vs `canvas` >= 4.5:1 (link / foreground text)
542
557
  * - `--color-brand-default` vs `onBrandText` >= 4.5:1 (button label)
543
558
  * - `--color-brand-default` vs `canvas` >= 3:1 (WCAG 1.4.11 non-text)
559
+ * - `--color-border-focus` vs `canvas` >= 3:1 (WCAG 1.4.11 non-text), when a
560
+ * focus colour is set
544
561
  */
545
562
  export declare function validatePalette(palette: ModePalette, surfaces?: ContrastSurfaces): ContrastViolation[];
546
563
  /** Format a violation list as a human-readable error message. */
@@ -4782,6 +4799,9 @@ interface ControlErrorState {
4782
4799
  * Auto-derived messages surface only once the bound control is `invalid &&
4783
4800
  * touched`, and a new one waits while focus is still inside the field, until
4784
4801
  * the user leaves it or submits the form, so nothing is flagged mid-edit. A
4802
+ * field the user only passed through, leaving it without changing it, stays
4803
+ * quiet until they change it or the form is submitted, so tabbing past an
4804
+ * empty required field never flags it. A
4785
4805
  * message already showing follows the value as it is typed and clears the
4786
4806
  * moment it is fixed. A message revealed by a pointer press moving focus away
4787
4807
  * waits until that press has landed its click. The control arrives as a signal
@@ -8220,6 +8240,8 @@ export declare class TagComponent {
8220
8240
  private readonly labelEl;
8221
8241
  readonly variant: import("@angular/core").InputSignal<TagVariant>;
8222
8242
  readonly size: import("@angular/core").InputSignal<EaSize>;
8243
+ /** Optional icon component rendered before the label. */
8244
+ readonly icon: import("@angular/core").InputSignal<Type<unknown> | undefined>;
8223
8245
  readonly removable: import("@angular/core").InputSignal<boolean>;
8224
8246
  readonly disabled: import("@angular/core").InputSignal<boolean>;
8225
8247
  readonly removeLabel: import("@angular/core").InputSignal<string | undefined>;
@@ -8295,6 +8317,11 @@ export declare class TagComponent {
8295
8317
  "required": false;
8296
8318
  "isSignal": true;
8297
8319
  };
8320
+ "icon": {
8321
+ "alias": "icon";
8322
+ "required": false;
8323
+ "isSignal": true;
8324
+ };
8298
8325
  "removable": {
8299
8326
  "alias": "removable";
8300
8327
  "required": false;