@lifecorner/angular-ui-kit 3.14.0 → 3.15.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 (40) hide show
  1. package/fesm2022/lifecorner-angular-ui-kit-app-shell.mjs +36 -2
  2. package/fesm2022/lifecorner-angular-ui-kit-app-shell.mjs.map +1 -1
  3. package/fesm2022/lifecorner-angular-ui-kit-avatar-group.mjs +2 -1
  4. package/fesm2022/lifecorner-angular-ui-kit-avatar-group.mjs.map +1 -1
  5. package/fesm2022/lifecorner-angular-ui-kit-avatar.mjs +23 -5
  6. package/fesm2022/lifecorner-angular-ui-kit-avatar.mjs.map +1 -1
  7. package/fesm2022/lifecorner-angular-ui-kit-button.mjs +39 -6
  8. package/fesm2022/lifecorner-angular-ui-kit-button.mjs.map +1 -1
  9. package/fesm2022/lifecorner-angular-ui-kit-choice-prompt.mjs +1 -0
  10. package/fesm2022/lifecorner-angular-ui-kit-choice-prompt.mjs.map +1 -1
  11. package/fesm2022/lifecorner-angular-ui-kit-confirm-dialog.mjs +1 -0
  12. package/fesm2022/lifecorner-angular-ui-kit-confirm-dialog.mjs.map +1 -1
  13. package/fesm2022/lifecorner-angular-ui-kit-copy-field.mjs +1 -0
  14. package/fesm2022/lifecorner-angular-ui-kit-copy-field.mjs.map +1 -1
  15. package/fesm2022/lifecorner-angular-ui-kit-empty-state.mjs +42 -5
  16. package/fesm2022/lifecorner-angular-ui-kit-empty-state.mjs.map +1 -1
  17. package/fesm2022/lifecorner-angular-ui-kit-header.mjs +21 -3
  18. package/fesm2022/lifecorner-angular-ui-kit-header.mjs.map +1 -1
  19. package/fesm2022/lifecorner-angular-ui-kit-list.mjs +1 -0
  20. package/fesm2022/lifecorner-angular-ui-kit-list.mjs.map +1 -1
  21. package/fesm2022/lifecorner-angular-ui-kit-next-step-card.mjs +1 -0
  22. package/fesm2022/lifecorner-angular-ui-kit-next-step-card.mjs.map +1 -1
  23. package/fesm2022/lifecorner-angular-ui-kit-page-header.mjs +20 -3
  24. package/fesm2022/lifecorner-angular-ui-kit-page-header.mjs.map +1 -1
  25. package/fesm2022/lifecorner-angular-ui-kit-sidenav-placeholder.mjs +2 -2
  26. package/fesm2022/lifecorner-angular-ui-kit-sidenav-placeholder.mjs.map +1 -1
  27. package/fesm2022/lifecorner-angular-ui-kit-sidenav.mjs +2 -2
  28. package/fesm2022/lifecorner-angular-ui-kit-sidenav.mjs.map +1 -1
  29. package/fesm2022/lifecorner-angular-ui-kit-table.mjs +1 -0
  30. package/fesm2022/lifecorner-angular-ui-kit-table.mjs.map +1 -1
  31. package/package.json +1 -1
  32. package/src/styles/theme-contrast.spec.ts +52 -0
  33. package/types/lifecorner-angular-ui-kit-app-shell.d.ts +56 -0
  34. package/types/lifecorner-angular-ui-kit-avatar.d.ts +24 -0
  35. package/types/lifecorner-angular-ui-kit-button.d.ts +31 -0
  36. package/types/lifecorner-angular-ui-kit-empty-state.d.ts +38 -0
  37. package/types/lifecorner-angular-ui-kit-header.d.ts +15 -2
  38. package/types/lifecorner-angular-ui-kit-page-header.d.ts +20 -0
  39. package/types/lifecorner-angular-ui-kit-sidenav-placeholder.d.ts +4 -2
  40. package/types/lifecorner-angular-ui-kit-sidenav.d.ts +5 -2
@@ -3,6 +3,11 @@ import { ElementRef } from "@angular/core";
3
3
  export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'danger' | 'warning' | 'info' | 'inverse';
4
4
  export type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';
5
5
  export type ButtonType = 'button' | 'submit' | 'reset';
6
+ /**
7
+ * Colour tone of `variant="outline"` (3.15). `primary`: text and border in the
8
+ * primary colour. Other variants ignore it.
9
+ */
10
+ export type ButtonTone = 'neutral' | 'primary';
6
11
  export declare class ButtonComponent {
7
12
  /**
8
13
  * Visual variant. `inverse` is a white pill with dark ink and a white focus
@@ -14,6 +19,14 @@ export declare class ButtonComponent {
14
19
  * @default 'primary'
15
20
  */
16
21
  readonly variant: import("@angular/core").InputSignal<ButtonVariant>;
22
+ /**
23
+ * Colour tone of `variant="outline"`: `'primary'` sets text and border to
24
+ * the primary colour (`--color-primary-700` / `-600`; hover
25
+ * `--color-surface-selected`, active `--color-primary-200`). Other variants
26
+ * ignore it.
27
+ * @default 'neutral'
28
+ */
29
+ readonly tone: import("@angular/core").InputSignal<ButtonTone>;
17
30
  readonly size: import("@angular/core").InputSignal<ButtonSize>;
18
31
  readonly disabled: import("@angular/core").InputSignal<boolean>;
19
32
  readonly loading: import("@angular/core").InputSignal<boolean>;
@@ -71,6 +84,11 @@ export declare class ButtonComponent {
71
84
  "required": false;
72
85
  "isSignal": true;
73
86
  };
87
+ "tone": {
88
+ "alias": "tone";
89
+ "required": false;
90
+ "isSignal": true;
91
+ };
74
92
  "size": {
75
93
  "alias": "size";
76
94
  "required": false;
@@ -178,6 +196,14 @@ export declare class ButtonLinkComponent {
178
196
  * @default 'primary'
179
197
  */
180
198
  readonly variant: import("@angular/core").InputSignal<ButtonVariant>;
199
+ /**
200
+ * Colour tone of `variant="outline"`, as on `lc-button`: `'primary'` sets
201
+ * text and border to the primary colour (`--color-primary-700` / `-600`;
202
+ * hover `--color-surface-selected`, active `--color-primary-200`). Other
203
+ * variants ignore it.
204
+ * @default 'neutral'
205
+ */
206
+ readonly tone: import("@angular/core").InputSignal<ButtonTone>;
181
207
  /** Size, as on `lc-button`. `lg` (48.5 px high) meets the 44 px touch target. */
182
208
  readonly size: import("@angular/core").InputSignal<ButtonSize>;
183
209
  /** Stretch the link to the full width of its container. */
@@ -208,6 +234,11 @@ export declare class ButtonLinkComponent {
208
234
  "required": false;
209
235
  "isSignal": true;
210
236
  };
237
+ "tone": {
238
+ "alias": "tone";
239
+ "required": false;
240
+ "isSignal": true;
241
+ };
211
242
  "size": {
212
243
  "alias": "size";
213
244
  "required": false;
@@ -2,6 +2,20 @@ import * as i0 from "@angular/core";
2
2
  export type EmptyStateSize = 'sm' | 'md' | 'lg';
3
3
  /** Heading level of `lc-empty-state`'s heading (3.3, G-9). */
4
4
  export type EmptyStateHeadingLevel = 2 | 3 | 4 | 5 | 6;
5
+ /**
6
+ * Look of `lc-empty-state`'s icon (3.15).
7
+ * - `neutral`: the bare 40 px icon in `--color-text-tertiary`
8
+ * - `primary`: a 24 px icon in `--color-primary-700` on a 48 px
9
+ * `--color-primary-100` circle
10
+ */
11
+ export type EmptyStateIconTone = 'neutral' | 'primary';
12
+ /**
13
+ * Text scale of `lc-empty-state` (3.15), beside `size` (the padding).
14
+ * - `sm`: 14 px message
15
+ * - `md`: the state-page scale — 16/24 px message, 20 px heading, 16 px below
16
+ * the icon and 24 px before the projected action
17
+ */
18
+ export type EmptyStateMessageSize = 'sm' | 'md';
5
19
  /**
6
20
  * Empty state component for "no data" placeholder displays.
7
21
  *
@@ -49,6 +63,20 @@ export declare class EmptyStateComponent {
49
63
  * Description text
50
64
  */
51
65
  readonly message: import("@angular/core").InputSignal<string | undefined>;
66
+ /**
67
+ * `'neutral'`: the bare 40 px icon in `--color-text-tertiary`. `'primary'`:
68
+ * a 24 px icon in `--color-primary-700` on a 48 px `--color-primary-100`
69
+ * circle. Decorative in both tones.
70
+ * @default 'neutral'
71
+ */
72
+ readonly iconTone: import("@angular/core").InputSignal<EmptyStateIconTone>;
73
+ /**
74
+ * `'sm'`: 14 px message. `'md'`, for a state page: 16/24 px message, 20 px
75
+ * heading, 16 px below the icon and 24 px before the projected action.
76
+ * Wrap several actions in one row element.
77
+ * @default 'sm'
78
+ */
79
+ readonly messageSize: import("@angular/core").InputSignal<EmptyStateMessageSize>;
52
80
  protected readonly hostClasses: import("@angular/core").Signal<string>;
53
81
  static ɵfac: i0.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
54
82
  static ɵcmp: i0.ɵɵComponentDeclaration<EmptyStateComponent, "lc-empty-state", never, {
@@ -77,5 +105,15 @@ export declare class EmptyStateComponent {
77
105
  "required": false;
78
106
  "isSignal": true;
79
107
  };
108
+ "iconTone": {
109
+ "alias": "iconTone";
110
+ "required": false;
111
+ "isSignal": true;
112
+ };
113
+ "messageSize": {
114
+ "alias": "messageSize";
115
+ "required": false;
116
+ "isSignal": true;
117
+ };
80
118
  }, {}, never, ["*"], true, never>;
81
119
  }
@@ -1,4 +1,4 @@
1
- import { AvatarColor } from "@lifecorner/angular-ui-kit/avatar";
1
+ import { AvatarColor, AvatarFallback } from "@lifecorner/angular-ui-kit/avatar";
2
2
  import { MenuItem } from "@lifecorner/angular-ui-kit/menu";
3
3
  import { ThemeService } from "@lifecorner/angular-ui-kit/theme";
4
4
  import * as i0 from "@angular/core";
@@ -59,7 +59,8 @@ export type HeaderUserMenuTrigger = 'icon' | 'avatar';
59
59
  * cannot stay over scrolling text).
60
60
  * - `userMenuTrigger="avatar"`: the account button is the person's initials
61
61
  * avatar (`userAvatarColor` for the member colour, `userAvatarSrc` for a
62
- * photo) in a 48 px round button; the icon trigger is 44 px high in every
62
+ * photo, `userAvatarFallback="person"` for a person symbol while there is
63
+ * no name) in a 48 px round button; the icon trigger is 44 px high in every
63
64
  * density.
64
65
  * - The subtitle (e.g. a household name) stays on one line and ends with "…";
65
66
  * the full text is its `title` and stays in the accessible text. It is shown
@@ -174,6 +175,13 @@ export declare class HeaderComponent {
174
175
  readonly userAvatarSrc: import("@angular/core").InputSignal<string>;
175
176
  /** Colour of the account avatar's initials: `default` or a member colour `member-1` … `member-6`. */
176
177
  readonly userAvatarColor: import("@angular/core").InputSignal<AvatarColor>;
178
+ /**
179
+ * Passed to the trigger avatar and the menu avatar as `fallback` (3.15):
180
+ * `person` shows a person symbol on a neutral disc instead of "?" while
181
+ * `userName` is empty.
182
+ * @default 'initials'
183
+ */
184
+ readonly userAvatarFallback: import("@angular/core").InputSignal<AvatarFallback>;
177
185
  readonly showHamburger: import("@angular/core").InputSignal<boolean>;
178
186
  /**
179
187
  * Open state of the sidenav the hamburger controls. When bound, the toggle
@@ -411,6 +419,11 @@ export declare class HeaderComponent {
411
419
  "required": false;
412
420
  "isSignal": true;
413
421
  };
422
+ "userAvatarFallback": {
423
+ "alias": "userAvatarFallback";
424
+ "required": false;
425
+ "isSignal": true;
426
+ };
414
427
  "showHamburger": {
415
428
  "alias": "showHamburger";
416
429
  "required": false;
@@ -15,6 +15,13 @@ import * as i0 from "@angular/core";
15
15
  * 1024 px (`--font-size-auth-title`)
16
16
  */
17
17
  export type PageHeaderSize = 'compact' | 'secondary' | 'default' | 'comfortable' | 'title' | 'display' | 'auth';
18
+ /**
19
+ * Space above the page header's content (3.15).
20
+ * - `default` — the size's block padding (24 px; `comfortable` 40, `compact`
21
+ * and `secondary` 12)
22
+ * - `none` 0 · `sm` 8 px · `md` 16 px
23
+ */
24
+ export type PageHeaderPaddingTop = 'default' | 'none' | 'sm' | 'md';
18
25
  /**
19
26
  * Page header — top-of-page title block with optional subtitle,
20
27
  * breadcrumbs, badge, description and an actions area.
@@ -116,6 +123,14 @@ export declare class PageHeaderComponent {
116
123
  * @default false
117
124
  */
118
125
  noPaddingX: import("@angular/core").InputSignal<boolean>;
126
+ /**
127
+ * Space above the header content. `'default'`: the size's block padding
128
+ * (24, comfortable 40, compact/secondary 12). `'none'` 0, `'sm'` 8 px,
129
+ * `'md'` 16 px. The bottom padding is unchanged. Use `'none'` with
130
+ * `lc-app-page` `paddingTop="md"` to put the `h1` 16 px below `lc-header`.
131
+ * @default 'default'
132
+ */
133
+ paddingTop: import("@angular/core").InputSignal<PageHeaderPaddingTop>;
119
134
  /**
120
135
  * Classes of the heading: the global type-scale class (`lc-title`,
121
136
  * `lc-display`, `lc-auth-title`) joins the component class for the 3.3 sizes.
@@ -179,5 +194,10 @@ export declare class PageHeaderComponent {
179
194
  "required": false;
180
195
  "isSignal": true;
181
196
  };
197
+ "paddingTop": {
198
+ "alias": "paddingTop";
199
+ "required": false;
200
+ "isSignal": true;
201
+ };
182
202
  }, {}, never, ["[slot='breadcrumbs']", "[slot='title-suffix']", "[slot='actions']", "[slot='meta']", "*"], true, never>;
183
203
  }
@@ -34,8 +34,10 @@ import * as i0 from "@angular/core";
34
34
  * it when it is swapped. The navigation landmark, the current item
35
35
  * (`aria-current`) and the tab order arrive with `lc-sidenav`. Static, no
36
36
  * shimmer. The skeleton shapes are filled with
37
- * `--lc-sidenav-placeholder-fill`; the `--lc-sidenav-*` hooks apply as on
38
- * `lc-sidenav` (set them on an ancestor of both).
37
+ * `--lc-sidenav-placeholder-fill`; the `--lc-sidenav-*` colour hooks apply as
38
+ * on `lc-sidenav`: set them on the element or any ancestor (3.15), e.g. one
39
+ * rule on an ancestor of both. A value on the element wins over an
40
+ * ancestor's, and both win over `theme`.
39
41
  */
40
42
  export declare class SidenavPlaceholderComponent {
41
43
  private readonly router;
@@ -35,8 +35,11 @@ export type SidenavVariant = 'default' | 'transparent';
35
35
  * - Optional backdrop overlay
36
36
  * - Theme variants: auto, light, dark (with teal accent for dark mode). The
37
37
  * theming hooks (`--lc-sidenav-bg`, `-fg`, `-fg-active`, `-border`,
38
- * `-hover-bg`, `-section-fg`, `-active-bg`, `-active-fg`, `-active-icon`)
39
- * set on `lc-sidenav` win over `theme` (3.14); `--lc-sidenav-active-indicator`
38
+ * `-hover-bg`, `-section-fg`, `-active-bg`, `-active-fg`, `-active-icon`,
39
+ * `-badge-ring`) can be set on `lc-sidenav` or any ancestor (3.15); a value
40
+ * on the element wins over an ancestor's, and both win over `theme` (3.14).
41
+ * Set the same ones for `lc-sidenav-placeholder`, e.g. on a shared ancestor;
42
+ * `--lc-sidenav-active-indicator`
40
43
  * (the current item's 2 px bar, default `--color-primary-500`; on a
41
44
  * `theme="light"` rail #208497 on any page, like its focus rings),
42
45
  * `--lc-sidenav-brand-tile-bg` (default `--color-primary-fill`) and