88
99import { ChangeDetectionStrategy , Component , computed , input , signal } from '@angular/core' ;
1010import { TitleCasePipe } from '@angular/common' ;
11- import { MatButton } from '@angular/material/button' ;
12- import { MatFormField , MatLabel } from '@angular/material/form-field' ;
11+ import { MatAutocomplete , MatAutocompleteTrigger } from '@angular/material/autocomplete' ;
12+ import { MatButton , MatIconButton } from '@angular/material/button' ;
13+ import { MatFormField , MatLabel , MatSuffix } from '@angular/material/form-field' ;
14+ import { MatIcon } from '@angular/material/icon' ;
1315import { MatInput } from '@angular/material/input' ;
1416import { MatOption , MatSelect } from '@angular/material/select' ;
17+ import { MatTooltip } from '@angular/material/tooltip' ;
1518import { TokenName } from './token-name' ;
1619
1720type TokenType = 'base' | 'color' | 'typography' | 'density' ;
@@ -30,35 +33,54 @@ export interface Token {
3033 styleUrl : './token-table.scss' ,
3134 changeDetection : ChangeDetectionStrategy . OnPush ,
3235 imports : [
36+ MatAutocomplete ,
37+ MatAutocompleteTrigger ,
3338 MatButton ,
39+ MatIconButton ,
3440 MatFormField ,
3541 MatLabel ,
42+ MatSuffix ,
43+ MatIcon ,
3644 MatInput ,
3745 MatSelect ,
3846 MatOption ,
47+ MatTooltip ,
3948 TokenName ,
4049 TitleCasePipe ,
4150 ] ,
4251} )
4352export class TokenTable {
44- tokens = input . required < Token [ ] > ( ) ;
53+ readonly tokens = input . required < Token [ ] > ( ) ;
4554
46- protected nameFilter = signal ( '' ) ;
47- protected typeFilter = signal < TokenType | null > ( null ) ;
48- protected types : TokenType [ ] = [ 'base' , 'color' , 'typography' , 'density' ] ;
49- protected filteredTokens = computed ( ( ) => {
55+ protected readonly nameFilter = signal ( '' ) ;
56+ protected readonly typeFilter = signal < TokenType | null > ( null ) ;
57+ protected readonly systemTokenFilter = signal ( '' ) ;
58+ protected readonly types : TokenType [ ] = [ 'base' , 'color' , 'typography' , 'density' ] ;
59+ protected readonly systemTokens = computed ( ( ) => {
60+ return [
61+ ...new Set (
62+ this . tokens ( )
63+ . map ( token => token . derivedFrom )
64+ . filter ( Boolean ) ,
65+ ) ,
66+ ] ;
67+ } ) ;
68+ protected readonly filteredTokens = computed ( ( ) => {
5069 const name = this . nameFilter ( ) . trim ( ) . toLowerCase ( ) ;
5170 const typeFilter = this . typeFilter ( ) ;
71+ const systemTokenFilter = this . systemTokenFilter ( ) ;
5272
5373 return this . tokens ( ) . filter (
5474 token =>
5575 ( ! name || token . overridesName . toLowerCase ( ) . includes ( name ) ) &&
56- ( ! typeFilter || token . type === typeFilter ) ,
76+ ( ! typeFilter || token . type === typeFilter ) &&
77+ ( ! systemTokenFilter || token . derivedFrom ?. toLowerCase ( ) . includes ( systemTokenFilter ) ) ,
5778 ) ;
5879 } ) ;
5980
6081 protected reset ( ) {
6182 this . nameFilter . set ( '' ) ;
6283 this . typeFilter . set ( null ) ;
84+ this . systemTokenFilter . set ( '' ) ;
6385 }
6486}
0 commit comments