From 41b199ab831eff8d197e006328274dbf8b1b11bd Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 11 Mar 2022 21:00:24 +0100 Subject: [PATCH] Tweak component library slightly (#715) --- components/src/badge/badge.component.ts | 67 +++++++++++++------ components/src/badge/badge.stories.ts | 6 +- components/src/button/button.component.ts | 20 +++--- .../{Button.stories.ts => button.stories.ts} | 5 +- components/src/callout/callout.component.html | 2 +- components/src/tw-theme.css | 19 ++++-- components/tailwind.config.base.js | 10 ++- 7 files changed, 90 insertions(+), 39 deletions(-) rename components/src/button/{Button.stories.ts => button.stories.ts} (87%) diff --git a/components/src/badge/badge.component.ts b/components/src/badge/badge.component.ts index 4f62affb67..e66a5748ad 100644 --- a/components/src/badge/badge.component.ts +++ b/components/src/badge/badge.component.ts @@ -1,39 +1,68 @@ -import { Component, Input } from "@angular/core"; +import { Directive, ElementRef, HostBinding, Input, OnChanges, OnInit } from "@angular/core"; type BadgeTypes = "primary" | "secondary" | "success" | "danger" | "warning" | "info"; const styles: Record = { - primary: ["tw-bg-primary-500", "hover:tw-bg-primary-700"], - secondary: ["tw-bg-secondary-500", "hover:tw-bg-secondary-700"], - success: ["tw-bg-success-500", "hover:tw-bg-success-700"], - danger: ["tw-bg-danger-500", "hover:tw-bg-danger-700"], - warning: ["tw-bg-warning-500", "hover:tw-bg-warning-700"], - info: ["tw-bg-info-500", "hover:tw-bg-info-700"], + primary: ["tw-bg-primary-500"], + secondary: ["tw-bg-text-muted"], + success: ["tw-bg-success-500"], + danger: ["tw-bg-danger-500"], + warning: ["tw-bg-warning-500"], + info: ["tw-bg-info-500"], }; -@Component({ - selector: "bit-badge", - template: ``, +const hoverStyles: Record = { + primary: ["hover:tw-bg-primary-700"], + secondary: ["hover:tw-bg-secondary-700"], + success: ["hover:tw-bg-success-700"], + danger: ["hover:tw-bg-danger-700"], + warning: ["hover:tw-bg-warning-700"], + info: ["hover:tw-bg-info-700"], +}; + +@Directive({ + selector: "span[bit-badge], a[bit-badge], button[bit-badge]", }) -export class BadgeComponent { - @Input() - type: BadgeTypes = "primary"; +export class BadgeComponent implements OnInit, OnChanges { + @HostBinding("class") @Input("class") classList = ""; + + @Input() badgeType: BadgeTypes = "primary"; + + private isSpan = false; + + constructor(private el: ElementRef) { + this.isSpan = el?.nativeElement?.nodeName == "SPAN"; + } + + ngOnInit(): void { + this.classList = this.classes.join(" "); + } + + ngOnChanges() { + this.ngOnInit(); + } get classes() { return [ "tw-inline-block", - "tw-py-0.5", - "tw-px-1", + "tw-py-1", + "tw-px-1.5", "tw-font-bold", "tw-leading-none", "tw-text-center", - "tw-text-contrast", - "tw-align-baseline", + "!tw-text-contrast", "tw-rounded", - "tw-border-collapse", + "tw-border-none", "tw-box-border", "tw-whitespace-no-wrap", "tw-text-xs", - ].concat(styles[this.type]); + "hover:tw-no-underline", + "focus:tw-outline-none", + "focus:tw-ring", + "focus:tw-ring-offset-2", + "focus:tw-ring-primary-700", + ] + .concat(styles[this.badgeType]) + .concat(this.isSpan ? [] : hoverStyles[this.badgeType]); } } diff --git a/components/src/badge/badge.stories.ts b/components/src/badge/badge.stories.ts index f464e23064..6af7c3b85a 100644 --- a/components/src/badge/badge.stories.ts +++ b/components/src/badge/badge.stories.ts @@ -13,7 +13,11 @@ export default { const Template: Story = (args: BadgeComponent) => ({ props: args, template: ` - Test Content + Span Badge +

+ Link Badge +

+ Button `, }); diff --git a/components/src/button/button.component.ts b/components/src/button/button.component.ts index a56ae245bd..5fcbff6a30 100644 --- a/components/src/button/button.component.ts +++ b/components/src/button/button.component.ts @@ -1,4 +1,4 @@ -import { Input, HostBinding, OnChanges, Directive } from "@angular/core"; +import { Input, HostBinding, OnChanges, Directive, OnInit } from "@angular/core"; export type ButtonTypes = "primary" | "secondary" | "danger"; @@ -18,10 +18,10 @@ const buttonStyles: Record = { "!tw-text-muted", "hover:tw-bg-secondary-500", "hover:tw-border-secondary-500", - "hover:tw-text-contrast", + "hover:!tw-text-contrast", "focus:tw-bg-secondary-500", "focus:tw-border-secondary-500", - "focus:tw-text-contrast", + "focus:!tw-text-contrast", ].join(" "), danger: [ "tw-bg-transparent", @@ -29,18 +29,18 @@ const buttonStyles: Record = { "!tw-text-danger", "hover:tw-bg-danger-500", "hover:tw-border-danger-500", - "hover:tw-text-contrast", + "hover:!tw-text-contrast", "focus:tw-bg-danger-500", "focus:tw-border-danger-500", - "focus:tw-text-contrast", + "focus:!tw-text-contrast", ].join(" "), }; @Directive({ selector: "button[bit-button], a[bit-button]", }) -export class ButtonComponent implements OnChanges { - @HostBinding("class") @Input("class") classList = ""; +export class ButtonComponent implements OnInit, OnChanges { + @HostBinding("class") @Input() classList = ""; @Input() buttonType: ButtonTypes = "secondary"; @@ -48,10 +48,14 @@ export class ButtonComponent implements OnChanges { @Input() block = false; - ngOnChanges() { + ngOnInit(): void { this.classList = this.classes.join(" "); } + ngOnChanges() { + this.ngOnInit(); + } + get classes(): string[] { return [ "tw-font-semibold", diff --git a/components/src/button/Button.stories.ts b/components/src/button/button.stories.ts similarity index 87% rename from components/src/button/Button.stories.ts rename to components/src/button/button.stories.ts index c5a2461aa6..0381632642 100644 --- a/components/src/button/Button.stories.ts +++ b/components/src/button/button.stories.ts @@ -15,7 +15,10 @@ export default { // More on component templates: https://storybook.js.org/docs/angular/writing-stories/introduction#using-args const Template: Story = (args: ButtonComponent) => ({ props: args, - template: ``, + template: ` + + Link + `, }); export const Primary = Template.bind({}); diff --git a/components/src/callout/callout.component.html b/components/src/callout/callout.component.html index 006cedf663..8e84612381 100644 --- a/components/src/callout/callout.component.html +++ b/components/src/callout/callout.component.html @@ -1,5 +1,5 @@

({ DEFAULT: theme("colors.background"),