@angular/material v2.0.0-beta.12 examples updated.

This commit is contained in:
mustafahlvc 2017-10-10 17:19:06 +03:00
parent c025563145
commit bc239571a1
40 changed files with 599 additions and 58 deletions

View File

@ -26,6 +26,13 @@ import { DialogElementsExampleDialog, DialogElementsExample } from '../../../../
import { DialogOverviewExampleDialog, DialogOverviewExample } from '../../../../../assets/angular-material-examples/dialog-overview/dialog-overview-example';
import { ExpansionOverviewExample } from '../../../../../assets/angular-material-examples/expansion-overview/expansion-overview-example';
import { ExpansionStepsExample } from '../../../../../assets/angular-material-examples/expansion-steps/expansion-steps-example';
import { MyTelInput, FormFieldCustomControlExample } from '../../../../../assets/angular-material-examples/form-field-custom-control/form-field-custom-control-example';
import { FormFieldErrorExample } from '../../../../../assets/angular-material-examples/form-field-error/form-field-error-example';
import { FormFieldHintExample } from '../../../../../assets/angular-material-examples/form-field-hint/form-field-hint-example';
import { FormFieldOverviewExample } from '../../../../../assets/angular-material-examples/form-field-overview/form-field-overview-example';
import { FormFieldPlaceholderExample } from '../../../../../assets/angular-material-examples/form-field-placeholder/form-field-placeholder-example';
import { FormFieldPrefixSuffixExample } from '../../../../../assets/angular-material-examples/form-field-prefix-suffix/form-field-prefix-suffix-example';
import { FormFieldThemingExample } from '../../../../../assets/angular-material-examples/form-field-theming/form-field-theming-example';
import { GridListDynamicExample } from '../../../../../assets/angular-material-examples/grid-list-dynamic/grid-list-dynamic-example';
import { GridListOverviewExample } from '../../../../../assets/angular-material-examples/grid-list-overview/grid-list-overview-example';
import { IconOverviewExample } from '../../../../../assets/angular-material-examples/icon-overview/icon-overview-example';
@ -95,6 +102,15 @@ export const COMPONENT_MAP = {
'datepicker-touch',
'datepicker-api'
],
'form-field' : [
'form-field-overview',
'form-field-placeholder',
'form-field-hint',
'form-field-error',
'form-field-prefix-suffix',
'form-field-theming',
'form-field-custom-control'
],
'input' : [
'input-overview',
'input-errors',
@ -167,7 +183,8 @@ export const COMPONENT_MAP = {
],
'chips' : [
'chips-overview',
'chips-input'
'chips-input',
'chips-stacked'
],
'icon' : [
'icon-overview',
@ -378,6 +395,48 @@ export const EXAMPLE_COMPONENTS = {
additionalFiles: null,
selectorName : null
},
'form-field-custom-control' : {
title : 'Form field with custom telephone number input control. ',
component : FormFieldCustomControlExample,
additionalFiles: ['form-field-custom-control-example.html'],
selectorName : 'FormFieldCustomControlExample, MyTelInput'
},
'form-field-error' : {
title : 'Form field with error messages ',
component : FormFieldErrorExample,
additionalFiles: null,
selectorName : null
},
'form-field-hint' : {
title : 'Form field with hints ',
component : FormFieldHintExample,
additionalFiles: null,
selectorName : null
},
'form-field-overview' : {
title : 'Simple form field ',
component : FormFieldOverviewExample,
additionalFiles: null,
selectorName : null
},
'form-field-placeholder' : {
title : 'Form field with placeholder ',
component : FormFieldPlaceholderExample,
additionalFiles: null,
selectorName : null
},
'form-field-prefix-suffix' : {
title : 'Form field with prefix & suffix ',
component : FormFieldPrefixSuffixExample,
additionalFiles: null,
selectorName : null
},
'form-field-theming' : {
title : 'Form field theming ',
component : FormFieldThemingExample,
additionalFiles: null,
selectorName : null
},
'grid-list-dynamic' : {
title : 'Dynamic grid-list',
component : GridListDynamicExample,
@ -707,6 +766,13 @@ export const EXAMPLE_LIST = [
DialogOverviewExample,
ExpansionOverviewExample,
ExpansionStepsExample,
MyTelInput, FormFieldCustomControlExample,
FormFieldErrorExample,
FormFieldHintExample,
FormFieldOverviewExample,
FormFieldPlaceholderExample,
FormFieldPrefixSuffixExample,
FormFieldThemingExample,
GridListDynamicExample,
GridListOverviewExample,
IconOverviewExample,

View File

@ -377,6 +377,11 @@ export class NavigationModel
'type' : 'item',
'url' : '/components/angular-material/datepicker'
},
{
'title': 'Form field',
'type' : 'item',
'url' : '/components/angular-material/form-field'
},
{
'title': 'Input',
'type' : 'item',

View File

@ -1,14 +1,14 @@
<mat-form-field class="demo-chip-list">
<mat-chip-list matPrefix #chipList>
<mat-chip-list #chipList>
<mat-chip *ngFor="let fruit of fruits" [selectable]="selectable"
[removable]="removable" (remove)="remove(fruit)">
{{fruit.name}}
<mat-icon matChipRemove *ngIf="removable">cancel</mat-icon>
</mat-chip>
</mat-chip-list>
<input matInput placeholder="New fruit..."
<input placeholder="New fruit..."
[matChipInputFor]="chipList"
[matChipInputSeparatorKeyCodes]="separatorKeysCodes"
[matChipInputAddOnBlur]="addOnBlur"
(matChipInputTokenEnd)="add($event)"/>
</mat-chip-list>
</mat-form-field>

View File

@ -1,7 +1,5 @@
<mat-chip-list class="mat-chip-list-stacked">
<mat-chip *ngFor="let chipColor of availableColors"
selected="true"
color="{{chipColor.color}}">
{{chipColor.name}}
<mat-chip *ngFor="let chip of availableColors" selected="true" [color]="chip.color">
{{chip.name}}
</mat-chip>
</mat-chip-list>

View File

@ -1,4 +1,4 @@
<h2 matDialogTitle>Install Angular</h2>
<h2 mat-dialog-title>Install Angular</h2>
<mat-dialog-content>
<h3>DEVELOP ACROSS ALL PLATFORMS</h3>
<p>Learn one way to build applications with Angular and reuse your code and abilities to build
@ -20,6 +20,6 @@
that supports Google's largest applications.</p>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button [matDialogClose]="true" tabindex="1">Install</button>
<button mat-button matDialogClose tabindex="-1">Cancel</button>
<button mat-button [mat-dialog-close]="true" tabindex="1">Install</button>
<button mat-button mat-dialog-close tabindex="-1">Cancel</button>
</mat-dialog-actions>

View File

@ -1,4 +1,4 @@
<h1 matDialogTitle>Favorite Animal</h1>
<h1 mat-dialog-title>Favorite Animal</h1>
<div mat-dialog-content>
My favorite animal is:
<ul>

View File

@ -1,5 +1,5 @@
<h1 matDialogTitle>Dialog with elements</h1>
<h1 mat-dialog-title>Dialog with elements</h1>
<div mat-dialog-content>This dialog showcases the title, close, content and actions elements.</div>
<div mat-dialog-actions>
<button mat-button matDialogClose>Close</button>
<button mat-button mat-dialog-close>Close</button>
</div>

View File

@ -1,4 +1,4 @@
<h1 matDialogTitle>Hi {{data.name}}</h1>
<h1 mat-dialog-title>Hi {{data.name}}</h1>
<div mat-dialog-content>
<p>What's your favorite animal?</p>
<mat-form-field>
@ -6,6 +6,6 @@
</mat-form-field>
</div>
<div mat-dialog-actions>
<button mat-button [matDialogClose]="data.animal" tabindex="2">Ok</button>
<button mat-button [mat-dialog-close]="data.animal" tabindex="2">Ok</button>
<button mat-button (click)="onNoClick()" tabindex="-1">No Thanks</button>
</div>

View File

@ -0,0 +1,21 @@
div {
display: flex;
}
input {
border: none;
background: none;
padding: 0;
outline: none;
font: inherit;
text-align: center;
}
span {
opacity: 0;
transition: opacity 200ms;
}
:host.floating span {
opacity: 1;
}

View File

@ -0,0 +1,7 @@
<div [formGroup]="parts">
<input class="area" formControlName="area" size="3" [disabled]="disabled">
<span>&ndash;</span>
<input class="exchange" formControlName="exchange" size="3" [disabled]="disabled">
<span>&ndash;</span>
<input class="subscriber" formControlName="subscriber" size="4" [disabled]="disabled">
</div>

View File

@ -0,0 +1,177 @@
import { FocusMonitor } from '@angular/cdk/a11y';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { Component, ElementRef, Input, OnDestroy, Renderer2 } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { MatFormFieldControl } from '@angular/material/form-field';
import { Subject } from 'rxjs/Subject';
/** Data structure for holding telephone number. */
export class MyTel
{
constructor(public area: string, public exchange: string, public subscriber: string)
{
}
}
/** Custom `MatFormFieldControl` for telephone number input. */
@Component({
selector : 'my-tel-input',
templateUrl: 'form-field-custom-control-example.html',
styleUrls : ['form-field-custom-control-example.css'],
providers : [
{
provide : MatFormFieldControl,
useExisting: MyTelInput
}
],
host : {
'[class.floating]' : 'shouldPlaceholderFloat',
'[id]' : 'id',
'[attr.aria-describedby]': 'describedBy'
}
})
export class MyTelInput implements MatFormFieldControl<MyTel>, OnDestroy
{
static nextId = 0;
parts: FormGroup;
stateChanges = new Subject<void>();
focused = false;
ngControl = null;
errorState = false;
controlType = 'my-tel-input';
get empty()
{
let n = this.parts.value;
return !n.area && !n.exchange && !n.subscriber;
}
get shouldPlaceholderFloat()
{
return this.focused || !this.empty;
}
id = `my-tel-input-${MyTelInput.nextId++}`;
describedBy = '';
@Input()
get placeholder()
{
return this._placeholder;
}
set placeholder(plh)
{
this._placeholder = plh;
this.stateChanges.next();
}
private _placeholder: string;
@Input()
get required()
{
return this._required;
}
set required(req)
{
this._required = coerceBooleanProperty(req);
this.stateChanges.next();
}
private _required = false;
@Input()
get disabled()
{
return this._disabled;
}
set disabled(dis)
{
this._disabled = coerceBooleanProperty(dis);
this.stateChanges.next();
}
private _disabled = false;
@Input()
get value(): MyTel | null
{
let n = this.parts.value;
if ( n.area.length == 3 && n.exchange.length == 3 && n.subscriber.length == 4 )
{
return new MyTel(n.area, n.exchange, n.subscriber);
}
return null;
}
set value(tel: MyTel | null)
{
tel = tel || new MyTel('', '', '');
this.parts.setValue({
area : tel.area,
exchange : tel.exchange,
subscriber: tel.subscriber
});
this.stateChanges.next();
}
constructor(fb: FormBuilder, private fm: FocusMonitor, private elRef: ElementRef,
renderer: Renderer2
)
{
this.parts = fb.group({
'area' : '',
'exchange' : '',
'subscriber': ''
});
fm.monitor(elRef.nativeElement, renderer, true).subscribe((origin) => {
this.focused = !!origin;
this.stateChanges.next();
});
}
ngOnDestroy()
{
this.stateChanges.complete();
this.fm.stopMonitoring(this.elRef.nativeElement);
}
setDescribedByIds(ids: string[])
{
this.describedBy = ids.join(' ');
}
onContainerClick(event: MouseEvent)
{
if ( (event.target as Element).tagName.toLowerCase() != 'input' )
{
this.elRef.nativeElement.querySelector('input').focus();
}
}
}
/** @title Form field with custom telephone number input control. */
@Component({
selector: 'form-field-custom-control-example',
template: `
<mat-form-field>
<my-tel-input placeholder="Phone number" required></my-tel-input>
<mat-icon matSuffix>phone</mat-icon>
<mat-hint>Include area code</mat-hint>
</mat-form-field>
`
})
export class FormFieldCustomControlExample
{
}

View File

@ -0,0 +1,8 @@
.example-container {
display: flex;
flex-direction: column;
}
.example-container > * {
width: 100%;
}

View File

@ -0,0 +1,6 @@
<div class="example-container">
<mat-form-field>
<input matInput placeholder="Enter your email" [formControl]="email" required>
<mat-error *ngIf="email.invalid">{{getErrorMessage()}}</mat-error>
</mat-form-field>
</div>

View File

@ -0,0 +1,20 @@
import { Component } from '@angular/core';
import { FormControl, Validators } from '@angular/forms';
/** @title Form field with error messages */
@Component({
selector : 'form-field-error-example',
templateUrl: 'form-field-error-example.html',
styleUrls : ['form-field-error-example.css']
})
export class FormFieldErrorExample
{
email = new FormControl('', [Validators.required, Validators.email]);
getErrorMessage()
{
return this.email.hasError('required') ? 'You must enter a value' :
this.email.hasError('email') ? 'Not a valid email' :
'';
}
}

View File

@ -0,0 +1,8 @@
.example-container {
display: flex;
flex-direction: column;
}
.example-container > * {
width: 100%;
}

View File

@ -0,0 +1,13 @@
<div class="example-container">
<mat-form-field hintLabel="Max 10 characters">
<input matInput #input maxlength="10" placeholder="Enter some input">
<mat-hint align="end">{{input.value?.length || 0}}/10</mat-hint>
</mat-form-field>
<mat-form-field>
<mat-select placeholder="Select me">
<mat-option value="option">Option</mat-option>
</mat-select>
<mat-hint align="end">Here's the dropdown arrow ^</mat-hint>
</mat-form-field>
</div>

View File

@ -0,0 +1,11 @@
import { Component } from '@angular/core';
/** @title Form field with hints */
@Component({
selector : 'form-field-hint-example',
templateUrl: 'form-field-hint-example.html',
styleUrls : ['form-field-hint-example.css']
})
export class FormFieldHintExample
{
}

View File

@ -0,0 +1,8 @@
.example-container {
display: flex;
flex-direction: column;
}
.example-container > * {
width: 100%;
}

View File

@ -0,0 +1,15 @@
<div class="example-container">
<mat-form-field>
<input matInput placeholder="Input">
</mat-form-field>
<mat-form-field>
<textarea matInput placeholder="Textarea"></textarea>
</mat-form-field>
<mat-form-field>
<mat-select placeholder="Select">
<mat-option value="option">Option</mat-option>
</mat-select>
</mat-form-field>
</div>

View File

@ -0,0 +1,11 @@
import { Component } from '@angular/core';
/** @title Simple form field */
@Component({
selector : 'form-field-overview-example',
templateUrl: 'form-field-overview-example.html',
styleUrls : ['form-field-overview-example.css']
})
export class FormFieldOverviewExample
{
}

View File

@ -0,0 +1,20 @@
.example-container {
display: flex;
flex-direction: column;
}
.example-container > * {
width: 100%;
}
.example-container form {
margin-bottom: 20px;
}
.example-container form > * {
margin: 5px 0;
}
.example-container .mat-radio-button {
margin: 0 5px;
}

View File

@ -0,0 +1,31 @@
<div class="example-container">
<form class="example-container" [formGroup]="options">
<mat-checkbox formControlName="hideRequired">Hide required marker</mat-checkbox>
<div>
<label>Float placeholder: </label>
<mat-radio-group formControlName="floatPlaceholder">
<mat-radio-button value="auto">Auto</mat-radio-button>
<mat-radio-button value="always">Always</mat-radio-button>
<mat-radio-button value="never">Never</mat-radio-button>
</mat-radio-group>
</div>
</form>
<mat-form-field
[hideRequiredMarker]="options.value.hideRequired"
[floatPlaceholder]="options.value.floatPlaceholder">
<input matInput placeholder="Simple placeholder" required>
</mat-form-field>
<mat-form-field
[hideRequiredMarker]="options.value.hideRequired"
[floatPlaceholder]="options.value.floatPlaceholder">
<mat-select required>
<mat-option>-- None --</mat-option>
<mat-option value="option">Option</mat-option>
</mat-select>
<mat-placeholder>
<mat-icon>favorite</mat-icon>
<b> Fancy</b> <i> placeholder</i></mat-placeholder>
</mat-form-field>
</div>

View File

@ -0,0 +1,21 @@
import { Component } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
/** @title Form field with placeholder */
@Component({
selector : 'form-field-placeholder-example',
templateUrl: 'form-field-placeholder-example.html',
styleUrls : ['form-field-placeholder-example.css']
})
export class FormFieldPlaceholderExample
{
options: FormGroup;
constructor(fb: FormBuilder)
{
this.options = fb.group({
hideRequired : false,
floatPlaceholder: 'auto'
});
}
}

View File

@ -0,0 +1,17 @@
.example-container {
display: flex;
flex-direction: column;
}
.example-container > * {
width: 100%;
}
.example-right-align {
text-align: right;
}
input.example-right-align::-webkit-outer-spin-button,
input.example-right-align::-webkit-inner-spin-button {
display: none;
}

View File

@ -0,0 +1,12 @@
<div class="example-container">
<mat-form-field>
<input matInput placeholder="Enter your password" [type]="hide ? 'password' : 'text'">
<mat-icon matSuffix (click)="hide = !hide">{{hide ? 'visibility' : 'visibility_off'}}</mat-icon>
</mat-form-field>
<mat-form-field>
<input matInput placeholder="Amount" type="number" class="example-right-align">
<span matPrefix>$&nbsp;</span>
<span matSuffix>.00</span>
</mat-form-field>
</div>

View File

@ -0,0 +1,12 @@
import { Component } from '@angular/core';
/** @title Form field with prefix & suffix */
@Component({
selector : 'form-field-prefix-suffix-example',
templateUrl: 'form-field-prefix-suffix-example.html',
styleUrls : ['form-field-prefix-suffix-example.css']
})
export class FormFieldPrefixSuffixExample
{
hide = true;
}

View File

@ -0,0 +1,8 @@
.example-container {
display: flex;
flex-direction: column;
}
.example-container > * {
width: 100%;
}

View File

@ -0,0 +1,14 @@
<form class="example-container" [formGroup]="options" [style.fontSize.px]="getFontSize()">
<mat-form-field [color]="options.value.color">
<mat-select placeholder="Color" formControlName="color">
<mat-option value="primary">Primary</mat-option>
<mat-option value="accent">Accent</mat-option>
<mat-option value="warn">Warn</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field [color]="options.value.color">
<input matInput type="number" placeholder="Font size (px)" formControlName="fontSize" min="10">
<mat-error *ngIf="options.get('fontSize').invalid">Min size: 10px</mat-error>
</mat-form-field>
</form>

View File

@ -0,0 +1,26 @@
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
/** @title Form field theming */
@Component({
selector : 'form-field-theming-example',
templateUrl: 'form-field-theming-example.html',
styleUrls : ['form-field-theming-example.css']
})
export class FormFieldThemingExample
{
options: FormGroup;
constructor(fb: FormBuilder)
{
this.options = fb.group({
'color' : 'primary',
'fontSize': [16, Validators.min(10)]
});
}
getFontSize()
{
return Math.max(10, this.options.value.fontSize);
}
}

View File

@ -1,15 +1,15 @@
<mat-list>
<h3 matSubheader>Folders</h3>
<h3 mat-subheader>Folders</h3>
<mat-list-item *ngFor="let folder of folders">
<mat-icon mat-list-icon>folder</mat-icon>
<h4 matLine>{{folder.name}}</h4>
<p matLine> {{folder.updated | date}} </p>
<h4 mat-line>{{folder.name}}</h4>
<p mat-line> {{folder.updated | date}} </p>
</mat-list-item>
<mat-divider></mat-divider>
<h3 matSubheader>Notes</h3>
<h3 mat-subheader>Notes</h3>
<mat-list-item *ngFor="let note of notes">
<mat-icon mat-list-icon>note</mat-icon>
<h4 matLine>{{note.name}}</h4>
<p matLine> {{note.updated | date}} </p>
<h4 mat-line>{{note.name}}</h4>
<p mat-line> {{note.updated | date}} </p>
</mat-list-item>
</mat-list>

View File

@ -10,12 +10,12 @@ import { PageEvent } from '@angular/material';
})
export class PaginatorConfigurableExample
{
// MdPaginator Inputs
// MatPaginator Inputs
length = 100;
pageSize = 10;
pageSizeOptions = [5, 10, 25, 100];
// MdPaginator Output
// MatPaginator Output
pageEvent: PageEvent;
setPageSizeOptions(setPageSizeOptionsInput: string)

View File

@ -1 +1,3 @@
/** No CSS for this example */
.mat-radio-button ~ .mat-radio-button {
padding-right: 16px;
}

View File

@ -5,7 +5,8 @@ import { Component } from '@angular/core';
*/
@Component({
selector : 'radio-overview-example',
templateUrl: 'radio-overview-example.html'
templateUrl: 'radio-overview-example.html',
styleUrls : ['radio-overview-example.css']
})
export class RadioOverviewExample
{

View File

@ -1,9 +1,11 @@
<form>
<mat-form-field>
<mat-select placeholder="Favorite food" [(ngModel)]="selectedValue" name="food">
<mat-option *ngFor="let food of foods" [value]="food.value">
{{food.viewValue}}
</mat-option>
</mat-select>
</mat-form-field>
<p> Selected value: {{selectedValue}} </p>
</form>

View File

@ -1,5 +1,7 @@
<mat-form-field>
<mat-select placeholder="Favorite food">
<mat-option *ngFor="let food of foods" [value]="food.value">
{{ food.viewValue }}
</mat-option>
</mat-select>
</mat-form-field>

View File

@ -1,3 +0,0 @@
.example-pizza-party {
color: hotpink;
}

View File

@ -25,7 +25,7 @@ export class SnackBarComponentExample
@Component({
selector : 'snack-bar-component-example-snack',
templateUrl: 'snack-bar-component-example-snack.html',
styleUrls : ['snack-bar-component-example-snack.css']
styles : [`.example-pizza-party { color: hotpink; }`]
})
export class PizzaPartyComponent
{

View File

@ -1,5 +1,6 @@
<div class="example-tooltip-host" matTooltip="Tooltip!" [matTooltipPosition]="position">
<span>Show tooltip</span>
<mat-form-field>
<mat-select class="example-select" [(ngModel)]="position">
<mat-option value="before">Before</mat-option>
<mat-option value="after">After</mat-option>
@ -8,4 +9,5 @@
<mat-option value="left">Left</mat-option>
<mat-option value="right">Right</mat-option>
</mat-select>
</mat-form-field>
</div>