diff --git a/components/src/badge/badge.component.ts b/components/src/badge/badge.directive.ts similarity index 66% rename from components/src/badge/badge.component.ts rename to components/src/badge/badge.directive.ts index e66a5748ad..4d949bc681 100644 --- a/components/src/badge/badge.component.ts +++ b/components/src/badge/badge.directive.ts @@ -1,4 +1,4 @@ -import { Directive, ElementRef, HostBinding, Input, OnChanges, OnInit } from "@angular/core"; +import { Directive, ElementRef, HostBinding, Input } from "@angular/core"; type BadgeTypes = "primary" | "secondary" | "success" | "danger" | "warning" | "info"; @@ -21,28 +21,10 @@ const hoverStyles: Record = { }; @Directive({ - selector: "span[bit-badge], a[bit-badge], button[bit-badge]", + selector: "span[bitBadge], a[bitBadge], button[bitBadge]", }) -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() { +export class BadgeDirective { + @HostBinding("class") get classList() { return [ "tw-inline-block", "tw-py-1", @@ -63,6 +45,14 @@ export class BadgeComponent implements OnInit, OnChanges { "focus:tw-ring-primary-700", ] .concat(styles[this.badgeType]) - .concat(this.isSpan ? [] : hoverStyles[this.badgeType]); + .concat(this.hasHoverEffects ? hoverStyles[this.badgeType] : []); + } + + @Input() badgeType: BadgeTypes = "primary"; + + private hasHoverEffects = false; + + constructor(el: ElementRef) { + this.hasHoverEffects = el?.nativeElement?.nodeName != "SPAN"; } } diff --git a/components/src/badge/badge.module.ts b/components/src/badge/badge.module.ts index b40b2d7b75..e1b8292363 100644 --- a/components/src/badge/badge.module.ts +++ b/components/src/badge/badge.module.ts @@ -1,11 +1,11 @@ import { CommonModule } from "@angular/common"; import { NgModule } from "@angular/core"; -import { BadgeComponent } from "./badge.component"; +import { BadgeDirective } from "./badge.directive"; @NgModule({ imports: [CommonModule], - exports: [BadgeComponent], - declarations: [BadgeComponent], + exports: [BadgeDirective], + declarations: [BadgeDirective], }) export class BadgeModule {} diff --git a/components/src/badge/badge.stories.ts b/components/src/badge/badge.stories.ts index 71344dfb1a..e36b2cd776 100644 --- a/components/src/badge/badge.stories.ts +++ b/components/src/badge/badge.stories.ts @@ -1,12 +1,12 @@ import { Meta, Story } from "@storybook/angular"; -import { BadgeComponent } from "./badge.component"; +import { BadgeDirective } from "./badge.directive"; export default { title: "Jslib/Badge", - component: BadgeComponent, + component: BadgeDirective, args: { - type: "primary", + badgeType: "primary", }, parameters: { design: { @@ -16,14 +16,14 @@ export default { }, } as Meta; -const Template: Story = (args: BadgeComponent) => ({ +const Template: Story = (args: BadgeDirective) => ({ props: args, template: ` - Span Badge + Span Badge

- Link Badge + Link Badge

- Button + Button `, }); @@ -32,25 +32,25 @@ Primary.args = {}; export const Secondary = Template.bind({}); Secondary.args = { - type: "secondary", + badgeType: "secondary", }; export const Success = Template.bind({}); Success.args = { - type: "success", + badgeType: "success", }; export const Danger = Template.bind({}); Danger.args = { - type: "danger", + badgeType: "danger", }; export const Warning = Template.bind({}); Warning.args = { - type: "warning", + badgeType: "warning", }; export const Info = Template.bind({}); Info.args = { - type: "info", + badgeType: "info", }; diff --git a/components/src/badge/index.ts b/components/src/badge/index.ts index 6b025a5873..6af33a9db9 100644 --- a/components/src/badge/index.ts +++ b/components/src/badge/index.ts @@ -1,2 +1,2 @@ -export * from "./badge.component"; +export * from "./badge.directive"; export * from "./badge.module"; diff --git a/components/src/button/button.component.spec.ts b/components/src/button/button.directive.spec.ts similarity index 94% rename from components/src/button/button.component.spec.ts rename to components/src/button/button.directive.spec.ts index 82452b713a..6bdcfe7012 100644 --- a/components/src/button/button.component.spec.ts +++ b/components/src/button/button.directive.spec.ts @@ -67,8 +67,8 @@ describe("Button", () => { @Component({ selector: "test-app", template: ` - - Link + + Link `, }) class TestApp { diff --git a/components/src/button/button.component.ts b/components/src/button/button.directive.ts similarity index 70% rename from components/src/button/button.component.ts rename to components/src/button/button.directive.ts index 49f4e678d0..c4a4d15898 100644 --- a/components/src/button/button.component.ts +++ b/components/src/button/button.directive.ts @@ -1,8 +1,8 @@ -import { Input, HostBinding, OnChanges, Directive, OnInit } from "@angular/core"; +import { Input, HostBinding, Directive } from "@angular/core"; export type ButtonTypes = "primary" | "secondary" | "danger"; -const buttonStyles: Record = { +const buttonStyles: Record = { primary: [ "tw-border-primary-500", "tw-bg-primary-500", @@ -11,7 +11,7 @@ const buttonStyles: Record = { "hover:tw-border-primary-700", "focus:tw-bg-primary-700", "focus:tw-border-primary-700", - ].join(" "), + ], secondary: [ "tw-bg-transparent", "tw-border-text-muted", @@ -22,7 +22,7 @@ const buttonStyles: Record = { "focus:tw-bg-secondary-500", "focus:tw-border-secondary-500", "focus:!tw-text-contrast", - ].join(" "), + ], danger: [ "tw-bg-transparent", "tw-border-danger-500", @@ -33,30 +33,14 @@ const buttonStyles: Record = { "focus:tw-bg-danger-500", "focus:tw-border-danger-500", "focus:!tw-text-contrast", - ].join(" "), + ], }; @Directive({ - selector: "button[bit-button], a[bit-button]", + selector: "button[bitButton], a[bitButton]", }) -export class ButtonComponent implements OnInit, OnChanges { - @HostBinding("class") @Input() classList = ""; - - @Input() - buttonType: ButtonTypes = "secondary"; - - @Input() - block = false; - - ngOnInit(): void { - this.classList = this.classes.join(" "); - } - - ngOnChanges() { - this.ngOnInit(); - } - - get classes(): string[] { +export class ButtonDirective { + @HostBinding("class") get classList() { return [ "tw-font-semibold", "tw-py-1.5", @@ -75,8 +59,14 @@ export class ButtonComponent implements OnInit, OnChanges { "focus:tw-ring-offset-2", "focus:tw-ring-primary-700", "focus:tw-z-10", - this.block ? "tw-w-full tw-block" : "tw-inline-block", - buttonStyles[this.buttonType ?? "secondary"], - ]; + ] + .concat(this.block ? ["tw-w-full", "tw-block"] : ["tw-inline-block"]) + .concat(buttonStyles[this.buttonType] ?? []); } + + @Input() + buttonType: ButtonTypes = "secondary"; + + @Input() + block = false; } diff --git a/components/src/button/button.module.ts b/components/src/button/button.module.ts index 448e7c9dcf..c9c3822abf 100644 --- a/components/src/button/button.module.ts +++ b/components/src/button/button.module.ts @@ -1,11 +1,11 @@ import { CommonModule } from "@angular/common"; import { NgModule } from "@angular/core"; -import { ButtonComponent } from "./button.component"; +import { ButtonDirective } from "./button.directive"; @NgModule({ imports: [CommonModule], - exports: [ButtonComponent], - declarations: [ButtonComponent], + exports: [ButtonDirective], + declarations: [ButtonDirective], }) export class ButtonModule {} diff --git a/components/src/button/button.stories.ts b/components/src/button/button.stories.ts index 24f6e9f9c0..fe4e23eede 100644 --- a/components/src/button/button.stories.ts +++ b/components/src/button/button.stories.ts @@ -1,10 +1,10 @@ import { Meta, Story } from "@storybook/angular"; -import { ButtonComponent } from "./button.component"; +import { ButtonDirective } from "./button.directive"; export default { title: "Jslib/Button", - component: ButtonComponent, + component: ButtonDirective, args: { buttonType: "primary", }, @@ -16,11 +16,11 @@ export default { }, } as Meta; -const Template: Story = (args: ButtonComponent) => ({ +const Template: Story = (args: ButtonDirective) => ({ props: args, template: ` - - Link + + Link `, }); @@ -42,9 +42,9 @@ Danger.args = { const DisabledTemplate: Story = (args) => ({ props: args, template: ` - - - + + + `, }); diff --git a/components/src/button/index.ts b/components/src/button/index.ts index ff86120cb1..1bdd62ddbc 100644 --- a/components/src/button/index.ts +++ b/components/src/button/index.ts @@ -1,2 +1,2 @@ -export * from "./button.component"; +export * from "./button.directive"; export * from "./button.module"; diff --git a/components/src/form-field/error-summary.stories.ts b/components/src/form-field/error-summary.stories.ts index f60038da08..fc6e37f2db 100644 --- a/components/src/form-field/error-summary.stories.ts +++ b/components/src/form-field/error-summary.stories.ts @@ -68,7 +68,7 @@ const Template: Story = (args: BitFormFieldComponent) => - + `, diff --git a/components/src/form-field/form-field.stories.ts b/components/src/form-field/form-field.stories.ts index 54881314c8..0be496608c 100644 --- a/components/src/form-field/form-field.stories.ts +++ b/components/src/form-field/form-field.stories.ts @@ -87,7 +87,7 @@ const Template: Story = (args: BitFormFieldComponent) => - + `, }); @@ -167,12 +167,12 @@ const ButtonGroupTemplate: Story = (args: BitFormFieldCom Label - - - + + - diff --git a/components/src/menu/index.ts b/components/src/menu/index.ts index 69b71b8ee2..52c48d2fb8 100644 --- a/components/src/menu/index.ts +++ b/components/src/menu/index.ts @@ -1,5 +1,5 @@ export * from "./menu.module"; export * from "./menu.component"; export * from "./menu-trigger-for.directive"; -export * from "./menu-item.component"; +export * from "./menu-item.directive"; export * from "./menu-divider.component"; diff --git a/components/src/menu/menu-item.component.ts b/components/src/menu/menu-item.directive.ts similarity index 76% rename from components/src/menu/menu-item.component.ts rename to components/src/menu/menu-item.directive.ts index 9520b6483a..2a50dd366f 100644 --- a/components/src/menu/menu-item.component.ts +++ b/components/src/menu/menu-item.directive.ts @@ -1,11 +1,10 @@ import { FocusableOption } from "@angular/cdk/a11y"; -import { Component, ElementRef, HostBinding } from "@angular/core"; +import { Directive, ElementRef, HostBinding } from "@angular/core"; -@Component({ - selector: "[bit-menu-item]", - template: ``, +@Directive({ + selector: "[bitMenuItem]", }) -export class MenuItemComponent implements FocusableOption { +export class MenuItemDirective implements FocusableOption { @HostBinding("class") classList = [ "tw-block", "tw-py-1", @@ -25,7 +24,7 @@ export class MenuItemComponent implements FocusableOption { "focus:tw-ring-primary-700", "active:!tw-ring-0", "active:!tw-ring-offset-0", - ].join(" "); + ]; @HostBinding("attr.role") role = "menuitem"; @HostBinding("tabIndex") tabIndex = "-1"; diff --git a/components/src/menu/menu.component.spec.ts b/components/src/menu/menu.component.spec.ts index dc33820cab..51120465e3 100644 --- a/components/src/menu/menu.component.spec.ts +++ b/components/src/menu/menu.component.spec.ts @@ -69,8 +69,8 @@ describe("Menu", () => { - Item 1 - Item 2 + Item 1 + Item 2 `, }) diff --git a/components/src/menu/menu.component.ts b/components/src/menu/menu.component.ts index 29a9862f72..72c614d2a8 100644 --- a/components/src/menu/menu.component.ts +++ b/components/src/menu/menu.component.ts @@ -10,7 +10,7 @@ import { AfterContentInit, } from "@angular/core"; -import { MenuItemComponent } from "./menu-item.component"; +import { MenuItemDirective } from "./menu-item.directive"; @Component({ selector: "bit-menu", @@ -20,9 +20,9 @@ import { MenuItemComponent } from "./menu-item.component"; export class MenuComponent implements AfterContentInit { @ViewChild(TemplateRef) templateRef: TemplateRef; @Output() closed = new EventEmitter(); - @ContentChildren(MenuItemComponent, { descendants: true }) - menuItems: QueryList; - keyManager: FocusKeyManager; + @ContentChildren(MenuItemDirective, { descendants: true }) + menuItems: QueryList; + keyManager: FocusKeyManager; ngAfterContentInit() { this.keyManager = new FocusKeyManager(this.menuItems).withWrap(); diff --git a/components/src/menu/menu.module.ts b/components/src/menu/menu.module.ts index 53575a3535..15ebcde5a9 100644 --- a/components/src/menu/menu.module.ts +++ b/components/src/menu/menu.module.ts @@ -3,13 +3,13 @@ import { CommonModule } from "@angular/common"; import { NgModule } from "@angular/core"; import { MenuDividerComponent } from "./menu-divider.component"; -import { MenuItemComponent } from "./menu-item.component"; +import { MenuItemDirective } from "./menu-item.directive"; import { MenuTriggerForDirective } from "./menu-trigger-for.directive"; import { MenuComponent } from "./menu.component"; @NgModule({ imports: [CommonModule, OverlayModule], - declarations: [MenuComponent, MenuTriggerForDirective, MenuItemComponent, MenuDividerComponent], - exports: [MenuComponent, MenuTriggerForDirective, MenuItemComponent, MenuDividerComponent], + declarations: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent], + exports: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent], }) export class MenuModule {} diff --git a/components/src/menu/menu.stories.ts b/components/src/menu/menu.stories.ts index 3f296ee8b0..fa3c6e69cd 100644 --- a/components/src/menu/menu.stories.ts +++ b/components/src/menu/menu.stories.ts @@ -4,7 +4,7 @@ import { Meta, moduleMetadata, Story } from "@storybook/angular"; import { ButtonModule } from "../button/button.module"; import { MenuDividerComponent } from "./menu-divider.component"; -import { MenuItemComponent } from "./menu-item.component"; +import { MenuItemDirective } from "./menu-item.directive"; import { MenuTriggerForDirective } from "./menu-trigger-for.directive"; import { MenuComponent } from "./menu.component"; @@ -16,7 +16,7 @@ export default { declarations: [ MenuTriggerForDirective, MenuComponent, - MenuItemComponent, + MenuItemDirective, MenuDividerComponent, ], imports: [OverlayModule, ButtonModule], @@ -34,11 +34,11 @@ const Template: Story = (args: MenuTriggerForDirective) props: args, template: ` - Anchor link - Another link - + Anchor link + Another link + - +
@@ -53,15 +53,15 @@ const TemplateWithButton: Story = (args: MenuTriggerFor props: args, template: `
- +
- Anchor link - Another link - + Anchor link + Another link + - + `, });