CUB-46: add Quick-Jump Button component (M3 FilledTonalIconButton)
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
color="primary"
|
||||||
|
class="quick-jump-button"
|
||||||
|
aria-label="Jump to session"
|
||||||
|
matTooltip="Jump to session"
|
||||||
|
(click)="jump.emit()">
|
||||||
|
<mat-icon>arrow_forward</mat-icon>
|
||||||
|
</button>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// ============================================================================
|
||||||
|
// Quick-Jump Button — M3 FilledTonalIconButton
|
||||||
|
// ============================================================================
|
||||||
|
// Per spec: 8% state layer overlay on hover/focus using
|
||||||
|
// --color-surface-light with opacity.
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
.quick-jump-button {
|
||||||
|
// M3 FilledTonalIconButton base: secondary container background
|
||||||
|
// with on-secondary-container icon color. We rely on the M3 theme
|
||||||
|
// token values provided by Angular Material, but override the
|
||||||
|
// ripple/state-layer to use the 8% overlay pattern.
|
||||||
|
|
||||||
|
// M3 state layer — 8% overlay on hover/focus
|
||||||
|
// Using the project's custom surface-light token with opacity
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
border-radius: inherit;
|
||||||
|
background-color: var(--cc-on-surface, #E2E8F0);
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 200ms cubic-bezier(0.2, 0, 0, 1);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover::after {
|
||||||
|
opacity: 0.08; // 8% state layer
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus-visible::after {
|
||||||
|
opacity: 0.08; // 8% state layer on focus
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active::after {
|
||||||
|
opacity: 0.12; // 12% pressed state per M3 spec
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';
|
||||||
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatIconModule } from '@angular/material/icon';
|
||||||
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Quick-Jump Button component for navigating to agent sessions.
|
||||||
|
*
|
||||||
|
* M3 FilledTonalIconButton style with 8% state layer overlay
|
||||||
|
* for hover/focus states. Emits a click event for parent-driven
|
||||||
|
* navigation.
|
||||||
|
*
|
||||||
|
* Per spec: arrow_forward icon, aria-label, tooltip.
|
||||||
|
*/
|
||||||
|
@Component({
|
||||||
|
selector: 'app-quick-jump-button',
|
||||||
|
standalone: true,
|
||||||
|
imports: [MatButtonModule, MatIconModule, MatTooltipModule],
|
||||||
|
templateUrl: './quick-jump-button.component.html',
|
||||||
|
styleUrl: './quick-jump-button.component.scss',
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
|
})
|
||||||
|
export class QuickJumpButtonComponent {
|
||||||
|
/** Emitted when the button is clicked, signaling navigation intent. */
|
||||||
|
@Output() readonly jump = new EventEmitter<void>();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user