From ecac9b1a947c27e1e08f894affc8cc27ecd8e051 Mon Sep 17 00:00:00 2001 From: Bryan Cunningham Date: Wed, 8 Oct 2025 11:56:34 -0400 Subject: [PATCH] WIP --- .../chip-select/chip-select.component.html | 2 +- .../chip-toggle/chip-toggle.component.html | 0 .../src/chip-toggle/chip-toggle.component.ts | 0 libs/components/src/chip-toggle/index.ts | 0 libs/components/src/chip/chip.component.css | 93 ++++++++ libs/components/src/chip/chip.component.html | 38 +++ libs/components/src/chip/chip.component.ts | 15 ++ libs/components/src/chip/chip.stories.ts | 225 ++++++++++++++++++ libs/components/src/tw-theme.css | 1 + 9 files changed, 373 insertions(+), 1 deletion(-) create mode 100644 libs/components/src/chip-toggle/chip-toggle.component.html create mode 100644 libs/components/src/chip-toggle/chip-toggle.component.ts create mode 100644 libs/components/src/chip-toggle/index.ts create mode 100644 libs/components/src/chip/chip.component.css create mode 100644 libs/components/src/chip/chip.component.html create mode 100644 libs/components/src/chip/chip.component.ts create mode 100644 libs/components/src/chip/chip.stories.ts diff --git a/libs/components/src/chip-select/chip-select.component.html b/libs/components/src/chip-select/chip-select.component.html index d43e09e8338..a386f7f81d9 100644 --- a/libs/components/src/chip-select/chip-select.component.html +++ b/libs/components/src/chip-select/chip-select.component.html @@ -1,6 +1,6 @@
+ +
+ + --> + +
+ Chip component + + @if (isDismissible()) { + + } +
diff --git a/libs/components/src/chip/chip.component.ts b/libs/components/src/chip/chip.component.ts new file mode 100644 index 00000000000..0fb9acf2094 --- /dev/null +++ b/libs/components/src/chip/chip.component.ts @@ -0,0 +1,15 @@ +import { input, Component, booleanAttribute } from "@angular/core"; + +import { SharedModule } from "../shared"; + +@Component({ + selector: "bit-chip", + templateUrl: "chip.component.html", + imports: [SharedModule], +}) +export class ChipComponent { + protected readonly isInteractive = input(booleanAttribute(false)); + protected readonly isDisabled = input(booleanAttribute(false)); + protected readonly isDismissible = input(booleanAttribute(false)); + protected readonly isSelected = input(booleanAttribute(false)); +} diff --git a/libs/components/src/chip/chip.stories.ts b/libs/components/src/chip/chip.stories.ts new file mode 100644 index 00000000000..9119cff17a8 --- /dev/null +++ b/libs/components/src/chip/chip.stories.ts @@ -0,0 +1,225 @@ +import { FormsModule } from "@angular/forms"; +import { Meta, StoryObj, moduleMetadata } from "@storybook/angular"; + +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; + +import { MenuModule } from "../menu"; +import { I18nMockService } from "../utils/i18n-mock.service"; + +import { ChipComponent } from "./chip.component"; + +import { formatArgsForCodeSnippet } from ".storybook/format-args-for-code-snippet"; + +export default { + title: "Component Library/Chip", + component: ChipComponent, + decorators: [ + moduleMetadata({ + imports: [MenuModule, FormsModule], + providers: [ + { + provide: I18nService, + useFactory: () => { + return new I18nMockService({ + viewItemsIn: (name) => `View items in ${name}`, + back: "Back", + backTo: (name) => `Back to ${name}`, + removeItem: (name) => `Remove ${name}`, + }); + }, + }, + ], + }), + ], + parameters: { + design: { + type: "figma", + url: "https://www.figma.com/design/Zt3YSeb6E6lebAffrNLa0h/Tailwind-Component-Library?node-id=16329-29548&t=b5tDKylm5sWm2yKo-4", + }, + }, + args: { + isSelected: false, + isDisabled: false, + isDismissible: false, + isInteractive: false, + }, +} as Meta; + +type Story = StoryObj; + +export const Default: Story = { + render: (args) => ({ + props: args, + template: /* html */ ` + + `, + }), +}; + +// export const MenuOpen: Story = { +// render: (args) => ({ +// props: { +// ...args, +// }, +// template: /* html */ ` +// +// `, +// }), +// args: { +// options: [ +// { +// label: "Foo", +// value: "foo", +// icon: "bwi-folder", +// }, +// { +// label: "Bar", +// value: "bar", +// icon: "bwi-exclamation-triangle tw-text-danger", +// }, +// { +// label: "Baz", +// value: "baz", +// disabled: true, +// }, +// ], +// }, +// play: async (context) => { +// const canvas = context.canvasElement; +// const buttons = getAllByRole(canvas, "button"); +// await userEvent.click(buttons[0]); +// }, +// }; + +// export const FullWidth: Story = { +// render: (args) => ({ +// props: { +// ...args, +// }, +// template: /* html */ ` +//
+// +//
+// `, +// }), +// args: { +// options: [ +// { +// label: "Foo", +// value: "foo", +// icon: "bwi-folder", +// }, +// { +// label: "Bar", +// value: "bar", +// icon: "bwi-exclamation-triangle tw-text-danger", +// }, +// { +// label: "Baz", +// value: "baz", +// disabled: true, +// }, +// ], +// }, +// }; + +// export const NestedOptions: Story = { +// ...Default, +// args: { +// options: [ +// { +// label: "Foo", +// value: "foo", +// icon: "bwi-folder", +// children: [ +// { +// label: "Foo1 very long name of folder but even longer than you thought", +// value: "foo1", +// icon: "bwi-folder", +// children: [ +// { +// label: "Foo2", +// value: "foo2", +// icon: "bwi-folder", +// children: [ +// { +// label: "Foo3", +// value: "foo3", +// }, +// ], +// }, +// ], +// }, +// ], +// }, +// { +// label: "Bar", +// value: "bar", +// icon: "bwi-folder", +// }, +// { +// label: "Baz", +// value: "baz", +// icon: "bwi-folder", +// }, +// ], +// value: "foo1", +// }, +// }; + +// export const TextOverflow: Story = { +// ...Default, +// args: { +// options: [ +// { +// label: "Fooooooooooooooooooooooooooooooooooooooooooooo", +// value: "foo", +// }, +// ], +// value: "foo", +// }, +// }; + +// export const Disabled: Story = { +// render: (args) => ({ +// props: { +// ...args, +// }, +// template: /* html */ ` +// +// +// `, +// }), +// args: { +// options: [ +// { +// label: "Foo", +// value: "foo", +// icon: "bwi-folder", +// }, +// ], +// value: "foo", +// }, +// }; diff --git a/libs/components/src/tw-theme.css b/libs/components/src/tw-theme.css index 1e0a6f438f0..b62f1549743 100644 --- a/libs/components/src/tw-theme.css +++ b/libs/components/src/tw-theme.css @@ -2,6 +2,7 @@ @import "@angular/cdk/a11y-prebuilt.css"; @import "@angular/cdk/text-field-prebuilt.css"; @import "./reset.css"; +@import "./chip/chip.component.css"; @import "./popover/popover.component.css"; @import "./toast/toast.tokens.css"; @import "./toast/toastr.css";