Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion docs/src/app/pages/component-viewer/token-table.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,23 @@

<mat-form-field subscriptSizing="dynamic" appearance="outline">
<mat-label>Filter by type</mat-label>
<mat-select [value]="typeFilter()" (selectionChange)="typeFilter.set($event.value)">
<mat-select [(value)]="typeFilter">
@for (type of types; track $index) {
<mat-option [value]="type">{{type | titlecase}}</mat-option>
}
</mat-select>
@if (typeFilter()) {
<button matSuffix matIconButton aria-label="Clear type filter" matTooltip="Clear type filter"
(click)="typeFilter.set(null); $event.stopPropagation()">
<mat-icon>clear</mat-icon>
</button>
}
</mat-form-field>

<mat-form-field subscriptSizing="dynamic" appearance="outline">
<mat-label>Filter by system token</mat-label>
<input #systemTokenInput matInput [value]="systemTokenFilter()"
(input)="systemTokenFilter.set(systemTokenInput.value)"/>
</mat-form-field>

<button mat-button (click)="reset()">Reset filters</button>
Expand Down
26 changes: 18 additions & 8 deletions docs/src/app/pages/component-viewer/token-table.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@

import {ChangeDetectionStrategy, Component, computed, input, signal} from '@angular/core';
import {TitleCasePipe} from '@angular/common';
import {MatButton} from '@angular/material/button';
import {MatFormField, MatLabel} from '@angular/material/form-field';
import {MatButton, MatIconButton} from '@angular/material/button';
import {MatFormField, MatLabel, MatSuffix} from '@angular/material/form-field';
import {MatIcon} from '@angular/material/icon';
import {MatInput} from '@angular/material/input';
import {MatOption, MatSelect} from '@angular/material/select';
import {MatTooltip} from '@angular/material/tooltip';
import {TokenName} from './token-name';

type TokenType = 'base' | 'color' | 'typography' | 'density';
Expand All @@ -31,34 +33,42 @@ export interface Token {
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
MatButton,
MatIconButton,
MatFormField,
MatLabel,
MatSuffix,
MatIcon,
MatInput,
MatSelect,
MatOption,
MatTooltip,
TokenName,
TitleCasePipe,
],
})
export class TokenTable {
tokens = input.required<Token[]>();
readonly tokens = input.required<Token[]>();

protected nameFilter = signal('');
protected typeFilter = signal<TokenType | null>(null);
protected types: TokenType[] = ['base', 'color', 'typography', 'density'];
protected filteredTokens = computed(() => {
protected readonly nameFilter = signal('');
protected readonly typeFilter = signal<TokenType | null>(null);
protected readonly systemTokenFilter = signal('');
protected readonly types: TokenType[] = ['base', 'color', 'typography', 'density'];
protected readonly filteredTokens = computed(() => {
const name = this.nameFilter().trim().toLowerCase();
const typeFilter = this.typeFilter();
const systemTokenFilter = this.systemTokenFilter();

return this.tokens().filter(
token =>
(!name || token.overridesName.toLowerCase().includes(name)) &&
(!typeFilter || token.type === typeFilter),
(!typeFilter || token.type === typeFilter) &&
(!systemTokenFilter || token.derivedFrom?.toLowerCase().includes(systemTokenFilter)),
);
});

protected reset() {
this.nameFilter.set('');
this.typeFilter.set(null);
this.systemTokenFilter.set('');
}
}
Loading