Skip to content

Commit 8dbd68e

Browse files
authored
Merge pull request #438 from cal-smith/pill
feat(tag): add tag component
2 parents cbba099 + b71d7b4 commit 8dbd68e

File tree

5 files changed

+113
-2
lines changed

5 files changed

+113
-2
lines changed

.storybook/experimental.component.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
1-
import { Component, AfterViewInit, OnDestroy } from "@angular/core";
1+
import {
2+
Component,
3+
AfterViewInit,
4+
OnDestroy,
5+
Input,
6+
Output,
7+
EventEmitter
8+
} from "@angular/core";
29
import { ExperimentalService } from "../src/experimental.module";
310

411
@Component({
512
selector: "app-experimental-component",
613
template: ``
714
})
815
export class ExperimentalComponenent implements AfterViewInit, OnDestroy {
16+
@Input() set isExperimental(value: boolean) {
17+
this.experimental.isExperimental = value;
18+
this.isExperimentalChange.emit(this.experimental.isExperimental);
19+
}
20+
@Output() isExperimentalChange = new EventEmitter();
21+
922
constructor(protected experimental: ExperimentalService) {
1023
experimental.isExperimental = false;
24+
this.isExperimentalChange.emit(this.isExperimental);
1125
}
1226

1327
ngAfterViewInit() {
@@ -30,5 +44,6 @@ export class ExperimentalComponenent implements AfterViewInit, OnDestroy {
3044
} else {
3145
this.experimental.isExperimental = false;
3246
}
47+
this.isExperimentalChange.emit(this.experimental.isExperimental);
3348
}
3449
}

src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export * from "./dropdown/dropdown.module";
1313
export * from "./experimental.module";
1414
export * from "./file-uploader/file-uploader.module";
1515
export * from "./forms/forms.module";
16+
export * from "./grid/grid.module";
1617
export * from "./i18n/i18n.module";
1718
export * from "./icon/icon.module";
1819
export * from "./inline-loading/inline-loading.module";
@@ -35,6 +36,6 @@ export * from "./structured-list/structured-list.module";
3536
export * from "./switch/switch.module";
3637
export * from "./table/table.module";
3738
export * from "./tabs/tabs.module";
39+
export * from "./tag/tag.module";
3840
export * from "./tiles/tiles.module";
3941
export * from "./ui-shell/ui-shell.module";
40-
export * from "./grid/grid.module";

src/tag/tag.component.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import {
2+
Component,
3+
Input,
4+
HostBinding
5+
} from "@angular/core";
6+
7+
/**
8+
* Supported tag types for carbon v9
9+
*/
10+
export type TagType = "beta" | "community" | "custom" | "dedicated" | "experimental" | "ibm" | "local" | "private" | "third-party";
11+
12+
/**
13+
* Supported tag types for carbon v10
14+
*/
15+
export type TagTypeExperimental = "red" | "magenta" | "purple" | "blue" | "cyan" | "teal" | "green" | "cool-gray" | "warm-gray";
16+
17+
/**
18+
* Component that represents a tag for labelling/categorizing using keywords
19+
*/
20+
@Component({
21+
selector: "ibm-tag",
22+
template: `<ng-content></ng-content>`
23+
})
24+
export class Tag {
25+
/**
26+
* type of the tag determines the styling
27+
*
28+
* Reference `TagType` for v9 applications, and `TagTypeExperimental` for v10/v9 experimental mode applications
29+
*/
30+
@Input() type: TagType | TagTypeExperimental = "ibm";
31+
32+
@Input() class = "";
33+
34+
@HostBinding("attr.class") get attrClass() {
35+
return `bx--tag bx--tag--${this.type} ${this.class}`;
36+
}
37+
}

src/tag/tag.module.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { NgModule } from "@angular/core";
2+
import { CommonModule } from "@angular/common";
3+
4+
import { Tag } from "./tag.component";
5+
6+
export * from "./tag.component";
7+
8+
@NgModule({
9+
declarations: [ Tag ],
10+
exports: [ Tag ],
11+
imports: [ CommonModule ]
12+
})
13+
export class TagModule { }

src/tag/tag.stories.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { storiesOf, moduleMetadata } from "@storybook/angular";
2+
import { withKnobs } from "@storybook/addon-knobs/angular";
3+
4+
import { TagModule } from "../tag/tag.module";
5+
import { ExperimentalComponenent } from "../../.storybook/experimental.component";
6+
import { ExperimentalModule } from "../experimental.module";
7+
8+
storiesOf("Tag", module)
9+
.addDecorator(
10+
moduleMetadata({
11+
declarations: [
12+
ExperimentalComponenent
13+
],
14+
imports: [
15+
TagModule,
16+
ExperimentalModule
17+
]
18+
})
19+
)
20+
.addDecorator(withKnobs)
21+
.add("Basic", () => ({
22+
template: `
23+
<app-experimental-component [(isExperimental)]="experimental"></app-experimental-component>
24+
<ibm-tag [type]="(!experimental ? 'ibm' : 'warm-gray')" class="foo {{test}}">{{ !experimental ? "IBM" : "Warm-gray" }}</ibm-tag>
25+
<br><br>
26+
<ibm-tag [type]="(!experimental ? 'beta' : 'red')">{{ !experimental ? "Beta" : "Red" }}</ibm-tag>
27+
<br><br>
28+
<ibm-tag [type]="(!experimental ? 'community' : 'magenta')">{{ !experimental ? "Community" : "Magenta" }}</ibm-tag>
29+
<br><br>
30+
<ibm-tag [type]="(!experimental ? 'custom' : 'purple')">{{ !experimental ? "Custom" : "Purple" }}</ibm-tag>
31+
<br><br>
32+
<ibm-tag [type]="(!experimental ? 'dedicated' : 'blue')">{{ !experimental ? "Dedicated" : "Blue" }}</ibm-tag>
33+
<br><br>
34+
<ibm-tag [type]="(!experimental ? 'experimental' : 'cyan')">{{ !experimental ? "Experimental" : "Cyan" }}</ibm-tag>
35+
<br><br>
36+
<ibm-tag [type]="(!experimental ? 'local' : 'teal')">{{ !experimental ? "Local" : "Teal" }}</ibm-tag>
37+
<br><br>
38+
<ibm-tag [type]="(!experimental ? 'private' : 'green')">{{ !experimental ? "Private" : "Green" }}</ibm-tag>
39+
<br><br>
40+
<ibm-tag [type]="(!experimental ? 'third-party' : 'cool-gray')">{{ !experimental ? "Third-party" : "Cool-gray" }}</ibm-tag>
41+
`,
42+
props: {
43+
experimental: false
44+
}
45+
}));

0 commit comments

Comments
 (0)