@hermes-ui/angular 0.1.6 → 0.2.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/README.md +52 -52
- package/button/_buttons.clarity.scss +80 -2
- package/button/_mixins.buttons.scss +44 -2
- package/button/_properties.buttons.scss +349 -387
- package/button/_variables.buttons.scss +22 -0
- package/fesm2022/hermes-ui-angular-accordion.mjs +2 -2
- package/fesm2022/hermes-ui-angular-accordion.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-a11y.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-card-container.mjs +3 -3
- package/fesm2022/hermes-ui-angular-addons-card-container.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-datagrid.mjs +30 -30
- package/fesm2022/hermes-ui-angular-addons-datagrid.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-dialog.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-menu.mjs +8 -8
- package/fesm2022/hermes-ui-angular-addons-menu.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-property-view.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-property-view.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-stepper.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-tabs.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-testing.mjs +78 -78
- package/fesm2022/hermes-ui-angular-addons-testing.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs +66 -66
- package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-var.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-var.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-wizard.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-wizard.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-workflow.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-button.mjs +76 -76
- package/fesm2022/hermes-ui-angular-button.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-card.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-collapsible-panel.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-data-datagrid.mjs +928 -928
- package/fesm2022/hermes-ui-angular-data-datagrid.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-data-stack-view.mjs +116 -116
- package/fesm2022/hermes-ui-angular-data-stack-view.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-data-tree-view.mjs +14 -14
- package/fesm2022/hermes-ui-angular-data-tree-view.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-data.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-divider.mjs +2 -2
- package/fesm2022/hermes-ui-angular-divider.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-emphasis-alert.mjs +2 -2
- package/fesm2022/hermes-ui-angular-emphasis-alert.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-emphasis-badge.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-emphasis-label.mjs +16 -16
- package/fesm2022/hermes-ui-angular-emphasis-label.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-emphasis.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-checkbox.mjs +52 -52
- package/fesm2022/hermes-ui-angular-forms-checkbox.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-combobox.mjs +128 -128
- package/fesm2022/hermes-ui-angular-forms-combobox.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-common.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-common.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-datalist.mjs +48 -48
- package/fesm2022/hermes-ui-angular-forms-datalist.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-datepicker.mjs +377 -377
- package/fesm2022/hermes-ui-angular-forms-datepicker.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-file-input.mjs +192 -192
- package/fesm2022/hermes-ui-angular-forms-file-input.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-input.mjs +54 -54
- package/fesm2022/hermes-ui-angular-forms-input.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-native-select.mjs +40 -40
- package/fesm2022/hermes-ui-angular-forms-native-select.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-number-input.mjs +82 -82
- package/fesm2022/hermes-ui-angular-forms-number-input.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-password.mjs +60 -60
- package/fesm2022/hermes-ui-angular-forms-password.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-radio.mjs +52 -52
- package/fesm2022/hermes-ui-angular-forms-radio.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-range.mjs +46 -46
- package/fesm2022/hermes-ui-angular-forms-range.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-select.mjs +10 -10
- package/fesm2022/hermes-ui-angular-forms-select.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-textarea.mjs +40 -40
- package/fesm2022/hermes-ui-angular-forms-textarea.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-icon.mjs +29 -29
- package/fesm2022/hermes-ui-angular-icon.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout-breadcrumbs.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout-main-container.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout-nav.mjs +48 -48
- package/fesm2022/hermes-ui-angular-layout-nav.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout-tabs.mjs +148 -148
- package/fesm2022/hermes-ui-angular-layout-tabs.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs +382 -28
- package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-modal.mjs +2 -2
- package/fesm2022/hermes-ui-angular-modal.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-pagination.mjs +8 -8
- package/fesm2022/hermes-ui-angular-pagination.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-popover-common.mjs +26 -3
- package/fesm2022/hermes-ui-angular-popover-common.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-popover-dropdown.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-popover-signpost.mjs +68 -68
- package/fesm2022/hermes-ui-angular-popover-signpost.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-popover-tooltip.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-popover.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-progress-progress-bars.mjs +10 -10
- package/fesm2022/hermes-ui-angular-progress-progress-bars.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-progress-spinner.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-stepper.mjs +2 -2
- package/fesm2022/hermes-ui-angular-stepper.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-timeline.mjs +2 -2
- package/fesm2022/hermes-ui-angular-timeline.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-toast.mjs +6 -6
- package/fesm2022/hermes-ui-angular-toast.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-utils-conditional.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-utils.mjs +6 -0
- package/fesm2022/hermes-ui-angular-utils.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-wizard.mjs +58 -58
- package/fesm2022/hermes-ui-angular-wizard.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular.mjs.map +1 -1
- package/forms/combobox/_combobox.clarity.scss +18 -4
- package/forms/combobox/_properties.combobox.scss +5 -5
- package/forms/styles/_input-group.clarity.scss +7 -0
- package/forms/styles/_mixins.forms.scss +12 -10
- package/forms/styles/_native-select.clarity.scss +17 -5
- package/forms/styles/_properties.forms.scss +29 -18
- package/forms/styles/_textarea.clarity.scss +4 -4
- package/forms/styles/_variables.forms.scss +6 -0
- package/hermes-ui.scss +7 -7
- package/layout/main-container/_properties.header.scss +44 -6
- package/layout/main-container/_variables.header.scss +11 -0
- package/layout/nav/_header.clarity.scss +14 -0
- package/layout/nav/_mixins.header.scss +55 -40
- package/layout/nav/_responsive-nav.clarity.scss +21 -10
- package/layout/vertical-nav/_properties.vertical-nav.scss +77 -27
- package/layout/vertical-nav/_variables.vertical-nav.scss +23 -0
- package/layout/vertical-nav/_vertical-nav.clarity.scss +418 -277
- package/package.json +1 -1
- package/toast/README.md +65 -65
- package/toast/_properties.toast.scss +56 -56
- package/toast/_toast.clarity.scss +190 -190
- package/toast/_variables.toast.scss +33 -33
- package/types/hermes-ui-angular-addons-theme-builder.d.ts +2 -2
- package/types/hermes-ui-angular-addons-theme-builder.d.ts.map +1 -1
- package/types/hermes-ui-angular-data-datagrid.d.ts.map +1 -1
- package/types/hermes-ui-angular-icon.d.ts +3 -3
- package/types/hermes-ui-angular-icon.d.ts.map +1 -1
- package/types/hermes-ui-angular-layout-vertical-nav.d.ts +134 -10
- package/types/hermes-ui-angular-layout-vertical-nav.d.ts.map +1 -1
- package/types/hermes-ui-angular-popover-common.d.ts +4 -3
- package/types/hermes-ui-angular-popover-common.d.ts.map +1 -1
- package/types/hermes-ui-angular-utils.d.ts +12 -0
- package/types/hermes-ui-angular-utils.d.ts.map +1 -1
- package/types/hermes-ui-angular-wizard.d.ts.map +1 -1
package/package.json
CHANGED
package/toast/README.md
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
# Toast
|
|
2
|
-
|
|
3
|
-
Replicates shadcn's Toast (Base UI primitive) stacking effect natively in hermes/angular:
|
|
4
|
-
newest toast on top, older ones peeking out and scaled down behind it, expanding to a
|
|
5
|
-
full list on hover/focus, sliding in/out with the same 500ms ease-out curve.
|
|
6
|
-
|
|
7
|
-
## Setup - two separate pieces
|
|
8
|
-
|
|
9
|
-
`HermesToastService` and `<hermes-toaster>` are not wired to each other automatically;
|
|
10
|
-
each consuming app has to connect them itself:
|
|
11
|
-
|
|
12
|
-
- **`HermesToastService`** is `@Injectable({ providedIn: 'root' })` - it's available for
|
|
13
|
-
injection anywhere in the app with zero setup. Calling `show()`/`success()`/etc. just
|
|
14
|
-
pushes the toast onto an internal `BehaviorSubject`; it does **not** render anything.
|
|
15
|
-
- **`<hermes-toaster>`** is a regular Angular component (selector `hermes-toaster`,
|
|
16
|
-
from `HermesToastModule`) that has to be placed **once**, manually, somewhere in the
|
|
17
|
-
app's template - it's the only thing that subscribes to the service and actually
|
|
18
|
-
draws the stack.
|
|
19
|
-
|
|
20
|
-
If `<hermes-toaster>` is never mounted, `HermesToastService` calls silently no-op from
|
|
21
|
-
the user's perspective: the toasts pile up in the service's internal state but nothing
|
|
22
|
-
ever appears on screen. Mount it once near the app root (same pattern as shadcn/sonner's
|
|
23
|
-
`<Toaster />`):
|
|
24
|
-
|
|
25
|
-
```ts
|
|
26
|
-
// app.component.ts
|
|
27
|
-
import { HermesToastModule } from '@hermes/angular/toast';
|
|
28
|
-
|
|
29
|
-
@Component({
|
|
30
|
-
imports: [HermesToastModule /* ... */],
|
|
31
|
-
template: `
|
|
32
|
-
<router-outlet></router-outlet>
|
|
33
|
-
<hermes-toaster></hermes-toaster>
|
|
34
|
-
`,
|
|
35
|
-
})
|
|
36
|
-
export class AppComponent {}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Triggering toasts
|
|
40
|
-
|
|
41
|
-
From anywhere in the app, inject `HermesToastService`:
|
|
42
|
-
|
|
43
|
-
```ts
|
|
44
|
-
constructor(private toasts: HermesToastService) {}
|
|
45
|
-
|
|
46
|
-
save() {
|
|
47
|
-
this.toasts.promise(this.api.save(), {
|
|
48
|
-
loading: 'Saving...',
|
|
49
|
-
success: 'Saved',
|
|
50
|
-
error: 'Could not save',
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
`HermesToastService` also exposes `show()`, `default()`, `info()`, `success()`, `warning()`,
|
|
56
|
-
`danger()`, `loading()`, `update()`, `dismiss()` and `dismissAll()`.
|
|
57
|
-
|
|
58
|
-
## Known scope cuts
|
|
59
|
-
|
|
60
|
-
- **Fixed-ish stack height**: each toast's height is measured live via `ResizeObserver`
|
|
61
|
-
(see `toast-item.ts`), but the very first render frame uses `--hermes-toast-fallback-height`
|
|
62
|
-
until that measurement lands.
|
|
63
|
-
- **No swipe-to-dismiss**: shadcn's Base UI toast supports drag-to-dismiss in all four
|
|
64
|
-
directions; this port dismisses only via the close button, the action button, timeout,
|
|
65
|
-
or Escape (dismisses the frontmost toast).
|
|
1
|
+
# Toast
|
|
2
|
+
|
|
3
|
+
Replicates shadcn's Toast (Base UI primitive) stacking effect natively in hermes/angular:
|
|
4
|
+
newest toast on top, older ones peeking out and scaled down behind it, expanding to a
|
|
5
|
+
full list on hover/focus, sliding in/out with the same 500ms ease-out curve.
|
|
6
|
+
|
|
7
|
+
## Setup - two separate pieces
|
|
8
|
+
|
|
9
|
+
`HermesToastService` and `<hermes-toaster>` are not wired to each other automatically;
|
|
10
|
+
each consuming app has to connect them itself:
|
|
11
|
+
|
|
12
|
+
- **`HermesToastService`** is `@Injectable({ providedIn: 'root' })` - it's available for
|
|
13
|
+
injection anywhere in the app with zero setup. Calling `show()`/`success()`/etc. just
|
|
14
|
+
pushes the toast onto an internal `BehaviorSubject`; it does **not** render anything.
|
|
15
|
+
- **`<hermes-toaster>`** is a regular Angular component (selector `hermes-toaster`,
|
|
16
|
+
from `HermesToastModule`) that has to be placed **once**, manually, somewhere in the
|
|
17
|
+
app's template - it's the only thing that subscribes to the service and actually
|
|
18
|
+
draws the stack.
|
|
19
|
+
|
|
20
|
+
If `<hermes-toaster>` is never mounted, `HermesToastService` calls silently no-op from
|
|
21
|
+
the user's perspective: the toasts pile up in the service's internal state but nothing
|
|
22
|
+
ever appears on screen. Mount it once near the app root (same pattern as shadcn/sonner's
|
|
23
|
+
`<Toaster />`):
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
// app.component.ts
|
|
27
|
+
import { HermesToastModule } from '@hermes/angular/toast';
|
|
28
|
+
|
|
29
|
+
@Component({
|
|
30
|
+
imports: [HermesToastModule /* ... */],
|
|
31
|
+
template: `
|
|
32
|
+
<router-outlet></router-outlet>
|
|
33
|
+
<hermes-toaster></hermes-toaster>
|
|
34
|
+
`,
|
|
35
|
+
})
|
|
36
|
+
export class AppComponent {}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Triggering toasts
|
|
40
|
+
|
|
41
|
+
From anywhere in the app, inject `HermesToastService`:
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
constructor(private toasts: HermesToastService) {}
|
|
45
|
+
|
|
46
|
+
save() {
|
|
47
|
+
this.toasts.promise(this.api.save(), {
|
|
48
|
+
loading: 'Saving...',
|
|
49
|
+
success: 'Saved',
|
|
50
|
+
error: 'Could not save',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`HermesToastService` also exposes `show()`, `default()`, `info()`, `success()`, `warning()`,
|
|
56
|
+
`danger()`, `loading()`, `update()`, `dismiss()` and `dismissAll()`.
|
|
57
|
+
|
|
58
|
+
## Known scope cuts
|
|
59
|
+
|
|
60
|
+
- **Fixed-ish stack height**: each toast's height is measured live via `ResizeObserver`
|
|
61
|
+
(see `toast-item.ts`), but the very first render frame uses `--hermes-toast-fallback-height`
|
|
62
|
+
until that measurement lands.
|
|
63
|
+
- **No swipe-to-dismiss**: shadcn's Base UI toast supports drag-to-dismiss in all four
|
|
64
|
+
directions; this port dismisses only via the close button, the action button, timeout,
|
|
65
|
+
or Escape (dismisses the frontmost toast).
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
3
|
-
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
4
|
-
* This software is released under MIT license.
|
|
5
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
@use '../styles/mixins';
|
|
9
|
-
@use '../styles/core/tokens/variables.tokens' as tokens;
|
|
10
|
-
@use '../styles/variables/variables.density' as density;
|
|
11
|
-
|
|
12
|
-
@include mixins.exports('toast.properties') {
|
|
13
|
-
@include mixins.root-or-host() {
|
|
14
|
-
// Layout - shadcn's Toast viewport is `w-auto max-w-sm` (384px) with a 0.75rem
|
|
15
|
-
// gap/peek between stacked cards and 1rem inset from the viewport edge.
|
|
16
|
-
--hermes-toast-viewport-inset: #{mixins.baselinePx(16)};
|
|
17
|
-
--hermes-toast-max-width: #{mixins.baselinePx(384)};
|
|
18
|
-
--hermes-toast-gap: #{mixins.baselinePx(12)};
|
|
19
|
-
--hermes-toast-peek: #{mixins.baselinePx(12)};
|
|
20
|
-
// Fallback height used before the item's own ResizeObserver reports its real,
|
|
21
|
-
// content-driven height (see toast-item.ts) - only visible for one frame on insert.
|
|
22
|
-
--hermes-toast-fallback-height: #{mixins.baselinePx(56)};
|
|
23
|
-
--hermes-toast-content-padding: #{mixins.baselinePx(16)};
|
|
24
|
-
--hermes-toast-content-gap: #{mixins.baselinePx(12)};
|
|
25
|
-
--hermes-toast-icon-size: #{mixins.baselinePx(16)};
|
|
26
|
-
|
|
27
|
-
&,
|
|
28
|
-
& [hermes-density] {
|
|
29
|
-
// shadcn's default --radius token (0.625rem @ Tailwind's 16px root = 10px)
|
|
30
|
-
--hermes-toast-border-radius: #{mixins.baselinePx(10)};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
&,
|
|
34
|
-
& [hermes-theme] {
|
|
35
|
-
// shadcn's Toast is a neutral `bg-popover` surface - unlike hermes-alert, the
|
|
36
|
-
// status color lives only on the icon, not on the card background.
|
|
37
|
-
--hermes-toast-bg-color: #{tokens.$hermes-alias-object-overlay-background};
|
|
38
|
-
--hermes-toast-color: #{tokens.$hermes-alias-typography-color-400};
|
|
39
|
-
--hermes-toast-description-color: #{tokens.$hermes-alias-typography-color-300};
|
|
40
|
-
--hermes-toast-border-color: #{tokens.$hermes-alias-object-container-border-color};
|
|
41
|
-
--hermes-toast-border-width: #{tokens.$hermes-alias-object-border-width-100};
|
|
42
|
-
// one step below the modal's shadow-300: toasts sit above page content but
|
|
43
|
-
// below the modal/dialog surface when both happen to be visible together
|
|
44
|
-
--hermes-toast-box-shadow: #{tokens.$hermes-alias-object-shadow-200};
|
|
45
|
-
|
|
46
|
-
--hermes-toast-info-icon-color: #{tokens.$hermes-alias-status-info};
|
|
47
|
-
--hermes-toast-success-icon-color: #{tokens.$hermes-alias-status-success};
|
|
48
|
-
--hermes-toast-warning-icon-color: #{tokens.$hermes-alias-status-warning-dark};
|
|
49
|
-
--hermes-toast-danger-icon-color: #{tokens.$hermes-alias-status-danger};
|
|
50
|
-
|
|
51
|
-
--hermes-toast-action-color: #{tokens.$hermes-alias-typography-color-400};
|
|
52
|
-
--hermes-toast-close-color: var(--hermes-close-color);
|
|
53
|
-
--hermes-toast-close-color-hover: var(--hermes-close-color-hover);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
3
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
4
|
+
* This software is released under MIT license.
|
|
5
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
@use '../styles/mixins';
|
|
9
|
+
@use '../styles/core/tokens/variables.tokens' as tokens;
|
|
10
|
+
@use '../styles/variables/variables.density' as density;
|
|
11
|
+
|
|
12
|
+
@include mixins.exports('toast.properties') {
|
|
13
|
+
@include mixins.root-or-host() {
|
|
14
|
+
// Layout - shadcn's Toast viewport is `w-auto max-w-sm` (384px) with a 0.75rem
|
|
15
|
+
// gap/peek between stacked cards and 1rem inset from the viewport edge.
|
|
16
|
+
--hermes-toast-viewport-inset: #{mixins.baselinePx(16)};
|
|
17
|
+
--hermes-toast-max-width: #{mixins.baselinePx(384)};
|
|
18
|
+
--hermes-toast-gap: #{mixins.baselinePx(12)};
|
|
19
|
+
--hermes-toast-peek: #{mixins.baselinePx(12)};
|
|
20
|
+
// Fallback height used before the item's own ResizeObserver reports its real,
|
|
21
|
+
// content-driven height (see toast-item.ts) - only visible for one frame on insert.
|
|
22
|
+
--hermes-toast-fallback-height: #{mixins.baselinePx(56)};
|
|
23
|
+
--hermes-toast-content-padding: #{mixins.baselinePx(16)};
|
|
24
|
+
--hermes-toast-content-gap: #{mixins.baselinePx(12)};
|
|
25
|
+
--hermes-toast-icon-size: #{mixins.baselinePx(16)};
|
|
26
|
+
|
|
27
|
+
&,
|
|
28
|
+
& [hermes-density] {
|
|
29
|
+
// shadcn's default --radius token (0.625rem @ Tailwind's 16px root = 10px)
|
|
30
|
+
--hermes-toast-border-radius: #{mixins.baselinePx(10)};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&,
|
|
34
|
+
& [hermes-theme] {
|
|
35
|
+
// shadcn's Toast is a neutral `bg-popover` surface - unlike hermes-alert, the
|
|
36
|
+
// status color lives only on the icon, not on the card background.
|
|
37
|
+
--hermes-toast-bg-color: #{tokens.$hermes-alias-object-overlay-background};
|
|
38
|
+
--hermes-toast-color: #{tokens.$hermes-alias-typography-color-400};
|
|
39
|
+
--hermes-toast-description-color: #{tokens.$hermes-alias-typography-color-300};
|
|
40
|
+
--hermes-toast-border-color: #{tokens.$hermes-alias-object-container-border-color};
|
|
41
|
+
--hermes-toast-border-width: #{tokens.$hermes-alias-object-border-width-100};
|
|
42
|
+
// one step below the modal's shadow-300: toasts sit above page content but
|
|
43
|
+
// below the modal/dialog surface when both happen to be visible together
|
|
44
|
+
--hermes-toast-box-shadow: #{tokens.$hermes-alias-object-shadow-200};
|
|
45
|
+
|
|
46
|
+
--hermes-toast-info-icon-color: #{tokens.$hermes-alias-status-info};
|
|
47
|
+
--hermes-toast-success-icon-color: #{tokens.$hermes-alias-status-success};
|
|
48
|
+
--hermes-toast-warning-icon-color: #{tokens.$hermes-alias-status-warning-dark};
|
|
49
|
+
--hermes-toast-danger-icon-color: #{tokens.$hermes-alias-status-danger};
|
|
50
|
+
|
|
51
|
+
--hermes-toast-action-color: #{tokens.$hermes-alias-typography-color-400};
|
|
52
|
+
--hermes-toast-close-color: var(--hermes-close-color);
|
|
53
|
+
--hermes-toast-close-color-hover: var(--hermes-close-color-hover);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -1,190 +1,190 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
3
|
-
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
4
|
-
* This software is released under MIT license.
|
|
5
|
-
* The full license information can be found in LICENSE in the root directory of this project.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
@use 'sass:map';
|
|
9
|
-
@use 'sass:meta';
|
|
10
|
-
@use '../styles/mixins';
|
|
11
|
-
@use '../styles/variables/variables';
|
|
12
|
-
@use '../styles/variables/variables.density' as density;
|
|
13
|
-
@use '../styles/core/tokens/variables.tokens' as tokens;
|
|
14
|
-
@use 'variables.toast' as toast-variables;
|
|
15
|
-
|
|
16
|
-
@include meta.load-css('properties.toast');
|
|
17
|
-
@include mixins.exports('toast.clarity') {
|
|
18
|
-
// Mirrors shadcn's toast primitive: 500ms, ease-out-expo-ish curve. Kept as a raw
|
|
19
|
-
// value (not $hermes-global-animation-easing-secondary, which is a bouncier overshoot
|
|
20
|
-
// curve) so the slide feels identical to the shadcn reference. Also set in
|
|
21
|
-
// toaster.ts's Angular `animations: []` for the enter/leave transitions - keep both
|
|
22
|
-
// in sync if this ever changes.
|
|
23
|
-
$toast-transition-duration: tokens.$hermes-global-animation-duration-slow;
|
|
24
|
-
$toast-transition-easing: cubic-bezier(0.22, 1, 0.36, 1);
|
|
25
|
-
|
|
26
|
-
hermes-toaster {
|
|
27
|
-
position: fixed;
|
|
28
|
-
z-index: map.get(variables.$hermes-layers, toast);
|
|
29
|
-
inset-block-end: toast-variables.$hermes-toast-viewport-inset;
|
|
30
|
-
inset-inline-end: toast-variables.$hermes-toast-viewport-inset;
|
|
31
|
-
width: 100%;
|
|
32
|
-
max-width: toast-variables.$hermes-toast-max-width;
|
|
33
|
-
// The viewport itself never intercepts clicks; only the toasts inside it do, so
|
|
34
|
-
// page content underneath the empty parts of the stack stays fully interactive.
|
|
35
|
-
pointer-events: none;
|
|
36
|
-
|
|
37
|
-
// corners: shadcn's <Toaster/> defaults to bottom, `sm:right-4 sm:left-auto` -
|
|
38
|
-
// bottom-right below is the hermes default, the rest are opt-in via
|
|
39
|
-
// [hermesToasterPosition].
|
|
40
|
-
&[data-position='bottom-left'] {
|
|
41
|
-
inset-inline-end: auto;
|
|
42
|
-
inset-inline-start: toast-variables.$hermes-toast-viewport-inset;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
&[data-position='top-right'],
|
|
46
|
-
&[data-position='top-left'] {
|
|
47
|
-
inset-block-end: auto;
|
|
48
|
-
inset-block-start: toast-variables.$hermes-toast-viewport-inset;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
&[data-position='top-left'] {
|
|
52
|
-
inset-inline-end: auto;
|
|
53
|
-
inset-inline-start: toast-variables.$hermes-toast-viewport-inset;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
@media screen and (max-width: map.get(variables.$hermes-grid-breakpoints, sm)) {
|
|
57
|
-
inset-inline: toast-variables.$hermes-toast-viewport-inset;
|
|
58
|
-
max-width: none;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
hermes-toast-item {
|
|
63
|
-
// Per-item stacking state. --hermes-toast-index (0 = frontmost/newest) is set by
|
|
64
|
-
// toast-item.ts; --hermes-toast-height is kept in sync with the item's real
|
|
65
|
-
// rendered height by a ResizeObserver in the same file, falling back to a fixed
|
|
66
|
-
// estimate for the single frame before that first measurement lands.
|
|
67
|
-
--index: var(--hermes-toast-index, 0);
|
|
68
|
-
--height: var(--hermes-toast-height, #{toast-variables.$hermes-toast-fallback-height});
|
|
69
|
-
// shadcn's stack: each toast behind the front one shrinks by 10% and only peeks
|
|
70
|
-
// out by --peek, until the group is expanded (hovered/focused).
|
|
71
|
-
--scale: max(0, calc(1 - (var(--index) * 0.1)));
|
|
72
|
-
--shrink: calc(1 - var(--scale));
|
|
73
|
-
|
|
74
|
-
position: absolute;
|
|
75
|
-
inset-inline: 0;
|
|
76
|
-
inset-block-end: 0;
|
|
77
|
-
display: block;
|
|
78
|
-
width: 100%;
|
|
79
|
-
transform-origin: bottom center;
|
|
80
|
-
transform: translateY(
|
|
81
|
-
calc((var(--index) * #{toast-variables.$hermes-toast-peek} * -1) - (var(--shrink) * var(--height)))
|
|
82
|
-
)
|
|
83
|
-
scale(var(--scale));
|
|
84
|
-
transition:
|
|
85
|
-
transform $toast-transition-duration $toast-transition-easing,
|
|
86
|
-
opacity tokens.$hermes-global-animation-duration-quick ease;
|
|
87
|
-
z-index: calc(1000 - var(--index));
|
|
88
|
-
pointer-events: auto;
|
|
89
|
-
|
|
90
|
-
&.limited {
|
|
91
|
-
opacity: 0;
|
|
92
|
-
pointer-events: none;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
hermes-toaster.expanded hermes-toast-item {
|
|
97
|
-
transform: translateY(calc(var(--index) * (var(--height) + #{toast-variables.$hermes-toast-gap}) * -1));
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.toast {
|
|
101
|
-
display: flex;
|
|
102
|
-
align-items: center;
|
|
103
|
-
gap: toast-variables.$hermes-toast-content-gap;
|
|
104
|
-
width: 100%;
|
|
105
|
-
box-sizing: border-box;
|
|
106
|
-
padding: toast-variables.$hermes-toast-content-padding;
|
|
107
|
-
background-color: toast-variables.$hermes-toast-bg-color;
|
|
108
|
-
color: toast-variables.$hermes-toast-color;
|
|
109
|
-
border: toast-variables.$hermes-toast-border-width solid toast-variables.$hermes-toast-border-color;
|
|
110
|
-
border-radius: toast-variables.$hermes-toast-border-radius;
|
|
111
|
-
box-shadow: toast-variables.$hermes-toast-box-shadow;
|
|
112
|
-
|
|
113
|
-
@include mixins.generate-typography-token('BODY-14-RG-STD');
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.toast-icon {
|
|
117
|
-
flex: 0 0 auto;
|
|
118
|
-
|
|
119
|
-
@include mixins.equilateral(toast-variables.$hermes-toast-icon-size);
|
|
120
|
-
|
|
121
|
-
&.spinner {
|
|
122
|
-
@include mixins.min-equilateral(toast-variables.$hermes-toast-icon-size);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
.toast-info .toast-icon {
|
|
127
|
-
fill: toast-variables.$hermes-toast-info-icon-color;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
.toast-success .toast-icon {
|
|
131
|
-
fill: toast-variables.$hermes-toast-success-icon-color;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.toast-warning .toast-icon {
|
|
135
|
-
fill: toast-variables.$hermes-toast-warning-icon-color;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.toast-danger .toast-icon {
|
|
139
|
-
fill: toast-variables.$hermes-toast-danger-icon-color;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
.toast-content {
|
|
143
|
-
flex: 1 1 auto;
|
|
144
|
-
min-width: 0;
|
|
145
|
-
display: flex;
|
|
146
|
-
flex-direction: column;
|
|
147
|
-
gap: density.$hermes-base-gap-xs;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
.toast-title {
|
|
151
|
-
@include mixins.generate-typography-token('BODY-14-MD-STD');
|
|
152
|
-
|
|
153
|
-
color: toast-variables.$hermes-toast-color;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
.toast-description {
|
|
157
|
-
@include mixins.generate-typography-token('BODY-14-RG-STD');
|
|
158
|
-
|
|
159
|
-
color: toast-variables.$hermes-toast-description-color;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
.toast-action {
|
|
163
|
-
flex: 0 0 auto;
|
|
164
|
-
color: toast-variables.$hermes-toast-action-color;
|
|
165
|
-
text-decoration: underline;
|
|
166
|
-
white-space: nowrap;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
.toast-close {
|
|
170
|
-
flex: 0 0 auto;
|
|
171
|
-
float: none;
|
|
172
|
-
color: toast-variables.$hermes-toast-close-color;
|
|
173
|
-
|
|
174
|
-
@include mixins.equilateral(density.$hermes-base-icon-size-s);
|
|
175
|
-
|
|
176
|
-
hermes-icon,
|
|
177
|
-
hermes-icon {
|
|
178
|
-
fill: toast-variables.$hermes-toast-close-color;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
&:hover {
|
|
182
|
-
color: toast-variables.$hermes-toast-close-color-hover;
|
|
183
|
-
|
|
184
|
-
hermes-icon,
|
|
185
|
-
hermes-icon {
|
|
186
|
-
fill: toast-variables.$hermes-toast-close-color-hover;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
|
|
3
|
+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
|
4
|
+
* This software is released under MIT license.
|
|
5
|
+
* The full license information can be found in LICENSE in the root directory of this project.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
@use 'sass:map';
|
|
9
|
+
@use 'sass:meta';
|
|
10
|
+
@use '../styles/mixins';
|
|
11
|
+
@use '../styles/variables/variables';
|
|
12
|
+
@use '../styles/variables/variables.density' as density;
|
|
13
|
+
@use '../styles/core/tokens/variables.tokens' as tokens;
|
|
14
|
+
@use 'variables.toast' as toast-variables;
|
|
15
|
+
|
|
16
|
+
@include meta.load-css('properties.toast');
|
|
17
|
+
@include mixins.exports('toast.clarity') {
|
|
18
|
+
// Mirrors shadcn's toast primitive: 500ms, ease-out-expo-ish curve. Kept as a raw
|
|
19
|
+
// value (not $hermes-global-animation-easing-secondary, which is a bouncier overshoot
|
|
20
|
+
// curve) so the slide feels identical to the shadcn reference. Also set in
|
|
21
|
+
// toaster.ts's Angular `animations: []` for the enter/leave transitions - keep both
|
|
22
|
+
// in sync if this ever changes.
|
|
23
|
+
$toast-transition-duration: tokens.$hermes-global-animation-duration-slow;
|
|
24
|
+
$toast-transition-easing: cubic-bezier(0.22, 1, 0.36, 1);
|
|
25
|
+
|
|
26
|
+
hermes-toaster {
|
|
27
|
+
position: fixed;
|
|
28
|
+
z-index: map.get(variables.$hermes-layers, toast);
|
|
29
|
+
inset-block-end: toast-variables.$hermes-toast-viewport-inset;
|
|
30
|
+
inset-inline-end: toast-variables.$hermes-toast-viewport-inset;
|
|
31
|
+
width: 100%;
|
|
32
|
+
max-width: toast-variables.$hermes-toast-max-width;
|
|
33
|
+
// The viewport itself never intercepts clicks; only the toasts inside it do, so
|
|
34
|
+
// page content underneath the empty parts of the stack stays fully interactive.
|
|
35
|
+
pointer-events: none;
|
|
36
|
+
|
|
37
|
+
// corners: shadcn's <Toaster/> defaults to bottom, `sm:right-4 sm:left-auto` -
|
|
38
|
+
// bottom-right below is the hermes default, the rest are opt-in via
|
|
39
|
+
// [hermesToasterPosition].
|
|
40
|
+
&[data-position='bottom-left'] {
|
|
41
|
+
inset-inline-end: auto;
|
|
42
|
+
inset-inline-start: toast-variables.$hermes-toast-viewport-inset;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&[data-position='top-right'],
|
|
46
|
+
&[data-position='top-left'] {
|
|
47
|
+
inset-block-end: auto;
|
|
48
|
+
inset-block-start: toast-variables.$hermes-toast-viewport-inset;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
&[data-position='top-left'] {
|
|
52
|
+
inset-inline-end: auto;
|
|
53
|
+
inset-inline-start: toast-variables.$hermes-toast-viewport-inset;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@media screen and (max-width: map.get(variables.$hermes-grid-breakpoints, sm)) {
|
|
57
|
+
inset-inline: toast-variables.$hermes-toast-viewport-inset;
|
|
58
|
+
max-width: none;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
hermes-toast-item {
|
|
63
|
+
// Per-item stacking state. --hermes-toast-index (0 = frontmost/newest) is set by
|
|
64
|
+
// toast-item.ts; --hermes-toast-height is kept in sync with the item's real
|
|
65
|
+
// rendered height by a ResizeObserver in the same file, falling back to a fixed
|
|
66
|
+
// estimate for the single frame before that first measurement lands.
|
|
67
|
+
--index: var(--hermes-toast-index, 0);
|
|
68
|
+
--height: var(--hermes-toast-height, #{toast-variables.$hermes-toast-fallback-height});
|
|
69
|
+
// shadcn's stack: each toast behind the front one shrinks by 10% and only peeks
|
|
70
|
+
// out by --peek, until the group is expanded (hovered/focused).
|
|
71
|
+
--scale: max(0, calc(1 - (var(--index) * 0.1)));
|
|
72
|
+
--shrink: calc(1 - var(--scale));
|
|
73
|
+
|
|
74
|
+
position: absolute;
|
|
75
|
+
inset-inline: 0;
|
|
76
|
+
inset-block-end: 0;
|
|
77
|
+
display: block;
|
|
78
|
+
width: 100%;
|
|
79
|
+
transform-origin: bottom center;
|
|
80
|
+
transform: translateY(
|
|
81
|
+
calc((var(--index) * #{toast-variables.$hermes-toast-peek} * -1) - (var(--shrink) * var(--height)))
|
|
82
|
+
)
|
|
83
|
+
scale(var(--scale));
|
|
84
|
+
transition:
|
|
85
|
+
transform $toast-transition-duration $toast-transition-easing,
|
|
86
|
+
opacity tokens.$hermes-global-animation-duration-quick ease;
|
|
87
|
+
z-index: calc(1000 - var(--index));
|
|
88
|
+
pointer-events: auto;
|
|
89
|
+
|
|
90
|
+
&.limited {
|
|
91
|
+
opacity: 0;
|
|
92
|
+
pointer-events: none;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
hermes-toaster.expanded hermes-toast-item {
|
|
97
|
+
transform: translateY(calc(var(--index) * (var(--height) + #{toast-variables.$hermes-toast-gap}) * -1));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.toast {
|
|
101
|
+
display: flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
gap: toast-variables.$hermes-toast-content-gap;
|
|
104
|
+
width: 100%;
|
|
105
|
+
box-sizing: border-box;
|
|
106
|
+
padding: toast-variables.$hermes-toast-content-padding;
|
|
107
|
+
background-color: toast-variables.$hermes-toast-bg-color;
|
|
108
|
+
color: toast-variables.$hermes-toast-color;
|
|
109
|
+
border: toast-variables.$hermes-toast-border-width solid toast-variables.$hermes-toast-border-color;
|
|
110
|
+
border-radius: toast-variables.$hermes-toast-border-radius;
|
|
111
|
+
box-shadow: toast-variables.$hermes-toast-box-shadow;
|
|
112
|
+
|
|
113
|
+
@include mixins.generate-typography-token('BODY-14-RG-STD');
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.toast-icon {
|
|
117
|
+
flex: 0 0 auto;
|
|
118
|
+
|
|
119
|
+
@include mixins.equilateral(toast-variables.$hermes-toast-icon-size);
|
|
120
|
+
|
|
121
|
+
&.spinner {
|
|
122
|
+
@include mixins.min-equilateral(toast-variables.$hermes-toast-icon-size);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.toast-info .toast-icon {
|
|
127
|
+
fill: toast-variables.$hermes-toast-info-icon-color;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.toast-success .toast-icon {
|
|
131
|
+
fill: toast-variables.$hermes-toast-success-icon-color;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.toast-warning .toast-icon {
|
|
135
|
+
fill: toast-variables.$hermes-toast-warning-icon-color;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.toast-danger .toast-icon {
|
|
139
|
+
fill: toast-variables.$hermes-toast-danger-icon-color;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.toast-content {
|
|
143
|
+
flex: 1 1 auto;
|
|
144
|
+
min-width: 0;
|
|
145
|
+
display: flex;
|
|
146
|
+
flex-direction: column;
|
|
147
|
+
gap: density.$hermes-base-gap-xs;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.toast-title {
|
|
151
|
+
@include mixins.generate-typography-token('BODY-14-MD-STD');
|
|
152
|
+
|
|
153
|
+
color: toast-variables.$hermes-toast-color;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.toast-description {
|
|
157
|
+
@include mixins.generate-typography-token('BODY-14-RG-STD');
|
|
158
|
+
|
|
159
|
+
color: toast-variables.$hermes-toast-description-color;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.toast-action {
|
|
163
|
+
flex: 0 0 auto;
|
|
164
|
+
color: toast-variables.$hermes-toast-action-color;
|
|
165
|
+
text-decoration: underline;
|
|
166
|
+
white-space: nowrap;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.toast-close {
|
|
170
|
+
flex: 0 0 auto;
|
|
171
|
+
float: none;
|
|
172
|
+
color: toast-variables.$hermes-toast-close-color;
|
|
173
|
+
|
|
174
|
+
@include mixins.equilateral(density.$hermes-base-icon-size-s);
|
|
175
|
+
|
|
176
|
+
hermes-icon,
|
|
177
|
+
hermes-icon {
|
|
178
|
+
fill: toast-variables.$hermes-toast-close-color;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
&:hover {
|
|
182
|
+
color: toast-variables.$hermes-toast-close-color-hover;
|
|
183
|
+
|
|
184
|
+
hermes-icon,
|
|
185
|
+
hermes-icon {
|
|
186
|
+
fill: toast-variables.$hermes-toast-close-color-hover;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|